This commit was manufactured by cvs2svn to create tag 'v201006300000'.
diff --git a/assembly/features/org.eclipse.jpt.patch/.project b/assembly/features/org.eclipse.jpt.patch/.project
deleted file mode 100644
index b7a2bf5..0000000
--- a/assembly/features/org.eclipse.jpt.patch/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.patch</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/assembly/features/org.eclipse.jpt.patch/build.properties b/assembly/features/org.eclipse.jpt.patch/build.properties
deleted file mode 100644
index c381fb2..0000000
--- a/assembly/features/org.eclipse.jpt.patch/build.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-bin.includes = feature.xml,\
-               license.html,\
-               feature.properties,\
-               epl-v10.html,\
-               eclipse_update_120.jpg
-src.includes = eclipse_update_120.jpg,\
-               epl-v10.html,\
-               feature.properties,\
-               feature.xml,\
-               license.html
diff --git a/assembly/features/org.eclipse.jpt.patch/buildnotes_org.eclipse.jpt.patch.html b/assembly/features/org.eclipse.jpt.patch/buildnotes_org.eclipse.jpt.patch.html
deleted file mode 100644
index 0d115f4..0000000
--- a/assembly/features/org.eclipse.jpt.patch/buildnotes_org.eclipse.jpt.patch.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Build" content="Build">
-   <title>Java Persistence Tools (JTP) 1.0.2 Patches</title>
-</head>
-
-<body>
-
-<h1>JTP 2.0.2 Patches</h1>
-
-<h2>Feature Patched: org.eclipse.jpt.patch</h2>
-<h3>Plugin(s) replaced:</h3>
-<ul><li>org.eclipse.jpt.gen</li></ul>
-<p>Bug <a href='https://bugs.eclipse.org/220297'>220297</a>. Entity generation creates Embeddables with compile errors in some cases.</p>
-
-
-</body></html>
\ No newline at end of file
diff --git a/assembly/features/org.eclipse.jpt.patch/eclipse_update_120.jpg b/assembly/features/org.eclipse.jpt.patch/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/assembly/features/org.eclipse.jpt.patch/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/assembly/features/org.eclipse.jpt.patch/epl-v10.html b/assembly/features/org.eclipse.jpt.patch/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/assembly/features/org.eclipse.jpt.patch/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
-@font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
-@page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor (&quot;Commercial
-Contributor&quot;) hereby agrees to defend and indemnify every other
-Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
-costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; 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. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/assembly/features/org.eclipse.jpt.patch/feature.properties b/assembly/features/org.eclipse.jpt.patch/feature.properties
deleted file mode 100644
index a8457ea..0000000
--- a/assembly/features/org.eclipse.jpt.patch/feature.properties
+++ /dev/null
@@ -1,143 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 Oracle.
-# 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:
-#     Oracle - initial API and implementation
-###############################################################################
-
-# "featureName" property - name of the feature
-featureName=Java Persistence Tools (JTP) Patches
-
-# "providerName" property - name of the company that provides the feature
-providerName=Eclipse.org
-
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Web Tools Platform (WTP) Project update site
-
-# "description" property - description of the feature
-description=\
-Patch(s) for Java Persistence API (JPA) Tools. \n\
-See bug 220297 (https://bugs.eclipse.org/bugs/220297) Entity generation creates Embeddables with compile errors in some cases \n\
-
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006-08 Oracle Corporation.\n\
-All rights reserved. This program and the accompanying materials\n\
-are made available under the terms of the Eclipse Public License v1.0\n\
-which accompanies this distribution, and is available at\n\
-http://www.eclipse.org/legal/epl-v10.html\n\
-\n\
-Contributors:\n\
-    Oracle - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
-June 06, 2007\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
-is provided to you under the terms and conditions of the Eclipse Public\n\
-License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
-Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse.org CVS\n\
-repository ("Repository") in CVS modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-   - Content may be structured and packaged into modules to facilitate delivering,\n\
-     extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-     plug-in fragments ("Fragments"), and features ("Features").\n\
-   - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
-     in a directory named "plugins".\n\
-   - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-     Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-     Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-     numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-   - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-     named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-Features may also include other Features ("Included Features"). Files named\n\
-"feature.xml" may contain a list of the names and version numbers of\n\
-Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-   - The top-level (root) directory\n\
-   - Plug-in and Fragment directories\n\
-   - Inside Plug-ins and Fragments packaged as JARs\n\
-   - Sub-directories of the directory named "src" of certain Plug-ins\n\
-   - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Eclipse Update Manager, you must agree to a license ("Feature Update\n\
-License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties". Such Abouts,\n\
-Feature Licenses and Feature Update Licenses contain the terms and\n\
-conditions (or references to such terms and conditions) that govern your\n\
-use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-    - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
-    - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-    - Common Development and Distribution License (CDDL) Version 1.0 (available at http://www.sun.com/cddl/cddl.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use,\n\
-and re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/assembly/features/org.eclipse.jpt.patch/feature.xml b/assembly/features/org.eclipse.jpt.patch/feature.xml
deleted file mode 100644
index 4fae92b..0000000
--- a/assembly/features/org.eclipse.jpt.patch/feature.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.jpt.patch"
-      label="%featureName"
-      version="1.0.2.qualifier"
-      provider-name="%providerName">
-
-   <description url="http://download.eclipse.org/webtools/patches/">
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="%licenseURL">
-      %license
-   </license>
-
-   <url>
-      <update label="Web Tools Platform (WTP) Patches" url="http://download.eclipse.org/webtools/patches/"/>
-   </url>
-
-   <requires>
-      <import feature="org.eclipse.jpt.feature" version="1.0.2.v200802140100-77-7_CYQCD2CaLYCHCD" patch="true"/>
-   </requires>
-
-   <plugin
-         id="org.eclipse.jpt.gen"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-</feature>
diff --git a/assembly/features/org.eclipse.jpt.patch/license.html b/assembly/features/org.eclipse.jpt.patch/license.html
deleted file mode 100644
index 2347060..0000000
--- a/assembly/features/org.eclipse.jpt.patch/license.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
-<!-- saved from url=(0044)http://www.eclipse.org/legal/epl/notice.html -->
-<HTML><HEAD><TITLE>Eclipse.org Software User Agreement</TITLE>
-<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
-<BODY lang=EN-US vLink=purple link=blue>
-<H2>Eclipse Foundation Software User Agreement</H2>
-<P>January 28, 2005</P>
-<H3>Usage Of Content</H3>
-<P>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION 
-AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF 
-THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE 
-TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED 
-BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED 
-BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE 
-AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE 
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY 
-APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU 
-MAY NOT USE THE CONTENT.</P>
-<H3>Applicable Licenses</H3>
-<P>Unless otherwise indicated, all Content made available by the Eclipse 
-Foundation is provided to you under the terms and conditions of the Eclipse 
-Public License Version 1.0 ("EPL"). A copy of the EPL is provided with this 
-Content and is also 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>Content includes, but is not limited to, source code, object code, 
-documentation and other files maintained in the Eclipse.org CVS repository 
-("Repository") in CVS modules ("Modules") and made available as downloadable 
-archives ("Downloads").</P>
-<P>Content may be apportioned into plug-ins ("Plug-ins"), plug-in fragments 
-("Fragments"), and features ("Features"). A Feature is a bundle of one or more 
-Plug-ins and/or Fragments and associated material. Files named "feature.xml" may 
-contain a list of the names and version numbers of the Plug-ins and/or Fragments 
-associated with a Feature. Plug-ins and Fragments are located in directories 
-named "plugins" and Features are located in directories named "features".</P>
-<P>Features may also include other Features ("Included Features"). Files named 
-"feature.xml" may contain a list of the names and version numbers of Included 
-Features.</P>
-<P>The terms and conditions governing Plug-ins and Fragments should be contained 
-in files named "about.html" ("Abouts"). The terms and conditions governing 
-Features and Included Features should be contained in files named "license.html" 
-("Feature Licenses"). Abouts and Feature Licenses may be located in any 
-directory of a Download or Module including, but not limited to the following 
-locations:</P>
-<UL>
-  <LI>The top-level (root) directory 
-  <LI>Plug-in and Fragment directories 
-  <LI>Subdirectories of the directory named "src" of certain Plug-ins 
-  <LI>Feature directories </LI></UL>
-<P>Note: if a Feature made available by the Eclipse Foundation is installed 
-using the Eclipse Update Manager, you must agree to a license ("Feature Update 
-License") during the installation process. If the Feature contains Included 
-Features, the Feature Update License should either provide you with the terms 
-and conditions governing the Included Features or inform you where you can 
-locate them. Feature Update Licenses may be found in the "license" property of 
-files named "feature.properties". Such Abouts, Feature Licenses and Feature 
-Update Licenses contain the terms and conditions (or references to such terms 
-and conditions) that govern your use of the associated Content in that 
-directory.</P>
-<P>THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL 
-OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE 
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</P>
-<UL>
-  <LI>Common Public License Version 1.0 (available at <A 
-  href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</A>) 
-
-  <LI>Apache Software License 1.1 (available at <A 
-  href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</A>) 
-
-  <LI>Apache Software License 2.0 (available at <A 
-  href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</A>) 
-
-  <LI>IBM Public License 1.0 (available at <A 
-  href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</A>) 
-
-  <LI>Metro Link Public License 1.00 (available at <A 
-  href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</A>) 
-
-  <LI>Mozilla Public License Version 1.1 (available at <A 
-  href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</A>) 
-  </LI></UL>
-<P>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR 
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License is 
-provided, please contact the Eclipse Foundation to determine what terms and 
-conditions govern that particular Content.</P>
-<H3>Cryptography</H3>
-<P>Content may contain encryption software. The country in which you are 
-currently may have restrictions on the import, possession, and use, and/or 
-re-export to another country, of encryption software. BEFORE using any 
-encryption software, please check the country's laws, regulations and policies 
-concerning the import, possession, or use, and re-export of encryption software, 
-to see if this is permitted.</P></BODY></HTML>
diff --git a/assembly/features/org.eclipse.jpt.sdk/.cvsignore b/assembly/features/org.eclipse.jpt.sdk/.cvsignore
deleted file mode 100644
index bc2abf7..0000000
--- a/assembly/features/org.eclipse.jpt.sdk/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*.bin.dist.zip
-build.xml
-features
-plugins
diff --git a/assembly/features/org.eclipse.jpt.sdk/.project b/assembly/features/org.eclipse.jpt.sdk/.project
deleted file mode 100644
index 821d453..0000000
--- a/assembly/features/org.eclipse.jpt.sdk/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.sdk</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/assembly/features/org.eclipse.jpt.sdk/build.properties b/assembly/features/org.eclipse.jpt.sdk/build.properties
deleted file mode 100644
index 7200939..0000000
--- a/assembly/features/org.eclipse.jpt.sdk/build.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 Oracle.
-# 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:
-#     Oracle. - initial API and implementation
-###############################################################################
-bin.includes = feature.xml,\
-               eclipse_update_120.jpg,\
-               epl-v10.html,\
-               license.html,\
-               feature.properties
diff --git a/assembly/features/org.eclipse.jpt.sdk/eclipse_update_120.jpg b/assembly/features/org.eclipse.jpt.sdk/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/assembly/features/org.eclipse.jpt.sdk/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/assembly/features/org.eclipse.jpt.sdk/epl-v10.html b/assembly/features/org.eclipse.jpt.sdk/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/assembly/features/org.eclipse.jpt.sdk/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
-@font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
-@page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor (&quot;Commercial
-Contributor&quot;) hereby agrees to defend and indemnify every other
-Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
-costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; 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. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/assembly/features/org.eclipse.jpt.sdk/feature.properties b/assembly/features/org.eclipse.jpt.sdk/feature.properties
deleted file mode 100644
index 64b1fab..0000000
--- a/assembly/features/org.eclipse.jpt.sdk/feature.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 Oracle.
-# 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:
-#     Oracle. - initial API and implementation
-###############################################################################
-# feature.properties
-# contains externalized strings for feature.xml
-# "%foo" in feature.xml corresponds to the key "foo" in this file
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file should be translated.
-
-# "featureName" property - name of the feature
-featureName=Dali Java Persistence Tools project SDK
-
-# "providerName" property - name of the company that provides the feature
-providerName=Eclipse.org
-
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Web Tools Platform (WTP) Project update site
-
-# "description" property - description of the feature
-description=Dali Java Persistence Tools project SDK
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006 Oracle Corporation.\n\
-All rights reserved. This program and the accompanying materials\n\
-are made available under the terms of the Eclipse Public License v1.0\n\
-which accompanies this distribution, and is available at\n\
-http://www.eclipse.org/legal/epl-v10.html\n\
-\n\
-Contributors:\n\
-    Oracle - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/assembly/features/org.eclipse.jpt.sdk/feature.xml b/assembly/features/org.eclipse.jpt.sdk/feature.xml
deleted file mode 100644
index 28dc74f..0000000
--- a/assembly/features/org.eclipse.jpt.sdk/feature.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.jpt.sdk"
-      label="%featureName"
-      version="2.3.1.qualifier"
-      provider-name="%providerName"
-      plugin="org.eclipse.jpt"
-      image="eclipse_update_120.jpg">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="license.html">
-      %license
-   </license>
-
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates"/>
-      <discovery label="Web Tools Platform (WTP) Updates" url="http://download.eclipse.org/webtools/updates"/>
-   </url>
-
-   <includes
-         id="org.eclipse.jpt_sdk.feature"
-         version="0.0.0"/>
-
-   <includes
-         id="org.eclipse.jpt.eclipselink_sdk.feature"
-         version="0.0.0"/>
-
-   <plugin
-         id="org.eclipse.jpt"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-</feature>
diff --git a/assembly/features/org.eclipse.jpt.sdk/license.html b/assembly/features/org.eclipse.jpt.sdk/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/assembly/features/org.eclipse.jpt.sdk/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also 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, &quot;Program&quot; will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
-Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   (&quot;Specification&quot;).</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
-       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/assembly/features/org.eclipse.jpt.tests/.cvsignore b/assembly/features/org.eclipse.jpt.tests/.cvsignore
deleted file mode 100644
index 2544693..0000000
--- a/assembly/features/org.eclipse.jpt.tests/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.bin.dist.zip
-build.xml
-org.eclipse.jpt.tests_1.0.0.*
\ No newline at end of file
diff --git a/assembly/features/org.eclipse.jpt.tests/.project b/assembly/features/org.eclipse.jpt.tests/.project
deleted file mode 100644
index 3d1dde6..0000000
--- a/assembly/features/org.eclipse.jpt.tests/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.tests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/assembly/features/org.eclipse.jpt.tests/.settings/org.eclipse.core.resources.prefs b/assembly/features/org.eclipse.jpt.tests/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 17acb65..0000000
--- a/assembly/features/org.eclipse.jpt.tests/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Sun May 27 15:11:05 EDT 2007
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/assembly/features/org.eclipse.jpt.tests/build.properties b/assembly/features/org.eclipse.jpt.tests/build.properties
deleted file mode 100644
index 7f47694..0000000
--- a/assembly/features/org.eclipse.jpt.tests/build.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-bin.includes = feature.xml,\
-               eclipse_update_120.jpg,\
-               epl-v10.html,\
-               license.html,\
-               feature.properties
diff --git a/assembly/features/org.eclipse.jpt.tests/eclipse_update_120.jpg b/assembly/features/org.eclipse.jpt.tests/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/assembly/features/org.eclipse.jpt.tests/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/assembly/features/org.eclipse.jpt.tests/epl-v10.html b/assembly/features/org.eclipse.jpt.tests/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/assembly/features/org.eclipse.jpt.tests/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
-@font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
-@page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor (&quot;Commercial
-Contributor&quot;) hereby agrees to defend and indemnify every other
-Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
-costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; 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. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/assembly/features/org.eclipse.jpt.tests/feature.properties b/assembly/features/org.eclipse.jpt.tests/feature.properties
deleted file mode 100644
index 094c58b..0000000
--- a/assembly/features/org.eclipse.jpt.tests/feature.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 Oracle.
-# 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:
-#     Oracle. - initial API and implementation
-###############################################################################
-# feature.properties
-# contains externalized strings for feature.xml
-# "%foo" in feature.xml corresponds to the key "foo" in this file
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file should be translated.
-
-# "featureName" property - name of the feature
-featureName=Dali Java Persistence API (JPA) project Tests
-
-# "providerName" property - name of the company that provides the feature
-providerName=Eclipse.org
-
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Web Tools Platform (WTP) Project update site
-
-# "description" property - description of the feature
-description=Dali Java Persistence API (JPA) project Tests
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006 Oracle Corporation.\n\
-All rights reserved. This program and the accompanying materials\n\
-are made available under the terms of the Eclipse Public License v1.0\n\
-which accompanies this distribution, and is available at\n\
-http://www.eclipse.org/legal/epl-v10.html\n\
-\n\
-Contributors:\n\
-    Oracle - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/assembly/features/org.eclipse.jpt.tests/feature.xml b/assembly/features/org.eclipse.jpt.tests/feature.xml
deleted file mode 100644
index 020fa44..0000000
--- a/assembly/features/org.eclipse.jpt.tests/feature.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.jpt.tests"
-      label="%featureName"
-      version="2.1.0.qualifier"
-      provider-name="%providerName">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="license.html">
-      %license
-   </license>
-
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
-   </url>
-
-   <includes
-         id="org.eclipse.jpt.tests.feature"
-         version="0.0.0"/>
-
-</feature>
diff --git a/assembly/features/org.eclipse.jpt.tests/license.html b/assembly/features/org.eclipse.jpt.tests/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/assembly/features/org.eclipse.jpt.tests/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also 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, &quot;Program&quot; will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
-Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   (&quot;Specification&quot;).</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
-       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/assembly/features/org.eclipse.jpt/.cvsignore b/assembly/features/org.eclipse.jpt/.cvsignore
deleted file mode 100644
index de8b73f..0000000
--- a/assembly/features/org.eclipse.jpt/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-build.xml
-org.eclipse.jpt_1.0.0.*
diff --git a/assembly/features/org.eclipse.jpt/.project b/assembly/features/org.eclipse.jpt/.project
deleted file mode 100644
index b7aaec2..0000000
--- a/assembly/features/org.eclipse.jpt/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/assembly/features/org.eclipse.jpt/build.properties b/assembly/features/org.eclipse.jpt/build.properties
deleted file mode 100644
index 470b4bc..0000000
--- a/assembly/features/org.eclipse.jpt/build.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 Oracle.
-# 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:
-#     Oracle. - initial API and implementation
-###############################################################################
-bin.includes = feature.xml,\
-               eclipse_update_120.jpg,\
-               epl-v10.html,\
-               license.html,\
-               feature.properties
-               
\ No newline at end of file
diff --git a/assembly/features/org.eclipse.jpt/eclipse_update_120.jpg b/assembly/features/org.eclipse.jpt/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/assembly/features/org.eclipse.jpt/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/assembly/features/org.eclipse.jpt/epl-v10.html b/assembly/features/org.eclipse.jpt/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/assembly/features/org.eclipse.jpt/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
-@font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
-@page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor (&quot;Commercial
-Contributor&quot;) hereby agrees to defend and indemnify every other
-Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
-costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; 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. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/assembly/features/org.eclipse.jpt/feature.properties b/assembly/features/org.eclipse.jpt/feature.properties
deleted file mode 100644
index c3cd61a..0000000
--- a/assembly/features/org.eclipse.jpt/feature.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 Oracle.
-# 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:
-#     Oracle. - initial API and implementation
-###############################################################################
-# feature.properties
-# contains externalized strings for feature.xml
-# "%foo" in feature.xml corresponds to the key "foo" in this file
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file should be translated.
-
-# "featureName" property - name of the feature
-featureName=Dali Java Persistence Tools
-
-# "providerName" property - name of the company that provides the feature
-providerName=Eclipse Web Tools Platform Project
-
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Web Tools Platform (WTP) Project update site
-
-# "description" property - description of the feature
-description=Eclipse Web Tools Platform Project Tools - Runtime
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006-2009 Oracle Corporation.\n\
-All rights reserved. This program and the accompanying materials\n\
-are made available under the terms of the Eclipse Public License v1.0\n\
-which accompanies this distribution, and is available at\n\
-http://www.eclipse.org/legal/epl-v10.html\n\
-\n\
-Contributors:\n\
-    Oracle - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/assembly/features/org.eclipse.jpt/feature.xml b/assembly/features/org.eclipse.jpt/feature.xml
deleted file mode 100644
index b99f51d..0000000
--- a/assembly/features/org.eclipse.jpt/feature.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.jpt"
-      label="%featureName"
-      version="2.3.1.qualifier"
-      provider-name="%providerName"
-      plugin="org.eclipse.jpt"
-      image="eclipse_update_120.jpg">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="license.html">
-      %license
-   </license>
-
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates"/>
-      <discovery label="Web Tools Platform (WTP) Updates" url="http://download.eclipse.org/webtools/updates"/>
-   </url>
-
-   <includes
-         id="org.eclipse.jpt.feature"
-         version="0.0.0"/>
-
-   <includes
-         id="org.eclipse.jpt.eclipselink.feature"
-         version="0.0.0"/>
-
-   <plugin
-         id="org.eclipse.jpt"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-</feature>
diff --git a/assembly/features/org.eclipse.jpt/license.html b/assembly/features/org.eclipse.jpt/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/assembly/features/org.eclipse.jpt/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also 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, &quot;Program&quot; will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
-Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   (&quot;Specification&quot;).</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
-       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/assembly/plugins/org.eclipse.jpt/.cvsignore b/assembly/plugins/org.eclipse.jpt/.cvsignore
deleted file mode 100644
index c9401a2..0000000
--- a/assembly/plugins/org.eclipse.jpt/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-build.xml
-org.eclipse.jpt_1.0.0.*
\ No newline at end of file
diff --git a/assembly/plugins/org.eclipse.jpt/.project b/assembly/plugins/org.eclipse.jpt/.project
deleted file mode 100644
index f51b04c..0000000
--- a/assembly/plugins/org.eclipse.jpt/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/assembly/plugins/org.eclipse.jpt/.settings/org.eclipse.core.resources.prefs b/assembly/plugins/org.eclipse.jpt/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 4aec29d..0000000
--- a/assembly/plugins/org.eclipse.jpt/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Sun May 27 15:10:09 EDT 2007
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/assembly/plugins/org.eclipse.jpt/META-INF/MANIFEST.MF b/assembly/plugins/org.eclipse.jpt/META-INF/MANIFEST.MF
deleted file mode 100644
index a5fbedd..0000000
--- a/assembly/plugins/org.eclipse.jpt/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,7 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.jpt; singleton:=true
-Bundle-Version: 2.3.1.qualifier
-Bundle-Localization: plugin
-Bundle-Vendor: %providerName
diff --git a/assembly/plugins/org.eclipse.jpt/about.html b/assembly/plugins/org.eclipse.jpt/about.html
deleted file mode 100644
index ca606b1..0000000
--- a/assembly/plugins/org.eclipse.jpt/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>June 06, 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/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</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>
-
-</BODY>
-</HTML>
\ No newline at end of file
diff --git a/assembly/plugins/org.eclipse.jpt/about.ini b/assembly/plugins/org.eclipse.jpt/about.ini
deleted file mode 100644
index 588a325..0000000
--- a/assembly/plugins/org.eclipse.jpt/about.ini
+++ /dev/null
@@ -1,44 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 Oracle.
-# 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:
-#     Oracle. - initial API and implementation
-###############################################################################
-
-# about.ini
-# contains information about a feature
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# "%key" are externalized strings defined in about.properties
-# This file does not need to be translated.
-
-# Property "aboutText" contains blurb for "About" dialog (translated)
-aboutText=%blurb
-
-# Property "windowImage" contains path to window icon (16x16)
-# needed for primary features only
-
-# Property "featureImage" contains path to feature image (32x32)
-featureImage=eclipse32.gif
-
-# Property "aboutImage" contains path to product image (500x330 or 115x164)
-# needed for primary features only
-
-# Property "appName" contains name of the application (translated)
-# needed for primary features only
-
-# Property "welcomePage" contains path to welcome page (special XML-based format)
-# optional
-
-# Property "welcomePerspective" contains the id of the perspective in which the
-# welcome page is to be opened.
-# optional
-
-# Property "tipsAndTricksHref" contains the Help topic href to a tips and tricks page 
-# optional
-tipsAndTricksHref=/org.eclipse.jpt.doc.user/tips_and_tricks.htm
-
-
diff --git a/assembly/plugins/org.eclipse.jpt/about.mappings b/assembly/plugins/org.eclipse.jpt/about.mappings
deleted file mode 100644
index bddaab4..0000000
--- a/assembly/plugins/org.eclipse.jpt/about.mappings
+++ /dev/null
@@ -1,6 +0,0 @@
-# about.mappings
-# contains fill-ins for about.properties
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file does not need to be translated.
-
-0=@build@
\ No newline at end of file
diff --git a/assembly/plugins/org.eclipse.jpt/about.properties b/assembly/plugins/org.eclipse.jpt/about.properties
deleted file mode 100644
index c74a186..0000000
--- a/assembly/plugins/org.eclipse.jpt/about.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 Oracle.
-# 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:
-#     Oracle. - initial API and implementation
-###############################################################################
-
-# about.properties
-# contains externalized strings for about.ini
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# fill-ins are supplied by about.mappings
-# This file should be translated.
-
-blurb=Dali Java Persistence Tools\n\
-\n\
-Version: {featureVersion}\n\
-Build id: {0}\n\
-\n\
-(c) Copyright Eclipse contributors and others 2006.  All rights reserved.\n\
-Visit http://www.eclipse.org/webtools
diff --git a/assembly/plugins/org.eclipse.jpt/build.properties b/assembly/plugins/org.eclipse.jpt/build.properties
deleted file mode 100644
index 0ccfb0e..0000000
--- a/assembly/plugins/org.eclipse.jpt/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2006, 2007 Oracle.
-# 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:
-#     Oracle. - initial API and implementation
-###############################################################################
-bin.includes = META-INF/,\
-               about.ini,\
-               about.html,\
-               about.mappings,\
-               about.properties,\
-               eclipse32.gif,\
-               eclipse32.png,\
-               plugin.properties,\
-               component.xml
diff --git a/assembly/plugins/org.eclipse.jpt/component.xml b/assembly/plugins/org.eclipse.jpt/component.xml
deleted file mode 100644
index 11f133f..0000000
--- a/assembly/plugins/org.eclipse.jpt/component.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<component  xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.jpt">
-<description url=""></description>
-<component-depends unrestricted="true"></component-depends>
-<plugin id="org.eclipse.jpt" fragment="false"/>
-<plugin id="org.eclipse.jpt.core" fragment="false"/>
-<plugin id="org.eclipse.jpt.db" fragment="false"/>
-<plugin id="org.eclipse.jpt.db.ui" fragment="false"/>
-<plugin id="org.eclipse.jpt.gen" fragment="false"/>
-<plugin id="org.eclipse.jpt.ui" fragment="false"/>
-<plugin id="org.eclipse.jpt.utility" fragment="false"/>
-</component>
\ No newline at end of file
diff --git a/assembly/plugins/org.eclipse.jpt/eclipse32.gif b/assembly/plugins/org.eclipse.jpt/eclipse32.gif
deleted file mode 100644
index e6ad7cc..0000000
--- a/assembly/plugins/org.eclipse.jpt/eclipse32.gif
+++ /dev/null
Binary files differ
diff --git a/assembly/plugins/org.eclipse.jpt/eclipse32.png b/assembly/plugins/org.eclipse.jpt/eclipse32.png
deleted file mode 100644
index 568fac1..0000000
--- a/assembly/plugins/org.eclipse.jpt/eclipse32.png
+++ /dev/null
Binary files differ
diff --git a/assembly/plugins/org.eclipse.jpt/plugin.properties b/assembly/plugins/org.eclipse.jpt/plugin.properties
deleted file mode 100644
index c3c055a..0000000
--- a/assembly/plugins/org.eclipse.jpt/plugin.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 Oracle.
-# 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:
-#     Oracle. - initial API and implementation
-###############################################################################
-
-pluginName = Dali Java Persistence Tools
-providerName = Eclipse.org
diff --git a/jpa/plugins/org.eclipse.jpt.db.ui/.classpath b/jpa/plugins/org.eclipse.jpt.db.ui/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/plugins/org.eclipse.jpt.db.ui/.cvsignore b/jpa/plugins/org.eclipse.jpt.db.ui/.cvsignore
deleted file mode 100644
index a196dd7..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-bin
-@dot
-temp.folder
-build.xml
-javaCompiler...args
-javaCompiler...args.*
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.db.ui/.project b/jpa/plugins/org.eclipse.jpt.db.ui/.project
deleted file mode 100644
index 88ea5da..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.db.ui</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/jpa/plugins/org.eclipse.jpt.db.ui/.settings/org.eclipse.core.resources.prefs b/jpa/plugins/org.eclipse.jpt.db.ui/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 8fa7db1..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue Jan 15 11:11:22 EST 2008
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/plugins/org.eclipse.jpt.db.ui/.settings/org.eclipse.jdt.core.prefs b/jpa/plugins/org.eclipse.jpt.db.ui/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 842c286..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun May 27 14:59:42 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jpa/plugins/org.eclipse.jpt.db.ui/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.db.ui/META-INF/MANIFEST.MF
deleted file mode 100644
index 99dd8f5..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,15 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.db.ui
-Bundle-Version: 1.1.200.qualifier
-Bundle-ClassPath: .
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.ui;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jpt.db;bundle-version="[1.2.0,2.0.0)",
- org.eclipse.datatools.connectivity.ui;bundle-version="[1.1.0,2.0.0)",
- org.eclipse.datatools.sqltools.editor.core;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.datatools.connectivity.db.generic.ui;bundle-version="[1.0.1,2.0.0)"
-Export-Package: org.eclipse.jpt.db.ui.internal; x-friends:="org.eclipse.jpt.ui"
diff --git a/jpa/plugins/org.eclipse.jpt.db.ui/about.html b/jpa/plugins/org.eclipse.jpt.db.ui/about.html
deleted file mode 100644
index be534ba..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 02, 2008</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/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</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>
-
-</BODY>
-</HTML>
diff --git a/jpa/plugins/org.eclipse.jpt.db.ui/build.properties b/jpa/plugins/org.eclipse.jpt.db.ui/build.properties
deleted file mode 100644
index 41837eb..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/build.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2007 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-source.. = src/
-output.. = bin/
-bin.includes = .,\
-               META-INF/,\
-               about.html,\
-               plugin.properties
-jars.compile.order = .
diff --git a/jpa/plugins/org.eclipse.jpt.db.ui/component.xml b/jpa/plugins/org.eclipse.jpt.db.ui/component.xml
deleted file mode 100644
index cb5c8c3..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/component.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2007, 2010 Oracle. 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:
-    Oracle - initial API and implementation
- -->
-
-<component  xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.jpt.db.ui"><description url=""></description><component-depends unrestricted="true"></component-depends><plugin id="org.eclipse.jpt.db.ui" fragment="false"/></component>
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.db.ui/plugin.properties b/jpa/plugins/org.eclipse.jpt.db.ui/plugin.properties
deleted file mode 100644
index eac396c..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/plugin.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2009 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-# ====================================================================
-# To code developer:
-#   Do NOT change the properties between this line and the
-#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
-#   Make a new property name, append to the end of the file and change
-#   the code to use the new property.
-# ====================================================================
-
-# ====================================================================
-# %%% END OF TRANSLATED PROPERTIES %%%
-# ====================================================================
-
-pluginName = Dali Java Persistence Tools - DB UI
-providerName = Eclipse Web Tools Platform
-
diff --git a/jpa/plugins/org.eclipse.jpt.db.ui/src/org/eclipse/jpt/db/ui/internal/DTPUiTools.java b/jpa/plugins/org.eclipse.jpt.db.ui/src/org/eclipse/jpt/db/ui/internal/DTPUiTools.java
deleted file mode 100644
index 5e0fd6a..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/src/org/eclipse/jpt/db/ui/internal/DTPUiTools.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2007, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.db.ui.internal;
-
-import org.eclipse.datatools.connectivity.IConnectionProfile;
-import org.eclipse.datatools.connectivity.IProfileListener;
-import org.eclipse.datatools.connectivity.ProfileManager;
-import org.eclipse.datatools.connectivity.db.generic.ui.wizard.NewJDBCFilteredCPWizard;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.swt.widgets.Display;
-
-/**
- * DTP UI tools
- */
-public class DTPUiTools {
-
-	/**
-	 * Launch the DTP New Connection Profile wizard to create a new database connection profile.
-	 * 
-	 * Returns the name of the added profile, or null if the wizard was cancelled.
-	 * The name can be used to build a Dali connection profile from
-	 * JptDbPlugin.getConnectionProfileFactory().buildConnectionProfile(String).
-	 */
-	public static String createNewConnectionProfile() {
-		// Filter datasource category
-		NewJDBCFilteredCPWizard  wizard = new NewJDBCFilteredCPWizard();
-		WizardDialog wizardDialog = new WizardDialog(Display.getCurrent().getActiveShell(), wizard);
-		wizardDialog.setBlockOnOpen(true);
-
-		LocalProfileListener listener = new LocalProfileListener();
-		ProfileManager.getInstance().addProfileListener(listener);
-
-		String newCPName = null;
-		if (wizardDialog.open() == Window.OK) {
-			// assume the last added profile is the one we want
-			newCPName = listener.addedProfile.getName();
-		}
-		ProfileManager.getInstance().removeProfileListener(listener);
-
-		return newCPName;
-	}
-
-
-	// ********** DTP profile listener **********
-
-	/**
-	 * This listener simply holds on to the most recently added connection
-	 * profile.
-	 */
-	static class LocalProfileListener implements IProfileListener {
-		IConnectionProfile addedProfile;
-		
-		public void profileAdded(IConnectionProfile profile) {
-			this.addedProfile = profile;
-		}
-	
-		public void profileChanged(IConnectionProfile profile) {
-			// do nothing
-		}
-	
-		public void profileDeleted(IConnectionProfile profile) {
-			// do nothing
-		}
-	}
-
-
-//	// ********** viewer filter **********
-//
-//	static class LocalViewerFilter extends ViewerFilter {
-//
-//		private static final String DATABASE_CATEGORY_ID = "org.eclipse.datatools.connectivity.db.category"; //$NON-NLS-1$
-//
-//		LocalViewerFilter() {
-//			super();
-//		}
-//
-//		@Override
-//		public boolean select(Viewer viewer, Object parentElement, Object element) {
-//			CPWizardNode wizardNode = (CPWizardNode) element;
-//			IProfileWizardProvider wizardProvider = wizardNode.getProvider();
-//			if (wizardProvider instanceof IWizardCategoryProvider) {
-//				return false;
-//			}
-//			ICategory category = ConnectionProfileManager.getInstance().getProvider(
-//							((ProfileWizardProvider) wizardProvider).getProfile()).getCategory();
-//			
-//			// Only display wizards belong to database category
-//			while (category != null) {
-//				if (category.getId().equals(DATABASE_CATEGORY_ID)) {
-//					return true;
-//				}
-//				category = category.getParent();
-//			}
-//			return false;
-//		}
-//	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/.classpath b/jpa/plugins/org.eclipse.jpt.db/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/plugins/org.eclipse.jpt.db/.cvsignore b/jpa/plugins/org.eclipse.jpt.db/.cvsignore
deleted file mode 100644
index a196dd7..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-bin
-@dot
-temp.folder
-build.xml
-javaCompiler...args
-javaCompiler...args.*
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.db/.project b/jpa/plugins/org.eclipse.jpt.db/.project
deleted file mode 100644
index 5675a48..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.db</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/jpa/plugins/org.eclipse.jpt.db/.settings/org.eclipse.core.resources.prefs b/jpa/plugins/org.eclipse.jpt.db/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 84ebb5c..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue Jan 15 11:11:02 EST 2008
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/plugins/org.eclipse.jpt.db/.settings/org.eclipse.jdt.core.prefs b/jpa/plugins/org.eclipse.jpt.db/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 929d545..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun May 27 14:59:18 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jpa/plugins/org.eclipse.jpt.db/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.db/META-INF/MANIFEST.MF
deleted file mode 100644
index eba7159..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,20 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.db
-Bundle-Version: 1.2.200.qualifier
-Bundle-Activator: org.eclipse.jpt.db.JptDbPlugin
-Bundle-ActivationPolicy: lazy
-Bundle-ClassPath: .
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.datatools.enablement.jdt.classpath;bundle-version="[1.0.1,2.0.0)",
- org.eclipse.datatools.sqltools.editor.core;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.jdt.core;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jpt.utility;bundle-version="[1.2.0,2.0.0)"
-Export-Package: org.eclipse.jpt.db,
- org.eclipse.jpt.db.internal;x-internal:=true,
- org.eclipse.jpt.db.internal.vendor;x-internal:=true
-Import-Package: com.ibm.icu.text;version="4.0.1"
diff --git a/jpa/plugins/org.eclipse.jpt.db/about.html b/jpa/plugins/org.eclipse.jpt.db/about.html
deleted file mode 100644
index be534ba..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 02, 2008</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/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</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>
-
-</BODY>
-</HTML>
diff --git a/jpa/plugins/org.eclipse.jpt.db/build.properties b/jpa/plugins/org.eclipse.jpt.db/build.properties
deleted file mode 100644
index b562908..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/build.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2007 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-javacSource=1.5
-javacTarget=1.5
-source.. = src/
-output.. = bin/
-bin.includes = .,\
-               META-INF/,\
-               about.html,\
-               plugin.properties
-jars.compile.order = .
diff --git a/jpa/plugins/org.eclipse.jpt.db/component.xml b/jpa/plugins/org.eclipse.jpt.db/component.xml
deleted file mode 100644
index 2391744..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/component.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2007, 2010 Oracle. 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:
-    Oracle - initial API and implementation
- -->
-
-<component  xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.jpt.db"><description url=""></description><component-depends unrestricted="true"></component-depends><plugin id="org.eclipse.jpt.db" fragment="false"/></component>
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.db/plugin.properties b/jpa/plugins/org.eclipse.jpt.db/plugin.properties
deleted file mode 100644
index 0b91990..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/plugin.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2009 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-# ====================================================================
-# To code developer:
-#   Do NOT change the properties between this line and the
-#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
-#   Make a new property name, append to the end of the file and change
-#   the code to use the new property.
-# ====================================================================
-
-# ====================================================================
-# %%% END OF TRANSLATED PROPERTIES %%%
-# ====================================================================
-
-pluginName = Dali Java Persistence Tools - DB
-providerName = Eclipse Web Tools Platform
-
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Catalog.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Catalog.java
deleted file mode 100644
index 69cfd08..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Catalog.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-/**
- * Database catalog
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface Catalog extends SchemaContainer {
-	// nothing yet
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Column.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Column.java
deleted file mode 100644
index e1ee3fd..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Column.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-import org.eclipse.jpt.utility.JavaType;
-
-/**
- * Database column
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface Column extends DatabaseObject {
-
-	/**
-	 * Return the column's table.
-	 */
-	Table getTable();
-
-
-	// ********** constraints **********
-
-	/**
-	 * Return whether the column is part of its table's primary key.
-	 */
-	boolean isPartOfPrimaryKey();
-
-	/**
-	 * Return whether the column is part of one of its table's foreign keys.
-	 */
-	boolean isPartOfForeignKey();
-
-	/**
-	 * Return whether the column is part of a unique constraint defined for its
-	 * table.
-	 */
-	boolean isPartOfUniqueConstraint();
-
-	/**
-	 * Return whether the column is nullable.
-	 */
-	boolean isNullable();
-
-
-	// ********** data type **********
-
-	/**
-	 * Return the name of the column's datatype.
-	 */
-	String getDataTypeName();
-
-	/**
-	 * Return whether the column's type is numeric.
-	 */
-	boolean isNumeric();
-
-	/**
-	 * Return the column's precision if it is a NumericalDataType;
-	 * otherwise, return -1.
-	 */
-	public int getPrecision();
-
-	/**
-	 * Return the column's scale if it is an ExactNumericDataType;
-	 * otherwise, return -1.
-	 */
-	public int getScale();
-
-	/**
-	 * If the column is a CharacterStringDataType, return its length;
-	 * otherwise, return -1.
-	 */
-	public int getLength();
-
-	/**
-	 * Return whether the column's datatype is a LOB type
-	 * (i.e. BLOB, CLOB, or NCLOB).
-	 */
-	boolean isLOB();
-
-
-	// ********** Java type **********
-
-	/**
-	 * Return a Java type declaration that is reasonably
-	 * similar to the column's data type.
-	 */
-	String getJavaTypeDeclaration();
-
-	/**
-	 * Return a Java type that is reasonably
-	 * similar to the column's data type.
-	 */
-	JavaType getJavaType();
-
-	/**
-	 * Return a Java type declaration that is reasonably
-	 * similar to the column's data type and suitable for use as a
-	 * primary key field.
-	 */
-	String getPrimaryKeyJavaTypeDeclaration();
-
-	/**
-	 * Return a Java type that is reasonably
-	 * similar to the column's data type and suitable for use as a
-	 * primary key field.
-	 */
-	JavaType getPrimaryKeyJavaType();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionAdapter.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionAdapter.java
deleted file mode 100644
index c18f3f9..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionAdapter.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-/**
- * An empty implementation of {@link ConnectionListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public class ConnectionAdapter implements ConnectionListener {
-
-	public void aboutToClose(ConnectionProfile profile) {
-		// do nothing
-	}
-
-	public void closed(ConnectionProfile profile) {
-		// do nothing
-	}
-
-	public void databaseChanged(ConnectionProfile profile, Database database) {
-		// do nothing
-	}
-
-	public void modified(ConnectionProfile profile) {
-		// do nothing
-	}
-
-	public boolean okToClose(ConnectionProfile profile) {
-		return true;
-	}
-
-	public void opened(ConnectionProfile profile) {
-		// do nothing
-	}
-
-	public void catalogChanged(ConnectionProfile profile, Catalog catalog) {
-		// do nothing
-	}
-
-	public void schemaChanged(ConnectionProfile profile, Schema schema) {
-		// do nothing
-	}
-
-	public void sequenceChanged(ConnectionProfile profile, Sequence sequence) {
-		// do nothing
-	}
-
-	public void tableChanged(ConnectionProfile profile, Table table) {
-		// do nothing
-	}
-
-	public void columnChanged(ConnectionProfile profile, Column column) {
-		// do nothing
-	}
-
-	public void foreignKeyChanged(ConnectionProfile profile, ForeignKey foreignKey) {
-		// do nothing
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionListener.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionListener.java
deleted file mode 100644
index 0c15b93..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionListener.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-import java.util.EventListener;
-
-/**
- * A <code>ConnectionListener</code> is notified of any changes to a connection.
- * <p>
- * @see org.eclipse.datatools.connectivity.IManagedConnectionListener
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface ConnectionListener extends EventListener {
-
-	public void opened(ConnectionProfile profile);
-	public void modified(ConnectionProfile profile);
-	public boolean okToClose(ConnectionProfile profile);
-	public void aboutToClose(ConnectionProfile profile);
-	public void closed(ConnectionProfile profile);
-
-	public void databaseChanged(ConnectionProfile profile, Database database);
-	public void catalogChanged(ConnectionProfile profile, Catalog catalog);
-	public void schemaChanged(ConnectionProfile profile, Schema schema);
-	public void sequenceChanged(ConnectionProfile profile, Sequence sequence);
-	public void tableChanged(ConnectionProfile profile, Table table);
-	public void columnChanged(ConnectionProfile profile, Column column);
-	public void foreignKeyChanged(ConnectionProfile profile, ForeignKey foreignKey);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionProfile.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionProfile.java
deleted file mode 100644
index d16a7e8..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionProfile.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
-
-/**
- * Database connection profile
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface ConnectionProfile extends DatabaseObject {
-
-	// ********** properties **********
-
-	/**
-	 * Return the connection profile's database.
-	 * Return null if the connection profile is inactive.
-	 */
-	Database getDatabase();
-
-	/**
-	 * Return ID of the provider managing the DTP profile.
-	 */
-	String getProviderID();
-
-	/**
-	 * Return the connection profile's static ID.
-	 */
-	String getInstanceID();
-
-	/**
-	 * Return the default database name.
-	 */
-	String getDatabaseName();
-
-	/**
-	 * Return the database product name.
-	 */
-	String getDatabaseProduct();
-
-	/**
-	 * Return the database vendor.
-	 */
-	String getDatabaseVendor();
-
-	/**
-	 * Return the database version.
-	 */
-	String getDatabaseVersion();
-
-	/**
-	 * Return the driver class name.
-	 */
-	String getDriverClassName();
-
-	/**
-	 * Return the default connection URL.
-	 */
-	String getURL();
-
-	/**
-	 * Return the default user name.
-	 */
-	String getUserName();
-
-	/**
-	 * Return the default user password.
-	 */
-	String getUserPassword();
-
-	/**
-	 * Return the ID of the associated Driver definition.
-	 */
-	String getDriverDefinitionID();
-
-	/**
-	 * Return the jar list for the associated Driver as a 
-	 * comma-delimited string.
-	 */
-	String getDriverJarList();
-
-	/**
-	 * Return the name of the associated Driver definition.
-	 */
-	String getDriverName();
-
-	// ********** connection **********
-
-	/**
-	 * Return whether the profile is either connected to a live database
-	 * session or working off-line (i.e. it has access to meta-data).
-	 * @see isConnected()
-	 * @see isWorkingOffline()
-	 */
-	boolean isActive();
-
-	/**
-	 * Return whether the profile is neither connected to a live database
-	 * session nor working off-line (i.e. it has access to meta-data).
-	 * @see isActive()
-	 */
-	boolean isInactive();
-
-	/**
-	 * Return whether the profile is connected to a live database session
-	 * (i.e. the meta-data comes from the database), as opposed to working
-	 * off-line.
-	 * @see #isActive()
-	 */
-	boolean isConnected();
-
-	/**
-	 * Return whether the profile is not connected to a live database session
-	 * (i.e. the meta-data comes from the database), as opposed to working
-	 * off-line.
-	 * @see #isConnected()
-	 */
-	boolean isDisconnected();
-
-	/**
-	 * Connect to the database.
-	 * @see #disconnect()
-	 */
-	void connect();
-
-	/**
-	 * Disconnect from the database.
-	 * @see #connect()
-	 */
-	void disconnect();
-
-
-	// ********** off-line support **********
-
-	/**
-	 * Return whether the profile is working off-line (i.e. the meta-data
-	 * comes from a local cache), as opposed to connected to a live
-	 * database session.
-	 * @see #isActive()
-	 */
-	boolean isWorkingOffline();
-
-	/**
-	 * Return whether the connection factories associated with the
-	 * connection profile's provider support working offline.
-	 */
-	boolean supportsWorkOfflineMode();
-
-	/**
-	 * Save the state of the connection profile for working in an offline mode.
-	 * If the connection profile does not support working in an offline mode, no
-	 * exception is thrown and the method will return immediately.
-	 */
-	IStatus saveWorkOfflineData();
-
-	/**
-	 * Return whether the connection profile supports working offline and data
-	 * has been saved for working offline.
-	 */
-	boolean canWorkOffline();
-
-	/**
-	 * Begin working off-line.
-	 */
-	IStatus workOffline();
-
-
-	// ********** listeners **********
-
-	/**
-	 * Add the specified connection listener to the connection profile.
-	 */
-	void addConnectionListener(ConnectionListener listener);
-
-	/**
-	 * Remove the specified connection listener from the connection profile.
-	 */
-	void removeConnectionListener(ConnectionListener listener);
-
-
-	// ********** constants **********
-
-	String CONNECTION_PROFILE_TYPE = "org.eclipse.datatools.connectivity.db.generic.connectionProfile";  //$NON-NLS-1$
-	String DRIVER_DEFINITION_PROP_ID = "org.eclipse.datatools.connectivity.driverDefinitionID";  //$NON-NLS-1$
-	String DRIVER_DEFINITION_TYPE_PROP_ID = "org.eclipse.datatools.connectivity.drivers.defnType";  //$NON-NLS-1$
-	String DRIVER_JAR_LIST_PROP_ID = "jarList";  //$NON-NLS-1$
-	String DATABASE_SAVE_PWD_PROP_ID = IJDBCDriverDefinitionConstants.PROP_PREFIX + "savePWD";  //$NON-NLS-1$
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionProfileAdapter.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionProfileAdapter.java
deleted file mode 100644
index 832b56f..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionProfileAdapter.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-/**
- * An empty implementation of {@link ConnectionProfileListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public class ConnectionProfileAdapter implements ConnectionProfileListener {
-
-	public void connectionProfileAdded(String name) {
-		// do nothing
-	}
-
-	public void connectionProfileRemoved(String name) {
-		// do nothing
-	}
-
-	public void connectionProfileRenamed(String oldName, String newName) {
-		// do nothing
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionProfileFactory.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionProfileFactory.java
deleted file mode 100644
index 5001c55..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionProfileFactory.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-/**
- * Database connection profile factory
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface ConnectionProfileFactory {
-
-	/**
-	 * Return the names of the DTP connection profiles the factory can wrap with
-	 * new connection profiles.
-	 */
-	Iterable<String> getConnectionProfileNames();
-
-	/**
-	 * Build and return a connection profile that wraps the DTP connection
-	 * profile with the specified name.
-	 * Return null if there is no DTP connection profile with the specified
-	 * name.
-	 * Use the specified database identifier adapter to allow clients to control how
-	 * database identifiers are converted to names and vice versa.
-	 */
-	ConnectionProfile buildConnectionProfile(String name, DatabaseIdentifierAdapter adapter);
-
-	/**
-	 * Build and return a connection profile that wraps the DTP connection
-	 * profile with the specified name.
-	 * Return null if there is no DTP connection profile with the specified
-	 * name.
-	 * <p>
-	 * Clients should use this method when a JPA platform is unavailable
-	 * (e.g. during project creation). The returned connection profile will
-	 * use the default conversions for identifiers and names.
-	 */
-	ConnectionProfile buildConnectionProfile(String name);
-
-	/**
-	 * Add a listener that will be notified of changes to the DTP
-	 * connection profiles.
-	 */
-	void addConnectionProfileListener(ConnectionProfileListener listener);
-
-	/**
-	 * Remove the specified listener.
-	 */
-	void removeConnectionProfileListener(ConnectionProfileListener listener);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionProfileListener.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionProfileListener.java
deleted file mode 100644
index 5631e32..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ConnectionProfileListener.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-import java.util.EventListener;
-
-/**
- * A <code>ProfileListener</code> is notified of any changes to the DTP connection profiles.
- * <p>
- * @see org.eclipse.datatools.connectivity.IProfileListener
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface ConnectionProfileListener extends EventListener {
-
-	/**
-	 * The specified profile has been added.
-	 */
-	public void connectionProfileAdded(String name);
-
-	/**
-	 * The specified profile has been removed.
-	 */
-	public void connectionProfileRemoved(String name);
-
-	/**
-	 * The specified profile has been renamed.
-	 */
-	public void connectionProfileRenamed(String oldName, String newName);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Database.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Database.java
deleted file mode 100644
index 955fea1..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Database.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-
-/**
- * Database
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface Database extends SchemaContainer {
-
-	// ********** properties **********
-
-	/**
-	 * Return the name of the database's vendor.
-	 */
-	String getVendorName();
-
-	/**
-	 * Return the database's version.
-	 */
-	String getVersion();
-
-
-	// ********** catalogs **********
-
-	/**
-	 * Return whether the database supports catalogs. If it does, all database
-	 * objects are contained by the database's catalogs; otherwise all database
-	 * objects are contained by the database's schemata.
-	 * <br>
-	 * Practically speaking:<ul>
-	 *     <li>If {@link #supportsCatalogs()} returns <code>true</code><ul>
-	 *         <li>{@link #getCatalogs()} returns catalogs that contain the database's schemata
-	 *         <li>{@link #getSchemata()} returns an empty iterable
-	 *     </ul>
-	 *     <li>else<ul>
-	 *         <li>{@link #getCatalogs()} returns an empty iterable
-	 *         <li>{@link #getSchemata()} returns the database's schemata
-	 *     </ul>
-	 * </ul>
-	 * This is complicated by the presence of a "default" catalog that clients can
-	 * use to allow the specification of a catalog to be optional; but clients
-	 * must manage this explicitly.
-	 * 
-	 * @see #getCatalogs()
-	 * @see #getSchemata()
-	 */
-	boolean supportsCatalogs();
-
-	/**
-	 * Return the database's catalogs.
-	 * Return an empty iterable if the database does not support catalogs.
-	 * @see #supportsCatalogs()
-	 */
-	Iterable<Catalog> getCatalogs();
-
-	/**
-	 * Return the number of catalogs the database contains.
-	 * Return zero if the database does not support catalogs.
-	 * @see #supportsCatalogs()
-	 */
-	int getCatalogsSize();
-
-	/**
-	 * Return the database's catalog names, sorted.
-	 * Return an empty iterable if the database does not support catalogs.
-	 * This is useful when the user is selecting a catalog from a read-only
-	 * combo-box (e.g. in a wizard).
-	 * @see #getSortedCatalogIdentifiers()
-	 * @see #getCatalogNamed(String)
-	 */
-	Iterable<String> getSortedCatalogNames();
-
-	/**
-	 * Return the catalog with specified name. The name must be an exact match
-	 * of the catalog's name.
-	 * Return null if the database does not support catalogs.
-	 * @see #supportsCatalogs()
-	 * @see #getSortedCatalogNames()
-	 * @see #getCatalogForIdentifier(String)
-	 */
-	Catalog getCatalogNamed(String name);
-
-	/**
-	 * Return the database's catalog identifiers, sorted by name.
-	 * Return an empty iterable if the database does not support catalogs.
-	 * This is useful when the user is selecting an identifier that will be
-	 * placed in a text file (e.g. in a Java annotation).
-	 * @see #getSortedCatalogNames()
-	 * @see #getCatalogForIdentifier(String)
-	 */
-	Iterable<String> getSortedCatalogIdentifiers();
-
-	/**
-	 * Return the catalog for the specified identifier. The identifier should
-	 * be an SQL identifier (i.e. quoted when case-sensitive or containing
-	 * special characters, unquoted otherwise).
-	 * Return null if the database does not support catalogs.
-	 * @see #supportsCatalogs()
-	 * @see #getSortedCatalogIdentifiers()
-	 * @see #getCatalogNamed(String)
-	 */
-	Catalog getCatalogForIdentifier(String identifier);
-
-	/**
-	 * Return the database's "default" catalog, as defined by the database vendor.
-	 * In most cases the default catalog's name will match the user name.
-	 * Return null if the database does not support catalogs or if the default
-	 * catalog does not exist (e.g. the database has no catalog whose name
-	 * matches the user name).
-	 * @see #supportsCatalogs()
-	 * @see #getDefaultCatalogIdentifier()
-	 */
-	Catalog getDefaultCatalog();
-
-	/**
-	 * Return the database's "default" catalog identifier.
-	 * The database may or may not have a catalog with a matching name.
-	 * @see #supportsCatalogs()
-	 * @see #getDefaultCatalog()
-	 */
-	String getDefaultCatalogIdentifier();
-
-
-	// ********** utility methods **********
-
-	/**
-	 * Select and return from the specified list of database objects the
-	 * database object identified by the specified identifier.
-	 * The identifier should be an SQL identifier (i.e. delimited when
-	 * non-"normal").
-	 */
-	<T extends DatabaseObject> T selectDatabaseObjectForIdentifier(Iterable<T> databaseObjects, String identifier);
-
-	/**
-	 * Convert the specified name to a database-appropriate SQL identifier.
-	 */
-	String convertNameToIdentifier(String name);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/DatabaseIdentifierAdapter.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/DatabaseIdentifierAdapter.java
deleted file mode 100644
index cef37c0..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/DatabaseIdentifierAdapter.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-/**
- * This interface allows clients of the Dali db package to plug in a custom
- * strategy for converting a database identifier to a database name and vice
- * versa.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface DatabaseIdentifierAdapter {
-
-	/**
-	 * Convert the specified "identifier" to a "name".
-	 */
-	String convertIdentifierToName(String identifier, DefaultCallback defaultCallback);
-
-	/**
-	 * Convert the specified "name" to an "identifier".
-	 */
-	String convertNameToIdentifier(String name, DefaultCallback defaultCallback);
-
-	/**
-	 * The client-provided finder is passed a "default" callback that can be
-	 * used if appropriate.
-	 */
-	interface DefaultCallback {
-
-		/**
-		 * Convert the specified "identifier" to a "name".
-		 */
-		String convertIdentifierToName(String identifier);
-
-		/**
-		 * Convert the specified "name" to an "identifier".
-		 */
-		String convertNameToIdentifier(String name);
-
-	}
-
-	/**
-	 * This adapter simply uses the passed in default callback.
-	 */
-	final class Default implements DatabaseIdentifierAdapter {
-		public static final DatabaseIdentifierAdapter INSTANCE = new Default();
-		public static DatabaseIdentifierAdapter instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Default() {
-			super();
-		}
-		// simply use the default callback
-		public String convertIdentifierToName(String identifier, DefaultCallback defaultCallback) {
-			return defaultCallback.convertIdentifierToName(identifier);
-		}
-		// simply use the default callback
-		public String convertNameToIdentifier(String name, DefaultCallback defaultCallback) {
-			return defaultCallback.convertNameToIdentifier(name);
-		}
-		@Override
-		public String toString() {
-			return "DatabaseIdentifierAdapter.Default"; //$NON-NLS-1$
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/DatabaseObject.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/DatabaseObject.java
deleted file mode 100644
index 1554350..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/DatabaseObject.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-import java.util.Comparator;
-
-import org.eclipse.jpt.utility.internal.Transformer;
-
-import com.ibm.icu.text.Collator;
-
-/**
- * Common behavior to all database objects
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface DatabaseObject {
-
-	/**
-	 * Return the database object's name.
-	 */
-	String getName();
-
-	/**
-	 * Return the database object's "identifier", which is the object's name
-	 * modified so it can be used in an SQL statement (e.g. if the name contains
-	 * special characters or is mixed case, it will be delimited, typically by
-	 * double-quotes).
-	 * Return null if the database object's identifier matches the specified
-	 * "default name".
-	 * <p>
-	 * This is used by the old entity generation code to determine whether
-	 * a generated annotation must explicitly identify a database object
-	 * (e.g. a table) or the specified default adequately identifies the database object
-	 * (taking into consideration case-sensitivity and special characters).
-	 */
-	String getIdentifier(String defaultName);
-
-	/**
-	 * Return the database object's "identifier", which is the object's name
-	 * modified so it can be used in an SQL statement (e.g. if the name contains
-	 * special characters or is mixed case, it will be delimited, typically by
-	 * double-quotes).
-	 */
-	String getIdentifier();
-
-	/**
-	 * Return the database object's database.
-	 */
-	Database getDatabase();
-
-	/**
-	 * Return the database object's connection profile.
-	 */
-	ConnectionProfile getConnectionProfile();
-
-
-	Comparator<DatabaseObject> DEFAULT_COMPARATOR =
-			new Comparator<DatabaseObject>() {
-				public int compare(DatabaseObject dbObject1, DatabaseObject dbObject2) {
-					return Collator.getInstance().compare(dbObject1.getName(), dbObject2.getName());
-				}
-				@Override
-				public String toString() {
-					return "DatabaseObject.DEFAULT_COMPARATOR"; //$NON-NLS-1$
-				}
-			};
-
-	Transformer<DatabaseObject, String> NAME_TRANSFORMER =
-			new Transformer<DatabaseObject, String>() {
-				public String transform(DatabaseObject dbObject) {
-					return dbObject.getName();
-				}
-				@Override
-				public String toString() {
-					return "DatabaseObject.NAME_TRANSFORMER"; //$NON-NLS-1$
-				}
-			};
-
-	Transformer<DatabaseObject, String> IDENTIFIER_TRANSFORMER =
-			new Transformer<DatabaseObject, String>() {
-				public String transform(DatabaseObject dbObject) {
-					return dbObject.getIdentifier();
-				}
-				@Override
-				public String toString() {
-					return "DatabaseObject.IDENTIFIER_TRANSFORMER"; //$NON-NLS-1$
-				}
-			};
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ForeignKey.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ForeignKey.java
deleted file mode 100644
index 5d9dae3..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/ForeignKey.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-import java.util.Comparator;
-
-import com.ibm.icu.text.Collator;
-
-/**
- * Database foreign key
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface ForeignKey extends DatabaseObject {
-
-	// ********** tables **********
-
-	/**
-	 * Return the foreign key's "base" table.
-	 */
-	Table getBaseTable();
-
-	/**
-	 * Return the foreign key's "referenced" table.
-	 */
-	Table getReferencedTable();
-
-
-	// ********** column pairs **********
-
-	/**
-	 * Return the foreign key's column pairs.
-	 */
-	Iterable<ColumnPair> getColumnPairs();
-
-	/**
-	 * Return the size of the foreign key's column pairs.
-	 */
-	int getColumnPairsSize();
-
-	/**
-	 * Return the foreign key's single column pair. Throw an
-	 * {@link IllegalStateException} if the foreign key has more than one column pair.
-	 */
-	ColumnPair getColumnPair();
-
-	/**
-	 * Return the foreign key's "base" columns.
-	 */
-	Iterable<Column> getBaseColumns();
-
-	/**
-	 * Return the foreign key's "base" columns that are not part of the base
-	 * table's primary key. (The non-primary key base columns are not used to
-	 * generate basic attributes during entity generation.)
-	 */
-	Iterable<Column> getNonPrimaryKeyBaseColumns();
-
-	/**
-	 * Return the foreign key's "referenced" columns.
-	 */
-	Iterable<Column> getReferencedColumns();
-
-	/**
-	 * Return whether the foreign key references the primary key of the
-	 * "referenced" table and that primary key has only a single column.
-	 * This can be used when determining JPA defaults.
-	 */
-	boolean referencesSingleColumnPrimaryKey();
-
-
-	// ********** JPA support **********
-
-	/**
-	 * Return an appropriate name for an attribute that holds the entity
-	 * mapped to the foreign key's "referenced" table.
-	 */
-	String getAttributeName();
-
-	/**
-	 * If the name of the "base" column adheres to the JPA spec for a
-	 * default mapping (i.e. it ends with an underscore followed by the name
-	 * of the "referenced" column, and the "referenced" column is the single
-	 * primary key column of the "referenced" table), return the corresponding
-	 * default attribute name:<pre>
-	 *     ForeignKey(EMP.CUBICLE_ID => CUBICLE.ID) => "CUBICLE"
-	 * </pre>
-	 * Return a <code>null</code> if it does not adhere to the JPA spec:<pre>
-	 *     ForeignKey(EMP.CUBICLE_ID => CUBICLE.CUBICLE_ID) => null
-	 *     ForeignKey(EMP.CUBICLE => CUBICLE.ID) => null
-	 * </pre>
-	 */
-	String getDefaultAttributeName();
-
-	/**
-	 * Given the name of an attribute (field or property) that is mapped to the
-	 * foreign key,
-	 * build and return a string to be used as the value for the attribute's
-	 * <code>@javax.persistence.JoinColumn</code> annotation's <code>name</code> element.
-	 * Return <code>null</code> if the attribute
-	 * maps to the join column by default.
-	 * <p>
-	 * Precondition: The foreign key consists of a single column pair whose
-	 * referenced column is the single-column primary key of the foreign
-	 * key's referenced table.
-	 * <p>
-	 * This is used by the old entity generation code to determine whether
-	 * a generated annotation must explicitly identify the join column
-	 * or the calculated default adequately identifies the join column
-	 * (taking into consideration case-sensitivity and special characters).
-	 */
-	String getJoinColumnAnnotationIdentifier(String attributeName);
-
-	// ********** column pair interface **********
-
-	/**
-	 * Pair up the foreign key's column pairs, matching each "base" column with
-	 * the appropriate "referenced" column.
-	 * @see #columnPairs()
-	 */
-	interface ColumnPair {
-
-		/**
-		 * Return the column pair's "base" column.
-		 */
-		Column getBaseColumn();
-
-		/**
-		 * Return the column pair's "referenced" column.
-		 */
-		Column getReferencedColumn();
-
-		Comparator<ColumnPair> BASE_COLUMN_COMPARATOR =
-				new Comparator<ColumnPair>() {
-					public int compare(ColumnPair cp1, ColumnPair cp2) {
-						return Collator.getInstance().compare(cp1.getBaseColumn().getName(), cp2.getBaseColumn().getName());
-					}
-					@Override
-					public String toString() {
-						return "ForeignKey.ColumnPair.BASE_COLUMN_COMPARATOR"; //$NON-NLS-1$
-					}
-				};
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/JptDbPlugin.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/JptDbPlugin.java
deleted file mode 100644
index bfecfb1..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/JptDbPlugin.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-import org.eclipse.core.runtime.Plugin;
-import org.eclipse.datatools.enablement.jdt.classpath.DriverClasspathContainer;
-import org.eclipse.jdt.core.IClasspathContainer;
-import org.eclipse.jpt.db.internal.DTPConnectionProfileFactory;
-import org.osgi.framework.BundleContext;
-
-/**
- * The JPT DB plug-in lifecycle implementation.
- * Globally available connection profile factory.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public class JptDbPlugin extends Plugin {
-	private DTPConnectionProfileFactory connectionProfileFactory;
-
-	private static JptDbPlugin INSTANCE;  // sorta-final
-
-	/**
-	 * Return the singleton JPT DB plug-in.
-	 */
-	public static JptDbPlugin instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * The constructor
-	 */
-	public JptDbPlugin() {
-		super();
-		if (INSTANCE != null) {
-			throw new IllegalStateException();
-		}
-		// this convention is *wack*...  ~bjv
-		INSTANCE = this;
-	}
-
-	/**
-	 * This method is called upon plug-in activation
-	 */
-	@Override
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		this.connectionProfileFactory = DTPConnectionProfileFactory.instance();
-        this.connectionProfileFactory.start();
-	}
-
-	/**
-	 * This method is called when the plug-in is stopped
-	 */
-	@Override
-	public void stop(BundleContext context) throws Exception {
-		this.connectionProfileFactory.stop();
-		this.connectionProfileFactory = null;
-		INSTANCE = null;
-		super.stop(context);
-	}
-
-	public ConnectionProfileFactory getConnectionProfileFactory() {
-		return this.connectionProfileFactory;
-	}
-
-	/**
-	 * Creates a jar list container for the given DTP driver.
-	 */
-	public IClasspathContainer buildDriverClasspathContainerFor(String driverName) {
-		return new DriverClasspathContainer(driverName);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Schema.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Schema.java
deleted file mode 100644
index 6b0fd2b..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Schema.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-/**
- * Database schema
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface Schema extends DatabaseObject {
-
-	/**
-	 * Return the schema's container; either a catalog or a database.
-	 */
-	SchemaContainer getContainer();
-
-
-	// ********** tables **********
-
-	/**
-	 * Return the schema's tables.
-	 */
-	Iterable<Table> getTables();
-
-	/**
-	 * Return the number of tables the schema contains.
-	 */
-	int getTablesSize();
-
-	/**
-	 * Return the table with specified name. The name must be an exact match
-	 * of the table's name.
-	 * @see #getTableForIdentifier(String)
-	 */
-	 Table getTableNamed(String name);
-
-	/**
-	 * Return the schema's table identifiers, sorted by name.
-	 * @see #getTableForIdentifier(String)
-	 */
-	Iterable<String> getSortedTableIdentifiers();
-
-	/**
-	 * Return the table for the specified identifier. The identifier should
-	 * be an SQL identifier (i.e. quoted when case-sensitive or containing
-	 * special characters, unquoted otherwise).
-	 * @see #getTableNamed(String)
-	 * @see #getSortedTableIdentifiers()
-	 */
-	Table getTableForIdentifier(String identifier);
-
-
-	// ********** sequences **********
-
-	/**
-	 * Return the schema's sequences.
-	 */
-	Iterable<Sequence> getSequences();
-
-	/**
-	 * Return the number of sequences the schema contains.
-	 */
-	int getSequencesSize();
-
-	/**
-	 * Return the sequence with specified name. The name must be an exact match
-	 * of the sequence's name.
-	 * @see #getSequenceForIdentifier(String)
-	 */
-	Sequence getSequenceNamed(String name);
-
-	/**
-	 * Return the schema's sequence identifers, sorted by name.
-	 * @see #getSequenceForIdentifier(String)
-	 */
-	Iterable<String> getSortedSequenceIdentifiers();
-
-	/**
-	 * Return the sequence for the specified identifier. The identifier should
-	 * be an SQL identifier (i.e. quoted when case-sensitive or containing
-	 * special characters, unquoted otherwise).
-	 * @see #getSequenceNamed(String)
-	 * @see #getSortedSequenceIdentifiers()
-	 */
-	Sequence getSequenceForIdentifier(String identifier);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/SchemaContainer.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/SchemaContainer.java
deleted file mode 100644
index 882c8d0..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/SchemaContainer.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-/**
- * Schema "container" (i.e. Database or Catalog)
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface SchemaContainer extends DatabaseObject {
-
-	/**
-	 * Return the container's schemata.
-	 */
-	Iterable<Schema> getSchemata();
-
-	/**
-	 * Return the number of schemata in the container.
-	 */
-	int getSchemataSize();
-
-	/**
-	 * Return the container's schema names, sorted.
-	 * This is useful when the user is selecting a schema from a read-only
-	 * combo-box (e.g. in a wizard).
-	 * @see #getSchemaNamed(String)
-	 * @see #getSortedSchemaIdentifiers()
-	 */
-	Iterable<String> getSortedSchemaNames();
-
-	/**
-	 * Return the schema with specified name. The name must be an exact match
-	 * of the schema's name.
-	 * @see #getSortedSchemaNames()
-	 * @see #getSchemaForIdentifier(String)
-	 */
-	Schema getSchemaNamed(String name);
-
-	/**
-	 * Return the container's schema identifiers, sorted by name.
-	 * This is useful when the user is selecting an identifier that will be
-	 * placed in a text file (e.g. in a Java annotation).
-	 * @see #getSchemaForIdentifier(String)
-	 * @see #getSortedSchemaNames()
-	 */
-	Iterable<String> getSortedSchemaIdentifiers();
-
-	/**
-	 * Return the schema for the specified identifier. The identifier should
-	 * be an SQL identifier (i.e. quoted when case-sensitive or containing
-	 * special characters, unquoted otherwise).
-	 * @see #getSortedSchemaIdentifiers()
-	 * @see #getSchemaNamed(String)
-	 */
-	Schema getSchemaForIdentifier(String identifier);
-
-	/**
-	 * Return the container's "default" schema, as defined by the database vendor.
-	 * In most cases the default schema's name will match the user name.
-	 * Return null if the default schema does not exist (e.g. the container has
-	 * no schema whose name matches the user name).
-	 * @see #getDefaultSchemaIdentifier()
-	 */
-	Schema getDefaultSchema();
-
-	/**
-	 * Return the container's "default" schema identifier.
-	 * The container may or may not have a schema with a matching name.
-	 * @see #getDefaultSchema()
-	 */
-	String getDefaultSchemaIdentifier();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Sequence.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Sequence.java
deleted file mode 100644
index 5351fff..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Sequence.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-/**
- * Database sequence
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface Sequence extends DatabaseObject {
-
-	/**
-	 * Return the sequence's schema.
-	 */
-	Schema getSchema();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Table.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Table.java
deleted file mode 100644
index 4f62921..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/Table.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db;
-
-/**
- * Database table
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface Table extends DatabaseObject {
-
-	/**
-	 * Return the table's schema.
-	 */
-	Schema getSchema();
-
-
-	// ********** columns **********
-
-	/**
-	 * Return the table's columns.
-	 */
-	Iterable<Column> getColumns();
-
-	/**
-	 * Return the number of columns the table contains.
-	 */
-	int getColumnsSize();
-
-	/**
-	 * Return the column with specified name. The name must be an exact match
-	 * of the column's name.
-	 * @see #getColumnForIdentifier(String)
-	 */
-	Column getColumnNamed(String name);
-
-	/**
-	 * Return the table's column identifers, sorted by name.
-	 * @see #getColumnForIdentifier(String)
-	 */
-	Iterable<String> getSortedColumnIdentifiers();
-
-	/**
-	 * Return the column for the specified identifier. The identifier should
-	 * be an SQL identifier (i.e. quoted when case-sensitive or containing
-	 * special characters, unquoted otherwise).
-	 * @see #getColumnNamed(String)
-	 * @see #getSortedColumnIdentifiers()
-	 */
-	Column getColumnForIdentifier(String identifier);
-
-
-	// ********** primary key columns **********
-
-	/**
-	 * Return the table's primary key columns.
-	 */
-	Iterable<Column> getPrimaryKeyColumns();
-
-	/**
-	 * Return the number of primary key columns the table contains.
-	 */
-	int getPrimaryKeyColumnsSize();
-
-	/**
-	 * Return the table's single primary key column. Throw an
-	 * {@link IllegalStateException} if the table has more than one primary key column.
-	 */
-	Column getPrimaryKeyColumn();
-
-
-	// ********** foreign keys **********
-
-	/**
-	 * Return the table's foreign keys.
-	 */
-	Iterable<ForeignKey> getForeignKeys();
-
-	/**
-	 * Return the number of foreign keys the table contains.
-	 */
-	int getForeignKeysSize();
-
-
-	// ********** join table support **********
-
-	/**
-	 * Return whether the table is possibly a "join" table
-	 * (i.e. it contains only 2 foreign keys). Whether the table <em>actually</em> is
-	 * a "join" table is determined by the semantics of the database design.
-	 */
-	boolean isPossibleJoinTable();
-
-	/**
-	 * Assuming the table is a "join" table, return the foreign key to the
-	 * "owning" table.
-	 * @see #isPossibleJoinTable()
-	 */
-	ForeignKey getJoinTableOwningForeignKey();
-
-	/**
-	 * Assuming the table is a "join" table, return the foreign key to the
-	 * "non-owning" table.
-	 * @see #isPossibleJoinTable()
-	 */
-	ForeignKey getJoinTableNonOwningForeignKey();
-
-	/**
-	 * Assuming the table is a "join" table, return whether its name matches
-	 * the JPA default (i.e. <code>"OWNINGTABLE_NONOWNINGTABLE"</code>).
-	 * @see #isPossibleJoinTable()
-	 */
-	boolean joinTableNameIsDefault();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPCatalogWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPCatalogWrapper.java
deleted file mode 100644
index 96d924f..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPCatalogWrapper.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.util.List;
-
-import org.eclipse.jpt.db.Catalog;
-
-/**
- * Wrap a DTP Catalog
- */
-final class DTPCatalogWrapper
-	extends DTPSchemaContainerWrapper
-	implements Catalog
-{
-	/** the wrapped DTP catalog */
-	private final org.eclipse.datatools.modelbase.sql.schema.Catalog dtpCatalog;
-
-
-	// ********** constructor **********
-
-	DTPCatalogWrapper(DTPDatabaseWrapper database, org.eclipse.datatools.modelbase.sql.schema.Catalog dtpCatalog) {
-		super(database, dtpCatalog);
-		this.dtpCatalog = dtpCatalog;
-	}
-
-
-	// ********** DTPWrapper implementation **********
-
-	@Override
-	synchronized void catalogObjectChanged() {
-		super.catalogObjectChanged();
-		this.getConnectionProfile().catalogChanged(this);
-	}
-
-
-	// ********** DTPSchemaContainerWrapper implementation **********
-
-	@Override
-	@SuppressWarnings("unchecked")
-	List<org.eclipse.datatools.modelbase.sql.schema.Schema> getDTPSchemata() {
-		return this.dtpCatalog.getSchemas();
-	}
-
-	@Override
-	DTPSchemaWrapper getSchema(org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema) {
-		// try to short-circuit the search
-		return this.wraps(dtpSchema.getCatalog()) ?
-						this.getSchema_(dtpSchema) :
-						this.getDatabase().getSchemaFromCatalogs(dtpSchema);
-	}
-
-	@Override
-	DTPTableWrapper getTable(org.eclipse.datatools.modelbase.sql.tables.Table dtpTable) {
-		// try to short-circuit the search
-		return this.wraps(dtpTable.getSchema().getCatalog()) ?
-						this.getTable_(dtpTable) :
-						this.getDatabase().getTableFromCatalogs(dtpTable);
-	}
-
-	@Override
-	DTPColumnWrapper getColumn(org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		// try to short-circuit the search
-		return this.wraps(dtpColumn.getTable().getSchema().getCatalog()) ?
-						this.getColumn_(dtpColumn) :
-						this.getDatabase().getColumnFromCatalogs(dtpColumn);
-	}
-
-
-	// ********** DatabaseObject implementation **********
-
-	public String getName() {
-		return this.dtpCatalog.getName();
-	}
-
-
-	// ********** internal methods **********
-
-	boolean wraps(org.eclipse.datatools.modelbase.sql.schema.Catalog catalog) {
-		return this.dtpCatalog == catalog;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPColumnWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPColumnWrapper.java
deleted file mode 100644
index 31c42b6..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPColumnWrapper.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
-import org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType;
-import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
-import org.eclipse.datatools.modelbase.sql.datatypes.ExactNumericDataType;
-import org.eclipse.datatools.modelbase.sql.datatypes.NumericalDataType;
-import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
-import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.utility.JavaType;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.SimpleJavaType;
-
-/**
- *  Wrap a DTP Column
- */
-final class DTPColumnWrapper
-	extends DTPDatabaseObjectWrapper
-	implements Column
-{
-	/** the wrapped DTP column */
-	private final org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn;
-
-
-	// ********** constructor **********
-
-	DTPColumnWrapper(DTPTableWrapper table, org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		super(table, dtpColumn);
-		this.dtpColumn = dtpColumn;
-	}
-
-
-	// ********** DTPWrapper implementation **********
-
-	@Override
-	synchronized void catalogObjectChanged() {
-		super.catalogObjectChanged();
-		this.getConnectionProfile().columnChanged(this);
-	}
-
-
-	// ********** Column implementation **********
-
-	public String getName() {
-		return this.dtpColumn.getName();
-	}
-
-	public DTPTableWrapper getTable() {
-		return (DTPTableWrapper) this.getParent();
-	}
-
-	public boolean isPartOfPrimaryKey() {
-		return this.getTable().primaryKeyColumnsContains(this);
-	}
-
-	public boolean isPartOfForeignKey() {
-		return this.getTable().foreignKeyBaseColumnsContains(this);
-	}
-
-	public boolean isPartOfUniqueConstraint() {
-		return this.dtpColumn.isPartOfUniqueConstraint();
-	}
-
-	public boolean isNullable() {
-		return this.dtpColumn.isNullable();
-	}
-
-	public String getDataTypeName() {
-		DataType dataType = this.dtpColumn.getDataType();
-		return (dataType == null) ? null : dataType.getName();
-	}
-
-	public boolean isNumeric() {
-		return this.dtpColumn.getDataType() instanceof NumericalDataType;
-	}	
-
-	public int getPrecision() {
-		DataType dataType = this.dtpColumn.getDataType();
-		return (dataType instanceof NumericalDataType) ?
-						((NumericalDataType) dataType).getPrecision() :
-						-1;
-	}
-
-	public int getScale(){
-		DataType dataType = this.dtpColumn.getDataType();
-		return (dataType instanceof ExactNumericDataType) ?
-						((ExactNumericDataType) dataType).getScale() :
-						-1;
-	}
-
-	public int getLength() {
-		DataType dataType = this.dtpColumn.getDataType();
-		return (dataType instanceof CharacterStringDataType) ?
-						((CharacterStringDataType) dataType).getLength() :
-						-1;
-	}
-
-	public boolean isLOB() {
-		DataType dataType = this.dtpColumn.getDataType();
-		return (dataType instanceof PredefinedDataType) ?
-						primitiveTypeIsLob(((PredefinedDataType) dataType).getPrimitiveType()) :
-						false;
-	}
-
-	public String getJavaTypeDeclaration() {
-		return this.getJavaType().declaration();
-	}
-
-	public JavaType getJavaType() {
-		DataType dataType = this.dtpColumn.getDataType();
-		return (dataType instanceof PredefinedDataType) ?
-			convertToJPAJavaType(this.getJavaType((PredefinedDataType) dataType)) :
-			DEFAULT_JAVA_TYPE;
-	}
-
-	public String getPrimaryKeyJavaTypeDeclaration() {
-		return this.getPrimaryKeyJavaType().declaration();
-	}
-
-	public JavaType getPrimaryKeyJavaType() {
-		return convertToJPAPrimaryKeyJavaType(this.getJavaType());
-	}
-
-	private JavaType getJavaType(PredefinedDataType dataType) {
-		// this is just a bit hacky: moving from a type declaration to a class name to a type declaration...
-		String dtpJavaClassName = this.resolveDefinition(dataType).getJavaClassName();
-		return new SimpleJavaType(ReflectionTools.getClassNameForTypeDeclaration(dtpJavaClassName));
-	}
-
-	private PredefinedDataTypeDefinition resolveDefinition(PredefinedDataType dataType) {
-		return this.getDatabase().getDTPDefinition().getPredefinedDataTypeDefinition(dataType.getName());
-	}
-
-
-	// ********** internal methods **********
-
-	boolean wraps(org.eclipse.datatools.modelbase.sql.tables.Column column) {
-		return this.dtpColumn == column;
-	}
-
-	@Override
-	void clear() {
-		// no state to clear
-	}
-
-
-	// ********** static methods **********
-
-	/**
-	 * The JDBC spec says JDBC drivers should be able to map BLOBs and CLOBs
-	 * directly, but the JPA spec does not allow them.
-	 */
-	private static JavaType convertToJPAJavaType(JavaType javaType) {
-		if (javaType.equals(BLOB_JAVA_TYPE)) {
-			return BYTE_ARRAY_JAVA_TYPE;
-		}
-		if (javaType.equals(CLOB_JAVA_TYPE)) {
-			return STRING_JAVA_TYPE;
-		}
-		return javaType;
-	}
-
-	/**
-	 * The JPA spec [2.1.4] says only the following types are allowed in
-	 * primary key fields:<ul>
-	 *     <li>[variable] primitives
-	 *     <li>[variable] primitive wrappers
-	 *     <li>{@link java.lang.String}
-	 *     <li>{@link java.util.Date}
-	 *     <li>{@link java.sql.Date}
-	 * </ul>
-	 */
-	private static JavaType convertToJPAPrimaryKeyJavaType(JavaType javaType) {
-		if (javaType.isVariablePrimitive()
-				|| javaType.isVariablePrimitiveWrapper()
-				|| javaType.equals(STRING_JAVA_TYPE)
-				|| javaType.equals(UTIL_DATE_JAVA_TYPE)
-				|| javaType.equals(SQL_DATE_JAVA_TYPE)) {
-			return javaType;
-		}
-		if (javaType.equals(BIG_DECIMAL_JAVA_TYPE)) {
-			return LONG_JAVA_TYPE;  // ??
-		}
-		if (javaType.equals(SQL_TIME_JAVA_TYPE)) {
-			return UTIL_DATE_JAVA_TYPE;  // ???
-		}
-		if (javaType.equals(SQL_TIMESTAMP_JAVA_TYPE)) {
-			return UTIL_DATE_JAVA_TYPE;  // ???
-		}
-		// all the other typical types are pretty much un-mappable - return String(?)
-		return STRING_JAVA_TYPE;
-	}
-
-	private static boolean primitiveTypeIsLob(PrimitiveType primitiveType) {
-		return (primitiveType == PrimitiveType.BINARY_LARGE_OBJECT_LITERAL)
-				|| (primitiveType == PrimitiveType.CHARACTER_LARGE_OBJECT_LITERAL)
-				|| (primitiveType == PrimitiveType.NATIONAL_CHARACTER_LARGE_OBJECT_LITERAL);
-	}
-
-
-	// ***** some constants used when converting the column to a Java attribute
-	// TODO Object is the default?
-	private static final JavaType DEFAULT_JAVA_TYPE = new SimpleJavaType(java.lang.Object.class);
-
-	private static final JavaType BLOB_JAVA_TYPE = new SimpleJavaType(java.sql.Blob.class);
-	private static final JavaType BYTE_ARRAY_JAVA_TYPE = new SimpleJavaType(byte[].class);
-
-	private static final JavaType CLOB_JAVA_TYPE = new SimpleJavaType(java.sql.Clob.class);
-	private static final JavaType STRING_JAVA_TYPE = new SimpleJavaType(java.lang.String.class);
-
-	private static final JavaType UTIL_DATE_JAVA_TYPE = new SimpleJavaType(java.util.Date.class);
-	private static final JavaType SQL_DATE_JAVA_TYPE = new SimpleJavaType(java.sql.Date.class);
-	private static final JavaType SQL_TIME_JAVA_TYPE = new SimpleJavaType(java.sql.Time.class);
-	private static final JavaType SQL_TIMESTAMP_JAVA_TYPE = new SimpleJavaType(java.sql.Timestamp.class);
-
-	private static final JavaType BIG_DECIMAL_JAVA_TYPE = new SimpleJavaType(java.math.BigDecimal.class);
-	private static final JavaType LONG_JAVA_TYPE = new SimpleJavaType(long.class);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionProfileFactory.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionProfileFactory.java
deleted file mode 100644
index a543bd5..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionProfileFactory.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import org.eclipse.datatools.connectivity.IConnectionProfile;
-import org.eclipse.datatools.connectivity.IProfileListener1;
-import org.eclipse.datatools.connectivity.ProfileManager;
-import org.eclipse.jpt.db.ConnectionProfile;
-import org.eclipse.jpt.db.ConnectionProfileFactory;
-import org.eclipse.jpt.db.ConnectionProfileListener;
-import org.eclipse.jpt.db.DatabaseIdentifierAdapter;
-import org.eclipse.jpt.utility.internal.ListenerList;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
-
-/**
- * Wrap the DTP ProfileManager in yet another singleton.
- */
-public final class DTPConnectionProfileFactory
-	implements ConnectionProfileFactory
-{
-	private ProfileManager dtpProfileManager;
-
-	private LocalProfileListener profileListener;
-
-
-	// ********** singleton **********
-
-	private static final DTPConnectionProfileFactory INSTANCE = new DTPConnectionProfileFactory();
-
-	public static DTPConnectionProfileFactory instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * 'private' to ensure singleton
-	 */
-	private DTPConnectionProfileFactory() {
-		super();
-	}
-
-
-	// ********** lifecycle **********
-
-	/**
-	 * called by plug-in
-	 */
-	public synchronized void start() {
-		this.dtpProfileManager = ProfileManager.getInstance();
-		this.profileListener = new LocalProfileListener();
-		this.dtpProfileManager.addProfileListener(this.profileListener);
-	}
-
-	/**
-	 * called by plug-in
-	 */
-	public synchronized void stop() {
-		this.dtpProfileManager.removeProfileListener(this.profileListener);
-		this.profileListener = null;
-		this.dtpProfileManager = null;
-	}
-
-
-	// ********** connection profiles **********
-
-	public synchronized ConnectionProfile buildConnectionProfile(String name, DatabaseIdentifierAdapter adapter) {
-		for (IConnectionProfile dtpProfile : this.dtpProfileManager.getProfiles()) {
-			if (dtpProfile.getName().equals(name)) {
-				return new DTPConnectionProfileWrapper(dtpProfile, adapter);
-			}
-		}
-		return null;
-	}
-
-	public ConnectionProfile buildConnectionProfile(String name) {
-		return this.buildConnectionProfile(name, DatabaseIdentifierAdapter.Default.instance());
-	}
-
-	public Iterable<String> getConnectionProfileNames() {
-		return new TransformationIterable<IConnectionProfile, String>(this.getDTPConnectionProfiles()) {
-			@Override
-			protected String transform(IConnectionProfile dtpProfile) {
-				 return dtpProfile.getName();
-			}
-		};
-	}
-
-	private synchronized Iterable<IConnectionProfile> getDTPConnectionProfiles() {
-		return new ArrayIterable<IConnectionProfile>(this.dtpProfileManager.getProfiles());
-	}
-
-
-	// ********** listeners **********
-
-	public void addConnectionProfileListener(ConnectionProfileListener listener) {
-		this.profileListener.addConnectionProfileListener(listener);
-	}
-
-	public void removeConnectionProfileListener(ConnectionProfileListener listener) {
-		this.profileListener.removeConnectionProfileListener(listener);
-	}
-
-
-	// ********** listener **********
-
-	/**
-	 * Forward events to the factory's listeners.
-	 */
-	private static class LocalProfileListener implements IProfileListener1 {
-		private ListenerList<ConnectionProfileListener> listenerList = new ListenerList<ConnectionProfileListener>(ConnectionProfileListener.class);
-
-		LocalProfileListener() {
-			super();
-		}
-
-		void addConnectionProfileListener(ConnectionProfileListener listener) {
-			this.listenerList.add(listener);
-		}
-
-		void removeConnectionProfileListener(ConnectionProfileListener listener) {
-			this.listenerList.remove(listener);
-		}
-
-		// ********** IProfileListener implementation **********
-
-		public void profileAdded(IConnectionProfile dtpProfile) {
-			String name = dtpProfile.getName();
-			for (ConnectionProfileListener listener : this.listenerList.getListeners()) {
-				listener.connectionProfileAdded(name);
-			}
-		}
-
-		public void profileChanged(IConnectionProfile dtpProfile, String oldName, String oldDescription, Boolean oldAutoConnect) {
-			String newName = dtpProfile.getName();
-			if ( ! newName.equals(oldName)) {
-				for (ConnectionProfileListener listener : this.listenerList.getListeners()) {
-					listener.connectionProfileRenamed(oldName, newName);
-				}
-			}
-		}
-
-		public void profileChanged(IConnectionProfile dtpProfile) {
-			// this method shouldn't be called on IProfileListener1
-			throw new UnsupportedOperationException();
-		}
-
-		public void profileDeleted(IConnectionProfile dtpProfile) {
-			String name = dtpProfile.getName();
-			for (ConnectionProfileListener listener : this.listenerList.getListeners()) {
-				listener.connectionProfileRemoved(name);
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionProfileWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionProfileWrapper.java
deleted file mode 100644
index 49c6151..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionProfileWrapper.java
+++ /dev/null
@@ -1,574 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.datatools.connectivity.ConnectEvent;
-import org.eclipse.datatools.connectivity.IConnectionProfile;
-import org.eclipse.datatools.connectivity.IManagedConnection;
-import org.eclipse.datatools.connectivity.IManagedConnectionOfflineListener;
-import org.eclipse.datatools.connectivity.drivers.DriverManager;
-import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
-import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo;
-import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
-import org.eclipse.datatools.sqltools.core.profile.ProfileUtil;
-import org.eclipse.jpt.db.ConnectionListener;
-import org.eclipse.jpt.db.ConnectionProfile;
-import org.eclipse.jpt.db.DatabaseIdentifierAdapter;
-import org.eclipse.jpt.utility.internal.ListenerList;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- *  Wrap a DTP ConnectionProfile
- */
-final class DTPConnectionProfileWrapper
-	implements DTPDatabaseObject, ConnectionProfile
-{
-	/** the wrapped DTP connection profile */
-	private final IConnectionProfile dtpConnectionProfile;
-
-	/** adapter supplied by the client (determines identifier delimiters, etc.) */
-	private final DatabaseIdentifierAdapter identifierAdapter;
-
-	/** callback passed to the identifier adapter */
-	private final DatabaseIdentifierAdapter.DefaultCallback identifierAdapterCallback;
-
-	/** the DTP managed connection we listen to */
-	private final IManagedConnection dtpManagedConnection;
-
-	/**
-	 * forward events from the DTP managed connection above;
-	 * we listen and propagate events iff we have listeners ourselves
-	 */
-	private final LocalConnectionListener connectionListener;
-
-	/** lazy-initialized, and deleted at disconnect */
-	private DTPDatabaseWrapper database;
-
-
-	// ********** constants **********
-
-	private static final String LIVE_DTP_CONNECTION_TYPE = "java.sql.Connection";  //$NON-NLS-1$
-
-	private static final String OFFLINE_DTP_CONNECTION_TYPE = ConnectionInfo.class.getName();
-
-	private static final String DATABASE_PRODUCT_PROP_ID = "org.eclipse.datatools.connectivity.server.version";  //$NON-NLS-1$
-
-
-	// ********** constructor **********
-
-	DTPConnectionProfileWrapper(IConnectionProfile dtpConnectionProfile, DatabaseIdentifierAdapter adapter) {
-		super();
-		this.dtpConnectionProfile = dtpConnectionProfile;
-		this.identifierAdapter = adapter;
-		this.identifierAdapterCallback = new IdentifierAdapterCallback();
-		this.dtpManagedConnection = this.buildDTPManagedConnection();
-		this.connectionListener = new LocalConnectionListener();
-		// don't listen to the managed connection yet
-	}
-
-	private IManagedConnection buildDTPManagedConnection() {
-		String connectionType = this.dtpConnectionProfile.supportsWorkOfflineMode() ?
-				OFFLINE_DTP_CONNECTION_TYPE : LIVE_DTP_CONNECTION_TYPE;
-		return this.dtpConnectionProfile.getManagedConnection(connectionType);
-	}
-
-
-	// ********** DatabaseObject implementation **********
-
-	public String getName() {
-		return this.dtpConnectionProfile.getName();
-	}
-
-	public String getIdentifier(String javaIdentifier) {
-		// connection profiles do not have "identifiers"
-		throw new UnsupportedOperationException();
-	}
-
-	public String getIdentifier() {
-		// connection profiles do not have "identifiers"
-		throw new UnsupportedOperationException();
-	}
-
-
-	// ********** DTPDatabaseObject implementation **********
-
-	public DTPConnectionProfileWrapper getConnectionProfile() {
-		return this;
-	}
-
-	public synchronized DTPDatabaseWrapper getDatabase() {
-		if (this.database == null) {
-			this.database = this.buildDatabase();
-		}
-		return this.database;
-	}
-
-
-	// ********** ConnectionProfile implementation **********
-
-	// ***** properties
-	public String getProviderID() {
-		return this.dtpConnectionProfile.getProviderId();
-	}
-
-	public String getInstanceID() {
-		return this.dtpConnectionProfile.getInstanceID();
-	}
-
-	public String getDatabaseName() {
-		return this.getProperty(IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID);
-	}
-
-	public String getDatabaseProduct() {
-		return this.getProperty(DATABASE_PRODUCT_PROP_ID);
-	}
-
-	public String getDatabaseVendor() {
-		return this.getProperty(IJDBCDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID);
-	}
-
-	public String getDatabaseVersion() {
-		return this.getProperty(IJDBCDriverDefinitionConstants.DATABASE_VERSION_PROP_ID);
-	}
-
-	public String getDriverClassName() {
-		return this.getProperty(IJDBCDriverDefinitionConstants.DRIVER_CLASS_PROP_ID);
-	}
-
-	public String getURL() {
-		return this.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID);
-	}
-
-	/**
-	 * Returns the user name.
-	 * Allows user name composed by more than one word.
-	 * If the user name contains a keyword, it returns the first word only.
-	 */
-	public String getUserName() {
-		String userName = this.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
-		userName = userName.trim(); 
-		String[] names =  userName.split("\\s+");	//$NON-NLS-1$
-		if(names.length == 3) { // 208946 handle username like "sys as sysdba" on Oracle
-		    if(this.nameIsKeyword(names[1])) {
-		    	return names[0];
-		    }
-		}
-		return userName;
-	}
-
-	public String getUserPassword() {
-		return this.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
-	}
-
-	public String getDriverDefinitionID() {
-		return this.getProperty(DRIVER_DEFINITION_PROP_ID);
-	}
-
-	public String getDriverJarList() {
-		return DriverManager.getInstance().getDriverInstanceByID(this.getDriverDefinitionID()).getJarList();
-	}
-
-	public String getDriverName() {
-		return DriverManager.getInstance().getDriverInstanceByID(this.getDriverDefinitionID()).getName();
-	}
-
-	// ***** connection
-	public boolean isActive() {
-		return this.isConnected() || this.isWorkingOffline();
-	}
-
-	public boolean isInactive() {
-		return ! this.isActive();
-	}
-
-	public boolean isConnected() {
-		return this.dtpManagedConnection.isConnected()
-				&& ! this.dtpManagedConnection.isWorkingOffline();
-	}
-
-	public boolean isDisconnected() {
-		return ! this.isConnected();
-	}
-
-	public void connect() {
-		if (this.isDisconnected()) {
-			this.checkStatus(this.dtpConnectionProfile.connect());
-		}
-	}
-	
-	public void disconnect() {
-		this.checkStatus(this.dtpConnectionProfile.disconnect());
-	}
-
-	// ***** off-line support
-	public boolean isWorkingOffline() {
-		return this.dtpManagedConnection.isWorkingOffline();
-	}
-
-	public boolean supportsWorkOfflineMode() {
-		return this.dtpConnectionProfile.supportsWorkOfflineMode();
-	}
-
-	public IStatus saveWorkOfflineData() {
-		return this.dtpConnectionProfile.saveWorkOfflineData();
-	}
-	
-	public boolean canWorkOffline() {
-		return this.dtpConnectionProfile.canWorkOffline();
-	}
-
-	public IStatus workOffline() {
-		return this.dtpConnectionProfile.workOffline();
-	}
-	
-	// ***** listeners
-	public synchronized void addConnectionListener(ConnectionListener listener) {
-		if (this.hasNoListeners()) {  // first listener added
-			this.startListening();
-		}
-		this.connectionListener.addConnectionListener(listener);
-	}
-
-	private void startListening() {
-		this.dtpManagedConnection.addConnectionListener(this.connectionListener);
-		if (this.database != null) {  // don't trigger database creation
-			if (this.isConnected()) {  // DTP does not change when off-line
-				this.database.startListening();
-			}
-		}
-	}
-
-	public synchronized void removeConnectionListener(ConnectionListener listener) {
-		this.connectionListener.removeConnectionListener(listener);
-		if (this.hasNoListeners()) {  // last listener removed
-			this.stopListening();
-		}
-	}
-
-	private void stopListening() {
-		if (this.database != null) {  // don't trigger database creation
-			if (this.isConnected()) {  // DTP does not change when off-line
-				this.database.stopListening();
-			}
-		}
-		this.dtpManagedConnection.removeConnectionListener(this.connectionListener);
-	}
-
-	boolean hasNoListeners() {
-		return this.connectionListener.hasNoListeners();
-	}
-
-	boolean hasAnyListeners() {
-		return this.connectionListener.hasAnyListeners();
-	}
-
-
-	// ********** internal methods **********
-
-	private void checkStatus(IStatus status) {
-		if (status.isOK()) {
-			return;
-		}
-		if (status.isMultiStatus()) {
-			for (IStatus child : status.getChildren()) {
-				this.checkStatus(child);  // recurse, looking for the first error
-			}
-		}
-		throw new RuntimeException(status.getMessage(), status.getException());
-	}
-
-	private DTPDatabaseWrapper buildDatabase() {
-		if (this.isInactive()) {
-			return null;
-		}
-
-		if (this.isWorkingOffline()) {
-			ConnectionInfo connectionInfo = (ConnectionInfo) this.dtpManagedConnection.getConnection().getRawConnection();
-			return new DTPDatabaseWrapper(this, connectionInfo.getSharedDatabase());
-		}
-
-		// TODO see DTP bug 202306
-		// pass connect=true in to ProfileUtil.getDatabase()
-		// there is a bug mentioned in a comment: 
-		//     "during the profile connected event notification, 
-		//     IManagedConnection is connected while IConnectionProfile is not"
-		// so, some hackery here to handle hackery there
-		return new DTPDatabaseWrapper(this, ProfileUtil.getDatabase(new DatabaseIdentifier(this.getName(), this.getDatabaseName()), true));
-	}
-
-	synchronized void clearDatabase() {
-		if (this.database != null) {
-			if (this.isConnected()) {  // DTP does not change when off-line
-				this.database.stopListening();
-			}
-			this.database = null;
-		}
-	}
-
-	/**
-	 * This is called whenever we need to convert an identifier to a name
-	 * (e.g. {@link org.eclipse.jpt.db.Table#getColumnForIdentifier(String)}).
-	 * We channel all the calls to here and then we delegate to the
-	 * client-supplied "database identifier adapter".
-	 */
-	String convertIdentifierToName(String identifier) {
-		return this.identifierAdapter.convertIdentifierToName(identifier, this.identifierAdapterCallback);
-	}
-
-	/**
-	 * The default "database identifier adapter" calls back to here so we can delegate to
-	 * the database, which contains all the information necessary to properly
-	 * convert identifiers.
-	 */
-	String convertIdentifierToName_(String identifier) {
-		// the database should not be null here - call its internal method
-		return this.database.convertIdentifierToName_(identifier);
-	}
-
-	/**
-	 * This is called whenever we need to convert a name to an identifier
-	 * (e.g. {@link org.eclipse.jpt.db.Table#getColumnForIdentifier(String)}).
-	 * We channel all the calls to here and then we delegate to the
-	 * client-supplied "database identifier adapter".
-	 */
-	String convertNameToIdentifier(String name) {
-		return this.identifierAdapter.convertNameToIdentifier(name, this.identifierAdapterCallback);
-	}
-
-	/**
-	 * The default "database identifier adapter" calls back to here so we can delegate to
-	 * the database, which contains all the information necessary to properly
-	 * convert names.
-	 */
-	String convertNameToIdentifier_(String name) {
-		// the database should not be null here - call its internal method
-		return this.database.convertNameToIdentifier_(name);
-	}
-
-	void databaseChanged(DTPDatabaseWrapper db) {
-		this.connectionListener.databaseChanged(db);
-	}
-
-	void catalogChanged(DTPCatalogWrapper catalog) {
-		this.connectionListener.catalogChanged(catalog);
-	}
-
-	void schemaChanged(DTPSchemaWrapper schema) {
-		this.connectionListener.schemaChanged(schema);
-	}
-
-	void sequenceChanged(DTPSequenceWrapper sequence) {
-		this.connectionListener.sequenceChanged(sequence);
-	}
-
-	void tableChanged(DTPTableWrapper table) {
-		this.connectionListener.tableChanged(table);
-	}
-
-	void columnChanged(DTPColumnWrapper column) {
-		this.connectionListener.columnChanged(column);
-	}
-
-	void foreignKeyChanged(DTPForeignKeyWrapper foreignKey) {
-		this.connectionListener.foreignKeyChanged(foreignKey);
-	}
-
-	private String getProperty(String propertyName) {
-		return this.dtpConnectionProfile.getBaseProperties().getProperty(propertyName);
-	}
-
-	private boolean nameIsKeyword(String name) {
-		return name.equalsIgnoreCase("as");  //$NON-NLS-1$
-	}
-
-
-	// ********** overrides **********
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.getName());
-	}
-
-
-	// ********** DTP connection listener **********
-
-	/**
-	 * This listener translates and forwards {@link org.eclipse.datatools.connectivity.IManagedConnectionListener} and
-	 * {@link IManagedConnectionOfflineListener} events to {@link ConnectionListener}s.
-	 */
-	class LocalConnectionListener implements IManagedConnectionOfflineListener {
-		private ListenerList<ConnectionListener> listenerList = new ListenerList<ConnectionListener>(ConnectionListener.class);
-
-		LocalConnectionListener() {
-			super();
-		}
-
-		void addConnectionListener(ConnectionListener listener) {
-			this.listenerList.add(listener);
-		}
-
-		void removeConnectionListener(ConnectionListener listener) {
-			this.listenerList.remove(listener);
-		}
-
-		boolean hasNoListeners() {
-			return this.listenerList.isEmpty();
-		}
-
-		boolean hasAnyListeners() {
-			return ! this.listenerList.isEmpty();
-		}
-
-
-		// ********** IManagedConnectionListener implementation **********
-
-		// off-line or inactive => live
-		public void opened(ConnectEvent event) {
-			// do not build the database here - it is built on-demand
-			// forward event to listeners
-			for (ConnectionListener listener : this.listenerList.getListeners()) {
-				listener.opened(DTPConnectionProfileWrapper.this);
-			}
-		}
-
-		/**
-		 * This method is never called from the base DTP code.
-		 * Perhaps DTP extenders call it....
-		 * @see ManagedConnection#fireModifiedEvent(Object)
-		 *     which is never called...
-		 */
-		public void modified(ConnectEvent event) {
-			// forward event to listeners
-			for (ConnectionListener listener : this.listenerList.getListeners()) {
-				listener.modified(DTPConnectionProfileWrapper.this);
-			}
-		}
-
-		public boolean okToClose(ConnectEvent event) {
-			// forward event to listeners
-			for (ConnectionListener listener : this.listenerList.getListeners()) {
-				if ( ! listener.okToClose(DTPConnectionProfileWrapper.this)) {
-					return false;
-				}
-			}
-			return true;
-		}
-
-		public void aboutToClose(ConnectEvent event) {
-			// forward event to listeners
-			for (ConnectionListener listener : this.listenerList.getListeners()) {
-				listener.aboutToClose(DTPConnectionProfileWrapper.this);
-			}
-		}
-
-		// live or off-line => inactive
-		public void closed(ConnectEvent event) {
-			// clear the database
-			DTPConnectionProfileWrapper.this.clearDatabase();
-			// forward event to listeners
-			for (ConnectionListener listener : this.listenerList.getListeners()) {
-				listener.closed(DTPConnectionProfileWrapper.this);
-			}
-		}
-
-
-		// ********** IManagedConnectionOfflineListener implementation **********
-
-		// live => off-line
-		public boolean okToDetach(ConnectEvent event) {
-			// convert the event to an "ok to close" event;
-			// we are "closing" the live connection
-			return this.okToClose(event);
-		}
-		
-		// live => off-line
-		public void aboutToDetach(ConnectEvent event) {
-			// convert the event to a "close" event;
-			// we are "closing" the live connection
-			this.closed(event);
-		}
-
-		// inactive or live => off-line
-		public void workingOffline(ConnectEvent event) {
-			// convert the event to an "open" event;
-			// we are "opening" the off-line connection
-			this.opened(event);
-		}
-
-		// off-line => live
-		public void aboutToAttach(ConnectEvent event) {
-			// convert the event to an "close" event;
-			// we are "closing" the off-line connection
-			this.closed(event);
-		}
-
-
-		// ********** internal methods **********
-
-		void databaseChanged(DTPDatabaseWrapper db) {
-			for (ConnectionListener listener : this.listenerList.getListeners()) {
-				listener.databaseChanged(DTPConnectionProfileWrapper.this, db);
-			}
-		}
-
-		void catalogChanged(DTPCatalogWrapper catalog) {
-			for (ConnectionListener listener : this.listenerList.getListeners()) {
-				listener.catalogChanged(DTPConnectionProfileWrapper.this, catalog);
-			}
-		}
-
-		void schemaChanged(DTPSchemaWrapper schema) {
-			for (ConnectionListener listener : this.listenerList.getListeners()) {
-				listener.schemaChanged(DTPConnectionProfileWrapper.this, schema);
-			}
-		}
-
-		void sequenceChanged(DTPSequenceWrapper sequence) {
-			for (ConnectionListener listener : this.listenerList.getListeners()) {
-				listener.sequenceChanged(DTPConnectionProfileWrapper.this, sequence);
-			}
-		}
-
-		void tableChanged(DTPTableWrapper table) {
-			for (ConnectionListener listener : this.listenerList.getListeners()) {
-				listener.tableChanged(DTPConnectionProfileWrapper.this, table);
-			}
-		}
-
-		void columnChanged(DTPColumnWrapper column) {
-			for (ConnectionListener listener : this.listenerList.getListeners()) {
-				listener.columnChanged(DTPConnectionProfileWrapper.this, column);
-			}
-		}
-
-		void foreignKeyChanged(DTPForeignKeyWrapper foreignKey) {
-			for (ConnectionListener listener : this.listenerList.getListeners()) {
-				listener.foreignKeyChanged(DTPConnectionProfileWrapper.this, foreignKey);
-			}
-		}
-
-	}
-
-
-	// ********** default DatabaseFinder **********
-
-	class IdentifierAdapterCallback implements DatabaseIdentifierAdapter.DefaultCallback {
-		public String convertIdentifierToName(String identifier) {
-			// call back to the internal method
-			return DTPConnectionProfileWrapper.this.convertIdentifierToName_(identifier);
-		}
-		public String convertNameToIdentifier(String name) {
-			// call back to the internal method
-			return DTPConnectionProfileWrapper.this.convertNameToIdentifier_(name);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseObject.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseObject.java
deleted file mode 100644
index c976fe4..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseObject.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import org.eclipse.jpt.db.DatabaseObject;
-
-/**
- * DTP database object
- */
-public interface DTPDatabaseObject extends DatabaseObject {
-
-	/**
-	 * covariant override
-	 */
-	DTPConnectionProfileWrapper getConnectionProfile();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseObjectWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseObjectWrapper.java
deleted file mode 100644
index 37c3cb7..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseObjectWrapper.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener;
-import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
-import org.eclipse.jpt.db.DatabaseObject;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- *  DTP Catalog Object Wrapper base class
- */
-abstract class DTPDatabaseObjectWrapper
-	implements DTPDatabaseObject
-{
-	/** we need a way to get to the connection profile */
-	private final DTPDatabaseObject parent;
-
-	/** listen for the "catalog object" being refreshed */
-	private final ICatalogObjectListener catalogObjectListener;
-
-	/** listen for this DTP catalog object to refresh */
-	final ICatalogObject catalogObject;
-
-
-	// ********** construction/initialization **********
-
-	DTPDatabaseObjectWrapper(DTPDatabaseObject parent, Object dtpObject) {
-		super();
-		this.parent = parent;
-		if (this.getConnectionProfile().isConnected()) {
-			// we only listen to "live" connections (as opposed to "off-line" connections);
-			// and the model is rebuilt when the connection connects or disconnects
-			this.catalogObject = (ICatalogObject) dtpObject;
-			this.catalogObjectListener = this.buildCatalogObjectListener();
-			if (this.getConnectionProfile().hasAnyListeners()) {
-				this.startListening();
-			}
-		} else {
-			this.catalogObject = null;
-			this.catalogObjectListener = null;
-		}
-	}
-
-	private ICatalogObjectListener buildCatalogObjectListener() {
-		return new ICatalogObjectListener() {
-			public void notifyChanged(ICatalogObject dmElement, int eventType) {
-				if (dmElement == DTPDatabaseObjectWrapper.this.catalogObject) {
-					// 'eventType' doesn't seem to be very useful, so drop it
-					DTPDatabaseObjectWrapper.this.catalogObjectChanged();
-				}
-			}
-		};
-	}
-
-	// typically, notify the connection profile something has changed
-	void catalogObjectChanged() {
-		this.clear();
-	}
-
-	/**
-	 * The DTP object has changed, clear the wrapper's state so it will be
-	 * synchronized on-demand.
-	 */
-	abstract void clear();
-
-
-
-	// ********** queries **********
-
-	DTPDatabaseObject getParent() {
-		return this.parent;
-	}
-
-	public DTPConnectionProfileWrapper getConnectionProfile() {
-		return this.parent.getConnectionProfile();
-	}
-
-	public DTPDatabaseWrapper getDatabase() {
-		return this.getConnectionProfile().getDatabase();
-	}
-
-	/**
-	 * Return the database object identified by the specified identifier. If
-	 * the identifier is "delimited" (typically with double-quotes), it will be
-	 * used without any folding. If the name is "regular" (i.e. not delimited),
-	 * it will be folded to the appropriate case (typically uppercase).
-	 * This is called by whenever we need to find a component by identifier
-	 * (e.g. {{@link org.eclipse.jpt.db.Table#getColumnForIdentifier(String)}).
-	 */
-	<T extends DatabaseObject> T selectDatabaseObjectForIdentifier(Iterable<T> databaseObjects, String identifier) {
-		return this.selectDatabaseObjectNamed(databaseObjects, this.convertIdentifierToName(identifier));
-	}
-
-	private String convertIdentifierToName(String identifier) {
-		return this.getConnectionProfile().convertIdentifierToName(identifier);
-	}
-
-	/**
-	 * Convenience method.
-	 */
-	<T extends DatabaseObject> T selectDatabaseObjectNamed(Iterable<T> databaseObjects, String name) {
-		for (T dbObject : databaseObjects) {
-			if (dbObject.getName().equals(name)) {
-				return dbObject;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Examples:<ul>
-	 * <li>Oracle etc.<ul><code>
-	 *     <li>Table(FOO) vs. "Foo" => null
-	 *     <li>Table(BAR) vs. "Foo" => "BAR"
-	 *     <li>Table(Foo) vs. "Foo" => "\"Foo\""
-	 *     <li>Table(Bar) vs. "Foo" => "\"Bar\""
-	 * </code></ul>
-	 * <li>PostgreSQL etc.<ul><code>
-	 *     <li>Table(foo) vs. "Foo" => null
-	 *     <li>Table(bar) vs. "Foo" => "bar"
-	 *     <li>Table(Foo) vs. "Foo" => "\"Foo\""
-	 *     <li>Table(Bar) vs. "Foo" => "\"Bar\""
-	 * </code></ul>
-	 * <li>SQL Server etc.<ul><code>
-	 *     <li>Table(Foo) vs. "Foo" => null
-	 *     <li>Table(foo) vs. "Foo" => "foo"
-	 *     <li>Table(bar) vs. "Foo" => "bar"
-	 *     <li>Table(Bar) vs. "Foo" => "Bar"
-	 * </code></ul>
-	 * </ul>
-	 */
-	public String getIdentifier(String defaultName) {
-		return this.getDatabase().convertNameToIdentifier(this.getName(), defaultName);
-	}
-
-	/**
-	 * Examples:<ul>
-	 * <li>Oracle etc.<ul><code>
-	 *     <li>Table(FOO) => "FOO"
-	 *     <li>Table(Foo) => "\"Foo\""
-	 *     <li>Table(foo) => "\"foo\""
-	 *     <li>Table(foo++) => "\"foo++\""
-	 *     <li>Table(f"o) => "\"f\"\"o\"" (i.e. "f""o")
-	 * </code></ul>
-	 * <li>PostgreSQL etc.<ul><code>
-	 *     <li>Table(FOO) => "\"FOO\""
-	 *     <li>Table(Foo) => "\"Foo\""
-	 *     <li>Table(foo) => "foo"
-	 *     <li>Table(foo++) => "\"foo++\""
-	 *     <li>Table(f"o) => "\"f\"\"o\"" (i.e. "f""o")
-	 * </code></ul>
-	 * <li>SQL Server etc.<ul><code>
-	 *     <li>Table(FOO) => "FOO"
-	 *     <li>Table(Foo) => "Foo"
-	 *     <li>Table(foo) => "foo"
-	 *     <li>Table(foo++) => "\"foo++\""
-	 *     <li>Table(f"o) => "\"f\"\"o\"" (i.e. "f""o")
-	 * </code></ul>
-	 * </ul>
-	 */
-	public String getIdentifier() {
-		return this.convertNameToIdentifier(this.getName());
-	}
-
-	String convertNameToIdentifier(String name) {
-		return this.getConnectionProfile().convertNameToIdentifier(name);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.getName());
-	}
-
-
-	// ********** listening to DTP database object **********
-
-	// this should only be called when the connection profile is "live" and has listeners
-	void startListening() {
-		this.checkListener();
-		RefreshManager.getInstance().AddListener(this.catalogObject, this.catalogObjectListener);
-	}
-
-	// this should only be called when the connection profile is "live" and has no listeners
-	void stopListening() {
-		this.checkListener();
-        RefreshManager.getInstance().removeListener(this.catalogObject, this.catalogObjectListener);
-	}
-
-	private void checkListener() {
-		if (this.catalogObjectListener == null) {
-			throw new IllegalStateException("the catalog listener is null");  //$NON-NLS-1$
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseWrapper.java
deleted file mode 100644
index 7821854..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseWrapper.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
-import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
-import org.eclipse.jpt.db.Catalog;
-import org.eclipse.jpt.db.Database;
-import org.eclipse.jpt.db.DatabaseObject;
-import org.eclipse.jpt.db.internal.vendor.Vendor;
-import org.eclipse.jpt.db.internal.vendor.VendorRepository;
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
-
-/**
- * Wrap a DTP Database.
- * <p>
- * Catalogs vs. Schemata:<br>
- * Typically, if a DTP database does not support "catalogs",
- * o.e.datatools.modelbase.sql.schema.Database#getCatalogs() will return a
- * single catalog without a name (actually, it's an empty string). This catalog
- * will contain all the database's schemata. We try to ignore this catalog and
- * return the schemata from the database directly.
- * <p>
- * Catalog Note 1:<br>
- * As of Jan 2009, the DTP MySQL driver is not consistent with this pattern.
- * A DTP MySQL database has *no* catalogs; it holds a single schema
- * directly, and that schema has the same name as the database. See bug 249013.
- * <p>
- * Catalog Note 2:<br>
- * As of Jan 2009, the PostgreSQL JDBC driver complicates this pattern a bit.
- * Even though PostgreSQL does not support "catalogs", its JDBC driver
- * returns a single catalog that has the same name as the database specified
- * in the JDBC connection URL. The DTP PostgreSQL driver simply replicates this
- * behavior. Unfortunately, this catalog can be unnamed; i.e. its name is an
- * empty string....
- * <p>
- * (Yet Another) Note:<br>
- * We use "name" when dealing with the unmodified name of a database object
- * as supplied by the database itself (i.e. it is not delimited and it is always
- * case-sensitive).
- * We use "identifier" when dealing with a string representation of a database
- * object name (i.e. it may be delimited and, depending on the vendor, it may
- * be case-insensitive).
- */
-final class DTPDatabaseWrapper
-	extends DTPSchemaContainerWrapper
-	implements Database
-{
-	/** the wrapped DTP database */
-	private final org.eclipse.datatools.modelbase.sql.schema.Database dtpDatabase;
-
-	/** vendor-specific behavior */
-	private final Vendor vendor;
-
-	/** lazy-initialized, sorted */
-	private DTPCatalogWrapper[] catalogs;
-
-
-	// ********** constructor **********
-
-	DTPDatabaseWrapper(DTPConnectionProfileWrapper connectionProfile, org.eclipse.datatools.modelbase.sql.schema.Database dtpDatabase) {
-		super(connectionProfile, dtpDatabase);
-		this.dtpDatabase = dtpDatabase;
-		this.vendor = VendorRepository.instance().getVendor(this.getVendorName());
-	}
-
-
-	// ********** DTPWrapper implementation **********
-
-	/* TODO
-	 * We might want to listen to the "virtual" catalog; but that's probably
-	 * not necessary since there is no easy way for the user to refresh it
-	 * (i.e. it is not displayed in the DTP UI).
-	 */
-	@Override
-	synchronized void catalogObjectChanged() {
-		super.catalogObjectChanged();
-		this.getConnectionProfile().databaseChanged(this);
-	}
-
-	@Override
-	public DTPDatabaseWrapper getDatabase() {
-		return this;
-	}
-
-
-	// ********** DTPSchemaContainerWrapper implementation **********
-
-	@Override
-	List<org.eclipse.datatools.modelbase.sql.schema.Schema> getDTPSchemata() {
-		return this.vendor.getSchemas(this.dtpDatabase);
-	}
-
-	@Override
-	DTPSchemaWrapper getSchema(org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema) {
-		return this.getSchema_(dtpSchema);
-	}
-
-	DTPSchemaWrapper getSchemaFromCatalogs(org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema) {
-		return this.getCatalog(dtpSchema.getCatalog()).getSchema_(dtpSchema);
-	}
-
-	/**
-	 * this is only called from a schema when the database is the schema
-	 * container, so we know we don't have any catalogs
-	 */
-	@Override
-	DTPTableWrapper getTable(org.eclipse.datatools.modelbase.sql.tables.Table dtpTable) {
-		return this.getTable_(dtpTable);
-	}
-
-	/**
-	 * this is only called from a catalog, so we know we have catalogs;
-	 * i.e. the search has to descend through catalogs, then to schemata
-	 */
-	DTPTableWrapper getTableFromCatalogs(org.eclipse.datatools.modelbase.sql.tables.Table dtpTable) {
-		return this.getCatalog(dtpTable.getSchema().getCatalog()).getTable_(dtpTable);
-	}
-
-	/**
-	 * this is only called from a schema when the database is the schema
-	 * container, so we know we don't have any catalogs
-	 */
-	@Override
-	DTPColumnWrapper getColumn(org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		return this.getColumn_(dtpColumn);
-	}
-
-	/**
-	 * this is only called from a catalog, so we know we have catalogs;
-	 * i.e. the search has to descend through catalogs, then to schemata
-	 */
-	DTPColumnWrapper getColumnFromCatalogs(org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		return this.getCatalog(dtpColumn.getTable().getSchema().getCatalog()).getColumn_(dtpColumn);
-	}
-
-
-	// ********** DatabaseObject implementation **********
-
-	public String getName() {
-		return this.dtpDatabase.getName();
-	}
-
-
-	// ********** Database implementation **********
-
-	public String getVendorName() {
-		return this.dtpDatabase.getVendor();
-	}
-
-	public String getVersion() {
-		return this.dtpDatabase.getVersion();
-	}
-
-	// override to make method public since it's in the Database interface
-	@Override
-	public <T extends DatabaseObject> T selectDatabaseObjectForIdentifier(Iterable<T> databaseObjects, String identifier) {
-		return super.selectDatabaseObjectForIdentifier(databaseObjects, identifier);
-	}
-
-	// ***** catalogs
-
-	public boolean supportsCatalogs() {
-		return this.vendor.supportsCatalogs(this.dtpDatabase);
-	}
-
-	public Iterable<Catalog> getCatalogs() {
-		return new ArrayIterable<Catalog>(this.getCatalogArray());
-	}
-
-	private Iterable<DTPCatalogWrapper> getCatalogWrappers() {
-		return new ArrayIterable<DTPCatalogWrapper>(this.getCatalogArray());
-	}
-
-	private synchronized DTPCatalogWrapper[] getCatalogArray() {
-		if (this.catalogs == null) {
-			this.catalogs = this.buildCatalogArray();
-		}
-		return this.catalogs;
-	}
-
-	private DTPCatalogWrapper[] buildCatalogArray() {
-		List<org.eclipse.datatools.modelbase.sql.schema.Catalog> dtpCatalogs = this.getDTPCatalogs();
-		DTPCatalogWrapper[] result = new DTPCatalogWrapper[dtpCatalogs.size()];
-		for (int i = result.length; i-- > 0;) {
-			result[i] = new DTPCatalogWrapper(this, dtpCatalogs.get(i));
-		}
-		return ArrayTools.sort(result, DEFAULT_COMPARATOR);
-	}
-
-	private List<org.eclipse.datatools.modelbase.sql.schema.Catalog> getDTPCatalogs() {
-		return this.vendor.getCatalogs(this.dtpDatabase);
-	}
-
-	public int getCatalogsSize() {
-		return this.getCatalogArray().length;
-	}
-
-	/**
-	 * return the catalog for the specified DTP catalog
-	 */
-	DTPCatalogWrapper getCatalog(org.eclipse.datatools.modelbase.sql.schema.Catalog dtpCatalog) {
-		for (DTPCatalogWrapper catalog : this.getCatalogArray()) {
-			if (catalog.wraps(dtpCatalog)) {
-				return catalog;
-			}
-		}
-		throw new IllegalArgumentException("invalid DTP catalog: " + dtpCatalog);  //$NON-NLS-1$
-	}
-
-	public Iterable<String> getSortedCatalogNames() {
-		// the catalogs are already sorted
-		return new TransformationIterable<DatabaseObject, String>(this.getCatalogWrappers(), NAME_TRANSFORMER);
-	}
-
-	public DTPCatalogWrapper getCatalogNamed(String name) {
-		return this.selectDatabaseObjectNamed(this.getCatalogWrappers(), name);
-	}
-
-	public Iterable<String> getSortedCatalogIdentifiers() {
-		// the catalogs are already sorted
-		return new TransformationIterable<DatabaseObject, String>(this.getCatalogWrappers(), IDENTIFIER_TRANSFORMER);
-	}
-
-	public DTPCatalogWrapper getCatalogForIdentifier(String identifier) {
-		return this.selectDatabaseObjectForIdentifier(this.getCatalogWrappers(), identifier);
-	}
-
-	public synchronized DTPCatalogWrapper getDefaultCatalog() {
-		return this.getCatalogForNames(this.getDefaultCatalogNames());
-	}
-
-	private Iterable<String> getDefaultCatalogNames() {
-		return this.vendor.getDefaultCatalogNames(this.dtpDatabase, this.getConnectionProfile().getUserName());
-	}
-
-	/**
-	 * Return the first catalog found.
-	 */
-	private DTPCatalogWrapper getCatalogForNames(Iterable<String> names) {
-		for (String name : names) {
-			DTPCatalogWrapper catalog = this.getCatalogNamed(name);
-			if (catalog != null) {
-				return catalog;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * If we find a default catalog, return its identifier;
-	 * otherwise, return the last name on the list of default names.
-	 * (Some databases have multiple possible default names.)
-	 * Return null if the database does not support catalogs.
-	 */
-	public synchronized String getDefaultCatalogIdentifier() {
-		Iterable<String> names = this.getDefaultCatalogNames();
-		DTPCatalogWrapper catalog = this.getCatalogForNames(names);
-		if (catalog != null) {
-			return catalog.getIdentifier();
-		}
-		Iterator<String> stream = names.iterator();
-		return stream.hasNext() ? this.convertNameToIdentifier(CollectionTools.last(stream)) : null;
-	}
-
-	// ***** schemata
-
-	Iterable<String> getDefaultSchemaNames() {
-		return this.vendor.getDefaultSchemaNames(this.dtpDatabase, this.getConnectionProfile().getUserName());
-	}
-
-
-	// ********** names vs. identifiers **********
-
-	// override to make method public since it's in the Database interface
-	@Override
-	public String convertNameToIdentifier(String name) {
-		return super.convertNameToIdentifier(name);
-	}
-
-	/**
-	 * Delegate to the vendor.
-	 */
-	String convertNameToIdentifier_(String name) {
-		return this.vendor.convertNameToIdentifier(name);
-	}
-
-	/**
-	 * Delegate to the vendor.
-	 */
-	String convertIdentifierToName_(String identifier) {
-		return this.vendor.convertIdentifierToName(identifier);
-	}
-
-	/**
-	 * Convert the specified name to an identifier. Return null if the resulting
-	 * identifier matches the specified default name.
-	 * <p>
-	 * This is used by the old entity generation code to determine whether
-	 * a generated annotation must explicitly identify a database object
-	 * (e.g. a table) or the specified default adequately identifies the
-	 * specified database object (taking into consideration case-sensitivity
-	 * and special characters).
-	 */
-	// TODO add to database identifier adapter? currently not used...
-	String convertNameToIdentifier(String name, String defaultName) {
-		return this.vendor.convertNameToIdentifier(name, defaultName);
-	}
-
-
-	// ********** internal methods **********
-
-	DatabaseDefinition getDTPDefinition() {
-		return RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.dtpDatabase);
-	}
-
-
-	// ********** listening **********
-
-	@Override
-	synchronized void startListening() {
-		if (this.catalogs != null) {
-			this.startCatalogs();
-		}
-		super.startListening();
-	}
-
-	private void startCatalogs() {
-		for (DTPCatalogWrapper catalog : this.catalogs) {
-			catalog.startListening();
-		}
-	}
-
-	@Override
-	synchronized void stopListening() {
-		if (this.catalogs != null) {
-			this.stopCatalogs();
-		}
-		super.stopListening();
-	}
-
-	private void stopCatalogs() {
-		for (DTPCatalogWrapper catalog : this.catalogs) {
-			catalog.stopListening();
-		}
-	}
-
-
-	// ********** clear **********
-
-	@Override
-	synchronized void clear() {
-		if (this.catalogs != null) {
-			this.clearCatalogs();
-		}
-		super.clear();
-	}
-
-	private void clearCatalogs() {
-		this.stopCatalogs();
-		for (DTPCatalogWrapper catalog : this.catalogs) {
-			catalog.clear();
-		}
-		this.catalogs = null;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPForeignKeyWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPForeignKeyWrapper.java
deleted file mode 100644
index 633a0f4..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPForeignKeyWrapper.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.ForeignKey;
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.internal.iterables.FilteringIterable;
-import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
-
-/**
- *  Wrap a DTP ForeignKey
- */
-final class DTPForeignKeyWrapper
-	extends DTPDatabaseObjectWrapper
-	implements ForeignKey
-{
-	/** the wrapped DTP foreign key */
-	private final org.eclipse.datatools.modelbase.sql.constraints.ForeignKey dtpForeignKey;
-
-	/** lazy-initialized */
-	private DTPTableWrapper referencedTable;
-
-	/** lazy-initialized */
-	private LocalColumnPair[] columnPairs;
-
-	/** lazy-initialized - but it can be 'null' so we use a flag */
-	private String defaultAttributeName;
-	private boolean defaultAttributeNameCalculated = false;
-
-
-	// ********** constructor **********
-
-	DTPForeignKeyWrapper(DTPTableWrapper baseTable, org.eclipse.datatools.modelbase.sql.constraints.ForeignKey dtpForeignKey) {
-		super(baseTable, dtpForeignKey);
-		this.dtpForeignKey = dtpForeignKey;
-	}
-
-
-	// ********** DTPWrapper implementation **********
-
-	@Override
-	synchronized void catalogObjectChanged() {
-		super.catalogObjectChanged();
-		this.getConnectionProfile().foreignKeyChanged(this);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.getName() + ": " + Arrays.asList(this.getColumnPairArray()));  //$NON-NLS-1$
-	}
-
-
-	// ********** ForeignKey implementation **********
-
-	public String getName() {
-		return this.dtpForeignKey.getName();
-	}
-
-	public DTPTableWrapper getBaseTable() {
-		return (DTPTableWrapper) this.getParent();
-	}
-
-	public synchronized DTPTableWrapper getReferencedTable() {
-		if (this.referencedTable == null) {
-			this.referencedTable = this.getBaseTable().getTable(this.dtpForeignKey.getUniqueConstraint().getBaseTable());
-		}
-		return this.referencedTable;
-	}
-
-	public boolean referencesSingleColumnPrimaryKey() {
-		if (this.getColumnPairsSize() != 1) {
-			return false;
-		}
-		if (this.getReferencedTable().getPrimaryKeyColumnsSize() != 1) {
-			return false;
-		}
-		return this.getColumnPair().getReferencedColumn() == this.getReferencedTable().getPrimaryKeyColumn();
-	}
-
-	// ***** column pairs
-
-	public Iterable<ColumnPair> getColumnPairs() {
-		return new ArrayIterable<ColumnPair>(this.getColumnPairArray());
-	}
-
-	public LocalColumnPair getColumnPair() {
-		LocalColumnPair[] pairs = this.getColumnPairArray();
-		if (pairs.length != 1) {
-			throw new IllegalStateException("multiple column pairs: " + pairs.length);  //$NON-NLS-1$
-		}
-		return pairs[0];
-	}
-
-	private Iterable<LocalColumnPair> getLocalColumnPairs() {
-		return new ArrayIterable<LocalColumnPair>(this.getColumnPairArray());
-	}
-
-	private synchronized LocalColumnPair[] getColumnPairArray() {
-		if (this.columnPairs == null) {
-			this.columnPairs = this.buildColumnPairArray();
-		}
-		return this.columnPairs;
-	}
-
-	private LocalColumnPair[] buildColumnPairArray() {
-		List<org.eclipse.datatools.modelbase.sql.tables.Column> baseColumns = this.getDTPBaseColumns();
-		int size = baseColumns.size();
-		List<org.eclipse.datatools.modelbase.sql.tables.Column> refColumns = this.getDTPReferenceColumns();
-		if (refColumns.size() != size) {
-			throw new IllegalStateException(this.getBaseTable().getName() + '.' + this.getName() +
-								" - mismatched sizes: " + size + " vs. " + refColumns.size());  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		LocalColumnPair[] result = new LocalColumnPair[baseColumns.size()];
-		for (int i = baseColumns.size(); i-- > 0; ) {
-			result[i] = new LocalColumnPair(
-								this.getBaseTable().getColumn(baseColumns.get(i)),
-								this.getBaseTable().getColumn(refColumns.get(i))
-						);
-		}
-		return ArrayTools.sort(result, ColumnPair.BASE_COLUMN_COMPARATOR);
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	private List<org.eclipse.datatools.modelbase.sql.tables.Column> getDTPBaseColumns() {
-		return this.dtpForeignKey.getMembers();
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	private List<org.eclipse.datatools.modelbase.sql.tables.Column> getDTPReferenceColumns() {
-		return this.dtpForeignKey.getUniqueConstraint().getMembers();
-	}
-
-	public int getColumnPairsSize() {
-		return this.getColumnPairArray().length;
-	}
-
-	public Iterable<Column> getBaseColumns() {
-		return new TransformationIterable<LocalColumnPair, Column>(this.getLocalColumnPairs()) {
-			@Override
-			protected Column transform(LocalColumnPair pair) {
-				return pair.getBaseColumn();
-			}
-		};
-	}
-
-	boolean baseColumnsContains(Column column) {
-		return CollectionTools.contains(this.getBaseColumns(), column);
-	}
-
-	public Iterable<Column> getNonPrimaryKeyBaseColumns() {
-		return new FilteringIterable<Column>(this.getBaseColumns()) {
-			@Override
-			protected boolean accept(Column column) {
-				return ! column.isPartOfPrimaryKey();
-			}
-		};
-	}
-
-	public Iterable<Column> getReferencedColumns() {
-		return new TransformationIterable<LocalColumnPair, Column>(this.getLocalColumnPairs()) {
-			@Override
-			protected Column transform(LocalColumnPair columnPair) {
-				return columnPair.getReferencedColumn();
-			}
-		};
-	}
-
-	// ***** attribute name
-
-	public String getAttributeName() {
-		String defaultName = this.getDefaultAttributeName();
-		return (defaultName != null) ? defaultName : this.getNonDefaultAttributeName();
-	}
-
-	public synchronized String getDefaultAttributeName() {
-		if ( ! this.defaultAttributeNameCalculated) {
-			this.defaultAttributeNameCalculated = true;
-			this.defaultAttributeName = this.buildDefaultAttributeName();
-		}
-		return this.defaultAttributeName;
-	}
-
-	private String buildDefaultAttributeName() {
-		if ( ! this.referencesSingleColumnPrimaryKey()) {
-			return null;
-		}
-		LocalColumnPair columnPair = this.getColumnPair();
-		String baseColName = columnPair.getBaseColumn().getName();
-		String refColName = columnPair.getReferencedColumn().getName();
-		if (baseColName.length() <= (refColName.length() + 1)) {
-			return null;
-		}
-		if ( ! baseColName.endsWith(refColName)) {
-			return null;
-		}
-		int _index = baseColName.length() - refColName.length() - 1;
-		if (baseColName.charAt(_index) != '_') {
-			return null;
-		}
-		return baseColName.substring(0, _index);
-	}
-
-	/**
-	 * If this is a simple (single-column) foreign key, use the name of the
-	 * single base column to build a name. If this is a compound foreign key,
-	 * return the name of the referenced table.
-	 */
-	// TODO if there is only one FK to a given table, use the table's name instead of the column's name?
-	private String getNonDefaultAttributeName() {
-		return (this.getColumnPairsSize() == 1) ?
-						this.getNonDefaultAttributeNameFromBaseColumn() :
-						this.getReferencedTable().getName();
-	}
-
-	/**
-	 * The underscore check is helpful when the referenced column is <em>not</em> the
-	 * primary key of the referenced table (i.e. it has only a <em>unique</em> constraint).
-	 * <pre>
-	 *     ForeignKey(EMP.CUBICLE_ID => CUBICLE.ID) => "CUBICLE"
-	 *     ForeignKey(EMP.CUBICLEID  => CUBICLE.ID) => "CUBICLE"
-	 *     ForeignKey(EMP.CUBICLE_PK => CUBICLE.ID) => "CUBICLE_PK"
-	 * </pre>
-	 */
-	private String getNonDefaultAttributeNameFromBaseColumn() {
-		LocalColumnPair columnPair = this.getColumnPair();
-		String baseColName = columnPair.getBaseColumn().getName();
-		String refColName = columnPair.getReferencedColumn().getName();
-		int len = baseColName.length();
-		int refLen = refColName.length();
-		if ((len > refLen) && baseColName.endsWith(refColName)) {
-			len = len - refLen;
-			if ((len > 1) && baseColName.charAt(len - 1) == '_') {
-				len = len - 1;
-			}
-		}
-		return baseColName.substring(0, len);
-	}
-
-	/**
-	 * Examples:<ul>
-	 * <li>Oracle etc.<ul><code>
-	 *     <li>ForeignKey(FOO_ID => ID) vs. "foo" => null
-	 *     <li>ForeignKey(FOO_ID => FOO_ID) vs. "foo" => "FOO_ID"
-	 *     <li>ForeignKey(FOO => ID) vs. "foo" => "FOO"
-	 *     <li>ForeignKey(Foo_ID => ID) vs. "foo" => "\"Foo_ID\""
-	 * </code></ul>
-	 * <li>PostgreSQL etc.<ul><code>
-	 *     <li>ForeignKey(foo_id => id) vs. "foo" => null
-	 *     <li>ForeignKey(foo_id => foo_id) vs. "foo" => "foo_id"
-	 *     <li>ForeignKey(foo => id) vs. "foo" => "foo"
-	 *     <li>ForeignKey(Foo_ID => ID) vs. "foo" => "\"Foo_ID\""
-	 * </code></ul>
-	 * <li>SQL Server etc.<ul><code>
-	 *     <li>ForeignKey(foo_ID => ID) vs. "foo" => null
-	 *     <li>ForeignKey(FOO_ID => FOO_ID) vs. "foo" => "FOO_ID"
-	 *     <li>ForeignKey(FOO => ID) vs. "foo" => "FOO"
-	 *     <li>ForeignKey(Foo_ID => ID) vs. "foo" => "Foo_ID"
-	 * </code></ul>
-	 * </ul>
-	 */
-	public String getJoinColumnAnnotationIdentifier(String attributeName) {
-		String baseColumnName = this.getColumnPair().getBaseColumn().getName();
-		String defaultBaseColumnName = attributeName + '_' + this.getReferencedTable().getPrimaryKeyColumn().getName();
-		return this.getDatabase().convertNameToIdentifier(baseColumnName, defaultBaseColumnName);
-	}
-
-
-	// ********** internal methods **********
-
-	boolean wraps(org.eclipse.datatools.modelbase.sql.constraints.ForeignKey foreignKey) {
-		return this.dtpForeignKey == foreignKey;
-	}
-
-	@Override
-	synchronized void clear() {
-		// the foreign key does not "contain" any other objects,
-		// so we don't need to forward the #clear()
-		this.defaultAttributeNameCalculated = false;
-		this.defaultAttributeName = null;
-		this.columnPairs =  null;
-		this.referencedTable = null;
-	}
-
-
-	// ********** column pair implementation **********
-
-	static class LocalColumnPair implements ColumnPair {
-		private final DTPColumnWrapper baseColumn;
-		private final DTPColumnWrapper referencedColumn;
-
-		LocalColumnPair(DTPColumnWrapper baseColumn, DTPColumnWrapper referencedColumn) {
-			super();
-			if ((baseColumn == null) || (referencedColumn == null)) {
-				throw new NullPointerException();
-			}
-			this.baseColumn = baseColumn;
-			this.referencedColumn = referencedColumn;
-		}
-
-		public DTPColumnWrapper getBaseColumn() {
-			return this.baseColumn;
-		}
-
-		public DTPColumnWrapper getReferencedColumn() {
-			return this.referencedColumn;
-		}
-
-		@Override
-		public String toString() {
-			return StringTools.buildToStringFor(this, this.baseColumn.getName() + "=>" + this.referencedColumn.getName());  //$NON-NLS-1$
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPSchemaContainerWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPSchemaContainerWrapper.java
deleted file mode 100644
index 2df5d64..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPSchemaContainerWrapper.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.util.List;
-
-import org.eclipse.jpt.db.DatabaseObject;
-import org.eclipse.jpt.db.Schema;
-import org.eclipse.jpt.db.SchemaContainer;
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
-
-/**
- * Coalesce behavior for a schema container (i.e. database or catalog).
- */
-abstract class DTPSchemaContainerWrapper
-	extends DTPDatabaseObjectWrapper
-	implements SchemaContainer
-{
-	/** lazy-initialized */
-	private DTPSchemaWrapper[] schemata;
-
-
-	// ********** constructor **********
-
-	DTPSchemaContainerWrapper(DTPDatabaseObject parent, Object dtpSchemaContainer) {
-		super(parent, dtpSchemaContainer);
-	}
-
-
-	// ********** DTPWrapper implementation **********
-
-	@Override
-	synchronized void catalogObjectChanged() {
-		super.catalogObjectChanged();
-	}
-
-
-	// ********** abstract methods **********
-
-	/**
-	 * return the schema container's DTP schemata
-	 */
-	abstract List<org.eclipse.datatools.modelbase.sql.schema.Schema> getDTPSchemata();
-
-	/**
-	 * return the schema for the specified DTP schema
-	 */
-	abstract DTPSchemaWrapper getSchema(org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema);
-
-	/**
-	 * assume the schema container (database or catalog) contains
-	 * the specified schema
-	 */
-	DTPSchemaWrapper getSchema_(org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema) {
-		for (DTPSchemaWrapper schema : this.getSchemaArray()) {
-			if (schema.wraps(dtpSchema)) {
-				return schema;
-			}
-		}
-		throw new IllegalArgumentException("invalid DTP schema: " + dtpSchema);  //$NON-NLS-1$
-	}
-
-	/**
-	 * return the table for the specified DTP table;
-	 * this is only called from a schema (to its container)
-	 */
-	abstract DTPTableWrapper getTable(org.eclipse.datatools.modelbase.sql.tables.Table dtpTable);
-
-	/**
-	 * assume the schema container contains the specified table
-	 */
-	DTPTableWrapper getTable_(org.eclipse.datatools.modelbase.sql.tables.Table dtpTable) {
-		return this.getSchema_(dtpTable.getSchema()).getTable_(dtpTable);
-	}
-
-	/**
-	 * return the column for the specified DTP column;
-	 * this is only called from a schema (to its container)
-	 */
-	abstract DTPColumnWrapper getColumn(org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn);
-
-	/**
-	 * assume the schema container contains the specified column
-	 */
-	DTPColumnWrapper getColumn_(org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		return this.getTable_(dtpColumn.getTable()).getColumn_(dtpColumn);
-	}
-
-
-	// ********** schemata **********
-
-	public Iterable<Schema> getSchemata() {
-		return new ArrayIterable<Schema>(this.getSchemaArray());
-	}
-
-	Iterable<DTPSchemaWrapper> getSchemaWrappers() {
-		return new ArrayIterable<DTPSchemaWrapper>(this.getSchemaArray());
-	}
-
-	synchronized DTPSchemaWrapper[] getSchemaArray() {
-		if (this.schemata == null) {
-			this.schemata = this.buildSchemaArray();
-		}
-		return this.schemata;
-	}
-
-	private DTPSchemaWrapper[] buildSchemaArray() {
-		List<org.eclipse.datatools.modelbase.sql.schema.Schema> dtpSchemata = this.getDTPSchemata();
-		DTPSchemaWrapper[] result = new DTPSchemaWrapper[dtpSchemata.size()];
-		for (int i = result.length; i-- > 0; ) {
-			result[i] = new DTPSchemaWrapper(this, dtpSchemata.get(i));
-		}
-		return ArrayTools.sort(result, DEFAULT_COMPARATOR);
-	}
-
-	public int getSchemataSize() {
-		return this.getSchemaArray().length;
-	}
-
-	public Iterable<String> getSortedSchemaNames() {
-		// the schemata are already sorted
-		return new TransformationIterable<DatabaseObject, String>(this.getSchemaWrappers(), NAME_TRANSFORMER);
-	}
-
-	public DTPSchemaWrapper getSchemaNamed(String name) {
-		return this.selectDatabaseObjectNamed(this.getSchemaWrappers(), name);
-	}
-
-	public Iterable<String> getSortedSchemaIdentifiers() {
-		// the schemata are already sorted
-		return new TransformationIterable<DatabaseObject, String>(this.getSchemaWrappers(), IDENTIFIER_TRANSFORMER);
-	}
-
-	public DTPSchemaWrapper getSchemaForIdentifier(String identifier) {
-		return this.selectDatabaseObjectForIdentifier(this.getSchemaWrappers(), identifier);
-	}
-
-	public DTPSchemaWrapper getDefaultSchema() {
-		return this.getSchemaForNames(this.getDatabase().getDefaultSchemaNames());
-	}
-
-	/**
-	 * Return the first schema found.
-	 */
-	DTPSchemaWrapper getSchemaForNames(Iterable<String> names) {
-		for (String name : names) {
-			DTPSchemaWrapper schema = this.getSchemaNamed(name);
-			if (schema != null) {
-				return schema;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * If we find a default schema, return its identifier;
-	 * otherwise, return the last name on the list of default names.
-	 * (Some containers have multiple possible default names.)
-	 */
-	public synchronized String getDefaultSchemaIdentifier() {
-		Iterable<String> names = this.getDatabase().getDefaultSchemaNames();
-		DTPSchemaWrapper schema = this.getSchemaForNames(names);
-		// assume 'names' is non-empty (!)
-		return (schema != null) ?
-				schema.getIdentifier() :
-				this.convertNameToIdentifier(CollectionTools.last(names));
-	}
-
-
-	// ********** listening **********
-
-	@Override
-	synchronized void startListening() {
-		if (this.schemata != null) {
-			this.startSchemata();
-		}
-		super.startListening();
-	}
-
-	private void startSchemata() {
-		for (DTPSchemaWrapper schema : this.schemata) {
-			schema.startListening();
-		}
-	}
-
-	@Override
-	synchronized void stopListening() {
-		if (this.schemata != null) {
-			this.stopSchemata();
-		}
-		super.stopListening();
-	}
-
-	private void stopSchemata() {
-		for (DTPSchemaWrapper schema : this.schemata) {
-			schema.stopListening();
-		}
-	}
-
-
-	// ********** clear **********
-
-	@Override
-	synchronized void clear() {
-		if (this.schemata != null) {
-			this.clearSchemata();
-		}
-	}
-
-	private void clearSchemata() {
-		this.stopSchemata();
-		for (DTPSchemaWrapper schema : this.schemata) {
-			schema.clear();
-		}
-		this.schemata = null;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPSchemaWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPSchemaWrapper.java
deleted file mode 100644
index 7c1a619..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPSchemaWrapper.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IProduct;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
-import org.eclipse.jpt.db.DatabaseObject;
-import org.eclipse.jpt.db.Schema;
-import org.eclipse.jpt.db.Sequence;
-import org.eclipse.jpt.db.Table;
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
-
-/**
- *  Wrap a DTP Schema
- */
-final class DTPSchemaWrapper
-	extends DTPDatabaseObjectWrapper
-	implements Schema
-{
-	/** the wrapped DTP schema */
-	private final org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema;
-
-	/** lazy-initialized */
-	private DTPTableWrapper[] tables;
-
-	/** lazy-initialized */
-	private DTPSequenceWrapper[] sequences;
-
-	
-	// ********** constants **********
-	
-	/** used for adopter product customization */
-	private static final String PERSISTENT_AND_VIEW_TABLES_ONLY = "supportPersistentAndViewTablesOnly"; //$NON-NLS-1$
-
-
-	// ********** constructor **********
-
-	DTPSchemaWrapper(DTPSchemaContainerWrapper container, org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema) {
-		super(container, dtpSchema);
-		this.dtpSchema = dtpSchema;
-	}
-
-
-	// ********** DTPWrapper implementation **********
-
-	@Override
-	synchronized void catalogObjectChanged() {
-		super.catalogObjectChanged();
-		this.getConnectionProfile().schemaChanged(this);
-	}
-
-
-	// ********** Schema implementation **********
-
-	public String getName() {
-		return this.dtpSchema.getName();
-	}
-
-	public DTPSchemaContainerWrapper getContainer() {
-		return (DTPSchemaContainerWrapper) this.getParent();
-	}
-
-	// ***** tables
-
-	public Iterable<Table> getTables() {
-		return new ArrayIterable<Table>(this.getTableArray());
-	}
-
-	private Iterable<DTPTableWrapper> getTableWrappers() {
-		return new ArrayIterable<DTPTableWrapper>(this.getTableArray());
-	}
-
-	private synchronized DTPTableWrapper[] getTableArray() {
-		if (this.tables == null) {
-			this.tables = this.buildTableArray();
-		}
-		return this.tables;
-	}
-
-	private DTPTableWrapper[] buildTableArray() {
-		List<org.eclipse.datatools.modelbase.sql.tables.Table> dtpTables = this.getDTPTables();
-		DTPTableWrapper[] result = new DTPTableWrapper[dtpTables.size()];
-		for (int i = result.length; i-- > 0;) {
-			result[i] = new DTPTableWrapper(this, dtpTables.get(i));
-		}
-		return ArrayTools.sort(result, DEFAULT_COMPARATOR);
-	}
-
-	private List<org.eclipse.datatools.modelbase.sql.tables.Table> getDTPTables() {
-		List<org.eclipse.datatools.modelbase.sql.tables.Table> dtpTables = this.getDTPTables_();
-		return this.hack() ? this.hack(dtpTables) : dtpTables;
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	private List<org.eclipse.datatools.modelbase.sql.tables.Table> getDTPTables_() {
-		return this.dtpSchema.getTables();
-	}
-
-	private boolean hack() {
-		// the product is null during junit testing
-		IProduct product = Platform.getProduct();
-		String hack = (product == null) ? null : product.getProperty(PERSISTENT_AND_VIEW_TABLES_ONLY);
-		return (hack != null) && hack.equals("true"); //$NON-NLS-1$
-	}
-
-	// provides a mechanism for DTP extenders that support synonyms but don't want to have them appear
-	// in Dali to filter out these table types from Dali 
-	private List<org.eclipse.datatools.modelbase.sql.tables.Table> hack(List<org.eclipse.datatools.modelbase.sql.tables.Table> dtpTables) {
-		List<org.eclipse.datatools.modelbase.sql.tables.Table> result = new ArrayList<org.eclipse.datatools.modelbase.sql.tables.Table>();
-		for (org.eclipse.datatools.modelbase.sql.tables.Table dtpTable : dtpTables) {
-			if (this.hack(dtpTable)) {
-				result.add(dtpTable);
-			}
-		}
-		return result;
-	}
-
-	private boolean hack(org.eclipse.datatools.modelbase.sql.tables.Table dtpTable) {
-		return SQLTablesPackage.eINSTANCE.getPersistentTable().isSuperTypeOf(dtpTable.eClass()) ||
-					SQLTablesPackage.eINSTANCE.getViewTable().isSuperTypeOf(dtpTable.eClass());
-	}
-
-	public int getTablesSize() {
-		return this.getTableArray().length;
-	}
-
-	/**
-	 * return the table for the specified DTP table
-	 */
-	DTPTableWrapper getTable(org.eclipse.datatools.modelbase.sql.tables.Table dtpTable) {
-		// try to short-circuit the search
-		return this.wraps(dtpTable.getSchema()) ?
-						this.getTable_(dtpTable) :
-						this.getContainer().getTable(dtpTable);
-	}
-
-	/**
-	 * assume the schema contains the specified table
-	 */
-	DTPTableWrapper getTable_(org.eclipse.datatools.modelbase.sql.tables.Table dtpTable) {
-		for (DTPTableWrapper table : this.getTableArray()) {
-			if (table.wraps(dtpTable)) {
-				return table;
-			}
-		}
-		throw new IllegalArgumentException("invalid DTP table: " + dtpTable);  //$NON-NLS-1$
-	}
-
-	public DTPTableWrapper getTableNamed(String name) {
-		return this.selectDatabaseObjectNamed(this.getTableWrappers(), name);
-	}
-
-	public Iterable<String> getSortedTableIdentifiers() {
-		// the tables are already sorted
-		return new TransformationIterable<DatabaseObject, String>(this.getTableWrappers(), IDENTIFIER_TRANSFORMER);
-	}
-
-	public DTPTableWrapper getTableForIdentifier(String identifier) {
-		return this.selectDatabaseObjectForIdentifier(this.getTableWrappers(), identifier);
-	}
-
-	// ***** sequences
-
-	public Iterable<Sequence> getSequences() {
-		return new ArrayIterable<Sequence>(this.getSequenceArray());
-	}
-
-	private Iterable<DTPSequenceWrapper> getSequenceWrappers() {
-		return new ArrayIterable<DTPSequenceWrapper>(this.getSequenceArray());
-	}
-
-	private synchronized DTPSequenceWrapper[] getSequenceArray() {
-		if (this.sequences == null) {
-			this.sequences = this.buildSequenceArray();
-		}
-		return this.sequences;
-	}
-
-	private DTPSequenceWrapper[] buildSequenceArray() {
-		List<org.eclipse.datatools.modelbase.sql.schema.Sequence> dtpSequences = this.getDTPSequences();
-		DTPSequenceWrapper[] result = new DTPSequenceWrapper[dtpSequences.size()];
-		for (int i = result.length; i-- > 0;) {
-			result[i] = new DTPSequenceWrapper(this, dtpSequences.get(i));
-		}
-		return ArrayTools.sort(result, DEFAULT_COMPARATOR);
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	private List<org.eclipse.datatools.modelbase.sql.schema.Sequence> getDTPSequences() {
-		return this.dtpSchema.getSequences();
-	}
-
-	public int getSequencesSize() {
-		return this.getSequenceArray().length;
-	}
-
-	public DTPSequenceWrapper getSequenceNamed(String name) {
-		return this.selectDatabaseObjectNamed(this.getSequenceWrappers(), name);
-	}
-
-	public Iterable<String> getSortedSequenceIdentifiers() {
-		// the sequences are already sorted
-		return new TransformationIterable<DatabaseObject, String>(this.getSequenceWrappers(), IDENTIFIER_TRANSFORMER);
-	}
-
-	public DTPSequenceWrapper getSequenceForIdentifier(String identifier) {
-		return this.selectDatabaseObjectForIdentifier(this.getSequenceWrappers(), identifier);
-	}
-
-
-	// ********** internal methods **********
-
-	boolean wraps(org.eclipse.datatools.modelbase.sql.schema.Schema schema) {
-		return this.dtpSchema == schema;
-	}
-
-	/**
-	 * return the column for the specified DTP column
-	 */
-	DTPColumnWrapper getColumn(org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		// try to short-circuit the search
-		return this.wraps(dtpColumn.getTable().getSchema()) ?
-						this.getColumn_(dtpColumn) :
-						this.getContainer().getColumn(dtpColumn);
-	}
-
-	/**
-	 * assume the schema contains the specified column
-	 */
-	DTPColumnWrapper getColumn_(org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		return this.getTable_(dtpColumn.getTable()).getColumn_(dtpColumn);
-	}
-
-
-	// ********** listening **********
-
-	@Override
-	synchronized void startListening() {
-		if (this.sequences != null) {
-			this.startSequences();
-		}
-		if (this.tables != null) {
-			this.startTables();
-		}
-		super.startListening();
-	}
-
-	private void startSequences() {
-		for (DTPSequenceWrapper sequence : this.sequences) {
-			sequence.startListening();
-		}
-	}
-
-	private void startTables() {
-		for (DTPTableWrapper table : this.tables) {
-			table.startListening();
-		}
-	}
-
-	@Override
-	synchronized void stopListening() {
-		if (this.sequences != null) {
-			this.stopSequences();
-		}
-		if (this.tables != null) {
-			this.stopTables();
-		}
-		super.stopListening();
-	}
-
-	private void stopSequences() {
-		for (DTPSequenceWrapper sequence : this.sequences) {
-			sequence.stopListening();
-		}
-	}
-
-	private void stopTables() {
-		for (DTPTableWrapper table : this.tables) {
-			table.stopListening();
-		}
-	}
-
-
-	// ********** clear **********
-
-	@Override
-	synchronized void clear() {
-		if (this.sequences != null) {
-			this.clearSequences();
-		}
-		if (this.tables != null) {
-			this.clearTables();
-		}
-	}
-
-	private void clearSequences() {
-		this.stopSequences();
-		for (DTPSequenceWrapper sequence : this.sequences) {
-			sequence.clear();
-		}
-		this.sequences = null;
-	}
-
-	private void clearTables() {
-		this.stopTables();
-		for (DTPTableWrapper table : this.tables) {
-			table.clear();
-		}
-		this.tables = null;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPSequenceWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPSequenceWrapper.java
deleted file mode 100644
index f8e3edf..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPSequenceWrapper.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import org.eclipse.jpt.db.Sequence;
-
-/**
- *  Wrap a DTP Sequence
- */
-final class DTPSequenceWrapper
-	extends DTPDatabaseObjectWrapper
-	implements Sequence
-{
-	/** the wrapped DTP sequence */
-	private final org.eclipse.datatools.modelbase.sql.schema.Sequence dtpSequence;
-
-
-	// ********** constructor **********
-
-	DTPSequenceWrapper(DTPSchemaWrapper schema, org.eclipse.datatools.modelbase.sql.schema.Sequence dtpSequence) {
-		super(schema, dtpSequence);
-		this.dtpSequence = dtpSequence;
-	}
-
-
-	// ********** DTPWrapper implementation **********
-
-	@Override
-	synchronized void catalogObjectChanged() {
-		super.catalogObjectChanged();
-		this.getConnectionProfile().sequenceChanged(this);
-	}
-
-
-	// ********** Sequence implementation **********
-
-	public String getName() {
-		return this.dtpSequence.getName();
-	}
-
-	public DTPSchemaWrapper getSchema() {
-		return (DTPSchemaWrapper) this.getParent();
-	}
-
-
-	// ********** internal methods **********
-
-	boolean wraps(org.eclipse.datatools.modelbase.sql.schema.Sequence sequence) {
-		return this.dtpSequence == sequence;
-	}
-
-	@Override
-	void clear() {
-		// no state to clear
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPTableWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPTableWrapper.java
deleted file mode 100644
index b109675..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPTableWrapper.java
+++ /dev/null
@@ -1,409 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.util.List;
-
-import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
-import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.DatabaseObject;
-import org.eclipse.jpt.db.ForeignKey;
-import org.eclipse.jpt.db.Table;
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
-
-/**
- *  Wrap a DTP Table
- */
-final class DTPTableWrapper
-	extends DTPDatabaseObjectWrapper
-	implements Table
-{
-	/** the wrapped DTP table */
-	private final org.eclipse.datatools.modelbase.sql.tables.Table dtpTable;
-
-	/** lazy-initialized */
-	private DTPColumnWrapper[] columns;
-
-	/** lazy-initialized */
-	private DTPColumnWrapper[] primaryKeyColumns;
-
-	/** lazy-initialized */
-	private DTPForeignKeyWrapper[] foreignKeys;
-
-
-	private static final DTPColumnWrapper[] EMPTY_COLUMNS = new DTPColumnWrapper[0];
-	private static final DTPForeignKeyWrapper[] EMPTY_FOREIGN_KEYS = new DTPForeignKeyWrapper[0];
-
-
-	// ********** constructor **********
-
-	DTPTableWrapper(DTPSchemaWrapper schema, org.eclipse.datatools.modelbase.sql.tables.Table dtpTable) {
-		super(schema, dtpTable);
-		this.dtpTable = dtpTable;
-	}
-
-
-	// ********** DTPWrapper implementation **********
-
-	@Override
-	synchronized void catalogObjectChanged() {
-		super.catalogObjectChanged();
-		this.getConnectionProfile().tableChanged(this);
-	}
-
-
-	// ********** Table implementation **********
-
-	public String getName() {
-		return this.dtpTable.getName();
-	}
-
-	public DTPSchemaWrapper getSchema() {
-		return (DTPSchemaWrapper) this.getParent();
-	}
-
-	// ***** columns
-
-	public Iterable<Column> getColumns() {
-		return new ArrayIterable<Column>(this.getColumnArray());
-	}
-
-	private Iterable<DTPColumnWrapper> getColumnWrappers() {
-		return new ArrayIterable<DTPColumnWrapper>(this.getColumnArray());
-	}
-
-	private synchronized DTPColumnWrapper[] getColumnArray() {
-		if (this.columns == null) {
-			this.columns = this.buildColumnArray();
-		}
-		return this.columns;
-	}
-
-	private DTPColumnWrapper[] buildColumnArray() {
-		List<org.eclipse.datatools.modelbase.sql.tables.Column> dtpColumns = this.getDTPColumns();
-		DTPColumnWrapper[] result = new DTPColumnWrapper[dtpColumns.size()];
-		for (int i = result.length; i-- > 0;) {
-			result[i] = new DTPColumnWrapper(this, dtpColumns.get(i));
-		}
-		return ArrayTools.sort(result, DEFAULT_COMPARATOR);
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	private List<org.eclipse.datatools.modelbase.sql.tables.Column> getDTPColumns() {
-		return this.dtpTable.getColumns();
-	}
-
-	public int getColumnsSize() {
-		return this.getColumnArray().length;
-	}
-
-	public DTPColumnWrapper getColumnNamed(String name) {
-		return this.selectDatabaseObjectNamed(this.getColumnWrappers(), name);
-	}
-
-	/**
-	 * return the column for the specified DTP column
-	 */
-	DTPColumnWrapper getColumn(org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		// try to short-circuit the search
-		return this.wraps(dtpColumn.getTable()) ?
-						this.getColumn_(dtpColumn) :
-						this.getSchema().getColumn(dtpColumn);
-	}
-
-	/**
-	 * assume the table contains the specified column
-	 */
-	DTPColumnWrapper getColumn_(org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		for (DTPColumnWrapper column : this.getColumnArray()) {
-			if (column.wraps(dtpColumn)) {
-				return column;
-			}
-		}
-		throw new IllegalArgumentException("invalid DTP column: " + dtpColumn);  //$NON-NLS-1$
-	}
-
-	public Iterable<String> getSortedColumnIdentifiers() {
-		// the columns are already sorted
-		return new TransformationIterable<DatabaseObject, String>(this.getColumnWrappers(), IDENTIFIER_TRANSFORMER);
-	}
-
-	public DTPColumnWrapper getColumnForIdentifier(String identifier) {
-		return this.selectDatabaseObjectForIdentifier(this.getColumnWrappers(), identifier);
-	}
-
-	// ***** primaryKeyColumns
-
-	public Iterable<Column> getPrimaryKeyColumns() {
-		return new ArrayIterable<Column>(this.getPrimaryKeyColumnArray());
-	}
-
-	public DTPColumnWrapper getPrimaryKeyColumn() {
-		DTPColumnWrapper[] pkColumns = this.getPrimaryKeyColumnArray();
-		if (pkColumns.length != 1) {
-			throw new IllegalStateException("multiple primary key columns: " + pkColumns.length);  //$NON-NLS-1$
-		}
-		return pkColumns[0];
-	}
-
-	private synchronized DTPColumnWrapper[] getPrimaryKeyColumnArray() {
-		if (this.primaryKeyColumns == null) {
-			this.primaryKeyColumns = this.buildPrimaryKeyColumnArray();
-		}
-		return this.primaryKeyColumns;
-	}
-
-	private DTPColumnWrapper[] buildPrimaryKeyColumnArray() {
-		if ( ! (this.dtpTable instanceof BaseTable)) {
-			return EMPTY_COLUMNS;
-		}
-		PrimaryKey pk = ((BaseTable) this.dtpTable).getPrimaryKey();
-		if (pk == null) {
-			// no PK was defined
-			return EMPTY_COLUMNS;
-		}
-		List<org.eclipse.datatools.modelbase.sql.tables.Column> pkColumns = this.getColumns(pk);
-		DTPColumnWrapper[] result = new DTPColumnWrapper[pkColumns.size()];
-		for (int i = result.length; i-- > 0;) {
-			result[i] = this.getColumn(pkColumns.get(i));
-		}
-		return result;
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	private List<org.eclipse.datatools.modelbase.sql.tables.Column> getColumns(PrimaryKey pk) {
-		return pk.getMembers();
-	}
-
-	public int getPrimaryKeyColumnsSize() {
-		return this.getPrimaryKeyColumnArray().length;
-	}
-
-	boolean primaryKeyColumnsContains(Column column) {
-		return ArrayTools.contains(this.getPrimaryKeyColumnArray(), column);
-	}
-
-	// ***** foreignKeys
-
-	public Iterable<ForeignKey> getForeignKeys() {
-		return new ArrayIterable<ForeignKey>(this.getForeignKeyArray());
-	}
-
-	private synchronized DTPForeignKeyWrapper[] getForeignKeyArray() {
-		if (this.foreignKeys == null) {
-			this.foreignKeys = this.buildForeignKeyArray();
-		}
-		return this.foreignKeys;
-	}
-
-	private DTPForeignKeyWrapper[] buildForeignKeyArray() {
-		if ( ! (this.dtpTable instanceof BaseTable)) {
-			return EMPTY_FOREIGN_KEYS;
-		}
-		List<org.eclipse.datatools.modelbase.sql.constraints.ForeignKey> dtpForeignKeys = this.getDTPForeignKeys();
-		DTPForeignKeyWrapper[] result = new DTPForeignKeyWrapper[dtpForeignKeys.size()];
-		for (int i = result.length; i-- > 0;) {
-			result[i] = new DTPForeignKeyWrapper(this, dtpForeignKeys.get(i));
-		}
-		return result;
-	}
-
-	@SuppressWarnings("unchecked")
-	private List<org.eclipse.datatools.modelbase.sql.constraints.ForeignKey> getDTPForeignKeys() {
-		return ((BaseTable) this.dtpTable).getForeignKeys();
-	}
-
-	public int getForeignKeysSize() {
-		return this.getForeignKeyArray().length;
-	}
-
-	/**
-	 * return whether the specified column is a base column for at least one
-	 * of the the table's foreign keys
-	 */
-	boolean foreignKeyBaseColumnsContains(Column column) {
-		for (DTPForeignKeyWrapper fkWrapper : this.getForeignKeyArray()) {
-			if (fkWrapper.baseColumnsContains(column)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	// ***** join table
-
-	public boolean isPossibleJoinTable() {
-		if (this.getForeignKeyArray().length != 2) {
-			return false;  // the table must have exactly 2 foreign keys
-		}
-		for (Column column : this.getColumns()) {
-			if ( ! this.foreignKeyBaseColumnsContains(column)) {
-				return false;  // all the table's columns must belong to one (or both) of the 2 foreign keys
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * If the table name is <code>FOO_BAR</code>
-	 * and it joins tables <code>FOO</code> and <code>BAR</code>,
-	 * return the foreign key to <code>FOO</code>;
-	 * if the table name is <code>BAR_FOO</code>
-	 * and it joins tables <code>FOO</code> and <code>BAR</code>,
-	 * return the foreign key to <code>BAR</code>;
-	 * otherwise simply return the first foreign key in the array.
-	 */
-	public ForeignKey getJoinTableOwningForeignKey() {
-		ForeignKey fk0 = this.getForeignKeyArray()[0];
-		String name0 = fk0.getReferencedTable().getName();
-
-		ForeignKey fk1 = this.getForeignKeyArray()[1];
-		String name1 = fk1.getReferencedTable().getName();
-
-		return this.getName().equals(name1 + '_' + name0) ? fk1 : fk0;
-	}
-
-	public ForeignKey getJoinTableNonOwningForeignKey() {
-		ForeignKey fk0 = this.getForeignKeyArray()[0];
-		ForeignKey fk1 = this.getForeignKeyArray()[1];
-		ForeignKey ofk = this.getJoinTableOwningForeignKey();
-		return (ofk == fk0) ? fk1 : fk0;
-	}
-
-	/**
-	 * Hmmm....
-	 * We might want to go to the platform to allow a vendor-specific
-	 * comparison here;
-	 * but, since all the names are coming directly from the database
-	 * (i.e. there are no conversions to Java identifiers etc.), it seems
-	 * like we can just compare them directly and ignore case-sensitivity
-	 * issues....  ~bjv
-	 */
-	public boolean joinTableNameIsDefault() {
-		return this.getName().equals(this.buildDefaultJoinTableName());
-	}
-
-	private String buildDefaultJoinTableName() {
-		return this.getJoinTableOwningTable().getName()
-					+ '_'
-					+ this.getJoinTableNonOwningTable().getName();
-	}
-
-	private Table getJoinTableOwningTable() {
-		return this.getJoinTableOwningForeignKey().getReferencedTable();
-	}
-
-	private Table getJoinTableNonOwningTable() {
-		return this.getJoinTableNonOwningForeignKey().getReferencedTable();
-	}
-
-
-	// ********** internal methods **********
-
-	boolean wraps(org.eclipse.datatools.modelbase.sql.tables.Table table) {
-		return this.dtpTable == table;
-	}
-
-	/**
-	 * return the table for the specified DTP table
-	 */
-	DTPTableWrapper getTable(org.eclipse.datatools.modelbase.sql.tables.Table table) {
-		// try to short-circuit the search
-		return this.wraps(table) ? this : this.getSchema().getTable(table);
-	}
-
-
-	// ********** listening **********
-
-	@Override
-	synchronized void startListening() {
-		if (this.foreignKeys != null) {
-			this.startForeignKeys();
-		}
-		if (this.columns != null) {
-			this.startColumns();
-		}
-		super.startListening();
-	}
-
-	private void startForeignKeys() {
-		for (DTPForeignKeyWrapper foreignKey : this.foreignKeys) {
-			foreignKey.startListening();
-		}
-	}
-
-	private void startColumns() {
-		for (DTPColumnWrapper column : this.columns) {
-			column.startListening();
-		}
-	}
-
-	@Override
-	synchronized void stopListening() {
-		if (this.foreignKeys != null) {
-			this.stopForeignKeys();
-		}
-		if (this.columns != null) {
-			this.stopColumns();
-		}
-		super.stopListening();
-	}
-
-	private void stopForeignKeys() {
-		for (DTPForeignKeyWrapper foreignKey : this.foreignKeys) {
-			foreignKey.stopListening();
-		}
-	}
-
-	private void stopColumns() {
-		for (DTPColumnWrapper column : this.columns) {
-			column.stopListening();
-		}
-	}
-
-
-	// ********** clear **********
-
-	@Override
-	synchronized void clear() {
-		if (this.foreignKeys != null) {
-			this.clearForeignKeys();
-		}
-
-		// the table does not "contain" the pk columns, so no need to forward #clear()
-		this.primaryKeyColumns = null;
-
-		if (this.columns != null) {
-			this.clearColumns();
-		}
-	}
-
-	private void clearForeignKeys() {
-		this.stopForeignKeys();
-		for (DTPForeignKeyWrapper foreignKey : this.foreignKeys) {
-			foreignKey.clear();
-		}
-    	this.foreignKeys = null;
-	}
-
-	private void clearColumns() {
-		this.stopColumns();
-		for (DTPColumnWrapper column : this.columns) {
-			column.clear();
-		}
-    	this.columns = null;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/AbstractVendor.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/AbstractVendor.java
deleted file mode 100644
index 62a08c2..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/AbstractVendor.java
+++ /dev/null
@@ -1,304 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.datatools.modelbase.sql.schema.Catalog;
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-import org.eclipse.datatools.modelbase.sql.schema.Schema;
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * Consolidate the behavior common to the typical vendors.
- * 
- * @see UnrecognizedVendor
- */
-abstract class AbstractVendor
-	implements Vendor
-{
-	AbstractVendor() {
-		super();
-	}
-
-	public abstract String getDTPVendorName();
-
-
-	// ********** catalog and schema support **********
-
-	abstract CatalogStrategy getCatalogStrategy();
-
-	public boolean supportsCatalogs(Database database) {
-		return this.getCatalogStrategy().supportsCatalogs(database);
-	}
-
-	public List<Catalog> getCatalogs(Database database) {
-		return this.getCatalogStrategy().getCatalogs(database);
-	}
-
-	public List<Schema> getSchemas(Database database) {
-		try {
-			return this.getCatalogStrategy().getSchemas(database);
-		} catch (Exception ex) {
-			throw new RuntimeException("vendor: " + this, ex); //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * Typically, the name of the default catalog is the user name.
-	 */
-	public final Iterable<String> getDefaultCatalogNames(Database database, String userName) {
-		if ( ! this.supportsCatalogs(database)) {
-			return Collections.emptyList();
-		}
-		ArrayList<String> names = new ArrayList<String>();
-		this.addDefaultCatalogNamesTo(database, userName, names);
-		return names;
-	}
-
-	/**
-	 * See comment at
-	 * {@link #addDefaultSchemaNamesTo(Database, String, ArrayList)}.
-	 */
-	void addDefaultCatalogNamesTo(@SuppressWarnings("unused") Database database, String userName, ArrayList<String> names) {
-		names.add(this.convertIdentifierToName(userName));
-	}
-
-	/**
-	 * Typically, the name of the default schema is the user name.
-	 */
-	public final Iterable<String> getDefaultSchemaNames(Database database, String userName) {
-		ArrayList<String> names = new ArrayList<String>();
-		this.addDefaultSchemaNamesTo(database, userName, names);
-		return names;
-	}
-
-	/**
-	 * The user name passed in here was retrieved from DTP.
-	 * DTP stores the user name that was passed to it during the connection
-	 * to the database. As a result, this user name is an <em>identifier</em>
-	 * not a <em>name</em>.
-	 * If the user name were retrieved from the JDBC connection it would probably
-	 * be a <em>name</em>. For example, you can connect to an Oracle database with the
-	 * user name "scott", but that identifer is folded to the actual user name
-	 * "SCOTT". DTP stores the original string "scott", while the Oracle JDBC
-	 * driver stores the folded string "SCOTT".
-	 */
-	void addDefaultSchemaNamesTo(@SuppressWarnings("unused") Database database, String userName, ArrayList<String> names) {
-		names.add(this.convertIdentifierToName(userName));
-	}
-
-
-	// ********** folding strategy used to convert names and identifiers **********
-
-	/**
-	 * The SQL spec says a <em>regular</em> (non-delimited) identifier should be
-	 * folded to uppercase; but some databases do otherwise (e.g. Sybase).
-	 */
-	abstract FoldingStrategy getFoldingStrategy();
-
-
-	// ********** name -> identifier **********
-
-	public String convertNameToIdentifier(String name, String defaultName) {
-		return this.nameRequiresDelimiters(name) ?
-						this.delimitName(name) :
-						this.regularNamesMatch(name, defaultName) ? null : name;
-	}
-
-	public String convertNameToIdentifier(String name) {
-		return this.nameRequiresDelimiters(name) ? this.delimitName(name) : name;
-	}
-
-	/**
-	 * Return whether the specified database object name must be delimited
-	 * when used in an SQL statement.
-	 * If the name has any "special" characters (as opposed to letters,
-	 * digits, and other allowed characters [e.g. underscores]), it requires
-	 * delimiters.
-	 * If the name is mixed case and the database folds undelimited names
-	 * (to either uppercase or lowercase), it requires delimiters.
-	 */
-	boolean nameRequiresDelimiters(String name) {
-		return (name.length() == 0)  //  an empty string must be delimited(?)
-					|| this.nameContainsAnySpecialCharacters(name)
-					|| this.nameIsNotFolded(name);
-	}
-
-	/**
-	 * Return whether the specified name contains any "special" characters
-	 * that require the name to be delimited.
-	 * Pre-condition: the specified name is not empty
-	 */
-	boolean nameContainsAnySpecialCharacters(String name) {
-		char[] string = name.toCharArray();
-		if (this.characterIsNonRegularNameStart(string[0])) {
-			return true;
-		}
-		for (int i = string.length; i-- > 1; ) {  // note: stop at 1
-			if (this.characterIsNonRegularNamePart(string[i])) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified character is "non-regular" for the first
-	 * character of a name.
-	 * Typically, databases are more restrictive about what characters can
-	 * be used to <em>start</em> an identifier (as opposed to the characters
-	 * allowed for the remainder of the identifier).
-	 */
-	boolean characterIsNonRegularNameStart(char c) {
-		return ! this.characterIsRegularNameStart(c);
-	}
-
-	/**
-	 * Return whether the specified character is <em>regular</em> for the first
-	 * character of a name.
-	 * The first character of an identifier can be:<ul>
-	 * <li>a letter
-	 * <li>any of the extended, vendor-specific, <em>regular</em> start characters
-	 * </ul>
-	 */
-	boolean characterIsRegularNameStart(char c) {
-		// all vendors allow a letter
-		return Character.isLetter(c)
-				|| this.characterIsExtendedRegularNameStart(c);
-	}
-
-	boolean characterIsExtendedRegularNameStart(char c) {
-		return arrayContains(this.getExtendedRegularNameStartCharacters(), c);
-	}
-
-	/**
-	 * Return the <em>regular</em> characters, beyond letters, for the
-	 * first character of a name.
-	 * Return null if there are no "extended" characters.
-	 */
-	char[] getExtendedRegularNameStartCharacters() {
-		return null;
-	}
-
-	/**
-	 * Return whether the specified character is "non-regular" for the second
-	 * and subsequent characters of a name.
-	 */
-	boolean characterIsNonRegularNamePart(char c) {
-		return ! this.characterIsRegularNamePart(c);
-	}
-
-	/**
-	 * Return whether the specified character is <em>regular</em> for the second and
-	 * subsequent characters of a name.
-	 * The second and subsequent characters of a <em>regular</em> name can be:<ul>
-	 * <li>a letter
-	 * <li>a digit
-	 * <li>an underscore
-	 * <li>any of the extended, vendor-specific, <em>regular</em> start characters
-	 * <li>any of the extended, vendor-specific, <em>regular</em> part characters
-	 * </ul>
-	 */
-	boolean characterIsRegularNamePart(char c) {
-		// all vendors allow a letter or digit
-		return Character.isLetterOrDigit(c) ||
-				(c == '_') ||
-				this.characterIsExtendedRegularNameStart(c) ||
-				this.characterIsExtendedRegularNamePart(c);
-	}
-
-	boolean characterIsExtendedRegularNamePart(char c) {
-		return arrayContains(this.getExtendedRegularNamePartCharacters(), c);
-	}
-
-	/**
-	 * Return the <em>regular</em> characters, beyond letters and digits and the
-	 * <em>regular</em> first characters, for the second and subsequent characters
-	 * of an identifier. Return <code>null</code> if there are no additional characters.
-	 */
-	char[] getExtendedRegularNamePartCharacters() {
-		return null;
-	}
-
-	/**
-	 * Return whether the specified name is not folded to the database's
-	 * case, requiring it to be delimited.
-	 */
-	boolean nameIsNotFolded(String name) {
-		return ! this.getFoldingStrategy().nameIsFolded(name);
-	}
-
-	/**
-	 * Return whether the specified <em>regular</em> names match.
-	 */
-	boolean regularNamesMatch(String name1, String name2) {
-		return this.regularIdentifiersAreCaseSensitive() ?
-						name1.equals(name2) :
-						name1.equalsIgnoreCase(name2);
-	}
-
-	/**
-	 * Typically, <em>regular</em> identifiers are case-insensitive.
-	 */
-	boolean regularIdentifiersAreCaseSensitive() {
-		return this.getFoldingStrategy().regularIdentifiersAreCaseSensitive();
-	}
-
-	/**
-	 * Wrap the specified name in delimiters (typically double-quotes),
-	 * converting it to an identifier.
-	 */
-	String delimitName(String name) {
-		return StringTools.quote(name);
-	}
-
-
-	// ********** identifier -> name **********
-
-	// not sure how to handle an empty string:
-	// both "" and "\"\"" are converted to "" ...
-	// convert "" to 'null' since empty strings must be delimited?
-	public String convertIdentifierToName(String identifier) {
-		return (identifier == null) ?
-					null :
-					this.identifierIsDelimited(identifier) ?
-							StringTools.undelimit(identifier) :
-							this.getFoldingStrategy().fold(identifier);
-	}
-
-	/**
-	 * Return whether the specified identifier is <em>delimited</em>.
-	 * The SQL-92 spec says identifiers should be delimited by
-	 * double-quotes; but some databases allow otherwise (e.g. Sybase).
-	 */
-	boolean identifierIsDelimited(String identifier) {
-		return StringTools.stringIsQuoted(identifier);
-	}
-
-
-	// ********** misc **********
-
-	@Override
-	public String toString() {
-		return this.getDTPVendorName();
-	}
-
-	/**
-	 * static convenience method - array null check
-	 */
-	static boolean arrayContains(char[] array, char c) {
-		return (array != null) && ArrayTools.contains(array, c);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/CatalogStrategy.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/CatalogStrategy.java
deleted file mode 100644
index 9c7a4b5..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/CatalogStrategy.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.List;
-
-import org.eclipse.datatools.modelbase.sql.schema.Catalog;
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-import org.eclipse.datatools.modelbase.sql.schema.Schema;
-
-/**
- * Handle the variety of catalog (and schema) configurations generated by DTP.
- */
-interface CatalogStrategy {
-
-	/**
-	 * Return whether the DTP database has real catalogs.
-	 */
-	boolean supportsCatalogs(Database database);
-
-	/**
-	 * Return the specified database's catalogs.
-	 */
-	List<Catalog> getCatalogs(Database database);
-
-	/**
-	 * Return the specified database's schemas.
-	 */
-	List<Schema> getSchemas(Database database);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/DB2.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/DB2.java
deleted file mode 100644
index 1dc8a4a..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/DB2.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-class DB2
-	extends AbstractVendor
-{
-	private final String dtpVendorName;
-
-	private static final Vendor UDB = new DB2("DB2 UDB"); //$NON-NLS-1$
-	private static final Vendor UDB_I_SERIES = new DB2("DB2 UDB iSeries"); //$NON-NLS-1$
-	private static final Vendor UDB_Z_SERIES = new DB2("DB2 UDB zSeries"); //$NON-NLS-1$
-
-	static Vendor udb() {
-		return UDB;
-	}
-
-	static Vendor udbISeries() {
-		return UDB_I_SERIES;
-	}
-
-	static Vendor udbZSeries() {
-		return UDB_Z_SERIES;
-	}
-
-	/**
-	 * Ensure only static instances.
-	 */
-	private DB2(String dtpVendorName) {
-		super();
-		this.dtpVendorName = dtpVendorName;
-	}
-
-	@Override
-	public String getDTPVendorName() {
-		return this.dtpVendorName;
-	}
-
-	@Override
-	CatalogStrategy getCatalogStrategy() {
-		return UnknownCatalogStrategy.instance();  // not verified yet...
-	}
-
-	@Override
-	FoldingStrategy getFoldingStrategy() {
-		return UpperCaseFoldingStrategy.instance();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Derby.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Derby.java
deleted file mode 100644
index bed4489..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Derby.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.ArrayList;
-
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-
-class Derby
-	extends AbstractVendor
-{
-	// singleton
-	private static final Vendor INSTANCE = new Derby();
-
-	/**
-	 * Return the singleton.
-	 */
-	static Vendor instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private Derby() {
-		super();
-	}
-
-	@Override
-	public String getDTPVendorName() {
-		return "Derby"; //$NON-NLS-1$
-	}
-
-	@Override
-	CatalogStrategy getCatalogStrategy() {
-		return FauxCatalogStrategy.instance();
-	}
-
-	@Override
-	FoldingStrategy getFoldingStrategy() {
-		return UpperCaseFoldingStrategy.instance();
-	}
-
-	@Override
-	void addDefaultSchemaNamesTo(Database database, String userName, ArrayList<String> names) {
-		names.add(this.buildDefaultSchemaName(userName));
-	}
-
-	/**
-	 * The default user name on Derby is "APP" when the user connects without
-	 * a user name.
-	 */
-	private String buildDefaultSchemaName(String userName) {
-		return ((userName != null) && (userName.length() != 0)) ?
-				this.convertIdentifierToName(userName) :
-				DEFAULT_USER_NAME;
-	}
-	private static final String DEFAULT_USER_NAME = "APP";  //$NON-NLS-1$
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/FauxCatalogStrategy.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/FauxCatalogStrategy.java
deleted file mode 100644
index b269cf5..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/FauxCatalogStrategy.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.datatools.modelbase.sql.schema.Catalog;
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-import org.eclipse.datatools.modelbase.sql.schema.Schema;
-
-/**
- * Catalog strategy for DTP databases that build a "virtual" catalog (that has
- * no name) because the underlying JDBC driver does not return any catalogs
- * (e.g. Oracle).
- * @see java.sql.DatabaseMetaData#getCatalogs()
- */
-class FauxCatalogStrategy
-	implements CatalogStrategy
-{
-	// singleton
-	private static final CatalogStrategy INSTANCE = new FauxCatalogStrategy();
-
-	/**
-	 * Return the singleton.
-	 */
-	static CatalogStrategy instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private FauxCatalogStrategy() {
-		super();
-	}
-
-	public boolean supportsCatalogs(Database database) {
-		return false;
-	}
-
-	public List<Catalog> getCatalogs(Database database) {
-		return Collections.emptyList();
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<Schema> getSchemas(Database database) {
-		// 308947 - hack to support old IBM DTP/RDB extension for Oracle
-		List<Catalog> catalogs = database.getCatalogs();
-		// if there are no catalogs, the database must hold the schemata directly
-		if ((catalogs == null) || catalogs.isEmpty()) {
-			return database.getSchemas();
-		}
-
-		// normal logic:
-		return this.getFauxCatalog(database.getCatalogs()).getSchemas();
-	}
-
-	private Catalog getFauxCatalog(List<Catalog> catalogs) {
-		if (catalogs == null) {
-			throw new IllegalStateException();
-		}
-		if (catalogs.size() != 1) {
-			throw new IllegalStateException("not a single catalog: " + catalogs.size()); //$NON-NLS-1$
-		}
-
-		Catalog catalog = catalogs.get(0);
-		if (catalog.getName().length() != 0) {
-			throw new IllegalStateException("illegal name: " + catalog.getName()); //$NON-NLS-1$
-		}
-		return catalog;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/FoldingStrategy.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/FoldingStrategy.java
deleted file mode 100644
index 2a80289..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/FoldingStrategy.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-/**
- * Handle database-specific identifier-folding issues.
- */
-interface FoldingStrategy {
-
-	/**
-	 * Fold the specified name.
-	 */
-	String fold(String name);
-
-	/**
-	 * Return whether the specified database object name is already folded,
-	 * meaning, if it has no special characters, it requires no delimiters.
-	 */
-	boolean nameIsFolded(String name);
-
-	/**
-	 * Return whether the database is case-sensitive when using "regular"
-	 * (i.e. non-delimited) identifiers.
-	 */
-	boolean regularIdentifiersAreCaseSensitive();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/HSQLDB.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/HSQLDB.java
deleted file mode 100644
index 3be0393..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/HSQLDB.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.ArrayList;
-
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-
-class HSQLDB
-	extends AbstractVendor
-{
-	// singleton
-	private static final Vendor INSTANCE = new HSQLDB();
-
-	/**
-	 * Return the singleton.
-	 */
-	static Vendor instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private HSQLDB() {
-		super();
-	}
-
-	@Override
-	public String getDTPVendorName() {
-		return "HSQLDB"; //$NON-NLS-1$
-	}
-
-	@Override
-	CatalogStrategy getCatalogStrategy() {
-		return UnknownCatalogStrategy.instance();  // not verified yet...
-	}
-
-	@Override
-	FoldingStrategy getFoldingStrategy() {
-		return UpperCaseFoldingStrategy.instance();
-	}
-
-	@Override
-	void addDefaultSchemaNamesTo(Database database, String userName, ArrayList<String> names) {
-		names.add(PUBLIC_SCHEMA_NAME);
-	}
-	private static final String PUBLIC_SCHEMA_NAME = "PUBLIC";  //$NON-NLS-1$
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Informix.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Informix.java
deleted file mode 100644
index f4de2a9..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Informix.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-class Informix
-	extends AbstractVendor
-{
-	// singleton
-	private static final Vendor INSTANCE = new Informix();
-
-	/**
-	 * Return the singleton.
-	 */
-	static Vendor instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private Informix() {
-		super();
-	}
-
-	@Override
-	public String getDTPVendorName() {
-		return "Informix"; //$NON-NLS-1$
-	}
-
-	@Override
-	CatalogStrategy getCatalogStrategy() {
-		return UnknownCatalogStrategy.instance();  // not verified yet...
-	}
-
-	@Override
-	FoldingStrategy getFoldingStrategy() {
-		return LowerCaseFoldingStrategy.instance();
-	}
-
-	@Override
-	char[] getExtendedRegularNameStartCharacters() {
-		return EXTENDED_REGULAR_NAME_START_CHARACTERS;
-	}
-	private static final char[] EXTENDED_REGULAR_NAME_START_CHARACTERS = new char[] { '_' };
-
-	@Override
-	char[] getExtendedRegularNamePartCharacters() {
-		return EXTENDED_REGULAR_NAME_PART_CHARACTERS;
-	}
-	private static final char[] EXTENDED_REGULAR_NAME_PART_CHARACTERS = new char[] { '$' };
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/LowerCaseFoldingStrategy.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/LowerCaseFoldingStrategy.java
deleted file mode 100644
index 73e1974..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/LowerCaseFoldingStrategy.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * Fold "normal" identifiers to lower case.
- * Ignore the case of "normal" identifiers.
- */
-class LowerCaseFoldingStrategy
-	implements FoldingStrategy
-{
-
-	// singleton
-	private static final FoldingStrategy INSTANCE = new LowerCaseFoldingStrategy();
-
-	/**
-	 * Return the singleton.
-	 */
-	static FoldingStrategy instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private LowerCaseFoldingStrategy() {
-		super();
-	}
-
-	public String fold(String name) {
-		return name.toLowerCase();
-	}
-
-	public boolean nameIsFolded(String name) {
-		return StringTools.stringIsLowercase(name);
-	}
-
-	public boolean regularIdentifiersAreCaseSensitive() {
-		return false;
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getSimpleName();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/MaxDB.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/MaxDB.java
deleted file mode 100644
index 4f28782..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/MaxDB.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-class MaxDB
-	extends AbstractVendor
-{
-	// singleton
-	private static final Vendor INSTANCE = new MaxDB();
-
-	/**
-	 * Return the singleton.
-	 */
-	static Vendor instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private MaxDB() {
-		super();
-	}
-
-	@Override
-	public String getDTPVendorName() {
-		return "MaxDB"; //$NON-NLS-1$
-	}
-
-	@Override
-	CatalogStrategy getCatalogStrategy() {
-		return UnknownCatalogStrategy.instance();  // not verified yet...
-	}
-
-	@Override
-	FoldingStrategy getFoldingStrategy() {
-		return UpperCaseFoldingStrategy.instance();
-	}
-
-	@Override
-	char[] getExtendedRegularNameStartCharacters() {
-		return EXTENDED_REGULAR_NAME_START_CHARACTERS;
-	}
-	private static final char[] EXTENDED_REGULAR_NAME_START_CHARACTERS = new char[] { '#', '@', '$' };
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/MySQL.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/MySQL.java
deleted file mode 100644
index 210fea3..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/MySQL.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.ArrayList;
-
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-class MySQL
-	extends AbstractVendor
-{
-	// singleton
-	private static final Vendor INSTANCE = new MySQL();
-
-	/**
-	 * Return the singleton.
-	 */
-	static Vendor instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private MySQL() {
-		super();
-	}
-
-	@Override
-	public String getDTPVendorName() {
-		return "MySql"; //$NON-NLS-1$
-	}
-
-	/**
-	 * The DTP model for MySQL has a database that contains no catalogs;
-	 * but, instead, directly holds a single schema with the same name as
-	 * the database. (This is hard-coded in MySqlCatalogDatabase.getSchemas().)
-	 * Although you can qualify identifiers with a database name
-	 * in MySQL, only the database specified at login seems to be available
-	 * in the DTP model....
-	 * 
-	 * NB: In MySQL DDL, SCHEMA is a synonym for DATABASE; but the JDBC
-	 * method DatabaseMetaData.getSchemas() returns an empty list,
-	 * while getCatalogs() returns a list of the available databases.
-	 * You can also use the JDBC method Connection.setCatalog(String) to
-	 * set the default database.
-	 */
-	@Override
-	CatalogStrategy getCatalogStrategy() {
-		return NoCatalogStrategy.instance();
-	}
-
-	/**
-	 * MySQL is a bit unusual, so we force exact matches.
-	 * (e.g. MySQL folds database and table names to lowercase on Windows
-	 * by default; but that default can be changed by the
-	 * 'lower_case_table_names' system variable. This is because databases are
-	 * stored as directories and tables are stored as files in the underlying
-	 * O/S; and the case-sensitivity of the names is determined by the behavior
-	 * of filenames on the O/S. Then, to complicate things,
-	 * none of the other identifiers, like index and column names, are folded;
-	 * but they are case-insensitive, unless delimited. See
-	 * http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html.)
-	 */
-	@Override
-	FoldingStrategy getFoldingStrategy() {
-		return NonFoldingStrategy.instance();
-	}
-
-	@Override
-	void addDefaultSchemaNamesTo(Database database, String userName, ArrayList<String> names) {
-		names.add(database.getName());
-	}
-
-	/**
-	 * MySQL is the only vendor that allows a digit.
-	 * Although, the name cannnot be *all* digits.
-	 */
-	@Override
-	boolean characterIsRegularNameStart(char c) {
-		return Character.isDigit(c) || super.characterIsRegularNameStart(c);
-	}
-
-	@Override
-	char[] getExtendedRegularNameStartCharacters() {
-		return EXTENDED_REGULAR_NAME_START_CHARACTERS;
-	}
-	private static final char[] EXTENDED_REGULAR_NAME_START_CHARACTERS = new char[] { '_', '$' };
-
-	/**
-	 * By default, MySQL delimits identifiers with backticks (`); but it
-	 * can also be configured to use double-quotes.
-	 */
-	@Override
-	boolean identifierIsDelimited(String identifier) {
-		return StringTools.stringIsDelimited(identifier, BACKTICK)
-					|| super.identifierIsDelimited(identifier);
-	}
-	private static final char BACKTICK = '`';
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/NoCatalogStrategy.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/NoCatalogStrategy.java
deleted file mode 100644
index a7fb79d..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/NoCatalogStrategy.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.datatools.modelbase.sql.schema.Catalog;
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-import org.eclipse.datatools.modelbase.sql.schema.Schema;
-
-/**
- * Catalog strategy for DTP databases that do not have catalogs
- * (e.g. MySQL see bug 249013).
- */
-class NoCatalogStrategy
-	implements CatalogStrategy
-{
-	// singleton
-	private static final CatalogStrategy INSTANCE = new NoCatalogStrategy();
-
-	/**
-	 * Return the singleton.
-	 */
-	static CatalogStrategy instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private NoCatalogStrategy() {
-		super();
-	}
-
-	public boolean supportsCatalogs(Database database) {
-		return false;
-	}
-
-	public List<Catalog> getCatalogs(Database database) {
-		return Collections.emptyList();
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<Schema> getSchemas(Database database) {
-		return database.getSchemas();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/NonFoldingStrategy.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/NonFoldingStrategy.java
deleted file mode 100644
index e943d18..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/NonFoldingStrategy.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-
-/**
- * Do not fold "normal" identifiers.
- * Respect the case of "normal" identifiers.
- */
-class NonFoldingStrategy
-	implements FoldingStrategy
-{
-
-	// singleton
-	private static final FoldingStrategy INSTANCE = new NonFoldingStrategy();
-
-	/**
-	 * Return the singleton.
-	 */
-	static FoldingStrategy instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private NonFoldingStrategy() {
-		super();
-	}
-
-	/**
-	 * Since identifiers are not folded to upper- or lower-case, the name is
-	 * already "folded".
-	 */
-	public String fold(String name) {
-		return name;
-	}
-
-	/**
-	 * Since identifiers are not folded to upper- or lower-case, the name is
-	 * already "folded".
-	 * (Non-folding databases do not require delimiters around mixed-case
-	 * "normal" identifiers.)
-	 */
-	public boolean nameIsFolded(String name) {
-		return true;
-	}
-
-	public boolean regularIdentifiersAreCaseSensitive() {
-		return true;
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getSimpleName();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Oracle.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Oracle.java
deleted file mode 100644
index f6e6776..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Oracle.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-class Oracle
-	extends AbstractVendor
-{
-	// singleton
-	private static final Vendor INSTANCE = new Oracle();
-
-	/**
-	 * Return the singleton.
-	 */
-	static Vendor instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private Oracle() {
-		super();
-	}
-
-	@Override
-	public String getDTPVendorName() {
-		return "Oracle"; //$NON-NLS-1$
-	}
-
-	@Override
-	CatalogStrategy getCatalogStrategy() {
-		return FauxCatalogStrategy.instance();
-	}
-
-	@Override
-	FoldingStrategy getFoldingStrategy() {
-		return UpperCaseFoldingStrategy.instance();
-	}
-
-	@Override
-	char[] getExtendedRegularNamePartCharacters() {
-		return EXTENDED_REGULAR_NAME_PART_CHARACTERS;
-	}
-	private static final char[] EXTENDED_REGULAR_NAME_PART_CHARACTERS = new char[] { '$', '#' };
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/PostgreSQL.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/PostgreSQL.java
deleted file mode 100644
index b55f5cb..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/PostgreSQL.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.ArrayList;
-
-import org.eclipse.datatools.modelbase.sql.schema.Catalog;
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-
-class PostgreSQL
-	extends AbstractVendor
-{
-	// singleton
-	private static final Vendor INSTANCE = new PostgreSQL();
-
-	/**
-	 * Return the singleton.
-	 */
-	static Vendor instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private PostgreSQL() {
-		super();
-	}
-
-	@Override
-	public String getDTPVendorName() {
-		return "postgres"; //$NON-NLS-1$
-	}
-
-	/**
-	 * The PostgreSQL JDBC driver returns a single catalog from the call to
-	 * DatabaseMetaData.getCatalogs() that has the same name as the
-	 * database initially specified by the connection (in the JDBC URL).
-	 * DTP uses this configuration unmodified. Unfortunately, the DTP
-	 * database's name is not the same as the PostgreSQL database's
-	 * name.
-	 */
-	@Override
-	CatalogStrategy getCatalogStrategy() {
-		return SimpleCatalogStrategy.instance();
-	}
-
-	@Override
-	FoldingStrategy getFoldingStrategy() {
-		return LowerCaseFoldingStrategy.instance();
-	}
-
-	/**
-	 * The PostgreSQL database holds a single catalog that has the same name as
-	 * the database.
-	 */
-	@Override
-	void addDefaultCatalogNamesTo(Database database, String userName, ArrayList<String> names) {
-		names.add(this.buildDefaultCatalogName(database));
-	}
-
-	private String buildDefaultCatalogName(Database database) {
-		return ((Catalog) database.getCatalogs().get(0)).getName();
-	}
-
-	/**
-	 * PostgreSQL has a "schema search path". The default is:
-	 *     "$user",public
-	 * If the "$user" schema is not found, use the "public" schema.
-	 */
-	@Override
-	void addDefaultSchemaNamesTo(Database database, String userName, ArrayList<String> names) {
-		super.addDefaultSchemaNamesTo(database, userName, names);
-		names.add(PUBLIC_SCHEMA_NAME);
-	}
-	private static final String PUBLIC_SCHEMA_NAME = "public";  //$NON-NLS-1$
-
-	@Override
-	char[] getExtendedRegularNameStartCharacters() {
-		return EXTENDED_REGULAR_NAME_START_CHARACTERS;
-	}
-	private static final char[] EXTENDED_REGULAR_NAME_START_CHARACTERS = new char[] { '_' };
-
-	@Override
-	char[] getExtendedRegularNamePartCharacters() {
-		return EXTENDED_REGULAR_NAME_PART_CHARACTERS;
-	}
-	private static final char[] EXTENDED_REGULAR_NAME_PART_CHARACTERS = new char[] { '$' };
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/SQLServer.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/SQLServer.java
deleted file mode 100644
index fccef59..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/SQLServer.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.ArrayList;
-
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-class SQLServer
-	extends AbstractVendor
-{
-	// singleton
-	private static final Vendor INSTANCE = new SQLServer();
-
-	/**
-	 * Return the singleton.
-	 */
-	static Vendor instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private SQLServer() {
-		super();
-	}
-
-	@Override
-	public String getDTPVendorName() {
-		return "SQL Server"; //$NON-NLS-1$
-	}
-
-	@Override
-	CatalogStrategy getCatalogStrategy() {
-		return SimpleCatalogStrategy.instance();
-	}
-
-	/**
-	 * By default, SQL Server identifiers are case-sensitive, even without
-	 * delimiters. This can depend on the collation setting....
-	 */
-	@Override
-	FoldingStrategy getFoldingStrategy() {
-		return NonFoldingStrategy.instance();
-	}
-
-	/**
-	 * SQL Server will use the user-requested database; if that database is not
-	 * found, it will default to 'master'.
-	 */
-	@Override
-	void addDefaultCatalogNamesTo(Database database, String userName, ArrayList<String> names) {
-		names.add(database.getName());
-		names.add(MASTER_CATALOG_IDENTIFIER);
-	}
-	private static final String MASTER_CATALOG_IDENTIFIER = "master";  //$NON-NLS-1$
-
-	/**
-	 * The default schema on SQL Server for any database (catalog) is 'dbo'.
-	 */
-	@Override
-	void addDefaultSchemaNamesTo(Database database, String userName, ArrayList<String> names) {
-		names.add(DEFAULT_SCHEMA_NAME);
-	}
-	private static final String DEFAULT_SCHEMA_NAME = "dbo";  //$NON-NLS-1$
-
-	@Override
-	char[] getExtendedRegularNameStartCharacters() {
-		return EXTENDED_REGULAR_NAME_START_CHARACTERS;
-	}
-	private static final char[] EXTENDED_REGULAR_NAME_START_CHARACTERS = new char[] { '_', '@', '#' };
-
-	@Override
-	char[] getExtendedRegularNamePartCharacters() {
-		return EXTENDED_REGULAR_NAME_PART_CHARACTERS;
-	}
-	private static final char[] EXTENDED_REGULAR_NAME_PART_CHARACTERS = new char[] { '$' };
-
-	/**
-	 * By default, SQL Server delimits identifiers with brackets ([]); but it
-	 * can also be configured to use double-quotes.
-	 */
-	@Override
-	boolean identifierIsDelimited(String identifier) {
-		return StringTools.stringIsBracketed(identifier)
-					|| super.identifierIsDelimited(identifier);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/SimpleCatalogStrategy.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/SimpleCatalogStrategy.java
deleted file mode 100644
index 8a1a041..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/SimpleCatalogStrategy.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.datatools.modelbase.sql.schema.Catalog;
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-import org.eclipse.datatools.modelbase.sql.schema.Schema;
-
-/**
- * Catalog strategy for DTP databases that simply model the catalogs returned
- * by the underlying JDBC driver (e.g. Sybase).
- * @see java.sql.DatabaseMetaData#getCatalogs()
- */
-class SimpleCatalogStrategy
-	implements CatalogStrategy
-{
-	// singleton
-	private static final CatalogStrategy INSTANCE = new SimpleCatalogStrategy();
-
-	/**
-	 * Return the singleton.
-	 */
-	static CatalogStrategy instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private SimpleCatalogStrategy() {
-		super();
-	}
-
-	public boolean supportsCatalogs(Database database) {
-		return true;
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<Catalog> getCatalogs(Database database) {
-		return database.getCatalogs();
-	}
-
-	public List<Schema> getSchemas(Database database) {
-		return Collections.emptyList();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Sybase.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Sybase.java
deleted file mode 100644
index e90b9b9..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Sybase.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.ArrayList;
-
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-class Sybase
-	extends AbstractVendor
-{
-	private final String dtpVendorName;
-
-	static final Vendor ASA = new Sybase("Sybase_ASA"); //$NON-NLS-1$
-	static final Vendor ASE = new Sybase("Sybase_ASE"); //$NON-NLS-1$
-
-	static Vendor asa() {
-		return ASA;
-	}
-
-	static Vendor ase() {
-		return ASE;
-	}
-
-	/**
-	 * Ensure only static instances.
-	 */
-	private Sybase(String dtpVendorName) {
-		super();
-		this.dtpVendorName = dtpVendorName;
-	}
-
-	@Override
-	public String getDTPVendorName() {
-		return this.dtpVendorName;
-	}
-
-	@Override
-	CatalogStrategy getCatalogStrategy() {
-		return SimpleCatalogStrategy.instance();
-	}
-
-	/**
-	 * By default, Sybase identifiers are case-sensitive, even without
-	 * delimiters. This can depend on the collation setting....
-	 */
-	@Override
-	FoldingStrategy getFoldingStrategy() {
-		return NonFoldingStrategy.instance();
-	}
-
-	/**
-	 * Sybase will use the user-requested database; if that database is not
-	 * found, it will default to 'master'.
-	 */
-	@Override
-	void addDefaultCatalogNamesTo(Database database, String userName, ArrayList<String> names) {
-		names.add(database.getName());
-		names.add(MASTER_CATALOG_NAME);
-	}
-	private static final String MASTER_CATALOG_NAME = "master";  //$NON-NLS-1$
-
-	/**
-	 * The typical default schema on Sybase for any database (catalog) is
-	 * 'dbo'.
-	 * 
-	 * Actually, the default schema is more like a search path:
-	 * The server looks for a schema object (e.g. a table) first in the user's
-	 * schema, then it looks for the schema object in the database owner's
-	 * schema (dbo). As a result, it's really not possible to specify
-	 * the "default" schema without knowing the schema object we are
-	 * looking for.
-	 * 
-	 * (Note: the current 'user' is not the same thing as the current
-	 * 'login' - see sp_adduser and sp_addlogin; so we probably can't
-	 * use ConnectionProfile#getUserName().)
-	 */
-	@Override
-	void addDefaultSchemaNamesTo(Database database, String userName, ArrayList<String> names) {
-		names.add(DEFAULT_SCHEMA_NAME);
-	}
-	private static final String DEFAULT_SCHEMA_NAME = "dbo";  //$NON-NLS-1$
-
-	@Override
-	char[] getExtendedRegularNameStartCharacters() {
-		return EXTENDED_REGULAR_NAME_START_CHARACTERS;
-	}
-	private static final char[] EXTENDED_REGULAR_NAME_START_CHARACTERS = new char[] { '_', '@' };
-
-	@Override
-	char[] getExtendedRegularNamePartCharacters() {
-		return EXTENDED_REGULAR_NAME_PART_CHARACTERS;
-	}
-	private static final char[] EXTENDED_REGULAR_NAME_PART_CHARACTERS = new char[] { '$', '¥', '£', '#' };
-
-	/**
-	 * By default, Sybase delimits identifiers with brackets ([]); but it
-	 * can also be configured to use double-quotes.
-	 */
-	@Override
-	boolean identifierIsDelimited(String identifier) {
-		return StringTools.stringIsBracketed(identifier)
-					|| super.identifierIsDelimited(identifier);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/UnknownCatalogStrategy.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/UnknownCatalogStrategy.java
deleted file mode 100644
index ea9a729..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/UnknownCatalogStrategy.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.datatools.modelbase.sql.schema.Catalog;
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-import org.eclipse.datatools.modelbase.sql.schema.Schema;
-
-/**
- * Catalog strategy for unknown DTP databases.
- * @see java.sql.DatabaseMetaData#getCatalogs()
- */
-class UnknownCatalogStrategy
-	implements CatalogStrategy
-{
-	// singleton
-	private static final CatalogStrategy INSTANCE = new UnknownCatalogStrategy();
-
-	/**
-	 * Return the singleton.
-	 */
-	static CatalogStrategy instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private UnknownCatalogStrategy() {
-		super();
-	}
-
-	@SuppressWarnings("unchecked")
-	public boolean supportsCatalogs(Database database) {
-		List<Catalog> catalogs = database.getCatalogs();
-		if ((catalogs == null) || catalogs.isEmpty()) {
-			return false;
-		}
-
-		return this.getFauxCatalog(catalogs) == null;
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<Catalog> getCatalogs(Database database) {
-		List<Catalog> catalogs = database.getCatalogs();
-		// if there are no catalogs, the database must hold the schemata directly
-		if ((catalogs == null) || catalogs.isEmpty()) {
-			return Collections.emptyList();
-		}
-
-		Catalog fauxCatalog = this.getFauxCatalog(catalogs);
-		return (fauxCatalog == null) ? catalogs : Collections.<Catalog>emptyList();
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<Schema> getSchemas(Database database) {
-		List<Catalog> catalogs = database.getCatalogs();
-		// if there are no catalogs, the database must hold the schemata directly
-		if ((catalogs == null) || catalogs.isEmpty()) {
-			return database.getSchemas();
-		}
-
-		Catalog fauxCatalog = this.getFauxCatalog(catalogs);
-		return (fauxCatalog != null) ? fauxCatalog.getSchemas() : Collections.emptyList();
-	}
-
-	private Catalog getFauxCatalog(List<Catalog> catalogs) {
-		if (catalogs.size() == 1) {
-			Catalog catalog = catalogs.get(0);
-			if (catalog.getName().equals("")) { //$NON-NLS-1$
-				return catalog;
-			}
-		}
-		return null;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/UnrecognizedVendor.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/UnrecognizedVendor.java
deleted file mode 100644
index f575123..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/UnrecognizedVendor.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-/**
- * 
- */
-class UnrecognizedVendor
-	extends AbstractVendor
-{
-	// singleton
-	private static final Vendor INSTANCE = new UnrecognizedVendor();
-
-	/**
-	 * Return the singleton.
-	 */
-	static Vendor instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private UnrecognizedVendor() {
-		super();
-	}
-
-	@Override
-	public String getDTPVendorName() {
-		return "Unrecognized Vendor"; //$NON-NLS-1$
-	}
-
-	/**
-	 * Not sure what to do here....
-	 * Assume the DTP database is organized into one or more catalogs and
-	 * the schemata are contained by those catalogs. This appears to be the
-	 * default way DTP builds models these days (i.e. a database with at
-	 * least one catalog, instead of the database holding schemata
-	 * directly).
-	 */
-	@Override
-	CatalogStrategy getCatalogStrategy() {
-		return UnknownCatalogStrategy.instance();
-	}
-
-	@Override
-	FoldingStrategy getFoldingStrategy() {
-		return UpperCaseFoldingStrategy.instance();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/UpperCaseFoldingStrategy.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/UpperCaseFoldingStrategy.java
deleted file mode 100644
index f3e8896..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/UpperCaseFoldingStrategy.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * Fold "normal" identifiers to upper case.
- * Ignore the case of "normal" identifiers.
- */
-class UpperCaseFoldingStrategy
-	implements FoldingStrategy
-{
-
-	// singleton
-	private static final FoldingStrategy INSTANCE = new UpperCaseFoldingStrategy();
-
-	/**
-	 * Return the singleton.
-	 */
-	static FoldingStrategy instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private UpperCaseFoldingStrategy() {
-		super();
-	}
-
-	public String fold(String name) {
-		return name.toUpperCase();
-	}
-
-	public boolean nameIsFolded(String name) {
-		return StringTools.stringIsUppercase(name);
-	}
-
-	public boolean regularIdentifiersAreCaseSensitive() {
-		return false;
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getSimpleName();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Vendor.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Vendor.java
deleted file mode 100644
index d2a2d0a..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/Vendor.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.List;
-
-import org.eclipse.datatools.modelbase.sql.schema.Catalog;
-import org.eclipse.datatools.modelbase.sql.schema.Database;
-import org.eclipse.datatools.modelbase.sql.schema.Schema;
-
-/**
- * Delegate vendor-specific behavior to implementations of this interface:<ul>
- *   <li>catalog support
- *   <li>default catalog and schema
- *   <li>converting names to identifiers and vice-versa
- * </ul>
- * <strong>NB:</strong><br>
- * We use <em>name</em> when dealing with the unmodified name of a database object
- * as supplied by the database itself (i.e. it is not delimited and it is always
- * case-sensitive).
- * <br>
- * We use <em>identifier</em> when dealing with a string representation of a database
- * object name (i.e. it may be delimited and, depending on the vendor, it may
- * be case-insensitive).
- */
-public interface Vendor {
-
-	/**
-	 * This must match the DTP vendor name.
-	 * @see org.eclipse.datatools.modelbase.sql.schema.Database#getVendor()
-	 */
-	String getDTPVendorName();
-
-	/**
-	 * Return whether the vendor supports "real" catalogs (e.g. Sybase).
-	 */
-	boolean supportsCatalogs(Database database);
-
-	/**
-	 * Return the specified database's catalogs.
-	 */
-	List<Catalog> getCatalogs(Database database);
-
-	/**
-	 * Return the specified database's default catalog names for the
-	 * specified user. The first name in the list that identifies a catalog
-	 * that exists is "the" default.
-	 */
-	Iterable<String> getDefaultCatalogNames(Database database, String userName);
-
-	/**
-	 * Return the specified database's schemas.
-	 */
-	List<Schema> getSchemas(Database database);
-
-	/**
-	 * Return the specified database's default schema names for the
-	 * specified user. The first name in the list that identifies a schema
-	 * that exists is "the" default.
-	 */
-	Iterable<String> getDefaultSchemaNames(Database database, String userName);
-
-	/**
-	 * Convert the specified database object name to a vendor identifier.
-	 * Return <code>null</code> if the identifier matches the specified default name.
-	 */
-	String convertNameToIdentifier(String name, String defaultName);
-
-	/**
-	 * Convert the specified database object name to a vendor identifier.
-	 */
-	String convertNameToIdentifier(String name);
-
-	/**
-	 * Convert the specified database object identifier to a vendor name.
-	 */
-	String convertIdentifierToName(String identifier);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/VendorRepository.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/VendorRepository.java
deleted file mode 100644
index 468f09e..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/vendor/VendorRepository.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.internal.vendor;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-public class VendorRepository {
-	private final Vendor[] vendors;
-
-	// singleton
-	private static final VendorRepository INSTANCE = new VendorRepository();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static VendorRepository instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private VendorRepository() {
-		super();
-		this.vendors = this.buildVendors();
-	}
-
-	private Vendor[] buildVendors() {
-		ArrayList<Vendor> list = new ArrayList<Vendor>();
-		this.addVendorsTo(list);
-		return list.toArray(new Vendor[list.size()]);
-	}
-
-	private void addVendorsTo(ArrayList<Vendor> list) {
-		this.addVendorTo(DB2.udb(), list);
-		this.addVendorTo(DB2.udbISeries(), list);
-		this.addVendorTo(DB2.udbZSeries(), list);
-		this.addVendorTo(Derby.instance(), list);
-		this.addVendorTo(HSQLDB.instance(), list);
-		this.addVendorTo(Informix.instance(), list);
-		this.addVendorTo(MaxDB.instance(), list);
-		this.addVendorTo(MySQL.instance(), list);
-		this.addVendorTo(Oracle.instance(), list);
-		this.addVendorTo(PostgreSQL.instance(), list);
-		this.addVendorTo(SQLServer.instance(), list);
-		this.addVendorTo(Sybase.asa(), list);
-		this.addVendorTo(Sybase.ase(), list);
-	}
-
-	private void addVendorTo(Vendor vendor, ArrayList<Vendor> list) {
-		String name = vendor.getDTPVendorName();
-		for (Iterator<Vendor> stream = list.iterator(); stream.hasNext(); ) {
-			if (stream.next().getDTPVendorName().equals(name)) {
-				throw new IllegalArgumentException("Duplicate vendor: " + name); //$NON-NLS-1$
-			}
-		}
-		list.add(vendor);
-	}
-
-	public Vendor getVendor(String dtpVendorName) {
-		for (int i = this.vendors.length; i-- > 0;) {
-			Vendor vendor = this.vendors[i];
-			if (vendor.getDTPVendorName().equals(dtpVendorName)) {
-				return vendor;
-			}
-		}
-		return UnrecognizedVendor.instance();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.classpath b/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.classpath
deleted file mode 100644
index 21afecb..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry exported="true" kind="lib" path="lib/persistence.jar" sourcepath="org.eclipse.jpt.eclipselink.core.ddlgensrc.zip"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.cvsignore b/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.cvsignore
deleted file mode 100644
index c5e82d7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.project b/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.project
deleted file mode 100644
index 376311f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.eclipselink.core.ddlgen</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.settings/org.eclipse.core.resources.prefs b/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 11155f4..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Mon Apr 07 14:26:54 EDT 2008
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.settings/org.eclipse.jdt.core.prefs b/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 8041bc2..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Wed Apr 30 17:24:41 EDT 2008
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/META-INF/MANIFEST.MF
deleted file mode 100644
index 1c78a00..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,13 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.eclipselink.core.ddlgen;singleton:=true
-Bundle-Version: 1.0.300.qualifier
-Bundle-ClassPath: lib/persistence.jar
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.jpt.eclipselink.core;bundle-version="[1.0.0,2.0.0)"
-Export-Package: javax.persistence,
- javax.persistence.spi,
- org.eclipse.jpt.eclipselink.core.ddlgen
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/about.html b/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/about.html
deleted file mode 100644
index 071f586..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/about.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H2>About This Content</H2>
-
-<P>May 02, 2008</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/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</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&#8217;s license for terms and conditions of use.</p>
-
-<h4><a name="JPA" id="JPA"></a>Java Persistence API (JPA) v1.0</h4>
-
-<blockquote>
-  <p>The Java Persistence API (JPA) which is distributed under <a href="https://glassfish.dev.java.net/public/CDDLv1.0.html">CDDL 
-    v1.0</a> is required by the Dali Java Persistence Tools Project in order 
-    to support this standard.</p>
-</blockquote>
-</BODY>
-</HTML>
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/build.properties b/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/build.properties
deleted file mode 100644
index b73ac1c..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2008 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-javacSource=1.5
-javacTarget=1.5
-source.. = src/
-output.. = bin/
-bin.includes = .,\
-               META-INF/,\
-               lib/persistence.jar,\
-               about.html,\
-               plugin.properties
-jars.compile.order = .
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/lib/persistence.jar b/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/lib/persistence.jar
deleted file mode 100644
index 1a1b232..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/lib/persistence.jar
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/plugin.properties b/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/plugin.properties
deleted file mode 100644
index 2968d38..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/plugin.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2009 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-# ====================================================================
-# To code developer:
-#   Do NOT change the properties between this line and the
-#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
-#   Make a new property name, append to the end of the file and change
-#   the code to use the new property.
-# ====================================================================
-
-# ====================================================================
-# %%% END OF TRANSLATED PROPERTIES %%%
-# ====================================================================
-
-pluginName = Dali Java Persistence Tools - EclipseLink Support - DDL Generation
-providerName = Eclipse Web Tools Platform
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/src/org/eclipse/jpt/eclipselink/core/ddlgen/Main.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/src/org/eclipse/jpt/eclipselink/core/ddlgen/Main.java
deleted file mode 100644
index 72f1bfb..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core.ddlgen/src/org/eclipse/jpt/eclipselink/core/ddlgen/Main.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2007, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.core.ddlgen;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.Map.Entry;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.schema.generation.SchemaGeneration;
-
-/** 
- * This class creates a EclipseLink <code>EntityManagerFactory</code>, 
- * and executes the DDL generator with the command set in the properties: 
- *     <code>eclipselink.ddl-generation.output-mode</code> 
- *     <code>eclipselink.application-location</code>
- * 
- * Current command-line arguments:
- *     [-pu puName] - persistence unit name
- *     [-p propertiesFilePath] - properties for EclipseLink EntityManager
- *  
- *  Example of a properties file:
- *  	eclipselink.jdbc.bind-parameters=false
- *  	eclipselink.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
- *  	eclipselink.jdbc.url=jdbc\:derby\:c\:/derbydb/testdb;create\=true
- *  	eclipselink.jdbc.user=tran
- *  	eclipselink.jdbc.password=
- *  	eclipselink.logging.level=FINEST
- *  	eclipselink.logging.timestamp=false
- *  	eclipselink.logging.thread=false
- *  	eclipselink.logging.session=false
- *  	eclipselink.logging.exceptions=true
- *  	eclipselink.orm.throw.exceptions=true
- *  	eclipselink.ddl-generation.output-mode=database
- *  	eclipselink.ddl-generation=drop-and-create-tables
- *  	eclipselink.application-location=c\:/_Projects_/ExampleDDL
- */
-public class Main
-{
-	protected EntityManagerFactory emf;
-	private Map<String, String> eclipseLinkProperties;
-	private String createDDLFileName;
-	private String dropDDLFileName;
-	private String appLocation;
-	private String eclipseLinkPropertiesPath;
-	private boolean isDebugMode;
-	
-	// ********** constructors **********
-	
-	public static void main(String[] args) {
-		new Main().execute(args);
-	}
-
-	private Main() {
-		super();
-	}
-
-	// ********** behavior **********
-	
-	protected void execute(String[] args) {
-		this.initializeWith(args);
-		
-		this.emf = Persistence.createEntityManagerFactory(this.getPUName(args), this.eclipseLinkProperties);
-		this.perform();
-		this.closeEntityManagerFactory();
-		
-		this.dispose();
-		return;
-	}
-	
-	protected void perform() {
-		// create an EM to generate schema.
-		this.emf.createEntityManager().close();
-	}
-	
-	protected void closeEntityManagerFactory() {
-		this.emf.close();
-	}
-	
-	private void initializeWith(String[] args) {
-
-		this.eclipseLinkPropertiesPath = this.getEclipseLinkPropertiesPath(args);
-		this.eclipseLinkProperties = this.getProperties(this.eclipseLinkPropertiesPath);
-		
-		this.createDDLFileName = this.getConfigPropertyAsString( 
-						SchemaGeneration.ECLIPSELINK_CREATE_FILE_NAME, 
-						this.eclipseLinkProperties,  
-						SchemaGeneration.DEFAULT_SCHEMA_GENERATION_CREATE_FILE_NAME);
-
-		this.dropDDLFileName = this.getConfigPropertyAsString(
-						SchemaGeneration.ECLIPSELINK_DROP_FILE_NAME, 
-						this.eclipseLinkProperties,  
-						SchemaGeneration.DEFAULT_SCHEMA_GENERATION_DROP_FILE_NAME); 
-		
-		this.appLocation = this.eclipseLinkProperties.get(
-						SchemaGeneration.ECLIPSELINK_APPLICATION_LOCATION);
-
-		this.isDebugMode = this.getDebugMode(args);
-	}
-	
-	private void dispose() {
-
-		if( ! this.isDebugMode) {
-			new File(this.appLocation + "/" + this.createDDLFileName).delete();
-			new File(this.appLocation + "/" + this.dropDDLFileName).delete();
-			new File(this.eclipseLinkPropertiesPath).delete();
-		}
-	}
-	
-	private Map<String, String> getProperties(String eclipseLinkPropertiesPath) {
-		
-		Set<Entry<Object, Object>> propertiesSet = null;
-		try {
-			propertiesSet = this.loadEclipseLinkProperties(eclipseLinkPropertiesPath);
-		}
-		catch (IOException e) {
-			throw new RuntimeException("Missing: " + eclipseLinkPropertiesPath, e);
-		}
-		
-		Map<String, String> properties = new HashMap<String, String>();
-		for(Entry<Object, Object> property : propertiesSet) {
-			properties.put((String)property.getKey(), (String)property.getValue());
-		}
-		return properties;
-	}
-
-    private Set<Entry<Object, Object>> loadEclipseLinkProperties(String eclipseLinkPropertiesPath) throws IOException {
-		
-        FileInputStream stream = new FileInputStream(eclipseLinkPropertiesPath);
-        
-        Properties properties = new Properties();
-        properties.load(stream);
-        
-        return properties.entrySet();
-	}
-
-	// ********** argument queries **********
-    
-	private String getPUName(String[] args) {
-
-		return this.getArgumentValue("-pu", args);
-	}
-	
-	private String getEclipseLinkPropertiesPath(String[] args) {
-
-		return this.getArgumentValue("-p", args);
-	}
-
-	private boolean getDebugMode(String[] args) {
-
-		return this.argumentExists("-debug", args);
-	}
-	
-	private String getArgumentValue(String argument, String[] args) {
-		for (int i = 0; i < args.length; i++) {
-			String arg = args[i];
-			if (arg.toLowerCase().equals(argument)) {
-				int j = i + 1;
-				if (j < args.length) {
-					return args[j];
-				}
-			}
-		}
-		return null;
-	}
-	
-	private boolean argumentExists(String argument, String[] args) {
-		for (int i = 0; i < args.length; i++) {
-			String arg = args[i];
-			if (arg.toLowerCase().equals(argument)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	// ****** utility methods *******
-	
-    /**
-     * Check the provided map for an object with the given key.  If that object is not available, check the
-     * System properties.  If it is not available from either location, return the default value.
-     * @param propertyKey 
-     * @param map 
-     * @param defaultValue 
-     * @return 
-     */
-    protected String getConfigPropertyAsString(String propertyKey, Map<String, String> overrides, String defaultValue){
-    	String value = this.getConfigPropertyAsString(propertyKey, overrides);
-        if (value == null){
-            value = defaultValue;
-        }
-        return value;
-    }
-    
-    protected String getConfigPropertyAsString(String propertyKey, Map<String, String> overrides){
-        String value = null;
-        if (overrides != null){
-            value = (String)overrides.get(propertyKey);
-        }
-        if (value == null){
-            value = System.getProperty(propertyKey);
-        }
-        return value;
-    }
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/.classpath b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/.classpath
deleted file mode 100644
index bbf9ced..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry exported="true" kind="lib" path="lib/eclipselink.jar" sourcepath="lib/eclipselink-src.zip"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/.cvsignore b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/.cvsignore
deleted file mode 100644
index c5e82d7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/.project b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/.project
deleted file mode 100644
index b85bb2e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.eclipselink.jaxb.core.schemagen</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/.settings/org.eclipse.jdt.core.prefs b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 8fb4ff7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,8 +0,0 @@
-#Tue Apr 13 12:12:27 EDT 2010
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/META-INF/MANIFEST.MF
deleted file mode 100644
index e4ebf62..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,11 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.eclipselink.jaxb.core.schemagen;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-ClassPath: lib/eclipselink.jar
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Import-Package: javax.xml.bind
-Export-Package: org.eclipse.jpt.eclipselink.jaxb.core.schemagen
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/about.html b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/about.html
deleted file mode 100644
index 071f586..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/about.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H2>About This Content</H2>
-
-<P>May 02, 2008</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/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</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&#8217;s license for terms and conditions of use.</p>
-
-<h4><a name="JPA" id="JPA"></a>Java Persistence API (JPA) v1.0</h4>
-
-<blockquote>
-  <p>The Java Persistence API (JPA) which is distributed under <a href="https://glassfish.dev.java.net/public/CDDLv1.0.html">CDDL 
-    v1.0</a> is required by the Dali Java Persistence Tools Project in order 
-    to support this standard.</p>
-</blockquote>
-</BODY>
-</HTML>
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/build.properties b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/build.properties
deleted file mode 100644
index a3ffe71..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2010 Oracle.
-# 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:
-#     Oracle. - initial API and implementation
-###############################################################################
-javacSource=1.5
-javacTarget=1.5
-source.. = src/
-output.. = bin/
-bin.includes = .,\
-               META-INF/,\
-               lib/eclipselink.jar,\
-               about.html,\
-               plugin.properties
-jars.compile.order = .
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/lib/eclipselink-src.zip b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/lib/eclipselink-src.zip
deleted file mode 100644
index 68a5393..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/lib/eclipselink-src.zip
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/lib/eclipselink.jar b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/lib/eclipselink.jar
deleted file mode 100644
index 855e644..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/lib/eclipselink.jar
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/plugin.properties b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/plugin.properties
deleted file mode 100644
index c057411..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/plugin.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-###############################################################################
-# Copyright (c) 2006, 2008 Oracle.
-# 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:
-#     Oracle. - initial API and implementation
-###############################################################################
-# ====================================================================
-# To code developer:
-#   Do NOT change the properties between this line and the
-#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
-#   Make a new property name, append to the end of the file and change
-#   the code to use the new property.
-# ====================================================================
-
-# ====================================================================
-# %%% END OF TRANSLATED PROPERTIES %%%
-# ====================================================================
-
-pluginName = Dali Java Persistence Tools - EclipseLink JAXB Support - Schema Generation
-providerName = Eclipse Web Tools Platform
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/src/org/eclipse/jpt/eclipselink/jaxb/core/schemagen/Main.java b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/src/org/eclipse/jpt/eclipselink/jaxb/core/schemagen/Main.java
deleted file mode 100644
index 2438b94..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/src/org/eclipse/jpt/eclipselink/jaxb/core/schemagen/Main.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.jaxb.core.schemagen;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.SchemaOutputResolver;
-import javax.xml.transform.Result;
-import javax.xml.transform.stream.StreamResult;
-
-import org.eclipse.jpt.eclipselink.jaxb.core.schemagen.internal.JptEclipseLinkJaxbCoreMessages;
-import org.eclipse.persistence.jaxb.JAXBContext;
-import org.eclipse.persistence.jaxb.JAXBContextFactory;
-
-/**
- *  Generate a EclipseLink JAXB Schema
- *  
- * Current command-line arguments:
- *     [-s schema.xsd] - specifies the target schema
- *     [-c className] - specifies the fully qualified class name
- */
-public class Main
-{
-	private String[] sourceClassNames;
-	private String targetSchemaName;
-	@SuppressWarnings("unused")
-	private boolean isDebugMode;
-
-	static public String NO_FACTORY_CLASS = "doesnt contain ObjectFactory.class";   //$NON-NLS-1$
-	static public String CANNOT_BE_CAST_TO_JAXBCONTEXT = "cannot be cast to org.eclipse.persistence.jaxb.JAXBContext";   //$NON-NLS-1$
-
-	// ********** static methods **********
-	
-	public static void main(String[] args) {
-		new Main().execute(args);
-	}
-	
-	// ********** constructors **********
-
-	private Main() {
-		super();
-	}
-
-	// ********** behavior **********
-	
-	protected void execute(String[] args) {
-		
-		this.initializeWith(args);
-		
-		this.generate();
-	}
-
-	// ********** internal methods **********
-    
-	private void initializeWith(String[] args) {
-    	this.sourceClassNames = this.getSourceClassNames(args);
-    	this.targetSchemaName = this.getTargetSchemaName(args);
-
-		this.isDebugMode = this.getDebugMode(args);
-	}
-
-	private void generate() {
-        // Create the JAXBContext
-        JAXBContext jaxbContext = this.buildJaxbContext();
-
-        // Generate an XML Schema
-        if(jaxbContext != null) {
-			this.generateSchema(jaxbContext);
-		}
-		String result = (jaxbContext != null) ? 
-			this.bind(JptEclipseLinkJaxbCoreMessages.SCHEMA_GENERATED, this.targetSchemaName) : 
-			this.bind(JptEclipseLinkJaxbCoreMessages.SCHEMA_NOT_CREATED, this.targetSchemaName);
-		System.out.println(result);
-	}
-	
-	private JAXBContext buildJaxbContext() {
-		System.out.println(this.getString(JptEclipseLinkJaxbCoreMessages.LOADING_CLASSES));
-        JAXBContext jaxbContext = null;
-		try {
-			ClassLoader loader = Thread.currentThread().getContextClassLoader();
-			
-			Class[] sourceClasses = this.buildSourceClasses(this.sourceClassNames, loader);
-			
-			//call MOXy JAXBContextFactory directly.  This eliminates the need to have the JAXB properties file in place
-			//in time for the generation.
-			jaxbContext = (JAXBContext)JAXBContextFactory.createContext(sourceClasses, Collections.<String,Object>emptyMap());
-		}
-		catch (JAXBException ex) {
-			this.handleJaxbException(ex);
-		}
-		catch (ClassCastException ex) {
-			this.handleClassCastException(ex);
-		}
-		return jaxbContext;
-	}
-	
-	private void generateSchema(JAXBContext jaxbContext) {
-		System.out.println(this.getString(JptEclipseLinkJaxbCoreMessages.GENERATING_SCHEMA));
-		System.out.flush();
-
-    	SchemaOutputResolver schemaOutputResolver = 
-    		new JptSchemaOutputResolver(this.targetSchemaName);
-
-		try {
-			jaxbContext.generateSchema(schemaOutputResolver);
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-		}
-	}
-    
-    private Class[] buildSourceClasses(String[] classNames, ClassLoader loader) {
-
-		ArrayList<Class> sourceClasses = new ArrayList<Class>(classNames.length);
-		for(String className: classNames) {
-			try {
-				sourceClasses.add(loader.loadClass(className));
-					System.out.println(className);
-			}
-			catch (ClassNotFoundException e) {
-				System.err.println(this.bind(JptEclipseLinkJaxbCoreMessages.NOT_FOUND, className));
-			}
-		}
-		System.out.flush();
-		return sourceClasses.toArray(new Class[0]);
-    }
-	
-	private void handleJaxbException(JAXBException ex) {
-		String message = ex.getMessage();
-		Throwable linkedEx = ex.getLinkedException();
-		if(message != null && message.indexOf(NO_FACTORY_CLASS) > -1) {
-			System.err.println(message);
-		}
-		else if(linkedEx != null && linkedEx instanceof ClassNotFoundException) {
-			String errorMessage = this.bind(
-				JptEclipseLinkJaxbCoreMessages.CONTEXT_FACTORY_NOT_FOUND, linkedEx.getMessage());
-			System.err.println(errorMessage);
-		}
-		else {
-			ex.printStackTrace();
-		}
-	}
-	
-	private void handleClassCastException(ClassCastException ex) {
-		String message = ex.getMessage();
-		if(message != null && message.indexOf(CANNOT_BE_CAST_TO_JAXBCONTEXT) > -1) {
-			System.err.println(this.getString(JptEclipseLinkJaxbCoreMessages.PROPERTIES_FILE_NOT_FOUND));
-		}
-		else {
-			ex.printStackTrace();
-		}
-	}
-	
-	private String getString(String key) {
-		return JptEclipseLinkJaxbCoreMessages.getString(key);
-	}
-	
-	private String bind(String key, Object argument) {
-		return MessageFormat.format(this.getString(key), argument);
-	}
-
-	// ********** argument queries **********
-    
-	private String[] getSourceClassNames(String[] args) {
-
-		return this.getAllArgumentValues("-c", args);   //$NON-NLS-1$
-	}
-	
-	private String getTargetSchemaName(String[] args) {
-
-		return this.getArgumentValue("-s", args);   //$NON-NLS-1$
-	}
-
-	private boolean getDebugMode(String[] args) {
-
-		return this.argumentExists("-debug", args);   //$NON-NLS-1$
-	}
-	
-	private String getArgumentValue(String argName, String[] args) {
-		for (int i = 0; i < args.length; i++) {
-			String arg = args[i];
-			if (arg.toLowerCase().equals(argName)) {
-				int j = i + 1;
-				if (j < args.length) {
-					return args[j];
-				}
-			}
-		}
-		return null;
-	}
-	
-	private String[] getAllArgumentValues(String argName, String[] args) {
-		List<String> argValues = new ArrayList<String>();
-		for (int i = 0; i < args.length; i++) {
-			String arg = args[i];
-			if (arg.toLowerCase().equals(argName)) {
-				int j = i + 1;
-				if (j < args.length) {
-					argValues.add(args[j]);
-					i++;
-				}
-			}
-		}
-		return argValues.toArray(new String[0]);
-	}
-	
-	private boolean argumentExists(String argName, String[] args) {
-		for (int i = 0; i < args.length; i++) {
-			String arg = args[i];
-			if (arg.toLowerCase().equals(argName)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-}
-
-// ********** inner class **********
-
-class JptSchemaOutputResolver extends SchemaOutputResolver {
-	
-	private final String targetSchemaName;
-	
-	protected JptSchemaOutputResolver(String targetSchemaName) {
-		this.targetSchemaName = targetSchemaName;
-	}
-	
-	 @Override
-    public Result createOutput(String namespaceURI, String suggestedFileName) throws IOException {
-
-        File file = new File(this.targetSchemaName );
-        StreamResult result = new StreamResult(file);
-        result.setSystemId(file.toURI().toURL().toString());
-        return result;
-    }
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/src/org/eclipse/jpt/eclipselink/jaxb/core/schemagen/internal/JptEclipseLinkJaxbCoreMessages.java b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/src/org/eclipse/jpt/eclipselink/jaxb/core/schemagen/internal/JptEclipseLinkJaxbCoreMessages.java
deleted file mode 100644
index 62f89fa..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/src/org/eclipse/jpt/eclipselink/jaxb/core/schemagen/internal/JptEclipseLinkJaxbCoreMessages.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.jaxb.core.schemagen.internal;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * Localized messages used by Dali EclipseLink JAXB core.
- */
-public class JptEclipseLinkJaxbCoreMessages
-{
-	public static final String LOADING_CLASSES = "LOADING_CLASSES";
-	public static final String GENERATING_SCHEMA = "GENERATING_SCHEMA";
-	public static final String SCHEMA_GENERATED = "SCHEMA_GENERATED";
-	public static final String SCHEMA_NOT_CREATED = "SCHEMA_NOT_CREATED";
-	public static final String NOT_FOUND = "NOT_FOUND";
-	public static final String CONTEXT_FACTORY_NOT_FOUND = "CONTEXT_FACTORY_NOT_FOUND";
-	public static final String PROPERTIES_FILE_NOT_FOUND = "PROPERTIES_FILE_NOT_FOUND";
-	
-
-	private static final String BUNDLE_NAME = "org.eclipse.jpt.eclipselink.jaxb.core.schemagen.internal.jpt_eclipselink_jaxb_core"; //$NON-NLS-1$
-	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
-
-	private JptEclipseLinkJaxbCoreMessages() {
-	}
-
-	public static String getString(String key) {
-		try {
-			return RESOURCE_BUNDLE.getString(key);
-		}
-		catch (MissingResourceException e) {
-			return '!' + key + '!';
-		}
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/src/org/eclipse/jpt/eclipselink/jaxb/core/schemagen/internal/jpt_eclipselink_jaxb_core.properties b/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/src/org/eclipse/jpt/eclipselink/jaxb/core/schemagen/internal/jpt_eclipselink_jaxb_core.properties
deleted file mode 100644
index f7914db..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.jaxb.core.schemagen/src/org/eclipse/jpt/eclipselink/jaxb/core/schemagen/internal/jpt_eclipselink_jaxb_core.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-################################################################################
-# Copyright (c) 2010 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-
-LOADING_CLASSES = loading...
-GENERATING_SCHEMA = \nMOXy generating schema...
-SCHEMA_GENERATED =  \nSchema {0} generated
-SCHEMA_NOT_CREATED =  \nSchema {0} not created
-NOT_FOUND =  \n\tNot found: {0}
-PROPERTIES_FILE_NOT_FOUND =  \nEclipseLink JAXBContextFactory must be specified in the jaxb.properties file to use EclipseLink MOXy for schema generation.\n\
-javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
-CONTEXT_FACTORY_NOT_FOUND =  \nThe JAXBContextFactory {0} \n\
-configured in the jaxb.properties file could not be located on the project classpath. \n\
-The JAXB provider that defines this factory should be added to the project classpath, \n\
-or the jaxb.properties file should be removed to use the default provider.
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.classpath b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.classpath
deleted file mode 100644
index fcf0798..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.classpath
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="property_files"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		<accessrules>
-			<accessrule kind="accessible" pattern="org/eclipse/jpt/utility/**"/>
-			<accessrule kind="accessible" pattern="org/eclipse/jpt/core/**"/>
-			<accessrule kind="accessible" pattern="org/eclipse/jpt/eclipselink/core/**"/>
-			<accessrule kind="accessible" pattern="org/eclipse/jpt/ui/**"/>
-		</accessrules>
-	</classpathentry>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.cvsignore b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.cvsignore
deleted file mode 100644
index 76e6442..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-@dot
-temp.folder
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.project b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.project
deleted file mode 100644
index e572be1..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.eclipselink.ui</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.settings/org.eclipse.core.resources.prefs b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 2fdb2b1..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Mon Apr 07 14:26:59 EDT 2008
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.settings/org.eclipse.jdt.core.prefs b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 9dd4c36..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun Feb 24 21:27:01 EST 2008
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/META-INF/MANIFEST.MF
deleted file mode 100644
index cb8ee7d..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,59 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.eclipselink.ui;singleton:=true
-Bundle-Version: 1.3.0.qualifier
-Bundle-Activator: org.eclipse.jpt.eclipselink.ui.JptEclipseLinkUiPlugin
-Bundle-ActivationPolicy: lazy
-Bundle-ClassPath: .
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jdt.core;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jdt.ui;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jpt.core;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.jpt.db;bundle-version="[1.2.0,2.0.0)",
- org.eclipse.jpt.eclipselink.core;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.jpt.ui;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.jpt.utility;bundle-version="[1.2.0,2.0.0)",
- org.eclipse.ui;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.ui.forms;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.wst.common.frameworks;bundle-version="[1.1.200,2.0.0)",
- org.eclipse.wst.common.frameworks.ui;bundle-version="[1.1.200,2.0.0)"
-Export-Package: org.eclipse.jpt.eclipselink.ui,
- org.eclipse.jpt.eclipselink.ui.internal;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.ddlgen;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.ddlgen.wizards;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.details;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.details.java;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.details.orm;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.persistence;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.persistence.general;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.persistence.logging;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.persistence.options;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.persistence.schema.generation;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.persistencexml.details;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.platform;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.structure;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v1_1.platform;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.java;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.orm;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v1_2.platform;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v2_0.ddlgen.wizards;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v2_0.details;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.caching;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.logging;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.options;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v2_0.platform;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.v2_1.platform;x-internal:=true,
- org.eclipse.jpt.eclipselink.ui.internal.wizards;x-internal:=true
-Import-Package: com.ibm.icu.text;version="4.0.1"
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/about.html b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/about.html
deleted file mode 100644
index be534ba..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 02, 2008</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/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</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>
-
-</BODY>
-</HTML>
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/build.properties b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/build.properties
deleted file mode 100644
index 213a2e2..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2008 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-javacSource = 1.5
-javacTarget = 1.5
-source.. = src/,\
-               property_files/
-output.. = bin/
-bin.includes = .,\
-               META-INF/,\
-               about.html,\
-               plugin.xml,\
-               plugin.properties
-jars.compile.order = .
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/plugin.properties b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/plugin.properties
deleted file mode 100644
index b2c6af6..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/plugin.properties
+++ /dev/null
@@ -1,30 +0,0 @@
-###############################################################################
-# Copyright (c) 2006, 2009 Oracle. 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:
-#     Oracle - initial API and implementation
-###############################################################################
-
-# ====================================================================
-# To code developer:
-#   Do NOT change the properties between this line and the
-#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
-#   Make a new property name, append to the end of the file and change
-#   the code to use the new property.
-# ====================================================================
-
-# ====================================================================
-# %%% END OF TRANSLATED PROPERTIES %%%
-# ====================================================================
-pluginName= Dali Java Persistence Tools - EclipseLink Support - UI
-providerName=Eclipse Web Tools Platform
-
-eclipseLinkWizardCategoryName=EclipseLink
-newEclipseLinkMappingFileWizardName=EclipseLink Mapping File
-newEclipseLinkJpaMappingFileWizardDesc=Create an EclipseLink specific mapping file
-
-newEclipseLink1_1MappingFileWizardName=EclipseLink 1.1 Mapping File
-newEclipseLink1_1JpaMappingFileWizardDesc=Create an EclipseLink 1.1 specific mapping file
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/plugin.xml b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/plugin.xml
deleted file mode 100644
index 78f4987..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/plugin.xml
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/property_files/eclipselink_ui.properties b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/property_files/eclipselink_ui.properties
deleted file mode 100644
index b71d295..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/property_files/eclipselink_ui.properties
+++ /dev/null
@@ -1,381 +0,0 @@
-################################################################################
-# Copyright (c) 2007, 2010 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-
-MappingFileWizard_title=New EclipseLink Mapping File
-MappingFileWizardPage_title=EclipseLink mapping file
-MappingFileWizardPage_desc=Specify EclipseLink mapping file location and properties
-
-EclipseLink1_1MappingFileWizard_title=New EclipseLink 1.1 Mapping File
-EclipseLink1_1MappingFileWizardPage_title=EclipseLink 1.1 mapping file
-EclipseLink1_1MappingFileWizardPage_desc=Specify EclipseLink 1.1 mapping file location and properties
-
-Boolean_True = True
-Boolean_False = False
-
-DefaultWithoutValue=Default ()
-DefaultWithValue=Default ({0})
-	
-PersistenceXmlTabFolder_defaultEmpty = Default ()
-PersistenceXmlTabFolder_defaultWithOneParam = Default ({0})
-
-PersistenceXmlGeneralTab_name = Name:
-PersistenceXmlGeneralTab_provider = Provider:
-PersistenceXmlGeneralTab_browse = Browse...
-PersistenceXmlGeneralTab_description = Description:
-
-# General
-PersistenceXmlGeneralTab_title = General
-PersistenceXmlGeneralTab_generalSectionTitle = General
-PersistenceXmlGeneralTab_mappedClassesSectionTitle = Managed Classes
-PersistenceXmlGeneralTab_mappedClassesSectionDescription=Specify the list of classes to be managed in this persistence unit.
-PersistenceXmlGeneralTab_xmlMappingFilesSectionTitle = XML Mapping Files
-PersistenceXmlGeneralTab_xmlMappingFilesSectionDescription=Specify the XML mapping files for this persistence unit.
-
-PersistenceXmlGeneralTab_nameLabel = Name:
-PersistenceXmlGeneralTab_persistenceProviderLabel = Persistence Provider:
-PersistenceXmlGeneralTab_descriptionLabel = Description:
-
-PersistenceXmlGeneralTab_excludeUnlistedMappedClasses=Exclude unlisted classes
-PersistenceXmlGeneralTab_excludeUnlistedMappedClassesWithDefault=Exclude unlisted classes ({0})
-PersistenceXmlGeneralTab_mappedClassesNoName=<name not set>
-PersistenceXmlGeneralTab_open=Open
-
-PersistenceXmlGeneralTab_xmlMappingFilesDialog_title=JPA XML Mapping File Selection
-PersistenceXmlGeneralTab_xmlMappingFilesDialog_message=Choose the XML mapping files to be added to the persistence unit.
-PersistenceXmlGeneralTab_ormNoName=<name not set>
-PersistenceXmlGeneralTab_excludeEclipselinkOrm=Exclude unlisted EclipseLink XML mapping file
-PersistenceXmlGeneralTab_excludeEclipselinkOrmWithDefault=Exclude unlisted EclipseLink XML mapping file ({0})
-
-# Connection
-PersistenceXmlConnectionTab_title = Connection
-PersistenceXmlConnectionTab_sectionTitle = Persistence Unit Connection
-PersistenceXmlConnectionTab_sectionDescription = Configure the data source or JDBC connection properties.
-PersistenceXmlConnectionTab_defaultWithOneParam = Default ({0})
-PersistenceXmlConnectionTab_defaultEmpty = Default ()
-
-PersistenceXmlConnectionTab_transactionTypeLabel = Transaction type:
-
-TransactionTypeComposite_jta = JTA
-TransactionTypeComposite_resource_local = Resource Local
-
-PersistenceXmlConnectionTab_nativeSqlLabel = Native SQL
-PersistenceXmlConnectionTab_nativeSqlLabelDefault = Native SQL ({0})
-
-PersistenceXmlConnectionTab_batchWritingLabel = Batch writing:
-
-BatchWritingComposite_none = None
-BatchWritingComposite_jdbc = JDBC
-BatchWritingComposite_buffered = Buffered
-BatchWritingComposite_oracle_jdbc = Oracle JDBC
-
-PersistenceXmlConnectionTab_cacheStatementsLabel = Statement caching:
-
-PersistenceXmlConnectionTab_jtaDataSourceLabel = JTA data source:
-PersistenceXmlConnectionTab_nonJtaDataSourceLabel = Non-JTA data source:
-
-PersistenceXmlConnectionTab_driverLabel = Driver:
-PersistenceXmlConnectionTab_urlLabel = URL:
-PersistenceXmlConnectionTab_userLabel = User:
-PersistenceXmlConnectionTab_passwordLabel = Password:
-PersistenceXmlConnectionTab_bindParametersLabel = Bind parameters
-PersistenceXmlConnectionTab_bindParametersLabelDefault = Bind parameters ({0})
-
-PersistenceXmlConnectionTab_readConnectionsSharedLabel = Shared
-PersistenceXmlConnectionTab_readConnectionsSharedLabelDefault = Shared ({0})
-PersistenceXmlConnectionTab_readConnectionsSectionTitle = Read Connection
-PersistenceXmlConnectionTab_readConnectionsMinLabel = Minimum:
-PersistenceXmlConnectionTab_readConnectionsMaxLabel = Maximum:
-PersistenceXmlConnectionTab_writeConnectionsSectionTitle = Write Connection
-PersistenceXmlConnectionTab_writeConnectionsMinLabel = Minimum:
-PersistenceXmlConnectionTab_writeConnectionsMaxLabel = Maximum:
-
-ConnectionPropertiesComposite_Database_GroupBox = Database
-
-JdbcPropertiesComposite_EclipseLinkConnectionPool_GroupBox = EclipseLink connection pool
-
-JdbcConnectionPropertiesComposite_ConnectionDialog_Message = &Enter connection name or pattern (*, ?, or camel case):
-JdbcConnectionPropertiesComposite_ConnectionDialog_Title = Connection Selection
-
-JdbcExclusiveConnectionsPropertiesComposite_GroupBox = Exclusive connections
-
-PersistenceXmlConnectionTab_exclusiveConnectionModeLabel = Exclusive connection mode:
-
-JdbcExclusiveConnectionModeComposite_always = Always
-JdbcExclusiveConnectionModeComposite_isolated = Isolated
-JdbcExclusiveConnectionModeComposite_transactional = Transactional
-
-PersistenceXmlConnectionTab_lazyConnectionLabel = Lazy connection acquisition
-PersistenceXmlConnectionTab_lazyConnectionLabelDefault = Lazy connection acquisition ({0})
-
-# SchemaGeneration
-PersistenceXmlSchemaGenerationTab_title = Schema Generation
-PersistenceXmlSchemaGenerationTab_sectionTitle = Persistence Unit Schema Generation
-PersistenceXmlSchemaGenerationTab_sectionDescription = Configure the EclipseLink schema generation properties.
-PersistenceXmlSchemaGenerationTab_defaultWithOneParam = Default ({0})
-PersistenceXmlSchemaGenerationTab_defaultEmpty = Default ()
-PersistenceXmlSchemaGenerationTab_defaultDot = Default (.)
-
-PersistenceXmlSchemaGenerationTab_ddlGenerationTypeLabel = DDL generation type:
-PersistenceXmlSchemaGenerationTab_outputModeLabel = Output mode:
-PersistenceXmlSchemaGenerationTab_createDdlFileNameLabel = Create DDL file name:
-PersistenceXmlSchemaGenerationTab_dropDdlFileNameLabel = Drop DDL file name:
-
-OutputModeComposite_both = Both
-OutputModeComposite_sql_script = Sql-script
-OutputModeComposite_database = Database
-
-DdlGenerationTypeComposite_none = None
-DdlGenerationTypeComposite_create_tables = Create Tables
-DdlGenerationTypeComposite_drop_and_create_tables = Drop and Create Tables
-
-PersistenceXmlSchemaGenerationTab_ddlGenerationLocationLabel = DDL generation location:
-	
-DdlGenerationLocationComposite_dialogTitle = Generation Location
-DdlGenerationLocationComposite_dialogMessage = Choose a folder for the generated DDL files:
-
-# Caching
-PersistenceXmlCachingTab_title = Caching
-PersistenceXmlCachingTab_sectionTitle = Persistence Unit Caching
-PersistenceXmlCachingTab_sectionDescription = Configure the session or entity specific EclipseLink caching properties.
-
-CacheDefaultsComposite_groupTitle = Defaults
-
-PersistenceXmlCachingTab_defaultCacheTypeLabel = Default cache type:
-PersistenceXmlCachingTab_cacheTypeLabel = Cache type:
-
-PersistenceXmlCachingTab_defaultSharedCacheLabel = Shared cache ({0})
-PersistenceXmlCachingTab_sharedCacheLabel = Shared cache
-
-PersistenceXmlCachingTab_defaultSharedCacheDefaultLabel = Default shared cache ({0})
-PersistenceXmlCachingTab_sharedCacheDefaultLabel = Default shared cache
-
-CacheSizeComposite_cacheSize=Cache size:
-
-CacheTypeComposite_full = Full
-CacheTypeComposite_hard_weak = Weak with Hard Subcache
-CacheTypeComposite_none = None
-CacheTypeComposite_soft = Soft
-CacheTypeComposite_soft_weak = Weak with Soft Subcache
-CacheTypeComposite_weak = Weak
-
-DefaultCacheSizeComposite_defaultCacheSize=Default cache size:
-
-DefaultCacheTypeComposite_full = Full
-DefaultCacheTypeComposite_hard_weak = Weak With Hard Subcache
-DefaultCacheTypeComposite_none = None
-DefaultCacheTypeComposite_soft = Soft
-DefaultCacheTypeComposite_soft_weak = Weak with Soft Subcache
-DefaultCacheTypeComposite_weak = Weak
-
-EntityDialog_selectEntity = Select an Entity
-EntityDialog_name = Name:
-
-CachingEntityListComposite_groupTitle = Entity caching
-CachingEntityListComposite_editButton = Edit...
-
-CachingEntityListComposite_dialogMessage=&Enter type name prefix or pattern (*, ?, or camel case):
-CachingEntityListComposite_dialogTitle=Entity Selection
-
-PersistenceXmlCachingTab_FlushClearCacheLabel = Flush clear cache:
-
-FlushClearCacheComposite_drop = Drop
-FlushClearCacheComposite_drop_invalidate = Drop Invalidate
-FlushClearCacheComposite_merge = Merge
-
-# Customization
-PersistenceXmlCustomizationTab_title = Customization
-PersistenceXmlCustomizationTab_sectionTitle = Persistence Unit Customization
-PersistenceXmlCustomizationTab_sectionDescription = Set default or entity specific EclipseLink customization and validation properties.
-PersistenceXmlCustomizationTab_defaultWithOneParam = Default ({0})
-PersistenceXmlCustomizationTab_defaultEmpty = Default ()
-
-PersistenceXmlCustomizationTab_weavingPropertiesGroupBox = Weaving
-PersistenceXmlCustomizationTab_weavingLabel = Weaving:
-
-PersistenceXmlCustomizationTab_weavingLazyLabelDefault = Lazy ({0})
-PersistenceXmlCustomizationTab_weavingLazyLabel = Lazy
-
-PersistenceXmlCustomizationTab_weavingFetchGroupsLabelDefault = Fetch groups ({0})
-PersistenceXmlCustomizationTab_weavingFetchGroupsLabel = Fetch groups
-
-PersistenceXmlCustomizationTab_weavingInternalLabel = Internal
-PersistenceXmlCustomizationTab_weavingInternalLabelDefault = Internal ({0})
-
-PersistenceXmlCustomizationTab_weavingEagerLabel = Eager
-PersistenceXmlCustomizationTab_weavingEagerLabelDefault = Eager ({0})
-	
-PersistenceXmlCustomizationTab_weavingChangeTrackingLabelDefault = Change tracking ({0})
-PersistenceXmlCustomizationTab_weavingChangeTrackingLabel = Change tracking
-
-PersistenceXmlCustomizationTab_validationOnlyLabel = Validation only
-PersistenceXmlCustomizationTab_validationOnlyLabelDefault = Validation only ({0})
-
-PersistenceXmlCustomizationTab_validateSchemaLabel = Mapping files schema validation
-PersistenceXmlCustomizationTab_validateSchemaLabelDefault = Mapping files schema validation ({0})
-
-PersistenceXmlCustomizationTab_throwExceptionsLabelDefault = Throw exceptions ({0})
-PersistenceXmlCustomizationTab_throwExceptionsLabel = Throw exceptions
-
-PersistenceXmlCustomizationTab_exceptionHandlerLabel = Exception handler:
-
-WeavingComposite_true_ = Weave Dynamically
-WeavingComposite_false_ = No Weaving
-WeavingComposite_static_ = Weave Statically
-
-CustomizationEntityListComposite_groupTitle = Descriptor customizers
-CustomizationEntityListComposite_editButton = Edit...
-
-CustomizationEntityListComposite_dialogMessage=&Enter type name prefix or pattern (*, ?, or camel case):
-CustomizationEntityListComposite_dialogTitle=Entity Selection
-
-PersistenceXmlCustomizationTab_customizerLabel = Customizer:
-PersistenceXmlCustomizationTab_sessionCustomizerLabel = Session customizers
-
-PersistenceXmlCustomizationTab_noName=<name not set>
-
-PersistenceXmlCustomizationTab_profilerLabel = Profiler:
-PersistenceXmlCustomizationTab_browse = Browse...
-
-ProfilerComposite_performance_profiler = Performance Profiler
-ProfilerComposite_query_monitor = Query Monitor 
-ProfilerComposite_no_profiler = No Profiler
-
-# Logging
-PersistenceXmlLoggingTab_title = Logging
-PersistenceXmlLoggingTab_sectionTitle = Persistence Unit Logging
-PersistenceXmlLoggingTab_sectionDescription = Configure the EclipseLink logging properties.
-PersistenceXmlLoggingTab_defaultWithOneParam = Default ({0})
-PersistenceXmlLoggingTab_defaultEmpty = Default ()
-PersistenceXmlLoggingTab_defaultStdout = Default (stdout)
-
-PersistenceXmlLoggingTab_categoryLoggingLevelSectionTitle = Logging Categories
-PersistenceXmlLoggingTab_loggingLevelLabel = Logging level:
-
-PersistenceXmlLoggingTab_sqlLoggingLevelLabel = SQL:
-PersistenceXmlLoggingTab_transactionLoggingLevelLabel = Transaction:
-PersistenceXmlLoggingTab_eventLoggingLevelLabel = Event:
-PersistenceXmlLoggingTab_connectionLoggingLevelLabel = Connection:
-PersistenceXmlLoggingTab_queryLoggingLevelLabel = Query:
-PersistenceXmlLoggingTab_cacheLoggingLevelLabel = Cache:
-PersistenceXmlLoggingTab_propagationLoggingLevelLabel = Propagation:
-PersistenceXmlLoggingTab_sequencingLoggingLevelLabel = Sequencing:
-PersistenceXmlLoggingTab_ejbLoggingLevelLabel = EJB:
-PersistenceXmlLoggingTab_dmsLoggingLevelLabel = DMS:
-PersistenceXmlLoggingTab_ejb_or_metadataLoggingLevelLabel = EJB or metadata:
-PersistenceXmlLoggingTab_jpa_metamodelLoggingLevelLabel = JPA metamodel:
-	PersistenceXmlLoggingTab_weaverLoggingLevelLabel = Weaving:
-PersistenceXmlLoggingTab_propertiesLoggingLevelLabel = Properties:
-PersistenceXmlLoggingTab_serverLoggingLevelLabel = Server:
-
-LoggingLevelComposite_off = Off
-LoggingLevelComposite_severe = Severe
-LoggingLevelComposite_warning = Warning
-LoggingLevelComposite_info = Info
-LoggingLevelComposite_config = Config
-LoggingLevelComposite_fine = Fine
-LoggingLevelComposite_finer = Finer
-LoggingLevelComposite_finest = Finest
-LoggingLevelComposite_all = All
-
-EclipseLinkCategoryLoggingLevelComposite_off = Off
-EclipseLinkCategoryLoggingLevelComposite_severe = Severe
-EclipseLinkCategoryLoggingLevelComposite_warning = Warning
-EclipseLinkCategoryLoggingLevelComposite_info = Info
-EclipseLinkCategoryLoggingLevelComposite_config = Config
-EclipseLinkCategoryLoggingLevelComposite_fine = Fine
-EclipseLinkCategoryLoggingLevelComposite_finer = Finer
-EclipseLinkCategoryLoggingLevelComposite_finest = Finest
-EclipseLinkCategoryLoggingLevelComposite_all = All
-
-PersistenceXmlLoggingTab_loggerLabel = Logger:
-PersistenceXmlLoggingTab_browse = Browse...
-LoggerComposite_default_logger = Default Logger
-LoggerComposite_java_logger = Java Logger
-LoggerComposite_server_logger = Server Logger
-
-PersistenceXmlLoggingTab_timestampLabel = Timestamp
-PersistenceXmlLoggingTab_timestampLabelDefault = Timestamp ({0})
-PersistenceXmlLoggingTab_threadLabel = Thread
-PersistenceXmlLoggingTab_threadLabelDefault = Thread ({0})
-PersistenceXmlLoggingTab_sessionLabel = Session
-PersistenceXmlLoggingTab_sessionLabelDefault = Session ({0})
-PersistenceXmlLoggingTab_exceptionsLabel = Exceptions
-PersistenceXmlLoggingTab_exceptionsLabelDefault = Exceptions ({0})
-PersistenceXmlLoggingTab_connectionLabel = Connection
-PersistenceXmlLoggingTab_connectionLabelDefault = Connection ({0})
-
-PersistenceXmlLoggingTab_loggersLabel = Loggers:
-
-PersistenceXmlLoggingTab_loggingFileLabel = Log file:
-
-LoggingFileLocationComposite_dialogTitle = Choose a log file
-
-# Options
-PersistenceXmlOptionsTab_title = Options
-PersistenceXmlOptionsTab_sessionSectionTitle = EclipseLink Session Options
-PersistenceXmlOptionsTab_sessionSectionDescription = Configure the EclipseLink session options.
-PersistenceXmlOptionsTab_defaultWithOneParam = Default ({0})
-PersistenceXmlOptionsTab_defaultEmpty = Default ()
-
-PersistenceXmlOptionsTab_sessionName = Session name:
-PersistenceXmlOptionsTab_sessionsXml = Sessions XML:
-
-PersistenceXmlOptionsTab_includeDescriptorQueriesLabel = Include descriptor queries
-PersistenceXmlOptionsTab_includeDescriptorQueriesLabelDefault = Include descriptor queries ({0})
-
-PersistenceXmlOptionsTab_eventListenerLabel = Event listener:
-PersistenceXmlOptionsTab_targetDatabaseLabel = Target database:
-
-PersistenceXmlOptionsTab_miscellaneousSectionTitle = Miscellaneous Options
-PersistenceXmlOptionsTab_miscellaneousSectionDescription = Configure the miscellaneous options.
-
-PersistenceXmlOptionsTab_temporalMutableLabel = Temporal mutable
-PersistenceXmlOptionsTab_temporalMutableLabelDefault = Temporal mutable ({0})
-
-TargetDatabaseComposite_attunity = Attunity
-TargetDatabaseComposite_auto = Auto
-TargetDatabaseComposite_cloudscape = Cloudscape
-TargetDatabaseComposite_database = Database
-TargetDatabaseComposite_db2 = DB2
-TargetDatabaseComposite_db2mainframe = DB2Mainframe
-TargetDatabaseComposite_dbase = DBase
-TargetDatabaseComposite_derby = Derby
-TargetDatabaseComposite_hsql = HSQL
-TargetDatabaseComposite_informix = Informix
-TargetDatabaseComposite_javadb = JavaDB
-TargetDatabaseComposite_mysql = MySQL
-TargetDatabaseComposite_oracle = Oracle
-TargetDatabaseComposite_oracle11 = Oracle11
-TargetDatabaseComposite_oracle10 = Oracle10g
-TargetDatabaseComposite_oracle9 = Oracle9i
-TargetDatabaseComposite_oracle8 = Oracle8i
-TargetDatabaseComposite_pointbase = PointBase
-TargetDatabaseComposite_postgresql = PostgreSQL
-TargetDatabaseComposite_sqlanywhere = SQLAnywhere
-TargetDatabaseComposite_sqlserver = SQLServer
-TargetDatabaseComposite_sybase = Sybase
-TargetDatabaseComposite_timesten = TimesTen
-
-PersistenceXmlOptionsTab_targetServerLabel = Target server:
-
-TargetServerComposite_none = None
-TargetServerComposite_oc4j = OC4J
-TargetServerComposite_sunas9 = SunAS9
-TargetServerComposite_websphere = WebSphere
-TargetServerComposite_websphere_6_1 = WebSphere 6.1
-TargetServerComposite_weblogic = WebLogic
-TargetServerComposite_weblogic_9 = WebLogic 9
-TargetServerComposite_weblogic_10 = WebLogic 10
-TargetServerComposite_jboss = JBoss
-
-# DDLGeneration
-EclipseLinkDDLGeneratorUi_generatingDDLWarningTitle = Generating DDL
-EclipseLinkDDLGeneratorUi_generatingDDLWarningMessage = Warning:  Generating DDL will DROP existing tables and{0}CREATE new tables based on the Entities in your project.{1}Are you sure you want to continue?
-EclipseLinkDDLGeneratorUi_error = Error
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/property_files/eclipselink_ui_details.properties b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/property_files/eclipselink_ui_details.properties
deleted file mode 100644
index e218cf9..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/property_files/eclipselink_ui_details.properties
+++ /dev/null
@@ -1,152 +0,0 @@
-################################################################################
-# Copyright (c) 2008, 2010 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-
-EclipseLinkBasicCollectionMappingUiProvider_label = Basic Collection
-EclipseLinkBasicCollectionMappingUiProvider_linkLabel = basic collection
-
-EclipseLinkBasicMapMappingUiProvider_label = Basic Map
-EclipseLinkBasicMapMappingUiProvider_linkLabel = basic map
-
-EclipseLinkTransformationMappingUiProvider_label = Transformation
-EclipseLinkTransformationMappingUiProvider_linkLabel = transformation
-
-EclipseLinkVariableOneToOneMappingUiProvider_label = Variable One to One
-EclipseLinkVariableOneToOneMappingUiProvider_linkLabel = variable one to one
-
-EclipseLinkCacheTypeComposite_label = Type:	
-EclipseLinkCacheTypeComposite_full = Full
-EclipseLinkCacheTypeComposite_weak = Weak
-EclipseLinkCacheTypeComposite_soft = Soft
-EclipseLinkCacheTypeComposite_soft_weak = Weak with Soft Subcache
-EclipseLinkCacheTypeComposite_hard_weak = Weak with Hard Subcache
-EclipseLinkCacheTypeComposite_cache = Cache
-EclipseLinkCacheTypeComposite_none =  None
-
-EclipseLinkCacheSizeComposite_size = Size:
-
-EclipseLinkCacheCoordinationTypeComposite_label = Coordination type:
-EclipseLinkCacheCoordinationTypeComposite_send_object_changes = Send Object Changes
-EclipseLinkCacheCoordinationTypeComposite_invalidate_changed_objects = Invalidate Changed Objects
-EclipseLinkCacheCoordinationTypeComposite_send_new_objects_with_changes = Send New Objects with Changes
-EclipseLinkCacheCoordinationTypeComposite_none = None
-
-EclipseLinkCachingComposite_sharedLabelDefault = Shared ({0})
-EclipseLinkCachingComposite_sharedLabel = Shared
-EclipseLinkCachingComposite_advanced = Advanced
-
-EclipseLinkChangeTrackingComposite_label = Change tracking:
-EclipseLinkChangeTrackingComposite_attribute = Attribute
-EclipseLinkChangeTrackingComposite_object = Object
-EclipseLinkChangeTrackingComposite_deferred = Deferred
-EclipseLinkChangeTrackingComposite_auto = Auto
-
-EclipseLinkConvertComposite_converterNameLabel = Converter name:
-EclipseLinkConvertComposite_defineConverterSection = Define Converter
-EclipseLinkConvertComposite_default = Default
-EclipseLinkConvertComposite_custom = Custom
-EclipseLinkConvertComposite_type = Type
-EclipseLinkConvertComposite_objectType = Object type
-EclipseLinkConvertComposite_struct = Struct
-
-EclipseLinkConverterComposite_nameTextLabel = Name:
-EclipseLinkConverterComposite_classLabel = Class:
-
-EclipseLinkCustomizerComposite_classLabel = Customizer class:
-
-EclipseLinkConvertersComposite_customConverter = Custom
-EclipseLinkConvertersComposite_objectTypeConverter = Object type
-EclipseLinkConvertersComposite_structConverter = Struct
-EclipseLinkConvertersComposite_typeConverter = Type
-
-EclipseLinkAlwaysRefreshComposite_alwaysRefreshDefault = Always refresh ({0})
-EclipseLinkAlwaysRefreshComposite_alwaysRefreshLabel = Always refresh
-EclipseLinkRefreshOnlyIfNewerComposite_refreshOnlyIfNewerDefault = Refresh only if newer ({0})
-EclipseLinkRefreshOnlyIfNewerComposite_refreshOnlyIfNewerLabel = Refresh only if newer
-EclipseLinkDisableHitsComposite_disableHitsDefault = Disable hits ({0})
-EclipseLinkDisableHitsComposite_disableHitsLabel = Disable hits
-
-TypeSection_converted = Converted
-
-EclipseLinkTypeMappingComposite_advanced = Advanced
-EclipseLinkTypeMappingComposite_caching = Caching
-EclipseLinkTypeMappingComposite_converters = Converters
-
-EclipseLinkExistenceCheckingComposite_label = Existence checking:
-JavaEclipseLinkExistenceCheckingComposite_check_cache = Check Cache
-JavaEclipseLinkExistenceCheckingComposite_check_database = Check Cache then Database
-JavaEclipseLinkExistenceCheckingComposite_assume_existence = Assume Existence
-JavaEclipseLinkExistenceCheckingComposite_assume_non_existence = Assume Non-Existence
-OrmEclipseLinkExistenceCheckingComposite_check_cache = Check Cache
-OrmEclipseLinkExistenceCheckingComposite_check_database = Check Cache then Database
-OrmEclipseLinkExistenceCheckingComposite_assume_existence = Assume Existence
-OrmEclipseLinkExistenceCheckingComposite_assume_non_existence = Assume Non-Existence
-
-EclipseLinkExpiryComposite_expirySection = Expiry
-
-EclipseLinkExpiryComposite_noExpiry = No expiry
-EclipseLinkExpiryComposite_timeToLiveExpiry = Time to live expiry
-EclipseLinkExpiryComposite_timeToLiveExpiryExpireAfter = Expire after
-EclipseLinkExpiryComposite_timeToLiveExpiryMilliseconds = milliseconds
-EclipseLinkExpiryComposite_dailyExpiry = Daily expiry
-EclipseLinkExpiryComposite_timeOfDayExpiryExpireAt = Expire at
-
-
-EclipseLinkJoinFetchComposite_label = Join fetch:
-EclipseLinkJoinFetchComposite_inner = Inner
-EclipseLinkJoinFetchComposite_outer = Outer
-
-EclipseLinkMutableComposite_mutableLabel=Mutable
-EclipseLinkMutableComposite_mutableLabelDefault=Mutable ({0})
-EclipseLinkMutableComposite_true=True
-EclipseLinkMutableComposite_false=False
-
-EclipseLinkObjectTypeConverterComposite_dataTypeLabel = Data type:
-EclipseLinkObjectTypeConverterComposite_objectTypeLabel = Object type:
-EclipseLinkObjectTypeConverterComposite_conversionValueEdit = Edit...
-EclipseLinkObjectTypeConverterComposite_conversionValuesDataValueColumn = Data Value
-EclipseLinkObjectTypeConverterComposite_conversionValuesObjectValueColumn = Object Value
-EclipseLinkObjectTypeConverterComposite_defaultObjectValueLabel = Default object value:
-EclipseLinkObjectTypeConverterComposite_conversionValuesGroupTitle = Conversion values
-EclipseLinkConversionValueDialog_addConversionValue = Add Conversion Value
-EclipseLinkConversionValueDialog_editConversionValue = Edit Conversion Value
-EclipseLinkConversionValueDialog_addConversionValueDescriptionTitle = Create new conversion value
-EclipseLinkConversionValueDialog_addConversionValueDescription = Create a new conversion value setting both the 'data value' and the 'object value'
-EclipseLinkConversionValueDialog_editConversionValueDescriptionTitle = Edit conversion value
-EclipseLinkConversionValueDialog_editConversionValueDescription = Edit the conversion value, changing the 'data value' or 'object value'
-
-EclipseLinkConversionValueDialog_dataValue = Data value:
-EclipseLinkConversionValueDialog_objectValue = Object value:
-EclipseLinkConversionValueStateObject_dataValueMustBeSpecified = A data value must be specified.
-EclipseLinkConversionValueStateObject_objectValueMustBeSpecified = An object value must be specified.
-EclipseLinkConversionValueStateObject_dataValueAlreadyExists = This data value is already specified, cannot map multiple object values to the same data value.
-
-
-EclipseLinkPrivateOwnedComposite_privateOwnedLabel = Private owned
-EclipseLinkReadOnlyComposite_readOnlyLabel = Read-only
-EclipseLinkReadOnlyComposite_readOnlyWithDefault = Read-only ({0})
-EclipseLinkTypeConverterComposite_dataTypeLabel = Data type:
-EclipseLinkTypeConverterComposite_objectTypeLabel = Object type:
-
-DefaultEclipseLinkOneToOneMappingUiProvider_label=Default (One to One)
-DefaultEclipseLinkVariableOneToOneMappingUiProvider_label=Default (Variable One to One)
-DefaultEclipseLinkOneToManyMappingUiProvider_label=Default (One to Many)
-DefaultEclipseLinkOneToOneMappingUiProvider_linkLabel=default (one to one)
-DefaultEclipseLinkVariableOneToOneMappingUiProvider_linkLabel=default (variable one to one)
-DefaultEclipseLinkOneToManyMappingUiProvider_linkLabel=default (one to many)
-
-	
-EclipseLinkConverterDialog_name=Name:
-EclipseLinkConverterDialog_converterType=Type:
-EclipseLinkConverterDialog_addConverter=Add Converter
-EclipseLinkConverterDialog_addConverterDescriptionTitle=Create new converter
-EclipseLinkConverterDialog_addConverterDescription=Create a new converter setting both the 'name' and the 'type'
-EclipseLinkConverterStateObject_nameMustBeSpecified = A name must be specified.
-EclipseLinkConverterStateObject_typeMustBeSpecified = A converter type must be specified.
-
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/JptEclipseLinkUiPlugin.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/JptEclipseLinkUiPlugin.java
deleted file mode 100644
index dc082c0..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/JptEclipseLinkUiPlugin.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.ImageRegistry;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-
-/**
- * The activator class controls the plug-in life cycle
- * 
- * 
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-@SuppressWarnings("nls")
-public class JptEclipseLinkUiPlugin extends AbstractUIPlugin
-{
-
-	// The plug-in ID
-	public static final String PLUGIN_ID = "org.eclipse.jpt.eclipselink.ui";
-
-	
-	// ********** singleton **********
-	private static JptEclipseLinkUiPlugin INSTANCE;
-
-	/**
-	 * Returns the singleton Plugin
-	 */
-	public static JptEclipseLinkUiPlugin instance() {
-		return INSTANCE;
-	}
-
-	public static void log(IStatus status) {
-        INSTANCE.getLog().log(status);
-    }
-
-	public static void log(String msg) {
-        log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, msg, null));
-    }
-
-	public static void log(Throwable throwable) {
-		log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, throwable.getLocalizedMessage(), throwable));
-	}
-
-	// ********** Image API **********
-	/**
-	 * This gets a .gif from the icons folder.
-	 */
-	public static ImageDescriptor getImageDescriptor(String key) {
-		if (! key.startsWith("icons/")) {
-			key = "icons/" + key;
-		}
-		if (! key.endsWith(".gif")) {
-			key = key + ".gif";
-		}
-		return imageDescriptorFromPlugin(PLUGIN_ID, key);
-	}
-
-	/**
-	 * This returns an image for a .gif from the icons folder
-	 */
-	//TODO we are using the ImageRegistry here and storing all our icons for the life of the plugin, 
-	//which means until the workspace is closed.  This is better than before where we constantly 
-	//created new images. Bug 306437 is about cleaning this up and using Local Resource Managers 
-	//on our views so that closing the JPA perspective would mean our icons are disposed.
-	public static Image getImage(String key) {
-		ImageRegistry imageRegistry = instance().getImageRegistry();
-		Image image = imageRegistry.get(key);
-		if (image == null) {
-			imageRegistry.put(key, getImageDescriptor(key));
-			image = imageRegistry.get(key);
-		}
-		return image;
-	}
-
-
-	
-	// ********** constructors **********
-	public JptEclipseLinkUiPlugin() {
-		super();
-		if (INSTANCE != null) {
-			throw new IllegalStateException();
-		}
-		INSTANCE = this;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/EclipseLinkHelpContextIds.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/EclipseLinkHelpContextIds.java
deleted file mode 100644
index 3832c21..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/EclipseLinkHelpContextIds.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal;
-
-import org.eclipse.jpt.ui.JptUiPlugin;
-
-/**
- * Help context ids for the Dali EclipseLink UI.
- * <p>
- * This interface contains constants only; it is not intended to be
- * implemented.
- * </p>
- */
-@SuppressWarnings("nls")
-public interface EclipseLinkHelpContextIds {
-
-	//ContextID prefix
-	public static final String PREFIX = JptUiPlugin.PLUGIN_ID + ".";
-
-	//Persistent Type composites
-	public static final String CACHING_ALWAYS_REFRESH = PREFIX + "caching_alwaysRefresh";
-	public static final String CACHING_CACHE_COORDINATION_TYPE = PREFIX + "caching_cacheCoordinationType";
-	public static final String CACHING_CACHE_TYPE = PREFIX + "caching_cacheType";
-	public static final String CACHING_DISABLE_HITS = PREFIX + "caching_disableHits";
-	public static final String CACHING_REFRESH_ONLY_IF_NEWER = PREFIX + "caching_refreshOnlyIfNewer";
-	public static final String CACHING_SHARED = PREFIX + "caching_shared";
-
-	//Persistence Xml Editor
-	public static final String PERSISTENCE_CACHING = PREFIX + "persistence_caching";
-	public static final String PERSISTENCE_CUSTOMIZATION = PREFIX + "persistence_customization";
-	public static final String PERSISTENCE_LOGGING = PREFIX + "persistence_logging";
-	public static final String PERSISTENCE_OPTIONS = PREFIX + "persistence_options";
-	public static final String PERSISTENCE_SCHEMA_GENERATION = PREFIX + "persistence_schemaGeneration";
-
-	public static final String PERSISTENCE_CACHING_DEFAULT_SHARED = PREFIX + "caching_defaultShared";
-	public static final String PERSISTENCE_CACHING_DEFAULT_SIZE = PREFIX + "caching_defaultSize";
-	public static final String PERSISTENCE_CACHING_DEFAULT_TYPE = PREFIX + "caching_defaultType";
-	
-	public static final String PERSISTENCE_LOGGING_EXCEPTIONS = PREFIX + "logging_exceptions";
-	public static final String PERSISTENCE_LOGGING_LEVEL = PREFIX + "logging_level";
-	public static final String PERSISTENCE_LOGGING_SESSION = PREFIX + "logging_session";
-	public static final String PERSISTENCE_LOGGING_THREAD = PREFIX + "logging_thread";
-	public static final String PERSISTENCE_LOGGING_TIMESTAMP = PREFIX + "logging_timeStamp";
-	
-	public static final String PERSISTENCE_OPTIONS_SESSION_NAME = PREFIX + "options_sessionName";
-	public static final String PERSISTENCE_OPTIONS_SESSIONS_XML = PREFIX + "options_sessionsXml";
-	public static final String PERSISTENCE_OPTIONS_TARGET_DATABASE = PREFIX + "options_targetDatabase";
-	public static final String PERSISTENCE_OPTIONS_TARGET_SERVER = PREFIX + "options_targetServer";
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/EclipseLinkUiMessages.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/EclipseLinkUiMessages.java
deleted file mode 100644
index 90a3738..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/EclipseLinkUiMessages.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2007, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Localized messages used by ElipseLink UI.
- */
-public class EclipseLinkUiMessages {
-
-	public static String MappingFileWizard_title;
-	public static String MappingFileWizardPage_title;
-	public static String MappingFileWizardPage_desc;
-	
-	public static String EclipseLink1_1MappingFileWizard_title;
-	public static String EclipseLink1_1MappingFileWizardPage_title;
-	public static String EclipseLink1_1MappingFileWizardPage_desc;
-
-	public static String Boolean_True;
-	public static String Boolean_False;
-
-	public static String DefaultWithoutValue;
-	public static String DefaultWithValue;
-
-	public static String PersistenceXmlTabFolder_defaultEmpty;
-	public static String PersistenceXmlTabFolder_defaultWithOneParam;
-
-	public static String PersistenceXmlGeneralTab_name;
-	public static String PersistenceXmlGeneralTab_provider;
-	public static String PersistenceXmlGeneralTab_browse;
-	public static String PersistenceXmlGeneralTab_description;
-
-	// General
-	public static String PersistenceXmlGeneralTab_title;
-	public static String PersistenceXmlGeneralTab_generalSectionTitle;
-	public static String PersistenceXmlGeneralTab_mappedClassesSectionTitle;
-	public static String PersistenceXmlGeneralTab_mappedClassesSectionDescription;
-	public static String PersistenceXmlGeneralTab_xmlMappingFilesSectionTitle;
-	public static String PersistenceXmlGeneralTab_xmlMappingFilesSectionDescription;
-	
-	public static String PersistenceXmlGeneralTab_nameLabel;
-	public static String PersistenceXmlGeneralTab_persistenceProviderLabel;
-	public static String PersistenceXmlGeneralTab_descriptionLabel;
-	
-	public static String PersistenceXmlGeneralTab_excludeUnlistedMappedClasses;
-	public static String PersistenceXmlGeneralTab_excludeUnlistedMappedClassesWithDefault;
-	public static String PersistenceXmlGeneralTab_mappedClassesNoName;
-	public static String PersistenceXmlGeneralTab_open;
-	
-	public static String PersistenceXmlGeneralTab_xmlMappingFilesDialog_title;
-	public static String PersistenceXmlGeneralTab_xmlMappingFilesDialog_message;
-	public static String PersistenceXmlGeneralTab_ormNoName;
-	public static String PersistenceXmlGeneralTab_excludeEclipselinkOrm;
-	public static String PersistenceXmlGeneralTab_excludeEclipselinkOrmWithDefault;
-
-	// Connection
-	public static String PersistenceXmlConnectionTab_title;
-	public static String PersistenceXmlConnectionTab_sectionTitle;
-	public static String PersistenceXmlConnectionTab_sectionDescription;
-	public static String PersistenceXmlConnectionTab_defaultWithOneParam;
-	public static String PersistenceXmlConnectionTab_defaultEmpty;
-
-	public static String PersistenceXmlConnectionTab_transactionTypeLabel;
-
-	public static String ConnectionPropertiesComposite_Database_GroupBox;
-
-	public static String JdbcPropertiesComposite_EclipseLinkConnectionPool_GroupBox;
-
-	public static String JdbcConnectionPropertiesComposite_ConnectionDialog_Message;
-	public static String JdbcConnectionPropertiesComposite_ConnectionDialog_Title;
-
-	public static String TransactionTypeComposite_jta;
-	public static String TransactionTypeComposite_resource_local;
-
-	public static String PersistenceXmlConnectionTab_nativeSqlLabel;
-	public static String PersistenceXmlConnectionTab_nativeSqlLabelDefault;
-
-	public static String PersistenceXmlConnectionTab_batchWritingLabel;
-
-	public static String BatchWritingComposite_none;
-	public static String BatchWritingComposite_jdbc;
-	public static String BatchWritingComposite_buffered;
-	public static String BatchWritingComposite_oracle_jdbc;
-
-	public static String PersistenceXmlConnectionTab_cacheStatementsLabel;
-
-	public static String PersistenceXmlConnectionTab_jtaDataSourceLabel;
-	public static String PersistenceXmlConnectionTab_nonJtaDataSourceLabel;
-
-	public static String PersistenceXmlConnectionTab_driverLabel;
-	public static String PersistenceXmlConnectionTab_urlLabel;
-	public static String PersistenceXmlConnectionTab_userLabel;
-	public static String PersistenceXmlConnectionTab_passwordLabel;
-	public static String PersistenceXmlConnectionTab_bindParametersLabel;
-	public static String PersistenceXmlConnectionTab_bindParametersLabelDefault;
-
-	public static String PersistenceXmlConnectionTab_readConnectionsSharedLabel;
-	public static String PersistenceXmlConnectionTab_readConnectionsSharedLabelDefault;
-	public static String PersistenceXmlConnectionTab_readConnectionsSectionTitle;
-	public static String PersistenceXmlConnectionTab_readConnectionsMinLabel;
-	public static String PersistenceXmlConnectionTab_readConnectionsMaxLabel;
-	public static String PersistenceXmlConnectionTab_writeConnectionsSectionTitle;
-	public static String PersistenceXmlConnectionTab_writeConnectionsMinLabel;
-	public static String PersistenceXmlConnectionTab_writeConnectionsMaxLabel;
-
-	public static String JdbcExclusiveConnectionsPropertiesComposite_GroupBox;
-	
-	public static String PersistenceXmlConnectionTab_exclusiveConnectionModeLabel;
-	public static String PersistenceXmlConnectionTab_lazyConnectionLabel;
-	public static String PersistenceXmlConnectionTab_lazyConnectionLabelDefault;
-
-	public static String JdbcExclusiveConnectionModeComposite_always;
-	public static String JdbcExclusiveConnectionModeComposite_isolated;
-	public static String JdbcExclusiveConnectionModeComposite_transactional;
-	
-	// SchemaGeneration
-	public static String PersistenceXmlSchemaGenerationTab_title;
-	public static String PersistenceXmlSchemaGenerationTab_sectionTitle;
-	public static String PersistenceXmlSchemaGenerationTab_sectionDescription;
-	public static String PersistenceXmlSchemaGenerationTab_defaultWithOneParam;
-	public static String PersistenceXmlSchemaGenerationTab_defaultEmpty;
-	public static String PersistenceXmlSchemaGenerationTab_defaultDot;
-
-	public static String PersistenceXmlSchemaGenerationTab_ddlGenerationTypeLabel;
-	public static String PersistenceXmlSchemaGenerationTab_outputModeLabel;
-
-	public static String PersistenceXmlSchemaGenerationTab_createDdlFileNameLabel;
-	public static String PersistenceXmlSchemaGenerationTab_dropDdlFileNameLabel;
-
-	public static String OutputModeComposite_both;
-	public static String OutputModeComposite_sql_script;
-	public static String OutputModeComposite_database;
-
-	public static String DdlGenerationTypeComposite_none;
-	public static String DdlGenerationTypeComposite_create_tables;
-	public static String DdlGenerationTypeComposite_drop_and_create_tables;
-
-	public static String PersistenceXmlSchemaGenerationTab_ddlGenerationLocationLabel;
-
-	public static String DdlGenerationLocationComposite_dialogTitle;
-	public static String DdlGenerationLocationComposite_dialogMessage;
-
-	// Caching
-	public static String PersistenceXmlCachingTab_title;
-	public static String PersistenceXmlCachingTab_sectionTitle;
-	public static String PersistenceXmlCachingTab_sectionDescription;
-	
-	public static String CacheDefaultsComposite_groupTitle;
-
-	public static String PersistenceXmlCachingTab_defaultCacheTypeLabel;
-	public static String PersistenceXmlCachingTab_cacheTypeLabel;
-
-	public static String PersistenceXmlCachingTab_defaultSharedCacheLabel;
-	public static String PersistenceXmlCachingTab_sharedCacheLabel;
-
-	public static String PersistenceXmlCachingTab_defaultSharedCacheDefaultLabel;
-	public static String PersistenceXmlCachingTab_sharedCacheDefaultLabel;
-
-	public static String CacheSizeComposite_cacheSize;
-
-	public static String CacheTypeComposite_full;
-	public static String CacheTypeComposite_hard_weak;
-	public static String CacheTypeComposite_none;
-	public static String CacheTypeComposite_soft;
-	public static String CacheTypeComposite_soft_weak;
-	public static String CacheTypeComposite_weak;
-
-	public static String DefaultCacheSizeComposite_defaultCacheSize;
-
-	public static String DefaultCacheTypeComposite_full;
-	public static String DefaultCacheTypeComposite_hard_weak;
-	public static String DefaultCacheTypeComposite_none;
-	public static String DefaultCacheTypeComposite_soft;
-	public static String DefaultCacheTypeComposite_soft_weak;
-	public static String DefaultCacheTypeComposite_weak;
-
-	public static String EntityDialog_selectEntity;
-	public static String EntityDialog_name;
-
-	public static String CachingEntityListComposite_groupTitle;
-	public static String CachingEntityListComposite_editButton;
-
-	public static String CachingEntityListComposite_dialogMessage;
-	public static String CachingEntityListComposite_dialogTitle;
-
-	public static String PersistenceXmlCachingTab_FlushClearCacheLabel;
-	
-	public static String FlushClearCacheComposite_drop;
-	public static String FlushClearCacheComposite_drop_invalidate;
-	public static String FlushClearCacheComposite_merge;
-	
-	// Customization
-	public static String PersistenceXmlCustomizationTab_title;
-	public static String PersistenceXmlCustomizationTab_sectionTitle;
-	public static String PersistenceXmlCustomizationTab_sectionDescription;
-	public static String PersistenceXmlCustomizationTab_defaultWithOneParam;
-
-	public static String PersistenceXmlCustomizationTab_weavingPropertiesGroupBox;
-	public static String PersistenceXmlCustomizationTab_weavingLabel;
-
-	public static String PersistenceXmlCustomizationTab_weavingLazyLabelDefault;
-	public static String PersistenceXmlCustomizationTab_weavingLazyLabel;
-
-	public static String PersistenceXmlCustomizationTab_weavingChangeTrackingLabelDefault;
-	public static String PersistenceXmlCustomizationTab_weavingChangeTrackingLabel;
-
-	public static String PersistenceXmlCustomizationTab_weavingFetchGroupsLabelDefault;
-	public static String PersistenceXmlCustomizationTab_weavingFetchGroupsLabel;
-
-	public static String PersistenceXmlCustomizationTab_weavingInternalLabelDefault;
-	public static String PersistenceXmlCustomizationTab_weavingInternalLabel;
-
-	public static String PersistenceXmlCustomizationTab_weavingEagerLabelDefault;
-	public static String PersistenceXmlCustomizationTab_weavingEagerLabel;
-	public static String PersistenceXmlCustomizationTab_defaultEmpty;
-	
-	public static String PersistenceXmlCustomizationTab_throwExceptionsLabelDefault;
-	public static String PersistenceXmlCustomizationTab_throwExceptionsLabel;
-	
-	public static String PersistenceXmlCustomizationTab_exceptionHandlerLabel;
-
-	public static String WeavingComposite_true_;
-	public static String WeavingComposite_false_;
-	public static String WeavingComposite_static_;
-
-	public static String CustomizationEntityListComposite_groupTitle;
-	public static String CustomizationEntityListComposite_editButton;
-
-	public static String CustomizationEntityListComposite_dialogMessage;
-	public static String CustomizationEntityListComposite_dialogTitle;
-	
-	public static String PersistenceXmlCustomizationTab_customizerLabel;
-	public static String PersistenceXmlCustomizationTab_sessionCustomizerLabel;
-	public static String PersistenceXmlCustomizationTab_noName;
-
-	public static String PersistenceXmlCustomizationTab_validationOnlyLabel;
-	public static String PersistenceXmlCustomizationTab_validationOnlyLabelDefault;
-
-	public static String PersistenceXmlCustomizationTab_validateSchemaLabel;
-	public static String PersistenceXmlCustomizationTab_validateSchemaLabelDefault;
-	
-	public static String PersistenceXmlCustomizationTab_profilerLabel;
-	public static String PersistenceXmlCustomizationTab_browse;
-	
-	public static String ProfilerComposite_performance_profiler;
-	public static String ProfilerComposite_query_monitor;
-	public static String ProfilerComposite_no_profiler;
-
-	// Logging
-	public static String PersistenceXmlLoggingTab_title;
-	public static String PersistenceXmlLoggingTab_sectionTitle;
-	public static String PersistenceXmlLoggingTab_sectionDescription;
-	public static String PersistenceXmlLoggingTab_defaultWithOneParam;
-	public static String PersistenceXmlLoggingTab_defaultEmpty;
-	public static String PersistenceXmlLoggingTab_defaultStdout;
-
-	public static String PersistenceXmlLoggingTab_categoryLoggingLevelSectionTitle;
-	public static String PersistenceXmlLoggingTab_loggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_sqlLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_transactionLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_eventLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_connectionLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_queryLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_cacheLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_propagationLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_sequencingLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_ejbLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_dmsLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_ejb_or_metadataLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_jpa_metamodelLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_weaverLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_propertiesLoggingLevelLabel;
-	public static String PersistenceXmlLoggingTab_serverLoggingLevelLabel;
-		
-	public static String LoggingLevelComposite_off;
-	public static String LoggingLevelComposite_severe;
-	public static String LoggingLevelComposite_warning;
-	public static String LoggingLevelComposite_info;
-	public static String LoggingLevelComposite_config;
-	public static String LoggingLevelComposite_fine;
-	public static String LoggingLevelComposite_finer;
-	public static String LoggingLevelComposite_finest;
-	public static String LoggingLevelComposite_all;
-
-	public static String EclipseLinkCategoryLoggingLevelComposite_off;
-	public static String EclipseLinkCategoryLoggingLevelComposite_severe;
-	public static String EclipseLinkCategoryLoggingLevelComposite_warning;
-	public static String EclipseLinkCategoryLoggingLevelComposite_info;
-	public static String EclipseLinkCategoryLoggingLevelComposite_config;
-	public static String EclipseLinkCategoryLoggingLevelComposite_fine;
-	public static String EclipseLinkCategoryLoggingLevelComposite_finer;
-	public static String EclipseLinkCategoryLoggingLevelComposite_finest;
-	public static String EclipseLinkCategoryLoggingLevelComposite_all;
-
-	public static String PersistenceXmlLoggingTab_loggerLabel;
-	public static String PersistenceXmlLoggingTab_browse;
-
-	public static String LoggerComposite_default_logger;
-	public static String LoggerComposite_java_logger;
-	public static String LoggerComposite_server_logger;
-
-	public static String PersistenceXmlLoggingTab_timestampLabel;
-	public static String PersistenceXmlLoggingTab_timestampLabelDefault;
-	public static String PersistenceXmlLoggingTab_threadLabel;
-	public static String PersistenceXmlLoggingTab_threadLabelDefault;
-	public static String PersistenceXmlLoggingTab_sessionLabel;
-	public static String PersistenceXmlLoggingTab_sessionLabelDefault;
-	public static String PersistenceXmlLoggingTab_exceptionsLabel;
-	public static String PersistenceXmlLoggingTab_exceptionsLabelDefault;
-	public static String PersistenceXmlLoggingTab_connectionLabel;
-	public static String PersistenceXmlLoggingTab_connectionLabelDefault;
-	
-	public static String PersistenceXmlLoggingTab_loggersLabel;
-	public static String PersistenceXmlLoggingTab_loggingFileLabel;
-
-	public static String LoggingFileLocationComposite_dialogTitle;
-
-	// Session Options
-	public static String PersistenceXmlOptionsTab_title;
-	public static String PersistenceXmlOptionsTab_sessionSectionTitle;
-	public static String PersistenceXmlOptionsTab_sessionSectionDescription;
-	public static String PersistenceXmlOptionsTab_defaultWithOneParam;
-	public static String PersistenceXmlOptionsTab_defaultEmpty;
-
-	public static String PersistenceXmlOptionsTab_sessionName;
-	public static String PersistenceXmlOptionsTab_sessionsXml;
-
-	public static String PersistenceXmlOptionsTab_includeDescriptorQueriesLabel;
-	public static String PersistenceXmlOptionsTab_includeDescriptorQueriesLabelDefault;
-
-	public static String PersistenceXmlOptionsTab_eventListenerLabel;
-	public static String PersistenceXmlOptionsTab_targetDatabaseLabel;
-	
-	public static String PersistenceXmlOptionsTab_miscellaneousSectionTitle;
-	public static String PersistenceXmlOptionsTab_miscellaneousSectionDescription;
-	
-	public static String PersistenceXmlOptionsTab_temporalMutableLabel;
-	public static String PersistenceXmlOptionsTab_temporalMutableLabelDefault;
-
-	public static String TargetDatabaseComposite_attunity;
-	public static String TargetDatabaseComposite_auto;
-	public static String TargetDatabaseComposite_cloudscape;
-	public static String TargetDatabaseComposite_database;
-	public static String TargetDatabaseComposite_db2;
-	public static String TargetDatabaseComposite_db2mainframe;
-	public static String TargetDatabaseComposite_dbase;
-	public static String TargetDatabaseComposite_derby;
-	public static String TargetDatabaseComposite_hsql;
-	public static String TargetDatabaseComposite_informix;
-	public static String TargetDatabaseComposite_javadb;
-	public static String TargetDatabaseComposite_mysql;
-	public static String TargetDatabaseComposite_oracle;
-	public static String TargetDatabaseComposite_oracle11;
-	public static String TargetDatabaseComposite_oracle10;
-	public static String TargetDatabaseComposite_oracle9;
-	public static String TargetDatabaseComposite_oracle8;
-	public static String TargetDatabaseComposite_pointbase;
-	public static String TargetDatabaseComposite_postgresql;
-	public static String TargetDatabaseComposite_sqlanywhere;
-	public static String TargetDatabaseComposite_sqlserver;
-	public static String TargetDatabaseComposite_sybase;
-	public static String TargetDatabaseComposite_timesten;
-	   
-	public static String PersistenceXmlOptionsTab_targetServerLabel;
-
-	public static String TargetServerComposite_none;
-	public static String TargetServerComposite_oc4j;
-	public static String TargetServerComposite_sunas9;
-	public static String TargetServerComposite_websphere;
-	public static String TargetServerComposite_websphere_6_1;
-	public static String TargetServerComposite_weblogic;
-	public static String TargetServerComposite_weblogic_9;
-	public static String TargetServerComposite_weblogic_10;
-	public static String TargetServerComposite_jboss;
-
-	// DDL Generation
-	public static String EclipseLinkDDLGeneratorUi_generatingDDLWarningTitle;
-	public static String EclipseLinkDDLGeneratorUi_generatingDDLWarningMessage;
-	public static String EclipseLinkDDLGeneratorUi_error;
-
-	private static final String BUNDLE_NAME = "eclipselink_ui"; //$NON-NLS-1$
-	private static final Class<?> BUNDLE_CLASS = EclipseLinkUiMessages.class;
-	static {
-		NLS.initializeMessages(BUNDLE_NAME, BUNDLE_CLASS);
-	}
-	
-	private EclipseLinkUiMessages() {
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/ddlgen/EclipseLinkDDLGeneratorUi.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/ddlgen/EclipseLinkDDLGeneratorUi.java
deleted file mode 100644
index 3e9859d..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/ddlgen/EclipseLinkDDLGeneratorUi.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2007, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.ddlgen;
-
-import java.util.Iterator;
-
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.jpt.core.JpaPlatform;
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.core.context.persistence.Persistence;
-import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
-import org.eclipse.jpt.eclipselink.core.internal.ddlgen.EclipseLinkDDLGenerator;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.eclipselink.ui.internal.ddlgen.wizards.GenerateDDLWizard;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- *  EclipseLinkDLLGeneratorUi is used by the EclipseLinkPlatformUi to initiate 
- *  the execution of EclipseLink DDL generator.
- */
-public class EclipseLinkDDLGeneratorUi
-{
-	private final JpaProject project;
-	private static final String CR = StringTools.CR;
-
-	// ********** constructors **********
-	
-	public static void generate(JpaProject project) {
-		new EclipseLinkDDLGeneratorUi(project).generate();
-	}
-
-	protected EclipseLinkDDLGeneratorUi(JpaProject project) {
-		super();
-		if (project == null) {
-			throw new NullPointerException();
-		}
-		this.project = project;
-	}
-
-	// ********** behavior **********
-	
-	protected void generate() {
-		
-		PersistenceUnit persistenceUnit = this.getPersistenceUnits().next(); // Take the first persistenceUnit
-		String puName = persistenceUnit.getName();
-		if( ! this.displayGeneratingDDLWarning()) {
-			return;
-		}
-		
-		GenerateDDLWizard wizard = new GenerateDDLWizard(this.project);
-		WizardDialog dialog = new WizardDialog(this.getCurrentShell(), wizard);
-		dialog.create();
-		if(wizard.getPageCount() > 0) {
-			int returnCode = dialog.open();
-			if (returnCode == Window.CANCEL) {
-				return;
-			}
-		}
-		IWorkspaceRunnable runnable = this.buildGenerateDDLRunnable(puName, this.project);
-		try {
-			ResourcesPlugin.getWorkspace().run(runnable, new NullProgressMonitor());
-		} 
-		catch (CoreException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-	
-	protected IWorkspaceRunnable buildGenerateDDLRunnable(String puName, JpaProject project) {
-		return new GenerateDDLRunnable(puName, project);
-	}
-	
-	private Shell getCurrentShell() {
-	    return Display.getCurrent().getActiveShell();
-	}
-
-	private boolean displayGeneratingDDLWarning() {
-		String message = org.eclipse.osgi.util.NLS.bind(
-			EclipseLinkUiMessages.EclipseLinkDDLGeneratorUi_generatingDDLWarningMessage,
-			CR,  CR + CR);
-			
-		return MessageDialog.openQuestion(
-			this.getCurrentShell(), 
-			EclipseLinkUiMessages.EclipseLinkDDLGeneratorUi_generatingDDLWarningTitle, 
-			message);
-	}
-
-	// ********** Persistence Unit **********
-
-	protected JpaPlatform getPlatform() {
-		return this.project.getJpaPlatform();
-	}
-	
-	protected Iterator<PersistenceUnit> getPersistenceUnits() {
-		return this.getPersistence().persistenceUnits();
-	}
-
-	protected Persistence getPersistence() {
-		return this.project.getRootContextNode().getPersistenceXml().getPersistence();
-	}
-
-	// ********** runnable **********
-
-	protected static class GenerateDDLRunnable implements IWorkspaceRunnable {
-		private final String puName;
-		private final JpaProject project;
-
-		public GenerateDDLRunnable(String puName, JpaProject project) {
-			super();
-			this.puName = puName;
-			this.project = project;
-		}
-
-		public void run(IProgressMonitor monitor) {
-			String projectLocation = this.project.getProject().getLocation().toString();
-			try {
-				this.ddlGeneratorGenerate(this.puName, this.project, projectLocation, monitor);
-			} 
-			catch (OperationCanceledException e) {
-				return;
-				// fall through and tell monitor we are done
-			}
-			catch (RuntimeException re) {
-				String msg = re.getMessage();
-				String message = (msg == null) ? re.toString() : msg;
-				
-				this.logError(message);
-				throw new RuntimeException(re);
-			}
-		}
-
-		protected void ddlGeneratorGenerate(String puName, JpaProject project, String projectLocation, IProgressMonitor monitor) {
-			EclipseLinkDDLGenerator.generate(puName, project, projectLocation, monitor);
-		}
-
-		protected void logError(String message) {
-				this.displayError(message);
-		}
-		
-		private void displayError(String message) {
-			MessageDialog.openError(
-					getShell(),
-					EclipseLinkUiMessages.EclipseLinkDDLGeneratorUi_error,
-					message
-				);
-		}
-
-		private Shell getShell() {
-			Display display = Display.getCurrent();
-			Shell shell = (display == null) ? null : display.getActiveShell();
-			if (shell == null && display != null) {
-				Shell[] shells = display.getShells();
-				if (shells.length > 0)
-					shell = shells[0];
-			}
-			return shell;
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/ddlgen/wizards/GenerateDDLWizard.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/ddlgen/wizards/GenerateDDLWizard.java
deleted file mode 100644
index 364e5b2..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/ddlgen/wizards/GenerateDDLWizard.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2007, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.ddlgen.wizards;
-
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.db.ConnectionProfile;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.ui.internal.wizards.DatabaseSchemaWizardPage;
-
-/**
- *  GenerateDDLWizard
- */
-public class GenerateDDLWizard extends Wizard {	
-
-	private JpaProject jpaProject;
-
-	private DatabaseSchemaWizardPage dbSettingsPage;
-
-	public GenerateDDLWizard(JpaProject jpaProject) {
-		super();
-		this.jpaProject = jpaProject;
-		this.setWindowTitle(JptUiMessages.GenerateDDLWizard_title); 
-	}
-	
-	@Override
-	public void addPages() {
-		super.addPages();
-		if (this.getJpaProjectConnectionProfile() == null) {
-			this.dbSettingsPage = new DatabaseSchemaWizardPage(this.jpaProject);
-			this.addPage(this.dbSettingsPage);
-		}
-	}
-	
-	@Override
-	public boolean performFinish() {
-		return (this.getJpaProjectConnectionProfile() != null);
-	}
-    
-    @Override
-	public boolean canFinish() {
-        return this.dbSettingsPage.isPageComplete();
-    }
-    
-	private ConnectionProfile getJpaProjectConnectionProfile() {
-		return this.jpaProject.getConnectionProfile();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/AbstractEclipseLinkBasicCollectionMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/AbstractEclipseLinkBasicCollectionMappingUiDefinition.java
deleted file mode 100644
index a51a4e5..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/AbstractEclipseLinkBasicCollectionMappingUiDefinition.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.EclipseLinkMappingKeys;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkBasicCollectionMapping;
-import org.eclipse.jpt.ui.JptUiPlugin;
-import org.eclipse.jpt.ui.internal.JptUiIcons;
-import org.eclipse.jpt.ui.internal.details.AbstractMappingUiDefinition;
-import org.eclipse.swt.graphics.Image;
-
-public abstract class AbstractEclipseLinkBasicCollectionMappingUiDefinition<M, T extends EclipseLinkBasicCollectionMapping>
-	extends AbstractMappingUiDefinition<M, T>
-{
-	protected AbstractEclipseLinkBasicCollectionMappingUiDefinition() {
-		super();
-	}
-	
-	
-	public Image getImage() {
-		return JptUiPlugin.getImage(JptUiIcons.JPA_CONTENT);
-	}
-	
-	public String getLabel() {
-		return EclipseLinkUiDetailsMessages.EclipseLinkBasicCollectionMappingUiProvider_label;
-	}
-	
-	public String getLinkLabel() {
-		return EclipseLinkUiDetailsMessages.EclipseLinkBasicCollectionMappingUiProvider_linkLabel;
-	}
-	
-	public String getKey() {
-		return EclipseLinkMappingKeys.BASIC_COLLECTION_ATTRIBUTE_MAPPING_KEY;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/AbstractEclipseLinkBasicMapMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/AbstractEclipseLinkBasicMapMappingUiDefinition.java
deleted file mode 100644
index 72851c2..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/AbstractEclipseLinkBasicMapMappingUiDefinition.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.EclipseLinkMappingKeys;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkBasicMapMapping;
-import org.eclipse.jpt.ui.JptUiPlugin;
-import org.eclipse.jpt.ui.internal.JptUiIcons;
-import org.eclipse.jpt.ui.internal.details.AbstractMappingUiDefinition;
-import org.eclipse.swt.graphics.Image;
-
-public abstract class AbstractEclipseLinkBasicMapMappingUiDefinition<M, T extends EclipseLinkBasicMapMapping>
-	extends AbstractMappingUiDefinition<M, T>
-{
-	protected AbstractEclipseLinkBasicMapMappingUiDefinition() {
-		super();
-	}
-	
-	
-	public Image getImage() {
-		return JptUiPlugin.getImage(JptUiIcons.JPA_CONTENT);
-	}
-	
-	public String getLabel() {
-		return EclipseLinkUiDetailsMessages.EclipseLinkBasicMapMappingUiProvider_label;
-	}
-	
-	public String getLinkLabel() {
-		return EclipseLinkUiDetailsMessages.EclipseLinkBasicMapMappingUiProvider_linkLabel;
-	}
-	
-	public String getKey() {
-		return EclipseLinkMappingKeys.BASIC_MAP_ATTRIBUTE_MAPPING_KEY;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/AbstractEclipseLinkTransformationMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/AbstractEclipseLinkTransformationMappingUiDefinition.java
deleted file mode 100644
index 48adfdb..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/AbstractEclipseLinkTransformationMappingUiDefinition.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.EclipseLinkMappingKeys;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkTransformationMapping;
-import org.eclipse.jpt.ui.JptUiPlugin;
-import org.eclipse.jpt.ui.internal.JptUiIcons;
-import org.eclipse.jpt.ui.internal.details.AbstractMappingUiDefinition;
-import org.eclipse.swt.graphics.Image;
-
-public abstract class AbstractEclipseLinkTransformationMappingUiDefinition<M, T extends EclipseLinkTransformationMapping>
-	extends AbstractMappingUiDefinition<M, T>
-{
-	protected AbstractEclipseLinkTransformationMappingUiDefinition() {
-		super();
-	}
-	
-	
-	public Image getImage() {
-		return JptUiPlugin.getImage(JptUiIcons.JPA_CONTENT);
-	}
-	
-	public String getLabel() {
-		return EclipseLinkUiDetailsMessages.EclipseLinkTransformationMappingUiProvider_label;
-	}
-	
-	public String getLinkLabel() {
-		return EclipseLinkUiDetailsMessages.EclipseLinkTransformationMappingUiProvider_linkLabel;
-	}
-	
-	public String getKey() {
-		return EclipseLinkMappingKeys.TRANSFORMATION_ATTRIBUTE_MAPPING_KEY;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/AbstractEclipseLinkVariableOneToOneMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/AbstractEclipseLinkVariableOneToOneMappingUiDefinition.java
deleted file mode 100644
index e00e05e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/AbstractEclipseLinkVariableOneToOneMappingUiDefinition.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.EclipseLinkMappingKeys;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkVariableOneToOneMapping;
-import org.eclipse.jpt.ui.JptUiPlugin;
-import org.eclipse.jpt.ui.internal.JptUiIcons;
-import org.eclipse.jpt.ui.internal.details.AbstractMappingUiDefinition;
-import org.eclipse.swt.graphics.Image;
-
-public abstract class AbstractEclipseLinkVariableOneToOneMappingUiDefinition<M, T extends EclipseLinkVariableOneToOneMapping>
-	extends AbstractMappingUiDefinition<M, T>
-{	
-	protected AbstractEclipseLinkVariableOneToOneMappingUiDefinition() {
-		super();
-	}
-	
-	
-	public Image getImage() {
-		return JptUiPlugin.getImage(JptUiIcons.JPA_CONTENT);
-	}
-	
-	public String getLabel() {
-		return EclipseLinkUiDetailsMessages.EclipseLinkVariableOneToOneMappingUiProvider_label;
-	}
-	
-	public String getLinkLabel() {
-		return EclipseLinkUiDetailsMessages.EclipseLinkVariableOneToOneMappingUiProvider_linkLabel;
-	}
-	
-	public String getKey() {
-		return EclipseLinkMappingKeys.VARIABLE_ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkAlwaysRefreshComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkAlwaysRefreshComposite.java
deleted file mode 100644
index 4613c5e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkAlwaysRefreshComposite.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-
-/**
- * This composite simply shows a tri-state check box for the Always Refresh option.
- * 
- * @see EclipseLinkCaching
- * @see EclipseLinkCachingComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkAlwaysRefreshComposite extends Pane<EclipseLinkCaching>
-{
-	/**
-	 * Creates a new <code>OptionalComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkAlwaysRefreshComposite(Pane<? extends EclipseLinkCaching> parentPane,
-	                         Composite parent)
-	{
-		super(parentPane, parent);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkAlwaysRefreshComposite_alwaysRefreshLabel,
-			buildAlwaysRefreshHolder(),
-			buildAlwaysRefreshStringHolder(),
-			EclipseLinkHelpContextIds.CACHING_ALWAYS_REFRESH
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildAlwaysRefreshHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(getSubjectHolder(), EclipseLinkCaching.SPECIFIED_ALWAYS_REFRESH_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getSpecifiedAlwaysRefresh();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setSpecifiedAlwaysRefresh(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildAlwaysRefreshStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultAlwaysRefreshHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? JptUiDetailsMessages.Boolean_True : JptUiDetailsMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiDetailsMessages.EclipseLinkAlwaysRefreshComposite_alwaysRefreshDefault, defaultStringValue);
-				}
-				return EclipseLinkUiDetailsMessages.EclipseLinkAlwaysRefreshComposite_alwaysRefreshLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultAlwaysRefreshHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(
-			getSubjectHolder(),
-			EclipseLinkCaching.SPECIFIED_ALWAYS_REFRESH_PROPERTY,
-			EclipseLinkCaching.DEFAULT_ALWAYS_REFRESH_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getSpecifiedAlwaysRefresh() != null) {
-					return null;
-				}
-				return Boolean.valueOf(this.subject.isDefaultAlwaysRefresh());
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkBasicCollectionMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkBasicCollectionMappingComposite.java
deleted file mode 100644
index a293e2f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkBasicCollectionMappingComposite.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkBasicCollectionMapping;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkBasicCollectionMappingComposite extends Pane<EclipseLinkBasicCollectionMapping>
-                                       implements JpaComposite
-{
-	/**
-	 * Creates a new <code>EclipseLinkBasicCollectionMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IManyToOneMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public EclipseLinkBasicCollectionMappingComposite(PropertyValueModel<? extends EclipseLinkBasicCollectionMapping> subjectHolder,
-	                                 Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkBasicMapMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkBasicMapMappingComposite.java
deleted file mode 100644
index d498896..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkBasicMapMappingComposite.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkBasicMapMapping;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkBasicMapMappingComposite extends Pane<EclipseLinkBasicMapMapping>
-                                       implements JpaComposite
-{
-	/**
-	 * Creates a new <code>EclipseLinkBasicCollectionMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IManyToOneMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public EclipseLinkBasicMapMappingComposite(PropertyValueModel<? extends EclipseLinkBasicMapMapping> subjectHolder,
-	                                 Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkBasicMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkBasicMappingComposite.java
deleted file mode 100644
index 12f2dae..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkBasicMappingComposite.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.context.BasicMapping;
-import org.eclipse.jpt.core.context.Converter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkBasicMapping;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConvert;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkMutable;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AbstractBasicMappingComposite;
-import org.eclipse.jpt.ui.internal.details.ColumnComposite;
-import org.eclipse.jpt.ui.internal.details.EnumTypeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.TemporalTypeComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | ColumnComposite                                                       | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | FetchTypeComposite                                                    | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | TemporalTypeComposite                                                 | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | EnumTypeComposite                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OptionalComposite                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | MutableComposite                                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | LobComposite                                                          | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see BasicMapping
- * @see ColumnComposite
- * @see EnumTypeComposite
- * @see FetchTypeComposite
- * @see LobComposite
- * @see OptionalComposite
- * @see TemporalTypeComposite
- *
- * @version 2.3
- * @since 2.1
- */
-public class EclipseLinkBasicMappingComposite<T extends BasicMapping> extends AbstractBasicMappingComposite<T>
-{
-	/**
-	 * Creates a new <code>BasicMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IBasicMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public EclipseLinkBasicMappingComposite(PropertyValueModel<? extends T> subjectHolder,
-	                             Composite parent,
-	                             WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeBasicSection(Composite container) {
-		new ColumnComposite(this, buildColumnHolder(), container);
-		new FetchTypeComposite(this, container);
-		new OptionalComposite(this, addSubPane(container, 4));
-		new EclipseLinkMutableComposite(this, buildMutableHolder(), container);
-	}
-	
-	@Override
-	protected void initializeTypeSection(Composite container) {
-		((GridLayout) container.getLayout()).numColumns = 2;
-
-		// No converter
-		Button noConverterButton = addRadioButton(
-			container, 
-			JptUiDetailsMessages.TypeSection_default, 
-			buildConverterBooleanHolder(Converter.NO_CONVERTER), 
-			null);
-		((GridData) noConverterButton.getLayoutData()).horizontalSpan = 2;
-		
-		// Lob
-		Button lobButton = addRadioButton(
-			container, 
-			JptUiDetailsMessages.TypeSection_lob, 
-			buildConverterBooleanHolder(Converter.LOB_CONVERTER), 
-			null);
-		((GridData) lobButton.getLayoutData()).horizontalSpan = 2;
-		
-		PropertyValueModel<Converter> converterHolder = buildConverterHolder();
-		// Temporal
-		addRadioButton(
-			container, 
-			JptUiDetailsMessages.TypeSection_temporal, 
-			buildConverterBooleanHolder(Converter.TEMPORAL_CONVERTER), 
-			null);
-		registerSubPane(new TemporalTypeComposite(buildTemporalConverterHolder(converterHolder), container, getWidgetFactory()));
-		
-		
-		// Enumerated
-		addRadioButton(
-			container, 
-			JptUiDetailsMessages.TypeSection_enumerated, 
-			buildConverterBooleanHolder(Converter.ENUMERATED_CONVERTER), 
-			null);
-		registerSubPane(new EnumTypeComposite(buildEnumeratedConverterHolder(converterHolder), container, getWidgetFactory()));
-
-		// EclipseLink Converter
-		Button elConverterButton = addRadioButton(
-			container, 
-			EclipseLinkUiDetailsMessages.TypeSection_converted, 
-			buildConverterBooleanHolder(EclipseLinkConvert.ECLIPSE_LINK_CONVERTER), 
-			null);
-		((GridData) elConverterButton.getLayoutData()).horizontalSpan = 2;
-
-		Pane<EclipseLinkConvert> convertComposite = buildConvertComposite(buildEclipseLinkConverterHolder(converterHolder), container);
-		GridData gridData = (GridData) convertComposite.getControl().getLayoutData();
-		gridData.horizontalSpan = 2;
-		gridData.horizontalIndent = 20;
-		registerSubPane(convertComposite);
-	}
-
-	protected Pane<EclipseLinkConvert> buildConvertComposite(PropertyValueModel<EclipseLinkConvert> convertHolder, Composite container) {
-		return new EclipseLinkConvertComposite(convertHolder, container, getWidgetFactory());
-	}
-	
-	protected PropertyValueModel<EclipseLinkMutable> buildMutableHolder() {
-		return new PropertyAspectAdapter<BasicMapping, EclipseLinkMutable>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkMutable buildValue_() {
-				return ((EclipseLinkBasicMapping) this.subject).getMutable();
-			}
-		};
-	}
-	
-	protected PropertyValueModel<EclipseLinkConvert> buildEclipseLinkConverterHolder(PropertyValueModel<Converter> converterHolder) {
-		return new TransformationPropertyValueModel<Converter, EclipseLinkConvert>(converterHolder) {
-			@Override
-			protected EclipseLinkConvert transform_(Converter converter) {
-				return converter.getType() == EclipseLinkConvert.ECLIPSE_LINK_CONVERTER ? (EclipseLinkConvert) converter : null;
-			}
-		};
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCacheCoordinationTypeComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCacheCoordinationTypeComposite.java
deleted file mode 100644
index b37add9..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCacheCoordinationTypeComposite.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCacheCoordinationType;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here is the layout of this pane:
- * <pre>
- * ----------------------------------------------------------------------------
- * |                    ----------------------------------------------------- |
- * | Coordination Type: |                                                 |v| |
- * |                    ----------------------------------------------------- |
- * ----------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkCaching
- * @see EclipseLinkCachingComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkCacheCoordinationTypeComposite extends Pane<EclipseLinkCaching> {
-
-	/**
-	 * Creates a new <code>CacheTypeComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkCacheCoordinationTypeComposite(Pane<? extends EclipseLinkCaching> parentPane,
-	                          Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	private EnumFormComboViewer<EclipseLinkCaching, EclipseLinkCacheCoordinationType> addCacheCoordinationTypeCombo(Composite container) {
-
-		return new EnumFormComboViewer<EclipseLinkCaching, EclipseLinkCacheCoordinationType>(this, container) {
-
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(EclipseLinkCaching.DEFAULT_COORDINATION_TYPE_PROPERTY);
-				propertyNames.add(EclipseLinkCaching.SPECIFIED_COORDINATION_TYPE_PROPERTY);
-			}
-
-			@Override
-			protected EclipseLinkCacheCoordinationType[] getChoices() {
-				return EclipseLinkCacheCoordinationType.values();
-			}
-
-			@Override
-			protected EclipseLinkCacheCoordinationType getDefaultValue() {
-				return getSubject().getDefaultCoordinationType();
-			}
-
-			@Override
-			protected String displayString(EclipseLinkCacheCoordinationType value) {
-				return buildDisplayString(
-					EclipseLinkUiDetailsMessages.class,
-					EclipseLinkCacheCoordinationTypeComposite.this,
-					value
-				);
-			}
-
-			@Override
-			protected EclipseLinkCacheCoordinationType getValue() {
-				return getSubject().getSpecifiedCoordinationType();
-			}
-
-			@Override
-			protected void setValue(EclipseLinkCacheCoordinationType value) {
-				getSubject().setSpecifiedCoordinationType(value);
-			}
-			
-			@Override
-			protected boolean sortChoices() {
-				return false;
-			}
-		};
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		addLabeledComposite(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkCacheCoordinationTypeComposite_label,
-			addCacheCoordinationTypeCombo(container),
-			EclipseLinkHelpContextIds.CACHING_CACHE_COORDINATION_TYPE
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCacheSizeComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCacheSizeComposite.java
deleted file mode 100644
index 9281ab6..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCacheSizeComposite.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCaching;
-import org.eclipse.jpt.ui.internal.widgets.IntegerCombo;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here is the layout of this pane:
- * <pre>
- * ----------------------------------------------------------------------------
- * |                      ---------------                                      |
- * |   Size:              | I         |I|  Default (XXX)                       |
- * |                      ---------------                                      |
- * ----------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkCaching
- * @see EclipseLinkCachingComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkCacheSizeComposite extends Pane<EclipseLinkCaching> {
-
-	/**
-	 * Creates a new <code>CacheSizeComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkCacheSizeComposite(Pane<? extends EclipseLinkCaching> parentPane,
-	                          Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		addSizeCombo(container);
-	}
-	
-	private void addSizeCombo(Composite container) {
-		new IntegerCombo<EclipseLinkCaching>(this, container) {
-			
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiDetailsMessages.EclipseLinkCacheSizeComposite_size;
-			}
-		
-			@Override
-			protected String getHelpId() {
-				return null;//JpaHelpContextIds.MAPPING_COLUMN_LENGTH;
-			}
-
-			@Override
-			protected PropertyValueModel<Integer> buildDefaultHolder() {
-				return new PropertyAspectAdapter<EclipseLinkCaching, Integer>(getSubjectHolder(), EclipseLinkCaching.DEFAULT_SIZE_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						return Integer.valueOf(this.subject.getDefaultSize());
-					}
-				};
-			}
-			
-			@Override
-			protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
-				return new PropertyAspectAdapter<EclipseLinkCaching, Integer>(getSubjectHolder(), EclipseLinkCaching.SPECIFIED_SIZE_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getSpecifiedSize();
-					}
-
-					@Override
-					protected void setValue_(Integer value) {
-						this.subject.setSpecifiedSize(value);
-					}
-				};
-			}
-		};
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCacheTypeComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCacheTypeComposite.java
deleted file mode 100644
index 0ea0033..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCacheTypeComposite.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCacheType;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here is the layout of this pane:
- * <pre>
- * ----------------------------------------------------------------------------
- * |       ------------------------------------------------------------------ |
- * | Type: |                                                              |v| |
- * |       ------------------------------------------------------------------ |
- * ----------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkCaching
- * @see EclipseLinkCachingComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkCacheTypeComposite extends Pane<EclipseLinkCaching> {
-
-	/**
-	 * Creates a new <code>CacheTypeComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkCacheTypeComposite(Pane<? extends EclipseLinkCaching> parentPane,
-	                          Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	private EnumFormComboViewer<EclipseLinkCaching, EclipseLinkCacheType> addCacheTypeCombo(Composite container) {
-
-		return new EnumFormComboViewer<EclipseLinkCaching, EclipseLinkCacheType>(this, container) {
-
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(EclipseLinkCaching.DEFAULT_TYPE_PROPERTY);
-				propertyNames.add(EclipseLinkCaching.SPECIFIED_TYPE_PROPERTY);
-			}
-
-			@Override
-			protected EclipseLinkCacheType[] getChoices() {
-				return EclipseLinkCacheType.values();
-			}
-
-			@Override
-			protected EclipseLinkCacheType getDefaultValue() {
-				return getSubject().getDefaultType();
-			}
-
-			@Override
-			protected String displayString(EclipseLinkCacheType value) {
-				return buildDisplayString(
-					EclipseLinkUiDetailsMessages.class,
-					EclipseLinkCacheTypeComposite.this,
-					value
-				);
-			}
-
-			@Override
-			protected EclipseLinkCacheType getValue() {
-				return getSubject().getSpecifiedType();
-			}
-
-			@Override
-			protected void setValue(EclipseLinkCacheType value) {
-				getSubject().setSpecifiedType(value);
-			}
-			
-			@Override
-			protected boolean sortChoices() {
-				return false;
-			}
-		};
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		addLabeledComposite(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkCacheTypeComposite_label,
-			addCacheTypeCombo(container),
-			EclipseLinkHelpContextIds.CACHING_CACHE_TYPE
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCachingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCachingComposite.java
deleted file mode 100644
index e13af70..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCachingComposite.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This pane shows the caching options.
- * <p>
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | x Shared                                                                  |
- * |    CacheTypeComposite                                                     |
- * |    CacheSizeComposite                                                     |
- * |    > Advanced   	                                                       |
- * |    	ExpiryComposite                                                    |
- * |    	AlwaysRefreshComposite                                             |
- * |   		RefreshOnlyIfNewerComposite                                        |
- * |    	DisableHitsComposite                                               |
- * |    	CacheCoordinationComposite                                         |
- * | ExistenceTypeComposite                                                    |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see Entity
- * @see EclipseLinkCaching
- * @see JavaEclipseLinkEntityComposite - The parent container
- * @see EclipseLinkCacheTypeComposite
- * @see EclipseLinkCacheSizeComposite
- * @see EclipseLinkAlwaysRefreshComposite
- * @see EclipseLinkRefreshOnlyIfNewerComposite
- * @see EclipseLinkDisableHitsComposite
- *
- * @version 2.1
- * @since 2.1
- */
-public abstract class EclipseLinkCachingComposite<T extends EclipseLinkCaching> extends Pane<T>
-{
-
-	protected EclipseLinkCachingComposite(Pane<?> parentPane,
-        PropertyValueModel<T> subjectHolder,
-        Composite parent) {
-
-		super(parentPane, subjectHolder, parent, false);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		//Shared Check box, uncheck this and the rest of the panel is disabled
-		addTriStateCheckBoxWithDefault(
-			addSubPane(container, 8),
-			EclipseLinkUiDetailsMessages.EclipseLinkCachingComposite_sharedLabel,
-			buildSpecifiedSharedHolder(),
-			buildSharedStringHolder(),
-			EclipseLinkHelpContextIds.CACHING_SHARED
-		);
-
-		Composite subPane = addSubPane(container, 0, 16);
-
-		Collection<Pane<?>> panes = new ArrayList<Pane<?>>();
-		
-		panes.add(new EclipseLinkCacheTypeComposite(this, subPane));
-		panes.add(new EclipseLinkCacheSizeComposite(this, subPane));
-		
-		// Advanced sub-pane
-		Composite advancedSection = addCollapsibleSubSection(
-			subPane,
-			EclipseLinkUiDetailsMessages.EclipseLinkCachingComposite_advanced,
-			new SimplePropertyValueModel<Boolean>(Boolean.FALSE)
-		);
-
-		initializeAdvancedPane(addSubPane(advancedSection, 0, 16), panes);
-			
-		new PaneEnabler(buildSharedCacheEnabler(), panes);
-		
-		initializeExistenceCheckingComposite(addSubPane(container, 8));
-	}
-	
-	protected void initializeAdvancedPane(Composite container, Collection<Pane<?>> panes) {
-		panes.add(new EclipseLinkExpiryComposite(this, container));
-		panes.add(new EclipseLinkAlwaysRefreshComposite(this, container));
-		panes.add(new EclipseLinkRefreshOnlyIfNewerComposite(this, container));
-		panes.add(new EclipseLinkDisableHitsComposite(this, container));
-		panes.add(new EclipseLinkCacheCoordinationTypeComposite(this, container));
-	}
-	
-	protected abstract void initializeExistenceCheckingComposite(Composite parent);
-	
-	private PropertyValueModel<Boolean> buildSharedCacheEnabler() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(
-				getSubjectHolder(), 
-				EclipseLinkCaching.SPECIFIED_SHARED_PROPERTY, 
-				EclipseLinkCaching.DEFAULT_SHARED_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.isShared());
-			}
-		};
-	}	
-	
-	private WritablePropertyValueModel<Boolean> buildSpecifiedSharedHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(getSubjectHolder(), EclipseLinkCaching.SPECIFIED_SHARED_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getSpecifiedShared();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setSpecifiedShared(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildSharedStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultSharedHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? JptUiDetailsMessages.Boolean_True : JptUiDetailsMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiDetailsMessages.EclipseLinkCachingComposite_sharedLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiDetailsMessages.EclipseLinkCachingComposite_sharedLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultSharedHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(
-			getSubjectHolder(),
-			EclipseLinkCaching.SPECIFIED_SHARED_PROPERTY,
-			EclipseLinkCaching.DEFAULT_SHARED_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getSpecifiedShared() != null) {
-					return null;
-				}
-				return Boolean.valueOf(this.subject.isDefaultShared());
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkChangeTrackingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkChangeTrackingComposite.java
deleted file mode 100644
index 65d81d3..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkChangeTrackingComposite.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkChangeTracking;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkChangeTrackingType;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here is the layout of this pane:
- * <pre>
- * -------------------------------------------------------------------------
- * |       			  		---------------------------------------------- |
- * | Change Tracking :      |                                          |v| |
- * |       					---------------------------------------------- |
- * -------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkChangeTracking
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkChangeTrackingComposite extends Pane<EclipseLinkChangeTracking> {
-
-	/**
-	 * Creates a new <code>ChangeTrackingComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkChangeTrackingComposite(Pane<?> parentPane, 
-								PropertyValueModel<? extends EclipseLinkChangeTracking> subjectHolder,
-								Composite parent) {
-
-		super(parentPane, subjectHolder, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		addLabeledComposite( 
-            container,
-            addLabel( 
-                 container, 
-                 EclipseLinkUiDetailsMessages.EclipseLinkChangeTrackingComposite_label), 
-            addChangeTrackingTypeCombo(container).getControl(), 
-            null 
-       );
-	}
-
-	private EnumFormComboViewer<EclipseLinkChangeTracking, EclipseLinkChangeTrackingType> addChangeTrackingTypeCombo(Composite container) {
-
-		return new EnumFormComboViewer<EclipseLinkChangeTracking, EclipseLinkChangeTrackingType>(this, container) {
-
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(EclipseLinkChangeTracking.DEFAULT_TYPE_PROPERTY);
-				propertyNames.add(EclipseLinkChangeTracking.SPECIFIED_TYPE_PROPERTY);
-			}
-
-			@Override
-			protected EclipseLinkChangeTrackingType[] getChoices() {
-				return EclipseLinkChangeTrackingType.values();
-			}
-
-			@Override
-			protected EclipseLinkChangeTrackingType getDefaultValue() {
-				return getSubject().getDefaultType();
-			}
-
-			@Override
-			protected String displayString(EclipseLinkChangeTrackingType value) {
-				return buildDisplayString(
-					EclipseLinkUiDetailsMessages.class,
-					EclipseLinkChangeTrackingComposite.this,
-					value
-				);
-			}
-
-			@Override
-			protected EclipseLinkChangeTrackingType getValue() {
-				return getSubject().getSpecifiedType();
-			}
-
-			@Override
-			protected void setValue(EclipseLinkChangeTrackingType value) {
-				getSubject().setSpecifiedType(value);
-			}
-			
-			@Override
-			protected boolean sortChoices() {
-				return false;
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkConversionValueDialog.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkConversionValueDialog.java
deleted file mode 100644
index f36f084..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkConversionValueDialog.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import java.util.Set;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConversionValue;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkObjectTypeConverter;
-import org.eclipse.jpt.ui.internal.widgets.DialogPane;
-import org.eclipse.jpt.ui.internal.widgets.ValidatingDialog;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-/**
- * Clients can use this dialog to prompt the user for SecondaryTable settings.
- * Use the following once the dialog is closed:
- *     @see #getSelectedTable()
- *     @see #getSelectedCatalog()
- *     @see #getSelectedSchema()
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkConversionValueDialog extends ValidatingDialog<EclipseLinkConversionValueStateObject> {
-
-	/**
-	 * when creating a new EclipseLinkConversionValue, 'conversionValue' will be null
-	 */
-	private final EclipseLinkConversionValue conversionValue;
-
-	private EclipseLinkObjectTypeConverter objectTypeConverter;
-	
-	// ********** constructors **********
-
-	/**
-	 * Use this constructor to create a new conversion value
-	 */
-	public EclipseLinkConversionValueDialog(Shell parent, EclipseLinkObjectTypeConverter objectTypeConverter) {
-		this(parent,objectTypeConverter, null);
-	}
-
-	/**
-	 * Use this constructor to edit an existing conversion value
-	 */
-	public EclipseLinkConversionValueDialog(Shell parent, EclipseLinkObjectTypeConverter objectTypeConverter, EclipseLinkConversionValue conversionValue) {
-		super(parent);
-		this.objectTypeConverter = objectTypeConverter;
-		this.conversionValue = conversionValue;
-	}
-
-	@Override
-	protected EclipseLinkConversionValueStateObject buildStateObject() {
-		String dataValue = null;
-		String objectValue = null;
-		Set<String> dataValues = CollectionTools.set(this.objectTypeConverter.dataValues());
-		if (isEditDialog()) {
-			dataValue = this.conversionValue.getDataValue();
-			objectValue = this.conversionValue.getObjectValue();
-			//remove *this* dataValue, don't want a duplicate data value error
-			dataValues.remove(dataValue);
-		}
-		return new EclipseLinkConversionValueStateObject(
-			dataValue, 
-			objectValue, 
-			dataValues);
-	}
-
-	// ********** open **********
-
-	@Override
-	protected void configureShell(Shell shell) {
-		super.configureShell(shell);
-		shell.setText(this.getTitle());
-	}
-
-	@Override
-	protected String getTitle() {
-		return (this.isAddDialog()) ?
-						EclipseLinkUiDetailsMessages.EclipseLinkConversionValueDialog_addConversionValue
-					:
-						EclipseLinkUiDetailsMessages.EclipseLinkConversionValueDialog_editConversionValue;
-	}
-
-	@Override
-	protected String getDescriptionTitle() {
-		return (this.isAddDialog()) ?
-			EclipseLinkUiDetailsMessages.EclipseLinkConversionValueDialog_addConversionValueDescriptionTitle
-		:
-			EclipseLinkUiDetailsMessages.EclipseLinkConversionValueDialog_editConversionValueDescriptionTitle;
-	}
-	
-	@Override
-	protected String getDescription() {
-		return (this.isAddDialog()) ?
-			EclipseLinkUiDetailsMessages.EclipseLinkConversionValueDialog_addConversionValueDescription
-		:
-			EclipseLinkUiDetailsMessages.EclipseLinkConversionValueDialog_editConversionValueDescription;
-	}
-	
-	@Override
-	protected DialogPane<EclipseLinkConversionValueStateObject> buildLayout(Composite container) {
-		return new ConversionValueDialogPane(container);
-	}
-	
-	@Override
-	public void create() {
-		super.create();
-
-		ConversionValueDialogPane pane = (ConversionValueDialogPane) getPane();
-		pane.selectAll();
-
-		getButton(OK).setEnabled(false);
-	}
-
-
-	// ********** convenience methods **********
-
-	protected boolean isAddDialog() {
-		return this.conversionValue == null;
-	}
-
-	protected boolean isEditDialog() {
-		return ! this.isAddDialog();
-	}
-
-
-	// ********** public API **********
-
-	/**
-	 * Return the data value set in the text widget.
-	 */
-	public String getDataValue() {
-		return getSubject().getDataValue();
-	}
-
-	/**
-	 * Return the object value set in the text widget.
-	 */
-	public String getObjectValue() {
-		return getSubject().getObjectValue();
-	}
-	
-	private class ConversionValueDialogPane extends DialogPane<EclipseLinkConversionValueStateObject> {
-
-		private Text dataValueText;
-		private Text objectValueText;
-
-		ConversionValueDialogPane(Composite parent) {
-			super(EclipseLinkConversionValueDialog.this.getSubjectHolder(), parent);
-		}
-
-		@Override
-		protected void initializeLayout(Composite container) {
-			this.dataValueText = addLabeledText(
-				container,
-				EclipseLinkUiDetailsMessages.EclipseLinkConversionValueDialog_dataValue,
-				buildDataValueHolder()
-			);
-			
-			this.objectValueText = addLabeledText(
-				container,
-				EclipseLinkUiDetailsMessages.EclipseLinkConversionValueDialog_objectValue,
-				buildObjectValueHolder()
-			);
-		}
-
-		private WritablePropertyValueModel<String> buildDataValueHolder() {
-			return new PropertyAspectAdapter<EclipseLinkConversionValueStateObject, String>(getSubjectHolder(), EclipseLinkConversionValueStateObject.DATA_VALUE_PROPERTY) {
-				@Override
-				protected String buildValue_() {
-					return this.subject.getDataValue();
-				}
-
-				@Override
-				protected void setValue_(String value) {
-					this.subject.setDataValue(value);
-				}
-			};
-		}
-
-		private WritablePropertyValueModel<String> buildObjectValueHolder() {
-			return new PropertyAspectAdapter<EclipseLinkConversionValueStateObject, String>(getSubjectHolder(), EclipseLinkConversionValueStateObject.OBJECT_VALUE_PROPERTY) {
-				@Override
-				protected String buildValue_() {
-					return this.subject.getObjectValue();
-				}
-
-				@Override
-				protected void setValue_(String value) {
-					this.subject.setObjectValue(value);
-				}
-			};
-		}
-
-		void selectAll() {
-			this.dataValueText.selectAll();
-			this.objectValueText.selectAll();
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkConversionValueStateObject.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkConversionValueStateObject.java
deleted file mode 100644
index 7117d9eb..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkConversionValueStateObject.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import java.util.Collection;
-import java.util.List;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.node.AbstractNode;
-import org.eclipse.jpt.utility.internal.node.Node;
-import org.eclipse.jpt.utility.internal.node.Problem;
-
-/**
- * This is the state object used by the <code>NewNameDialog</code>, which stores
- * the current name and validates it when it is modified.
- *
- * @see NewNameDialog
- *
- * @version 2.1
- * @since 2.1
- */
-@SuppressWarnings("nls")
-final class EclipseLinkConversionValueStateObject extends AbstractNode
-{
-	/**
-	 * The initial dataValue or <code>null</code>
-	 */
-	private String dataValue;
-	
-	/**
-	 * The collection of data values that can't be used or an empty collection
-	 */
-	private Collection<String> dataValues;
-
-	/**
-	 * The initial objectValue or <code>null</code>
-	 */
-	private String objectValue;
-
-	/**
-	 * The <code>Validator</code> used to validate this state object.
-	 */
-	private Validator validator;
-
-	/**
-	 * Notifies a change in the data value property.
-	 */
-	static final String DATA_VALUE_PROPERTY = "dataValue";
-	
-	/**
-	 * Notifies a change in the object value property.
-	 */
-	static final String OBJECT_VALUE_PROPERTY = "objectValue";
-
-	/**
-	 * Creates a new <code>NewNameStateObject</code>.
-	 *
-	 * @param name The initial input or <code>null</code> if no initial value can
-	 * be specified
-	 * @param names The collection of names that can't be used or an empty
-	 * collection if none are available
-	 */
-	EclipseLinkConversionValueStateObject(String dataValue, String objectValue, Collection<String> dataValues) {
-		super(null);
-
-		this.dataValue  = dataValue;
-		this.objectValue = objectValue;
-		this.dataValues = dataValues;
-	}
-
-	private void addDataValueProblemsTo(List<Problem> currentProblems) {
-		if (StringTools.stringIsEmpty(this.dataValue)) {
-			currentProblems.add(buildProblem(EclipseLinkUiDetailsMessages.EclipseLinkConversionValueStateObject_dataValueMustBeSpecified));
-		}
-		else if (this.dataValues.contains(this.dataValue)) {
-			currentProblems.add(buildProblem(EclipseLinkUiDetailsMessages.EclipseLinkConversionValueStateObject_dataValueAlreadyExists));
-		}
-	}
-
-	private void addObjectValueProblemsTo(List<Problem> currentProblems) {
-		if (StringTools.stringIsEmpty(this.objectValue)) {
-			currentProblems.add(buildProblem(EclipseLinkUiDetailsMessages.EclipseLinkConversionValueStateObject_objectValueMustBeSpecified));
-		}
-	}
-
-	@Override
-	protected void addProblemsTo(List<Problem> currentProblems) {
-		super.addProblemsTo(currentProblems);
-		addDataValueProblemsTo(currentProblems);
-		addObjectValueProblemsTo(currentProblems);
-	}
-
-	@Override
-	protected void checkParent(Node parentNode) {
-		//not parent
-	}
-
-	public String displayString() {
-		return null;
-	}
-
-	String getDataValue() {
-		return this.dataValue;
-	}
-
-	String getObjectValue() {
-		return this.objectValue;
-	}
-
-	public void setDataValue(String dataValue) {
-		String oldDataValue = this.dataValue;
-		this.dataValue = dataValue;
-		firePropertyChanged(DATA_VALUE_PROPERTY, oldDataValue, dataValue);
-	}
-
-	public void setObjectValue(String objectValue) {
-		String oldObjectValue = this.objectValue;
-		this.objectValue = objectValue;
-		firePropertyChanged(OBJECT_VALUE_PROPERTY, oldObjectValue, objectValue);
-	}
-
-	@Override
-	public void setValidator(Validator validator) {
-		this.validator = validator;
-	}
-
-	@Override
-	public Validator getValidator() {
-		return this.validator;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkConvertComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkConvertComposite.java
deleted file mode 100644
index 0ff0e36..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkConvertComposite.java
+++ /dev/null
@@ -1,363 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import java.util.ArrayList;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConvert;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCustomConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkObjectTypeConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkStructConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkTypeConverter;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.EclipseLinkPersistenceUnit;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringConverter;
-import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.StaticListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * |            -------------------------------------------------------------- |
- * | Enum Type: |                                                          |v| |
- * |            -------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkConvert
- * @see EclipseLinkBasicMappingComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkConvertComposite extends Pane<EclipseLinkConvert>
-{
-
-	/**
-	 * A key used to represent the default value, this is required to convert
-	 * the selected item from a combo to <code>null</code>. This key is most
-	 * likely never typed the user and it will help to convert the value to
-	 * <code>null</code> when it's time to set the new selected value into the
-	 * model.
-	 */
-	protected static String DEFAULT_KEY = "?!#!?#?#?default?#?!#?!#?"; //$NON-NLS-1$
-	
-	
-	/**
-	 * Creates a new <code>EnumTypeComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkConvertComposite(PropertyValueModel<? extends EclipseLinkConvert> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		Combo combo = addLabeledEditableCombo(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkConvertComposite_converterNameLabel,
-			buildConvertNameListHolder(),
-			buildConvertNameHolder(),
-			buildNameConverter(),
-			null
-		);
-		SWTUtil.attachDefaultValueHandler(combo);
-		
-		Composite subSection = addCollapsibleSubSection(
-			container, 
-			EclipseLinkUiDetailsMessages.EclipseLinkConvertComposite_defineConverterSection, 
-			new SimplePropertyValueModel<Boolean>(Boolean.FALSE));
-		
-		// No Converter
-		addRadioButton(
-			subSection, 
-			EclipseLinkUiDetailsMessages.EclipseLinkConvertComposite_default, 
-			buildNoConverterHolder(), 
-			null);
-		PropertyValueModel<EclipseLinkConverter> converterHolder = buildConverterHolder();
-		// CustomConverter
-		addRadioButton(
-			subSection, 
-			EclipseLinkUiDetailsMessages.EclipseLinkConvertComposite_custom, 
-			buildConverterHolder(EclipseLinkConverter.CUSTOM_CONVERTER), 
-			null);
-		EclipseLinkCustomConverterComposite converterComposite = new EclipseLinkCustomConverterComposite(buildCustomConverterHolder(converterHolder), subSection, getWidgetFactory());
-		GridData gridData = (GridData) converterComposite.getControl().getLayoutData();
-		gridData.horizontalIndent = 20;
-		registerSubPane(converterComposite);
-		
-		// Type Converter
-		addRadioButton(
-			subSection, 
-			EclipseLinkUiDetailsMessages.EclipseLinkConvertComposite_type, 
-			buildConverterHolder(EclipseLinkConverter.TYPE_CONVERTER), 
-			null);
-		EclipseLinkTypeConverterComposite typeConverterComposite = new EclipseLinkTypeConverterComposite(buildTypeConverterHolder(converterHolder), subSection, getWidgetFactory());
-		gridData = (GridData) typeConverterComposite.getControl().getLayoutData();
-		gridData.horizontalIndent = 20;
-		registerSubPane(typeConverterComposite);
-
-		// Object Type Converter
-		addRadioButton(
-			subSection, 
-			EclipseLinkUiDetailsMessages.EclipseLinkConvertComposite_objectType, 
-			buildConverterHolder(EclipseLinkConverter.OBJECT_TYPE_CONVERTER), 
-			null);
-		EclipseLinkObjectTypeConverterComposite objectTypeConverterComposite = new EclipseLinkObjectTypeConverterComposite(buildObjectTypeConverterHolder(converterHolder), subSection, getWidgetFactory());
-		gridData = (GridData) objectTypeConverterComposite.getControl().getLayoutData();
-		gridData.horizontalIndent = 20;
-		registerSubPane(objectTypeConverterComposite);
-
-		// Struct Converter
-		addRadioButton(
-			subSection, 
-			EclipseLinkUiDetailsMessages.EclipseLinkConvertComposite_struct, 
-			buildConverterHolder(EclipseLinkConverter.STRUCT_CONVERTER), 
-			null);
-		EclipseLinkStructConverterComposite structConverterComposite = new EclipseLinkStructConverterComposite(buildStructConverterHolder(converterHolder), subSection, getWidgetFactory());
-		gridData = (GridData) structConverterComposite.getControl().getLayoutData();
-		gridData.horizontalIndent = 20;
-		registerSubPane(structConverterComposite);
-		
-		new PaneEnabler(buildBooleanHolder(), this);
-	}
-	
-	protected final WritablePropertyValueModel<String> buildConvertNameHolder() {
-		return new PropertyAspectAdapter<EclipseLinkConvert, String>(getSubjectHolder(), EclipseLinkConvert.SPECIFIED_CONVERTER_NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getSpecifiedConverterName();
-			}
-
-			@Override
-			protected void setValue_(String value) {
-				// Convert the default value or an empty string to null
-				if ((value != null) &&
-				   ((value.length() == 0) || value.startsWith(DEFAULT_KEY))) {
-
-					value = null;
-				}
-				this.subject.setSpecifiedConverterName(value);
-			}
-		};
-	}
-	private ListValueModel<String> buildConvertNameListHolder() {
-		java.util.List<ListValueModel<String>> list = new ArrayList<ListValueModel<String>>();
-		list.add(buildDefaultNameListHolder());
-		list.add(buildReservedConverterNameListHolder());
-		list.add(buildConverterNameListHolder());
-		return new CompositeListValueModel<ListValueModel<String>, String>(list);
-	}
-	
-	protected ListValueModel<String> buildDefaultNameListHolder() {
-		return new PropertyListValueModelAdapter<String>(
-			buildDefaultNameHolder()
-		);
-	}
-
-	private WritablePropertyValueModel<String> buildDefaultNameHolder() {
-		return new PropertyAspectAdapter<EclipseLinkConvert, String>(getSubjectHolder(), EclipseLinkConvert.DEFAULT_CONVERTER_NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				String name = this.subject.getDefaultConverterName();
-
-				if (name == null) {
-					name = DEFAULT_KEY;
-				}
-				else {
-					name = DEFAULT_KEY + name;
-				}
-
-				return name;
-			}
-		};
-	}
-
-	private StringConverter<String> buildNameConverter() {
-		return new StringConverter<String>() {
-			public String convertToString(String value) {
-
-				if (getSubject() == null) {
-					return value;
-				}
-
-				if (value == null) {
-					value = getSubject().getDefaultConverterName();
-
-					if (value != null) {
-						value = DEFAULT_KEY + value;
-					}
-					else {
-						value = DEFAULT_KEY;
-					}
-				}
-
-				if (value.startsWith(DEFAULT_KEY)) {
-					String defaultName = value.substring(DEFAULT_KEY.length());
-
-					if (defaultName.length() > 0) {
-						value = NLS.bind(
-							JptUiDetailsMessages.DefaultWithOneParam,
-							defaultName
-						);
-					}
-					else {
-						value = JptUiDetailsMessages.DefaultEmpty;
-					}
-				}
-
-				return value;
-			}
-		};
-	}
-
-	protected ListValueModel<String> buildReservedConverterNameListHolder() {
-		return new StaticListValueModel<String>(EclipseLinkConvert.RESERVED_CONVERTER_NAMES);
-	}
-	
-	protected ListValueModel<String> buildConverterNameListHolder() {
-		return new ListAspectAdapter<EclipseLinkPersistenceUnit, String>(
-			buildPersistenceUnitHolder(),
-			EclipseLinkPersistenceUnit.CONVERTERS_LIST)//TODO need EclipseLinkPersistenceUnit interface
-		{
-			@Override
-			protected ListIterator<String> listIterator_() {
-				return CollectionTools.listIterator(ArrayTools.sort(this.subject.uniqueConverterNames()));
-			}
-		};
-	}
-	
-	protected PropertyValueModel<EclipseLinkPersistenceUnit> buildPersistenceUnitHolder() {
-		return new PropertyAspectAdapter<EclipseLinkConvert, EclipseLinkPersistenceUnit>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkPersistenceUnit buildValue_() {
-				return (EclipseLinkPersistenceUnit) getSubject().getPersistenceUnit();
-			}
-		};
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildNoConverterHolder() {
-		return new PropertyAspectAdapter<EclipseLinkConvert, Boolean>(getSubjectHolder(), EclipseLinkConvert.CONVERTER_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.getConverter() == null);
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				if (value.booleanValue()) {
-					this.subject.setConverter(EclipseLinkConverter.NO_CONVERTER);
-				}
-			}
-		};
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildConverterHolder(final String converterType) {
-		return new PropertyAspectAdapter<EclipseLinkConvert, Boolean>(getSubjectHolder(), EclipseLinkConvert.CONVERTER_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				EclipseLinkConverter converter = this.subject.getConverter();
-				if (converter == null) {
-					return Boolean.FALSE;
-				}
-				return Boolean.valueOf(converter.getType() == converterType);
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				if (value.booleanValue()) {
-					this.subject.setConverter(converterType);
-				}
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkConverter> buildConverterHolder() {
-		return new PropertyAspectAdapter<EclipseLinkConvert, EclipseLinkConverter>(getSubjectHolder(), EclipseLinkConvert.CONVERTER_PROPERTY) {
-			@Override
-			protected EclipseLinkConverter buildValue_() {
-				return this.subject.getConverter();
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkCustomConverter> buildCustomConverterHolder(PropertyValueModel<EclipseLinkConverter> converterHolder) {
-		return new TransformationPropertyValueModel<EclipseLinkConverter, EclipseLinkCustomConverter>(converterHolder) {
-			@Override
-			protected EclipseLinkCustomConverter transform_(EclipseLinkConverter converter) {
-				return (converter != null && converter.getType() == EclipseLinkConverter.CUSTOM_CONVERTER) ? (EclipseLinkCustomConverter) converter : null;
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkTypeConverter> buildTypeConverterHolder(PropertyValueModel<EclipseLinkConverter> converterHolder) {
-		return new TransformationPropertyValueModel<EclipseLinkConverter, EclipseLinkTypeConverter>(converterHolder) {
-			@Override
-			protected EclipseLinkTypeConverter transform_(EclipseLinkConverter converter) {
-				return (converter != null && converter.getType() == EclipseLinkConverter.TYPE_CONVERTER) ? (EclipseLinkTypeConverter) converter : null;
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkObjectTypeConverter> buildObjectTypeConverterHolder(PropertyValueModel<EclipseLinkConverter> converterHolder) {
-		return new TransformationPropertyValueModel<EclipseLinkConverter, EclipseLinkObjectTypeConverter>(converterHolder) {
-			@Override
-			protected EclipseLinkObjectTypeConverter transform_(EclipseLinkConverter converter) {
-				return (converter != null && converter.getType() == EclipseLinkConverter.OBJECT_TYPE_CONVERTER) ? (EclipseLinkObjectTypeConverter) converter : null;
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkStructConverter> buildStructConverterHolder(PropertyValueModel<EclipseLinkConverter> converterHolder) {
-		return new TransformationPropertyValueModel<EclipseLinkConverter, EclipseLinkStructConverter>(converterHolder) {
-			@Override
-			protected EclipseLinkStructConverter transform_(EclipseLinkConverter converter) {
-				return (converter != null && converter.getType() == EclipseLinkConverter.STRUCT_CONVERTER) ? (EclipseLinkStructConverter) converter : null;
-			}
-		};
-	}
-
-	protected PropertyValueModel<Boolean> buildBooleanHolder() {
-		return new TransformationPropertyValueModel<EclipseLinkConvert, Boolean>(getSubjectHolder()) {
-			@Override
-			protected Boolean transform(EclipseLinkConvert value) {
-				if (getSubject() != null && getSubject().getParent().getPersistentAttribute().isVirtual()) {
-					return Boolean.FALSE;
-				}
-				return Boolean.valueOf(value != null);
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCustomConverterComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCustomConverterComposite.java
deleted file mode 100644
index 57898bb..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCustomConverterComposite.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCustomConverter;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.ClassChooserPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * |            -------------------------------------------------------------- |
- * | Name:      |                                                             ||
- * |            -------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkConverter
- * @see EclipseLinkConvertComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkCustomConverterComposite extends Pane<EclipseLinkCustomConverter>
-{
-
-	/**
-	 * Creates a new <code>ConverterComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkCustomConverterComposite(PropertyValueModel<? extends EclipseLinkCustomConverter> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		
-		addLabeledText(
-			container, 
-			EclipseLinkUiDetailsMessages.EclipseLinkConverterComposite_nameTextLabel, 
-			buildNameTextHolder());
-		
-		addClassChooser(container);
-		
-		new PaneEnabler(buildBooleanHolder(), this);
-	}
-	
-	protected WritablePropertyValueModel<String> buildNameTextHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCustomConverter, String>(
-				getSubjectHolder(), EclipseLinkConverter.NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getName();
-			}
-		
-			@Override
-			protected void setValue_(String value) {
-				if (value.length() == 0) {
-					value = null;
-				}
-				this.subject.setName(value);
-			}
-		};
-	}
-
-	
-	private ClassChooserPane<EclipseLinkCustomConverter> addClassChooser(Composite container) {
-
-		return new ClassChooserPane<EclipseLinkCustomConverter>(this, container) {
-
-			@Override
-			protected WritablePropertyValueModel<String> buildTextHolder() {
-				return new PropertyAspectAdapter<EclipseLinkCustomConverter, String>(getSubjectHolder(), EclipseLinkCustomConverter.CONVERTER_CLASS_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-						return this.subject.getConverterClass();
-					}
-
-					@Override
-					protected void setValue_(String value) {
-
-						if (value.length() == 0) {
-							value = null;
-						}
-
-						this.subject.setConverterClass(value);
-					}
-				};
-			}
-
-			@Override
-			protected String getClassName() {
-				return getSubject().getConverterClass();
-			}
-
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiDetailsMessages.EclipseLinkConverterComposite_classLabel;
-			}
-
-			@Override
-			protected JpaProject getJpaProject() {
-				return getSubject().getJpaProject();
-			}
-			
-			@Override
-			protected void setClassName(String className) {
-				getSubject().setConverterClass(className);
-			}
-			
-			@Override
-			protected String getSuperInterfaceName() {
-				return EclipseLinkCustomConverter.ECLIPSELINK_CONVERTER_CLASS_NAME;
-			}
-			
-			@Override
-			protected char getEnclosingTypeSeparator() {
-				return getSubject().getEnclosingTypeSeparator();
-			}
-		};
-	}
-
-
-	protected PropertyValueModel<Boolean> buildBooleanHolder() {
-		return new TransformationPropertyValueModel<EclipseLinkCustomConverter, Boolean>(getSubjectHolder()) {
-			@Override
-			protected Boolean transform(EclipseLinkCustomConverter value) {
-//				if (getSubject() != null && getSubject().getParent().getPersistentAttribute().isVirtual()) {
-//					return Boolean.FALSE;
-//				}
-				return Boolean.valueOf(value != null);
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCustomizerComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCustomizerComposite.java
deleted file mode 100644
index d755bc7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkCustomizerComposite.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCustomizer;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.ClassChooserComboPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *
- * @see EclipseLinkCustomizer
- *
- * @version 2.3
- * @since 2.1
- */
-public class EclipseLinkCustomizerComposite extends Pane<EclipseLinkCustomizer>
-{
-	/**
-	 * Creates a new <code>CustomizerComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkCustomizerComposite(Pane<?> parentPane, 
-		PropertyValueModel<? extends EclipseLinkCustomizer> subjectHolder,
-		Composite parent) {
-
-			super(parentPane, subjectHolder, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		new CustomizerClassChooserComboPane(this, container);
-	}
-
-	private class CustomizerClassChooserComboPane
-		extends ClassChooserComboPane<EclipseLinkCustomizer>
-	{
-		public CustomizerClassChooserComboPane(Pane<EclipseLinkCustomizer> parentPane, Composite parent) {
-			super(parentPane, parent);
-		}		
-
-		@Override
-		protected String getClassName() {
-			return getSubject().getSpecifiedCustomizerClass();
-		}
-
-		@Override
-		protected void setClassName(String className) {
-			getSubject().setSpecifiedCustomizerClass(className);
-		}
-
-		@Override
-		protected String getLabelText() {
-			return EclipseLinkUiDetailsMessages.EclipseLinkCustomizerComposite_classLabel;
-		}
-
-		@Override
-		protected JpaProject getJpaProject() {
-			return getSubject().getJpaProject();
-		}
-
-		@Override
-		protected String getSuperInterfaceName() {
-			return EclipseLinkCustomizer.ECLIPSELINK_DESCRIPTOR_CUSTOMIZER_CLASS_NAME;
-		}
-
-		@Override
-		protected char getEnclosingTypeSeparator() {
-			return getSubject().getCustomizerClassEnclosingTypeSeparator();
-		}
-
-		@Override
-		protected WritablePropertyValueModel<String> buildTextHolder() {
-			return new PropertyAspectAdapter<EclipseLinkCustomizer, String>(
-					getSubjectHolder(), 
-					EclipseLinkCustomizer.SPECIFIED_CUSTOMIZER_CLASS_PROPERTY,
-					EclipseLinkCustomizer.DEFAULT_CUSTOMIZER_CLASS_PROPERTY) {
-
-				@Override
-				protected String buildValue_() {
-					String value = this.subject.getSpecifiedCustomizerClass();
-					return (value == null) ? defaultText(this.subject) : value;
-				}
-
-				@Override
-				protected void setValue_(String value) {
-					if (value == null 
-							|| value.length() == 0 
-							|| value.equals(defaultText(this.subject))) {
-						value = null;
-					}
-					this.subject.setSpecifiedCustomizerClass(value);
-				}
-			};
-		}
-
-		protected String defaultText(EclipseLinkCustomizer customizer) {
-			String defaultClassName = customizer.getDefaultCustomizerClass();
-			return (defaultClassName == null) ?
-					JptUiDetailsMessages.NoneSelected
-					: NLS.bind(JptUiDetailsMessages.DefaultWithOneParam, defaultClassName);
-		}
-
-		@Override
-		protected ListValueModel<String> buildClassListHolder() {
-			return new PropertyListValueModelAdapter<String>(
-				new PropertyAspectAdapter<EclipseLinkCustomizer, String>(
-						getSubjectHolder(), EclipseLinkCustomizer.DEFAULT_CUSTOMIZER_CLASS_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-						return defaultText(this.subject);
-					}
-				});
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkDisableHitsComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkDisableHitsComposite.java
deleted file mode 100644
index d5892d8..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkDisableHitsComposite.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This composite simply shows a tri-state check box for the Disable Hits option.
- * 
- * @see EclipseLinkCaching
- * @see EclipseLinkCachingComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkDisableHitsComposite extends Pane<EclipseLinkCaching>
-{
-	/**
-	 * Creates a new <code>OptionalComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkDisableHitsComposite(Pane<? extends EclipseLinkCaching> parentPane,
-	                         Composite parent)
-	{
-		super(parentPane, parent);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkDisableHitsComposite_disableHitsLabel,
-			buildDisableHitsHolder(),
-			buildDisableHitsStringHolder(),
-			EclipseLinkHelpContextIds.CACHING_DISABLE_HITS
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildDisableHitsHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(getSubjectHolder(), EclipseLinkCaching.SPECIFIED_DISABLE_HITS_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getSpecifiedDisableHits();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setSpecifiedDisableHits(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildDisableHitsStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultDisableHitsHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? JptUiDetailsMessages.Boolean_True : JptUiDetailsMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiDetailsMessages.EclipseLinkDisableHitsComposite_disableHitsDefault, defaultStringValue);
-				}
-				return EclipseLinkUiDetailsMessages.EclipseLinkDisableHitsComposite_disableHitsLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultDisableHitsHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(
-			getSubjectHolder(),
-			EclipseLinkCaching.SPECIFIED_DISABLE_HITS_PROPERTY,
-			EclipseLinkCaching.DEFAULT_DISABLE_HITS_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getSpecifiedDisableHits() != null) {
-					return null;
-				}
-				return Boolean.valueOf(this.subject.isDefaultDisableHits());
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkEmbeddableAdvancedComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkEmbeddableAdvancedComposite.java
deleted file mode 100644
index c9470c6..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkEmbeddableAdvancedComposite.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.context.Embeddable;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkChangeTracking;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCustomizer;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkEmbeddable;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLinkEmbeddableAdvancedComposite extends Pane<Embeddable> {
-	
-	public EclipseLinkEmbeddableAdvancedComposite(
-			Pane<? extends Embeddable> parentPane,
-			Composite parent) {
-
-		super(parentPane, parent, false);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		container = addCollapsibleSection(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_advanced
-		);
-		
-		new EclipseLinkCustomizerComposite(this, buildCustomizerHolder(), container);
-		new EclipseLinkChangeTrackingComposite(this, buildChangeTrackingHolder(), container);
-	}
-	
-	private PropertyValueModel<EclipseLinkCustomizer> buildCustomizerHolder() {
-		return new PropertyAspectAdapter<Embeddable, EclipseLinkCustomizer>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkCustomizer buildValue_() {
-				return ((EclipseLinkEmbeddable) this.subject).getCustomizer();
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkChangeTracking> buildChangeTrackingHolder() {
-		return new PropertyAspectAdapter<Embeddable, EclipseLinkChangeTracking>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkChangeTracking buildValue_() {
-				return ((EclipseLinkEmbeddable) this.subject).getChangeTracking();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkEntityAdvancedComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkEntityAdvancedComposite.java
deleted file mode 100644
index 03cbde1..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkEntityAdvancedComposite.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.context.Entity;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkChangeTracking;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCustomizer;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkEntity;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkReadOnly;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLinkEntityAdvancedComposite extends Pane<Entity> {
-	
-	public EclipseLinkEntityAdvancedComposite(
-			Pane<? extends Entity> parentPane,
-			Composite parent) {
-
-		super(parentPane, parent, false);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		container = addCollapsibleSection(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_advanced
-		);
-		
-		new EclipseLinkReadOnlyComposite(this, buildReadOnlyHolder(), container);
-		new EclipseLinkCustomizerComposite(this, buildCustomizerHolder(), container);
-		new EclipseLinkChangeTrackingComposite(this, buildChangeTrackingHolder(), container);
-	}
-	
-	private PropertyValueModel<EclipseLinkReadOnly> buildReadOnlyHolder() {
-		return new PropertyAspectAdapter<Entity, EclipseLinkReadOnly>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkReadOnly buildValue_() {
-				return ((EclipseLinkEntity) this.subject).getReadOnly();
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkCustomizer> buildCustomizerHolder() {
-		return new PropertyAspectAdapter<Entity, EclipseLinkCustomizer>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkCustomizer buildValue_() {
-				return ((EclipseLinkEntity) this.subject).getCustomizer();
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkChangeTracking> buildChangeTrackingHolder() {
-		return new PropertyAspectAdapter<Entity, EclipseLinkChangeTracking>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkChangeTracking buildValue_() {
-				return ((EclipseLinkEntity) this.subject).getChangeTracking();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkExpiryComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkExpiryComposite.java
deleted file mode 100644
index 82fc796..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkExpiryComposite.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkExpiryTimeOfDay;
-import org.eclipse.jpt.ui.internal.widgets.IntegerCombo;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.StringConverter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-
-/**
- * Here is the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | - Expiry -------------------------------------------------------------- | |
- * | |                                                                       | |
- * | | o No expiry                                                           | |
- * | |                     					----------------                 | |
- * | | o Time to live expiry   Expire after | I          |I| milliseconds    | |
- * | |                                      ----------------                 | |
- * | |                     				    --------------------             | |
- * | | o Daily expiry          Expire at    | HH:MM:SS:AM/PM |I|             | |
- * | |                                      --------------------             | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkCaching
- * @see EclipseLinkExpiryTimeOfDay
- * @see EclipseLinkCachingComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkExpiryComposite extends Pane<EclipseLinkCaching> {
-	protected PropertyValueModel<Boolean> ttlEnabled;
-
-	public EclipseLinkExpiryComposite(Pane<? extends EclipseLinkCaching> parentPane,
-	                          Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	/**
-	 * lazy init because we need it while the superclass constructor is
-	 * executing
-	 */
-	protected PropertyValueModel<Boolean> getTtlEnabled() {
-		if (this.ttlEnabled == null) {
-			this.ttlEnabled = this.buildTimeToLiveExpiryEnabler();
-		}
-		return this.ttlEnabled;
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		// Expiry group pane
-		Group expiryGroupPane = addTitledGroup(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkExpiryComposite_expirySection,
-			2,
-			null
-		);
-				
-		// No Expiry radio button
-		Button button = addRadioButton(
-			expiryGroupPane,
-			EclipseLinkUiDetailsMessages.EclipseLinkExpiryComposite_noExpiry,
-			buildNoExpiryHolder(),
-			null
-		);
-		GridData gridData = new GridData();
-		gridData.horizontalSpan = 2;
-		button.setLayoutData(gridData);
-
-		
-		// Time To Live Expiry radio button
-		addRadioButton(
-			expiryGroupPane,
-			EclipseLinkUiDetailsMessages.EclipseLinkExpiryComposite_timeToLiveExpiry,
-			buildExpiryHolder(),
-			null
-		);
-		
-		addTimeToLiveComposite(expiryGroupPane);
-		
-		// Daily Expiry radio button
-		addRadioButton(
-			expiryGroupPane,
-			EclipseLinkUiDetailsMessages.EclipseLinkExpiryComposite_dailyExpiry,
-			buildTimeOfDayExpiryBooleanHolder(),
-			null
-		);
-		
-		addTimeOfDayComposite(expiryGroupPane);
-	}
-	
-	protected void addTimeToLiveComposite(Composite parent) {
-		Composite container = this.addSubPane(parent, 3, 0, 10, 0, 0);
-
-		addLabel(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkExpiryComposite_timeToLiveExpiryExpireAfter,
-			this.getTtlEnabled()
-		);
-	
-		IntegerCombo<?> combo = addTimeToLiveExpiryCombo(container);
-		GridData gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = false;
-		combo.getControl().setLayoutData(gridData);
-		
-		addLabel(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkExpiryComposite_timeToLiveExpiryMilliseconds,
-			this.getTtlEnabled()
-		);
-	}
-	
-	protected void addTimeOfDayComposite(Composite parent) {
-		Composite container = this.addSubPane(parent, 2, 0, 10, 0, 0);
-
-		PropertyValueModel<Boolean> todEnabled = this.buildTimeOfDayExpiryEnabler();
-		addLabel(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkExpiryComposite_timeOfDayExpiryExpireAt,
-			todEnabled
-		);
-		
-		PropertyValueModel<EclipseLinkExpiryTimeOfDay> timeOfDayExpiryHolder = buildTimeOfDayExpiryHolder();
-		addDateTime(
-			container, 
-			buildTimeOfDayExpiryHourHolder(timeOfDayExpiryHolder), 
-			buildTimeOfDayExpiryMinuteHolder(timeOfDayExpiryHolder),
-			buildTimeOfDayExpirySecondHolder(timeOfDayExpiryHolder),
-			null,
-			todEnabled
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildNoExpiryHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(
-					getSubjectHolder(), 
-					EclipseLinkCaching.EXPIRY_PROPERTY, 
-					EclipseLinkCaching.EXPIRY_TIME_OF_DAY_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.getExpiry() == null && this.subject.getExpiryTimeOfDay() == null);
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setExpiry(null);
-				if (this.subject.getExpiryTimeOfDay() != null) {
-					this.subject.removeExpiryTimeOfDay();
-				}
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Boolean> buildExpiryHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(
-					getSubjectHolder(), 
-					EclipseLinkCaching.EXPIRY_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.getExpiry() != null);
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				if (value == Boolean.TRUE) {
-					this.subject.setExpiry(Integer.valueOf(0));
-				}
-			}
-		};
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildTimeOfDayExpiryBooleanHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(
-					getSubjectHolder(), 
-					EclipseLinkCaching.EXPIRY_TIME_OF_DAY_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.getExpiryTimeOfDay() != null);
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				if (value == Boolean.TRUE) {
-					this.subject.addExpiryTimeOfDay();
-				}
-			}
-		};
-	}
-	
-	private IntegerCombo<EclipseLinkCaching> addTimeToLiveExpiryCombo(Composite container) {
-		return new IntegerCombo<EclipseLinkCaching>(this, container) {
-		
-			@Override
-			protected Combo addIntegerCombo(Composite container) {
-				return this.addEditableCombo(
-						container,
-						buildDefaultListHolder(),
-						buildSelectedItemStringHolder(),
-						StringConverter.Default.<String>instance(),
-						EclipseLinkExpiryComposite.this.getTtlEnabled()
-					);
-			}
-		
-			@Override
-			protected String getLabelText() {
-				throw new UnsupportedOperationException();
-			}
-		
-		
-			@Override
-			protected String getHelpId() {
-				return null;
-			}
-
-			@Override
-			protected PropertyValueModel<Integer> buildDefaultHolder() {
-				return new PropertyAspectAdapter<EclipseLinkCaching, Integer>(getSubjectHolder()) {
-					@Override
-					protected Integer buildValue_() {
-						return Integer.valueOf(0);
-					}
-				};
-			}
-			
-			@Override
-			protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
-				return new PropertyAspectAdapter<EclipseLinkCaching, Integer>(getSubjectHolder(), EclipseLinkCaching.EXPIRY_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getExpiry();
-					}
-
-					@Override
-					protected void setValue_(Integer value) {
-						this.subject.setExpiry(value);
-					}
-				};
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildTimeToLiveExpiryEnabler() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(getSubjectHolder(), EclipseLinkCaching.EXPIRY_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.getExpiry() != null);
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildTimeOfDayExpiryEnabler() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(getSubjectHolder(), EclipseLinkCaching.EXPIRY_TIME_OF_DAY_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.getExpiryTimeOfDay() != null);
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkExpiryTimeOfDay> buildTimeOfDayExpiryHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, EclipseLinkExpiryTimeOfDay>(getSubjectHolder(), EclipseLinkCaching.EXPIRY_TIME_OF_DAY_PROPERTY) {
-			@Override
-			protected EclipseLinkExpiryTimeOfDay buildValue_() {
-				return this.subject.getExpiryTimeOfDay();
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Integer> buildTimeOfDayExpiryHourHolder(PropertyValueModel<EclipseLinkExpiryTimeOfDay> timeOfDayExpiryHolder) {
-		return new PropertyAspectAdapter<EclipseLinkExpiryTimeOfDay, Integer>(
-					timeOfDayExpiryHolder, 
-					EclipseLinkExpiryTimeOfDay.HOUR_PROPERTY) {
-			@Override
-			protected Integer buildValue_() {
-				return this.subject.getHour();
-			}
-
-			@Override
-			protected void setValue_(Integer hour) {
-				this.subject.setHour(hour);
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Integer> buildTimeOfDayExpiryMinuteHolder(PropertyValueModel<EclipseLinkExpiryTimeOfDay> timeOfDayExpiryHolder) {
-		return new PropertyAspectAdapter<EclipseLinkExpiryTimeOfDay, Integer>(
-					timeOfDayExpiryHolder, 
-					EclipseLinkExpiryTimeOfDay.MINUTE_PROPERTY) {
-			@Override
-			protected Integer buildValue_() {
-				return this.subject.getMinute();
-			}
-
-			@Override
-			protected void setValue_(Integer minute) {
-				this.subject.setMinute(minute);
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Integer> buildTimeOfDayExpirySecondHolder(PropertyValueModel<EclipseLinkExpiryTimeOfDay> timeOfDayExpiryHolder) {
-		return new PropertyAspectAdapter<EclipseLinkExpiryTimeOfDay, Integer>(
-					timeOfDayExpiryHolder, 
-					EclipseLinkExpiryTimeOfDay.SECOND_PROPERTY) {
-			@Override
-			protected Integer buildValue_() {
-				return this.subject.getSecond();
-			}
-
-			@Override
-			protected void setValue_(Integer second) {
-				this.subject.setSecond(second);
-			}
-		};
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkIdMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkIdMappingComposite.java
deleted file mode 100644
index 242ae7a..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkIdMappingComposite.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.context.Converter;
-import org.eclipse.jpt.core.context.IdMapping;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConvert;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkIdMapping;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkMutable;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AbstractIdMappingComposite;
-import org.eclipse.jpt.ui.internal.details.ColumnComposite;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.details.TemporalTypeComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLinkIdMappingComposite<T extends IdMapping>
-	extends AbstractIdMappingComposite<T>
-	implements JpaComposite
-{
-	public EclipseLinkIdMappingComposite(
-			PropertyValueModel<? extends T> subjectHolder,
-	        Composite parent,
-	        WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeIdSection(Composite container) {
-		new ColumnComposite(this, buildColumnHolder(), container);
-		new EclipseLinkMutableComposite(this, buildMutableHolder(), container);
-	}	
-	
-	@Override
-	protected void initializeTypeSection(Composite container) {
-		((GridLayout) container.getLayout()).numColumns = 2;
-		
-		// No converter
-		Button noConverterButton = addRadioButton(
-			container, 
-			JptUiDetailsMessages.TypeSection_default, 
-			buildConverterBooleanHolder(Converter.NO_CONVERTER), 
-			null);
-		((GridData) noConverterButton.getLayoutData()).horizontalSpan = 2;
-				
-		PropertyValueModel<Converter> converterHolder = buildConverterHolder();
-		// Temporal
-		addRadioButton(
-			container, 
-			JptUiDetailsMessages.TypeSection_temporal, 
-			buildConverterBooleanHolder(Converter.TEMPORAL_CONVERTER), 
-			null);
-		registerSubPane(new TemporalTypeComposite(buildTemporalConverterHolder(converterHolder), container, getWidgetFactory()));
-
-		// EclipseLink Converter
-		Button elConverterButton = addRadioButton(
-			container, 
-			EclipseLinkUiDetailsMessages.TypeSection_converted, 
-			buildConverterBooleanHolder(EclipseLinkConvert.ECLIPSE_LINK_CONVERTER), 
-			null);
-		((GridData) elConverterButton.getLayoutData()).horizontalSpan = 2;
-		
-		Pane<EclipseLinkConvert> convertComposite = buildConvertComposite(buildEclipseLinkConverterHolder(converterHolder), container);
-		GridData gridData = (GridData) convertComposite.getControl().getLayoutData();
-		gridData.horizontalSpan = 2;
-		gridData.horizontalIndent = 20;
-		registerSubPane(convertComposite);
-	}
-	
-	protected Pane<EclipseLinkConvert> buildConvertComposite(PropertyValueModel<EclipseLinkConvert> convertHolder, Composite container) {
-		return new EclipseLinkConvertComposite(convertHolder, container, getWidgetFactory());
-	}
-	
-	protected PropertyValueModel<EclipseLinkConvert> buildEclipseLinkConverterHolder(PropertyValueModel<Converter> converterHolder) {
-		return new TransformationPropertyValueModel<Converter, EclipseLinkConvert>(converterHolder) {
-			@Override
-			protected EclipseLinkConvert transform_(Converter converter) {
-				return converter.getType() == EclipseLinkConvert.ECLIPSE_LINK_CONVERTER ? (EclipseLinkConvert) converter : null;
-			}
-		};
-	}
-	
-	protected PropertyValueModel<EclipseLinkMutable> buildMutableHolder() {
-		return new PropertyAspectAdapter<T, EclipseLinkMutable>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkMutable buildValue_() {
-				return ((EclipseLinkIdMapping) this.subject).getMutable();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkJoinFetchComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkJoinFetchComposite.java
deleted file mode 100644
index 509921e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkJoinFetchComposite.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.core.internal.JptCoreMessages;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetchType;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * |                ---------------------------------------------------------- |
- * | Join Fetch:    |                                                      |v| |
- * |                ---------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see Fetchable
- * @see BasicMappingComposite - A container of this widget
- * @see JavaManyToManyMapping2_0Composite - A container of this widget
- * @see OrmManyToOneMappingComposite - A container of this widget
- * @see OrmOneToManyMappingComposite - A container of this widget
- * @see OrmOneToOneMappingComposite - A container of this widget
- *
- * @version 2.3
- * @since 2.1
- */
-public class EclipseLinkJoinFetchComposite extends Pane<EclipseLinkJoinFetch> {
-
-	/**
-	 * Creates a new <code>JoinFetchComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkJoinFetchComposite(Pane<?> parentPane, 
-								PropertyValueModel<? extends EclipseLinkJoinFetch> subjectHolder,
-								Composite parent) {
-
-		super(parentPane, subjectHolder, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		addLabeledComposite( 
-            container, 
-            addLabel( 
-                 container, 
-                 EclipseLinkUiDetailsMessages.EclipseLinkJoinFetchComposite_label), 
-            addJoinFetchTypeCombo(container).getControl(),
-            null 
-       );
-	}
-	
-
-	private EnumFormComboViewer<EclipseLinkJoinFetch, EclipseLinkJoinFetchType> addJoinFetchTypeCombo(Composite container) {
-
-		return new EnumFormComboViewer<EclipseLinkJoinFetch, EclipseLinkJoinFetchType>(this, container) {
-
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(EclipseLinkJoinFetch.VALUE_PROPERTY);
-			}
-
-			@Override
-			protected EclipseLinkJoinFetchType[] getChoices() {
-				return EclipseLinkJoinFetchType.values();
-			}
-			
-			@Override
-			protected EclipseLinkJoinFetchType getDefaultValue() {
-				return null;
-			}
-			
-			@Override
-			protected String displayString(EclipseLinkJoinFetchType value) {
-				return buildDisplayString(
-					EclipseLinkUiDetailsMessages.class,
-					EclipseLinkJoinFetchComposite.this,
-					value
-				);
-			}
-			
-			@Override
-			protected String nullDisplayString() {
-				return JptCoreMessages.NONE;
-			}
-
-			@Override
-			protected EclipseLinkJoinFetchType getValue() {
-				return getSubject().getValue();
-			}
-
-			@Override
-			protected void setValue(EclipseLinkJoinFetchType value) {
-				getSubject().setValue(value);
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkManyToManyMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkManyToManyMappingComposite.java
deleted file mode 100644
index f9ec7e5..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkManyToManyMappingComposite.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.context.ManyToManyMapping;
-import org.eclipse.jpt.core.context.ManyToManyRelationshipReference;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkRelationshipMapping;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AbstractManyToManyMappingComposite;
-import org.eclipse.jpt.ui.internal.details.CascadeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.ManyToManyJoiningStrategyPane;
-import org.eclipse.jpt.ui.internal.details.OrderingComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | TargetEntityComposite                                                 | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | JoiningStrategyComposite                                              | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | FetchTypeComposite                                                    | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | CascadeComposite                                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OrderingComposite                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see {@link ManyToManyMapping}
- * @see {@link TargetEntityComposite}
- * @see {@link ManyToManyJoiningStrategyPane}
- * @see {@link FetchTypeComposite}
- * @see {@link CascadeComposite}
- * @see {@link OrderingComposite}
- *
- * @version 2.3
- * @since 2.1
- */
-public class EclipseLinkManyToManyMappingComposite<T extends ManyToManyMapping> 
-	extends AbstractManyToManyMappingComposite<T, ManyToManyRelationshipReference>
-	implements JpaComposite
-{
-	/**
-	 * Creates a new <code>ManyToManyMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IManyToManyMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public EclipseLinkManyToManyMappingComposite(PropertyValueModel<? extends T> subjectHolder,
-	                                  Composite parent,
-	                                  WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeManyToManySection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-
-	protected PropertyValueModel<EclipseLinkJoinFetch> buildJoinFetchableHolder() {
-		return new PropertyAspectAdapter<ManyToManyMapping, EclipseLinkJoinFetch>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkJoinFetch buildValue_() {
-				return ((EclipseLinkRelationshipMapping) this.subject).getJoinFetch();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkManyToOneMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkManyToOneMappingComposite.java
deleted file mode 100644
index 7a3a8d2..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkManyToOneMappingComposite.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.context.ManyToOneMapping;
-import org.eclipse.jpt.core.context.ManyToOneRelationshipReference;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkRelationshipMapping;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AbstractManyToOneMappingComposite;
-import org.eclipse.jpt.ui.internal.details.CascadeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.ManyToOneJoiningStrategyPane;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | TargetEntityComposite                                                 | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | JoiningStrategyComposite                                              | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | FetchTypeComposite                                                    | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OptionalComposite                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | CascadeComposite                                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see {@link ManyToOneMapping}
- * @see {@link TargetEntityComposite}
- * @see {@link ManyToOneJoiningStrategyPane}
- * @see {@link FetchTypeComposite}
- * @see {@link OptionalComposite}
- * @see {@link CascadeComposite}
- *
- * @version 2.3
- * @since 2.1
- */
-public class EclipseLinkManyToOneMappingComposite<T extends ManyToOneMapping> 
-	extends AbstractManyToOneMappingComposite<T, ManyToOneRelationshipReference>
-	implements JpaComposite
-{
-	/**
-	 * Creates a new <code>EclipseLinkManyToOneMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>ManyToOneMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public EclipseLinkManyToOneMappingComposite(PropertyValueModel<? extends T> subjectHolder,
-	                                 Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeManyToOneSection(Composite container) {		
-		new TargetEntityComposite(this, container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new OptionalComposite(this, container);
-		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-	
-	protected PropertyValueModel<EclipseLinkJoinFetch> buildJoinFetchableHolder() {
-		return new PropertyAspectAdapter<T, EclipseLinkJoinFetch>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkJoinFetch buildValue_() {
-				return ((EclipseLinkRelationshipMapping) this.subject).getJoinFetch();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkMappedSuperclassAdvancedComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkMappedSuperclassAdvancedComposite.java
deleted file mode 100644
index 90308ad..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkMappedSuperclassAdvancedComposite.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.context.MappedSuperclass;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkChangeTracking;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCustomizer;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkMappedSuperclass;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkReadOnly;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLinkMappedSuperclassAdvancedComposite extends Pane<MappedSuperclass> {
-	
-	public EclipseLinkMappedSuperclassAdvancedComposite(
-			Pane<? extends MappedSuperclass> parentPane,
-			Composite parent) {
-
-		super(parentPane, parent, false);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		container = addCollapsibleSection(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_advanced
-		);
-		
-		new EclipseLinkReadOnlyComposite(this, buildReadOnlyHolder(), container);
-		new EclipseLinkCustomizerComposite(this, buildCustomizerHolder(), container);
-		new EclipseLinkChangeTrackingComposite(this, buildChangeTrackingHolder(), container);
-	}
-	
-	private PropertyValueModel<EclipseLinkReadOnly> buildReadOnlyHolder() {
-		return new PropertyAspectAdapter<MappedSuperclass, EclipseLinkReadOnly>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkReadOnly buildValue_() {
-				return ((EclipseLinkMappedSuperclass) this.subject).getReadOnly();
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkCustomizer> buildCustomizerHolder() {
-		return new PropertyAspectAdapter<MappedSuperclass, EclipseLinkCustomizer>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkCustomizer buildValue_() {
-				return ((EclipseLinkMappedSuperclass) this.subject).getCustomizer();
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkChangeTracking> buildChangeTrackingHolder() {
-		return new PropertyAspectAdapter<MappedSuperclass, EclipseLinkChangeTracking>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkChangeTracking buildValue_() {
-				return ((EclipseLinkMappedSuperclass) this.subject).getChangeTracking();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkMutableComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkMutableComposite.java
deleted file mode 100644
index fb18320..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkMutableComposite.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkMutable;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This composite simply shows a tri-state check box for the Mutable option.
- *
- * @see EclipseLinkMutable
- * @see EclipseLinkBasicMappingComposite - A container of this pane
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkMutableComposite extends Pane<EclipseLinkMutable>
-{
-	/**
-	 * Creates a new <code>MutableComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkMutableComposite(Pane<?> parentPane, 
-		PropertyValueModel<? extends EclipseLinkMutable> subjectHolder,
-		Composite parent) {
-
-			super(parentPane, subjectHolder, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkMutableComposite_mutableLabel,
-			buildMutableHolder(),
-			buildMutableStringHolder(),
-			null
-		);
-	}
-
-	private WritablePropertyValueModel<Boolean> buildMutableHolder() {
-		return new PropertyAspectAdapter<EclipseLinkMutable, Boolean>(getSubjectHolder(), EclipseLinkMutable.SPECIFIED_MUTABLE_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getSpecifiedMutable();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setSpecifiedMutable(value);
-			}
-
-		};
-	}
-
-	private PropertyValueModel<String> buildMutableStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultMutableHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? JptUiDetailsMessages.Boolean_True : JptUiDetailsMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiDetailsMessages.EclipseLinkMutableComposite_mutableLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiDetailsMessages.EclipseLinkMutableComposite_mutableLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultMutableHolder() {
-		return new PropertyAspectAdapter<EclipseLinkMutable, Boolean>(
-			getSubjectHolder(),
-			EclipseLinkMutable.SPECIFIED_MUTABLE_PROPERTY,
-			EclipseLinkMutable.DEFAULT_MUTABLE_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getSpecifiedMutable() != null) {
-					return null;
-				}
-				return Boolean.valueOf(this.subject.isDefaultMutable());
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkObjectTypeConverterComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkObjectTypeConverterComposite.java
deleted file mode 100644
index 29916f1..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkObjectTypeConverterComposite.java
+++ /dev/null
@@ -1,483 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import java.util.ListIterator;
-
-import org.eclipse.jdt.ui.IJavaElementSearchConstants;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConversionValue;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkObjectTypeConverter;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.swt.ColumnAdapter;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.AddRemoveListPane;
-import org.eclipse.jpt.ui.internal.widgets.AddRemoveTablePane;
-import org.eclipse.jpt.ui.internal.widgets.ClassChooserPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.StringConverter;
-import org.eclipse.jpt.utility.internal.model.value.ItemPropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ObjectListSelectionModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * |            -------------------------------------------------------------- |
- * | Name:      |                                                             ||
- * |            -------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkConverter
- * @see EclipseLinkConvertComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkObjectTypeConverterComposite extends Pane<EclipseLinkObjectTypeConverter>
-{
-
-	/**
-	 * Creates a new <code>ObjectTypeConverterComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkObjectTypeConverterComposite(PropertyValueModel<? extends EclipseLinkObjectTypeConverter> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		
-		addLabeledText(
-			container, 
-			EclipseLinkUiDetailsMessages.EclipseLinkConverterComposite_nameTextLabel, 
-			buildNameTextHolder());
-		
-		addDataTypeChooser(container);
-		addObjectTypeChooser(container);
-		
-		addConversionValuesTable(container);
-
-		addLabeledEditableCombo(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkObjectTypeConverterComposite_defaultObjectValueLabel,
-			buildDefaultObjectValueListHolder(),
-			buildDefaultObjectValueHolder(),
-			buildStringConverter(),
-			null
-		);
-
-		new PaneEnabler(buildBooleanHolder(), this);
-	}
-	
-	protected WritablePropertyValueModel<String> buildNameTextHolder() {
-		return new PropertyAspectAdapter<EclipseLinkObjectTypeConverter, String>(
-				getSubjectHolder(), EclipseLinkConverter.NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getName();
-			}
-		
-			@Override
-			protected void setValue_(String value) {
-				if (value.length() == 0) {
-					value = null;
-				}
-				this.subject.setName(value);
-			}
-		};
-	}
-	
-	private ClassChooserPane<EclipseLinkObjectTypeConverter> addDataTypeChooser(Composite container) {
-
-		return new ClassChooserPane<EclipseLinkObjectTypeConverter>(this, container) {
-
-			@Override
-			protected WritablePropertyValueModel<String> buildTextHolder() {
-				return new PropertyAspectAdapter<EclipseLinkObjectTypeConverter, String>(getSubjectHolder(), EclipseLinkObjectTypeConverter.DATA_TYPE_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-						return this.subject.getDataType();
-					}
-
-					@Override
-					protected void setValue_(String value) {
-
-						if (value.length() == 0) {
-							value = null;
-						}
-
-						this.subject.setDataType(value);
-					}
-				};
-			}
-
-			@Override
-			protected String getClassName() {
-				return getSubject().getDataType();
-			}
-
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiDetailsMessages.EclipseLinkObjectTypeConverterComposite_dataTypeLabel;
-			}
-
-			@Override
-			protected JpaProject getJpaProject() {
-				return getSubject().getJpaProject();
-			}
-			
-			@Override
-			protected void setClassName(String className) {
-				getSubject().setDataType(className);
-			}
-			
-			@Override
-			protected char getEnclosingTypeSeparator() {
-				return getSubject().getEnclosingTypeSeparator();
-			}
-		};
-	}
-
-	private ClassChooserPane<EclipseLinkObjectTypeConverter> addObjectTypeChooser(Composite container) {
-
-		return new ClassChooserPane<EclipseLinkObjectTypeConverter>(this, container) {
-
-			@Override
-			protected WritablePropertyValueModel<String> buildTextHolder() {
-				return new PropertyAspectAdapter<EclipseLinkObjectTypeConverter, String>(getSubjectHolder(), EclipseLinkObjectTypeConverter.OBJECT_TYPE_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-						return this.subject.getObjectType();
-					}
-
-					@Override
-					protected void setValue_(String value) {
-
-						if (value.length() == 0) {
-							value = null;
-						}
-
-						this.subject.setObjectType(value);
-					}
-				};
-			}
-
-			@Override
-			protected String getClassName() {
-				return getSubject().getObjectType();
-			}
-
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiDetailsMessages.EclipseLinkObjectTypeConverterComposite_objectTypeLabel;
-			}
-
-			@Override
-			protected JpaProject getJpaProject() {
-				return getSubject().getJpaProject();
-			}
-			
-			@Override
-			protected void setClassName(String className) {
-				getSubject().setObjectType(className);
-			}
-			
-			@Override
-			protected int getTypeDialogStyle() {
-				return IJavaElementSearchConstants.CONSIDER_CLASSES_AND_ENUMS;
-			}
-			
-			@Override
-			protected char getEnclosingTypeSeparator() {
-				return getSubject().getEnclosingTypeSeparator();
-			}
-		};
-	}
-	
-	protected void addConversionValuesTable(Composite container) {
-		
-		// Join Columns group pane
-		Group conversionValuesGroupPane = addTitledGroup(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkObjectTypeConverterComposite_conversionValuesGroupTitle
-		);
-
-		WritablePropertyValueModel<EclipseLinkConversionValue> conversionValueHolder =
-			buildConversionValueHolder();
-		// Conversion Values add/remove list pane
-		new AddRemoveTablePane<EclipseLinkObjectTypeConverter>(
-			this,
-			conversionValuesGroupPane,
-			buildConversionValuesAdapter(),
-			buildConversionValuesListModel(),
-			conversionValueHolder,
-			buildConversionValuesLabelProvider(),
-			null//TODO need a help context id for this
-		) {
-			@Override
-			protected ColumnAdapter<EclipseLinkConversionValue> buildColumnAdapter() {
-				return new ConversionValueColumnAdapter();
-			}
-		};
-
-	}
-
-	protected WritablePropertyValueModel<EclipseLinkConversionValue> buildConversionValueHolder() {
-		return new SimplePropertyValueModel<EclipseLinkConversionValue>();
-	}
-
-	protected AddRemoveListPane.Adapter buildConversionValuesAdapter() {
-		return new AddRemoveListPane.AbstractAdapter() {
-
-			public void addNewItem(ObjectListSelectionModel listSelectionModel) {
-				EclipseLinkConversionValueDialog dialog = buildConversionValueDialogForAdd();
-				addConversionValueFromDialog(dialog, listSelectionModel);
-			}
-
-			@Override
-			public boolean hasOptionalButton() {
-				return true;
-			}
-
-			@Override
-			public String optionalButtonText() {
-				return EclipseLinkUiDetailsMessages.EclipseLinkObjectTypeConverterComposite_conversionValueEdit;
-			}
-
-			@Override
-			public void optionOnSelection(ObjectListSelectionModel listSelectionModel) {
-				EclipseLinkConversionValue conversionValue = (EclipseLinkConversionValue) listSelectionModel.selectedValue();
-				EclipseLinkConversionValueDialog dialog = new EclipseLinkConversionValueDialog(getShell(), getSubject(), conversionValue);
-				editConversionValueFromDialog(dialog, conversionValue);
-			}
-
-			public void removeSelectedItems(ObjectListSelectionModel listSelectionModel) {
-				EclipseLinkObjectTypeConverter converter = getSubject();
-				int[] selectedIndices = listSelectionModel.selectedIndices();
-
-				for (int index = selectedIndices.length; --index >= 0; ) {
-					converter.removeConversionValue(selectedIndices[index]);
-				}
-			}
-		};
-	}
-
-
-	protected EclipseLinkConversionValueDialog buildConversionValueDialogForAdd() {
-		return new EclipseLinkConversionValueDialog(getShell(), getSubject());
-	}
-
-	protected void addConversionValueFromDialog(EclipseLinkConversionValueDialog dialog, ObjectListSelectionModel listSelectionModel) {
-		if (dialog.open() != Window.OK) {
-			return;
-		}
-
-		EclipseLinkConversionValue conversionValue = this.getSubject().addConversionValue();
-		conversionValue.setDataValue(dialog.getDataValue());
-		conversionValue.setObjectValue(dialog.getObjectValue());
-
-		listSelectionModel.setSelectedValue(conversionValue);
-	}
-
-	protected void editConversionValueFromDialog(EclipseLinkConversionValueDialog dialog, EclipseLinkConversionValue conversionValue) {
-		if (dialog.open() != Window.OK) {
-			return;
-		}
-
-		conversionValue.setDataValue(dialog.getDataValue());
-		conversionValue.setObjectValue(dialog.getObjectValue());
-	}
-	
-	private ListValueModel<EclipseLinkConversionValue> buildConversionValuesListModel() {
-		return new ItemPropertyListValueModelAdapter<EclipseLinkConversionValue>(buildConversionValuesListHolder(), 
-			EclipseLinkConversionValue.DATA_VALUE_PROPERTY,
-			EclipseLinkConversionValue.OBJECT_VALUE_PROPERTY);
-	}	
-
-	private ListValueModel<EclipseLinkConversionValue> buildConversionValuesListHolder() {
-		return new ListAspectAdapter<EclipseLinkObjectTypeConverter, EclipseLinkConversionValue>(getSubjectHolder(), EclipseLinkObjectTypeConverter.CONVERSION_VALUES_LIST) {
-			@Override
-			protected ListIterator<EclipseLinkConversionValue> listIterator_() {
-				return this.subject.conversionValues();
-			}
-
-			@Override
-			protected int size_() {
-				return this.subject.conversionValuesSize();
-			}
-		};
-	}
-
-	private ITableLabelProvider buildConversionValuesLabelProvider() {
-		return new TableLabelProvider();
-	}
-	
-	protected ListValueModel<String> buildDefaultObjectValueListHolder() {
-		return new TransformationListValueModelAdapter<EclipseLinkConversionValue, String>(buildConversionValuesListModel()) {
-			@Override
-			protected String transformItem(EclipseLinkConversionValue conversionValue) {
-				return conversionValue.getObjectValue();
-			}
-		};
-	}
-	
-	protected WritablePropertyValueModel<String> buildDefaultObjectValueHolder() {
-		return new PropertyAspectAdapter<EclipseLinkObjectTypeConverter, String>(
-				getSubjectHolder(), EclipseLinkObjectTypeConverter.DEFAULT_OBJECT_VALUE_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getDefaultObjectValue();
-			}
-		
-			@Override
-			protected void setValue_(String value) {
-				if (value != null && value.length() == 0) {
-					value = null;
-				}
-				this.subject.setDefaultObjectValue(value);
-			}
-		};
-	}
-	
-	protected final StringConverter<String> buildStringConverter() {
-		return new StringConverter<String>() {
-			public String convertToString(String value) {
-				return (value == null) ? "" : value; //$NON-NLS-1$
-			}
-		};
-	}
-
-	protected PropertyValueModel<Boolean> buildBooleanHolder() {
-		return new TransformationPropertyValueModel<EclipseLinkObjectTypeConverter, Boolean>(getSubjectHolder()) {
-			@Override
-			protected Boolean transform(EclipseLinkObjectTypeConverter value) {
-				return Boolean.valueOf(value != null);
-			}
-		};
-	}
-	
-	private class TableLabelProvider extends LabelProvider
-		implements ITableLabelProvider {
-
-		public Image getColumnImage(Object element, int columnIndex) {
-			return null;
-		}
-		
-		public String getColumnText(Object element, int columnIndex) {
-		
-			EclipseLinkConversionValue conversionValue = (EclipseLinkConversionValue) element;
-			String value = null;
-			
-			switch (columnIndex) {
-				case ConversionValueColumnAdapter.DATA_VALUE_COLUMN: {
-					value = conversionValue.getDataValue();
-					break;
-				}
-			
-				case ConversionValueColumnAdapter.OBJECT_VALUE_COLUMN: {
-					value = conversionValue.getObjectValue();
-					break;
-				}
-			}
-			
-			if (value == null) {
-				value = ""; //$NON-NLS-1$
-			}
-		
-			return value;
-		}
-	}
-
-	private static class ConversionValueColumnAdapter implements ColumnAdapter<EclipseLinkConversionValue> {
-
-		public static final int COLUMN_COUNT = 2;
-		//public static final int SELECTION_COLUMN = 0;
-		public static final int DATA_VALUE_COLUMN = 0;
-		public static final int OBJECT_VALUE_COLUMN = 1;
-
-		private WritablePropertyValueModel<String> buildDataValueHolder(EclipseLinkConversionValue subject) {
-			return new PropertyAspectAdapter<EclipseLinkConversionValue, String>(EclipseLinkConversionValue.DATA_VALUE_PROPERTY, subject) {
-				@Override
-				protected String buildValue_() {
-					return this.subject.getDataValue();
-				}
-
-				@Override
-				protected void setValue_(String value) {
-					this.subject.setDataValue(value);
-				}
-			};
-		}
-
-		private WritablePropertyValueModel<String> buildObjectValueHolder(EclipseLinkConversionValue subject) {
-			return new PropertyAspectAdapter<EclipseLinkConversionValue, String>(EclipseLinkConversionValue.OBJECT_VALUE_PROPERTY, subject) {
-				@Override
-				protected String buildValue_() {
-					return this.subject.getObjectValue();
-				}
-
-				@Override
-				protected void setValue_(String value) {
-					this.subject.setObjectValue(value);
-				}
-			};
-		}
-
-		public WritablePropertyValueModel<?>[] cellModels(EclipseLinkConversionValue subject) {
-			WritablePropertyValueModel<?>[] holders = new WritablePropertyValueModel<?>[COLUMN_COUNT];
-			//holders[SELECTION_COLUMN] = new SimplePropertyValueModel<Object>();
-			holders[DATA_VALUE_COLUMN]      = buildDataValueHolder(subject);
-			holders[OBJECT_VALUE_COLUMN]     = buildObjectValueHolder(subject);
-			return holders;
-		}
-
-		public int columnCount() {
-			return COLUMN_COUNT;
-		}
-
-		public String columnName(int columnIndex) {
-
-			switch (columnIndex) {
-				case ConversionValueColumnAdapter.DATA_VALUE_COLUMN: {
-					return EclipseLinkUiDetailsMessages.EclipseLinkObjectTypeConverterComposite_conversionValuesDataValueColumn;
-				}
-
-				case ConversionValueColumnAdapter.OBJECT_VALUE_COLUMN: {
-					return EclipseLinkUiDetailsMessages.EclipseLinkObjectTypeConverterComposite_conversionValuesObjectValueColumn;
-				}
-
-				default: {
-					return null;
-				}
-			}
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkOneToManyJoiningStrategyPane.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkOneToManyJoiningStrategyPane.java
deleted file mode 100644
index 25e1131..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkOneToManyJoiningStrategyPane.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkOneToManyRelationshipReference;
-import org.eclipse.jpt.ui.internal.details.JoinColumnJoiningStrategyPane;
-import org.eclipse.jpt.ui.internal.details.JoinTableJoiningStrategyPane;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.details.MappedByJoiningStrategyPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLinkOneToManyJoiningStrategyPane 
-	extends Pane<EclipseLinkOneToManyRelationshipReference>
-{
-	public EclipseLinkOneToManyJoiningStrategyPane(
-			Pane<?> parentPane, 
-			PropertyValueModel<? extends EclipseLinkOneToManyRelationshipReference> subjectHolder, 
-			Composite parent) {
-		
-		super(parentPane, subjectHolder, parent);
-	}
-	
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		Composite composite = addCollapsibleSection(
-				container,
-				JptUiDetailsMessages.Joining_title,
-				new SimplePropertyValueModel<Boolean>(Boolean.TRUE));
-		
-		addRadioButton(
-			composite,
-			JptUiDetailsMessages.Joining_mappedByLabel,
-			MappedByJoiningStrategyPane.buildUsesMappedByJoiningStrategyHolder(getSubjectHolder()),
-			null);
-
-		new MappedByJoiningStrategyPane(this, composite);
-		
-		addRadioButton(
-			composite,
-			JptUiDetailsMessages.Joining_joinColumnJoiningLabel,
-			JoinColumnJoiningStrategyPane.buildUsesJoinColumnJoiningStrategyHolder(getSubjectHolder()),
-			null);
-
-		JoinColumnJoiningStrategyPane.
-			buildJoinColumnJoiningStrategyPaneWithIncludeOverrideCheckBox(this, composite);
-		
-		addRadioButton(
-			composite,
-			JptUiDetailsMessages.Joining_joinTableJoiningLabel,
-			JoinTableJoiningStrategyPane.buildUsesJoinTableJoiningStrategyHolder(getSubjectHolder()),
-			null);
-
-		new JoinTableJoiningStrategyPane(this, composite);
-		
-		addSubPane(composite, 5);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkOneToManyMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkOneToManyMappingComposite.java
deleted file mode 100644
index 2946d3b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkOneToManyMappingComposite.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.context.OneToManyMapping;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkOneToManyMapping;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkOneToManyRelationshipReference;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkPrivateOwned;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AbstractOneToManyMappingComposite;
-import org.eclipse.jpt.ui.internal.details.CascadeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.OrderingComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | TargetEntityComposite                                                 | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | EclipseLinkOneToManyJoiningStrategyPane                               | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | FetchTypeComposite                                                    | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | EclipseLinkJoinFetchComposite                                         | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | EclipseLinkvateOwnedComposite                                         | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | CascadeComposite                                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OrderingComposite                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see OneToOneMapping
- * @see CascadeComposite
- * @see EclipseLinkJoinFetchComposite
- * @see EclipseLinkJoinFetchComposite
- * @see EclipseLinkOneToManyJoiningStrategyPane
- * @see FetchTypeComposite
- * @see OrderingComposite
- * @see TargetEntityComposite
- *
- * @version 2.3
- * @since 2.1
- */
-public class EclipseLinkOneToManyMappingComposite<T extends OneToManyMapping> 
-	extends AbstractOneToManyMappingComposite<T, EclipseLinkOneToManyRelationshipReference>
-    implements JpaComposite
-{
-	/**
-	 * Creates a new <code>EclipselinkOneToManyMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IOneToManyMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public EclipseLinkOneToManyMappingComposite(PropertyValueModel<? extends T> subjectHolder,
-	                                 Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeOneToManySection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new EclipseLinkPrivateOwnedComposite(this, buildPrivateOwnableHolder(), container);
-		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-
-	@Override
-	protected void initializeJoiningStrategyCollapsibleSection(Composite container) {
-		new EclipseLinkOneToManyJoiningStrategyPane(this, buildJoiningHolder(), container);
-	}
-
-	protected PropertyValueModel<EclipseLinkPrivateOwned> buildPrivateOwnableHolder() {
-		return new PropertyAspectAdapter<T, EclipseLinkPrivateOwned>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkPrivateOwned buildValue_() {
-				return ((EclipseLinkOneToManyMapping) this.subject).getPrivateOwned();
-			}
-		};
-	}
-	
-	protected PropertyValueModel<EclipseLinkJoinFetch> buildJoinFetchableHolder() {
-		return new PropertyAspectAdapter<T, EclipseLinkJoinFetch>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkJoinFetch buildValue_() {
-				return ((EclipseLinkOneToManyMapping) this.subject).getJoinFetch();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkOneToOneMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkOneToOneMappingComposite.java
deleted file mode 100644
index dfadca9..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkOneToOneMappingComposite.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.context.OneToOneMapping;
-import org.eclipse.jpt.core.context.OneToOneRelationshipReference;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkOneToOneMapping;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkPrivateOwned;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AbstractOneToOneMappingComposite;
-import org.eclipse.jpt.ui.internal.details.CascadeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-
-public class EclipseLinkOneToOneMappingComposite<T extends OneToOneMapping>
-	extends AbstractOneToOneMappingComposite<T, OneToOneRelationshipReference>
-	implements JpaComposite
-{
-	/**
-	 * Creates a new <code>EclipselinkOneToOneMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IOneToOneMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public EclipseLinkOneToOneMappingComposite(PropertyValueModel<? extends T> subjectHolder,
-	                                Composite parent,
-	                                WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeOneToOneSection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new OptionalComposite(this, container);
-		new EclipseLinkPrivateOwnedComposite(this, buildPrivateOwnableHolder(), container);
-		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-	
-	protected PropertyValueModel<EclipseLinkJoinFetch> buildJoinFetchableHolder() {
-		return new PropertyAspectAdapter<T, EclipseLinkJoinFetch>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkJoinFetch buildValue_() {
-				return ((EclipseLinkOneToOneMapping)this.subject).getJoinFetch();
-			}
-		};
-	}
-	
-	protected PropertyValueModel<EclipseLinkPrivateOwned> buildPrivateOwnableHolder() {
-		return new PropertyAspectAdapter<T, EclipseLinkPrivateOwned>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkPrivateOwned buildValue_() {
-				return ((EclipseLinkOneToOneMapping)this.subject).getPrivateOwned();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkPrivateOwnedComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkPrivateOwnedComposite.java
deleted file mode 100644
index a362dc6..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkPrivateOwnedComposite.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkPrivateOwned;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This composite simply shows the Lob check box.
- *
- * @see BasicMapping
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkPrivateOwnedComposite extends Pane<EclipseLinkPrivateOwned>
-{
-	/**
-	 * Creates a new <code>PrivateOwnedComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkPrivateOwnedComposite(Pane<?> parentPane, 
-		PropertyValueModel<? extends EclipseLinkPrivateOwned> subjectHolder,
-		Composite parent) {
-
-			super(parentPane, subjectHolder, parent);
-	}
-	
-	private PropertyAspectAdapter<EclipseLinkPrivateOwned, Boolean> buildPrivateOwnedHolder() {
-
-		return new PropertyAspectAdapter<EclipseLinkPrivateOwned, Boolean>(getSubjectHolder(), EclipseLinkPrivateOwned.PRIVATE_OWNED_PROPERTY) {
-
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.isPrivateOwned());
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setPrivateOwned(value.booleanValue());
-			}
-		};
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		addCheckBox(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkPrivateOwnedComposite_privateOwnedLabel,
-			buildPrivateOwnedHolder(),
-			null
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkReadOnlyComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkReadOnlyComposite.java
deleted file mode 100644
index c0f87ae..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkReadOnlyComposite.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkReadOnly;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This composite simply shows the Read Only check box.
- *
- * @see EclipseLinkReadOnly
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkReadOnlyComposite extends Pane<EclipseLinkReadOnly>
-{
-	/**
-	 * Creates a new <code>ReadOnlyComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkReadOnlyComposite(Pane<?> parentPane, 
-		PropertyValueModel<? extends EclipseLinkReadOnly> subjectHolder,
-		Composite parent) {
-
-			super(parentPane, subjectHolder, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		// Unique tri-state check box
-		addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkReadOnlyComposite_readOnlyLabel,
-			buildSpecifiedReadOnlyHolder(),
-			buildReadOnlyStringHolder(),
-			null
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildSpecifiedReadOnlyHolder() {
-		return new PropertyAspectAdapter<EclipseLinkReadOnly, Boolean>(
-			getSubjectHolder(),
-			EclipseLinkReadOnly.SPECIFIED_READ_ONLY_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getSpecifiedReadOnly();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setSpecifiedReadOnly(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildReadOnlyStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultReadOnlyHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? JptUiDetailsMessages.Boolean_True : JptUiDetailsMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiDetailsMessages.EclipseLinkReadOnlyComposite_readOnlyWithDefault, defaultStringValue);
-				}
-				return EclipseLinkUiDetailsMessages.EclipseLinkReadOnlyComposite_readOnlyLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultReadOnlyHolder() {
-		return new PropertyAspectAdapter<EclipseLinkReadOnly, Boolean>(
-			getSubjectHolder(),
-			EclipseLinkReadOnly.SPECIFIED_READ_ONLY_PROPERTY,
-			EclipseLinkReadOnly.DEFAULT_READ_ONLY_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getSpecifiedReadOnly() != null) {
-					return null;
-				}
-				return Boolean.valueOf(this.subject.isDefaultReadOnly());
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkRefreshOnlyIfNewerComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkRefreshOnlyIfNewerComposite.java
deleted file mode 100644
index a32cb08..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkRefreshOnlyIfNewerComposite.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This composite simply shows a tri-state check box for the Refresh Only If Newer option.
- * 
- * @see EclipseLinkCaching
- * @see EclipseLinkCachingComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkRefreshOnlyIfNewerComposite extends Pane<EclipseLinkCaching>
-{
-	/**
-	 * Creates a new <code>OptionalComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkRefreshOnlyIfNewerComposite(Pane<? extends EclipseLinkCaching> parentPane,
-	                         Composite parent)
-	{
-		super(parentPane, parent);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkRefreshOnlyIfNewerComposite_refreshOnlyIfNewerLabel,
-			buildRefreshOnlyIfNewerHolder(),
-			buildRefreshOnlyIfNewerStringHolder(),
-			EclipseLinkHelpContextIds.CACHING_REFRESH_ONLY_IF_NEWER
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildRefreshOnlyIfNewerHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(getSubjectHolder(), EclipseLinkCaching.SPECIFIED_REFRESH_ONLY_IF_NEWER_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getSpecifiedRefreshOnlyIfNewer();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setSpecifiedRefreshOnlyIfNewer(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildRefreshOnlyIfNewerStringHolder() {
-
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultRefreshOnlyIfNewerHolder()) {
-
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? JptUiDetailsMessages.Boolean_True : JptUiDetailsMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiDetailsMessages.EclipseLinkRefreshOnlyIfNewerComposite_refreshOnlyIfNewerDefault, defaultStringValue);
-				}
-				return EclipseLinkUiDetailsMessages.EclipseLinkRefreshOnlyIfNewerComposite_refreshOnlyIfNewerLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultRefreshOnlyIfNewerHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Boolean>(
-			getSubjectHolder(),
-			EclipseLinkCaching.SPECIFIED_REFRESH_ONLY_IF_NEWER_PROPERTY,
-			EclipseLinkCaching.DEFAULT_REFRESH_ONLY_IF_NEWER_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getSpecifiedRefreshOnlyIfNewer() != null) {
-					return null;
-				}
-				return Boolean.valueOf(this.subject.isDefaultRefreshOnlyIfNewer());
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkStructConverterComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkStructConverterComposite.java
deleted file mode 100644
index d34f89e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkStructConverterComposite.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkStructConverter;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.ClassChooserPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * |            -------------------------------------------------------------- |
- * | Name:      |                                                             ||
- * |            -------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkConverter
- * @see EclipseLinkConvertComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkStructConverterComposite extends Pane<EclipseLinkStructConverter>
-{
-
-	/**
-	 * Creates a new <code>StructConverterComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkStructConverterComposite(PropertyValueModel<? extends EclipseLinkStructConverter> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		
-		addLabeledText(
-			container, 
-			EclipseLinkUiDetailsMessages.EclipseLinkConverterComposite_nameTextLabel, 
-			buildNameTextHolder());
-		
-		addClassChooser(container);
-		
-		new PaneEnabler(buildBooleanHolder(), this);
-	}
-	
-	protected WritablePropertyValueModel<String> buildNameTextHolder() {
-		return new PropertyAspectAdapter<EclipseLinkStructConverter, String>(
-				getSubjectHolder(), EclipseLinkConverter.NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getName();
-			}
-		
-			@Override
-			protected void setValue_(String value) {
-				if (value.length() == 0) {
-					value = null;
-				}
-				this.subject.setName(value);
-			}
-		};
-	}
-
-	
-	private ClassChooserPane<EclipseLinkStructConverter> addClassChooser(Composite container) {
-
-		return new ClassChooserPane<EclipseLinkStructConverter>(this, container) {
-
-			@Override
-			protected WritablePropertyValueModel<String> buildTextHolder() {
-				return new PropertyAspectAdapter<EclipseLinkStructConverter, String>(getSubjectHolder(), EclipseLinkStructConverter.CONVERTER_CLASS_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-						return this.subject.getConverterClass();
-					}
-
-					@Override
-					protected void setValue_(String value) {
-
-						if (value.length() == 0) {
-							value = null;
-						}
-
-						this.subject.setConverterClass(value);
-					}
-				};
-			}
-
-			@Override
-			protected String getClassName() {
-				return getSubject().getConverterClass();
-			}
-
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiDetailsMessages.EclipseLinkConverterComposite_classLabel;
-			}
-
-			@Override
-			protected JpaProject getJpaProject() {
-				return getSubject().getJpaProject();
-			}
-			
-			@Override
-			protected void setClassName(String className) {
-				getSubject().setConverterClass(className);
-			}
-			
-			@Override
-			protected String getSuperInterfaceName() {
-				return EclipseLinkStructConverter.ECLIPSELINK_STRUCT_CONVERTER_CLASS_NAME;
-			}
-			
-			@Override
-			protected char getEnclosingTypeSeparator() {
-				return getSubject().getEnclosingTypeSeparator();
-			}
-		};
-	}
-
-	protected PropertyValueModel<Boolean> buildBooleanHolder() {
-		return new TransformationPropertyValueModel<EclipseLinkStructConverter, Boolean>(getSubjectHolder()) {
-			@Override
-			protected Boolean transform(EclipseLinkStructConverter value) {
-				return Boolean.valueOf(value != null);
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkTransformationMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkTransformationMappingComposite.java
deleted file mode 100644
index 0c90cfb..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkTransformationMappingComposite.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkTransformationMapping;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkTransformationMappingComposite extends Pane<EclipseLinkTransformationMapping>
-                                       implements JpaComposite
-{
-	/**
-	 * Creates a new <code>EclipseLinkBasicCollectionMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IManyToOneMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public EclipseLinkTransformationMappingComposite(PropertyValueModel<? extends EclipseLinkTransformationMapping> subjectHolder,
-	                                 Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkTypeConverterComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkTypeConverterComposite.java
deleted file mode 100644
index 0b7744e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkTypeConverterComposite.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkTypeConverter;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.ClassChooserPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * |            -------------------------------------------------------------- |
- * | Name:      |                                                             ||
- * |            -------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkConverter
- * @see EclipseLinkConvertComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkTypeConverterComposite extends Pane<EclipseLinkTypeConverter>
-{
-
-	/**
-	 * Creates a new <code>TypeConverterComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkTypeConverterComposite(PropertyValueModel<? extends EclipseLinkTypeConverter> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		
-		addLabeledText(
-			container, 
-			EclipseLinkUiDetailsMessages.EclipseLinkConverterComposite_nameTextLabel, 
-			buildNameTextHolder());
-		
-		addDataTypeChooser(container);
-		addObjectTypeChooser(container);
-		
-		new PaneEnabler(buildBooleanHolder(), this);
-	}
-	
-	protected WritablePropertyValueModel<String> buildNameTextHolder() {
-		return new PropertyAspectAdapter<EclipseLinkTypeConverter, String>(
-				getSubjectHolder(), EclipseLinkConverter.NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getName();
-			}
-		
-			@Override
-			protected void setValue_(String value) {
-				if (value.length() == 0) {
-					value = null;
-				}
-				this.subject.setName(value);
-			}
-		};
-	}
-
-	
-	private ClassChooserPane<EclipseLinkTypeConverter> addDataTypeChooser(Composite container) {
-
-		return new ClassChooserPane<EclipseLinkTypeConverter>(this, container) {
-
-			@Override
-			protected WritablePropertyValueModel<String> buildTextHolder() {
-				return new PropertyAspectAdapter<EclipseLinkTypeConverter, String>(getSubjectHolder(), EclipseLinkTypeConverter.DATA_TYPE_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-						return this.subject.getDataType();
-					}
-
-					@Override
-					protected void setValue_(String value) {
-
-						if (value.length() == 0) {
-							value = null;
-						}
-
-						this.subject.setDataType(value);
-					}
-				};
-			}
-
-			@Override
-			protected String getClassName() {
-				return getSubject().getDataType();
-			}
-
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiDetailsMessages.EclipseLinkTypeConverterComposite_dataTypeLabel;
-			}
-
-			@Override
-			protected JpaProject getJpaProject() {
-				return getSubject().getJpaProject();
-			}
-
-			@Override
-			protected void setClassName(String className) {
-				getSubject().setDataType(className);
-			}
-			
-			@Override
-			protected char getEnclosingTypeSeparator() {
-				return getSubject().getEnclosingTypeSeparator();
-			}
-		};
-	}
-
-	private ClassChooserPane<EclipseLinkTypeConverter> addObjectTypeChooser(Composite container) {
-
-		return new ClassChooserPane<EclipseLinkTypeConverter>(this, container) {
-
-			@Override
-			protected WritablePropertyValueModel<String> buildTextHolder() {
-				return new PropertyAspectAdapter<EclipseLinkTypeConverter, String>(getSubjectHolder(), EclipseLinkTypeConverter.OBJECT_TYPE_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-						return this.subject.getObjectType();
-					}
-
-					@Override
-					protected void setValue_(String value) {
-
-						if (value.length() == 0) {
-							value = null;
-						}
-
-						this.subject.setObjectType(value);
-					}
-				};
-			}
-
-			@Override
-			protected String getClassName() {
-				return getSubject().getObjectType();
-			}
-
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiDetailsMessages.EclipseLinkTypeConverterComposite_objectTypeLabel;
-			}
-
-			@Override
-			protected JpaProject getJpaProject() {
-				return getSubject().getJpaProject();
-			}
-			
-			@Override
-			protected void setClassName(String className) {
-				getSubject().setObjectType(className);
-			}
-			
-			@Override
-			protected char getEnclosingTypeSeparator() {
-				return getSubject().getEnclosingTypeSeparator();
-			}
-		};
-	}
-
-	protected PropertyValueModel<Boolean> buildBooleanHolder() {
-		return new TransformationPropertyValueModel<EclipseLinkTypeConverter, Boolean>(getSubjectHolder()) {
-			@Override
-			protected Boolean transform(EclipseLinkTypeConverter value) {
-				return Boolean.valueOf(value != null);
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkUiDetailsMessages.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkUiDetailsMessages.java
deleted file mode 100644
index d0a3bec..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkUiDetailsMessages.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * The localized strings used by the mapping panes.
- *
- * @version 2.3
- * @since 1.0
- */
-@SuppressWarnings("nls")
-public class EclipseLinkUiDetailsMessages extends NLS {
-
-	public static String EclipseLinkBasicCollectionMappingUiProvider_label;
-	public static String EclipseLinkBasicCollectionMappingUiProvider_linkLabel;
-	
-	public static String EclipseLinkBasicMapMappingUiProvider_label;
-	public static String EclipseLinkBasicMapMappingUiProvider_linkLabel;
-	
-	public static String EclipseLinkTransformationMappingUiProvider_label;
-	public static String EclipseLinkTransformationMappingUiProvider_linkLabel;
-
-	public static String EclipseLinkVariableOneToOneMappingUiProvider_label;
-	public static String EclipseLinkVariableOneToOneMappingUiProvider_linkLabel;
-
-	public static String EclipseLinkCacheTypeComposite_label;
-	public static String EclipseLinkCacheTypeComposite_full;
-	public static String EclipseLinkCacheTypeComposite_weak;
-	public static String EclipseLinkCacheTypeComposite_soft;
-	public static String EclipseLinkCacheTypeComposite_soft_weak;
-	public static String EclipseLinkCacheTypeComposite_hard_weak;
-	public static String EclipseLinkCacheTypeComposite_cache;
-	public static String EclipseLinkCacheTypeComposite_none;
-	public static String EclipseLinkTypeMappingComposite_advanced;
-	public static String EclipseLinkTypeMappingComposite_caching;
-	public static String EclipseLinkTypeMappingComposite_converters;
-	
-	public static String EclipseLinkCacheSizeComposite_size;
-	public static String EclipseLinkCacheCoordinationTypeComposite_label;
-	public static String EclipseLinkCacheCoordinationTypeComposite_send_object_changes;
-	public static String EclipseLinkCacheCoordinationTypeComposite_invalidate_changed_objects;
-	public static String EclipseLinkCacheCoordinationTypeComposite_send_new_objects_with_changes;
-	public static String EclipseLinkCacheCoordinationTypeComposite_none;
-
-	public static String EclipseLinkCachingComposite_sharedLabelDefault;
-	public static String EclipseLinkCachingComposite_sharedLabel;
-	public static String EclipseLinkCachingComposite_advanced;
-	public static String EclipseLinkAlwaysRefreshComposite_alwaysRefreshDefault;
-	public static String EclipseLinkAlwaysRefreshComposite_alwaysRefreshLabel;
-	public static String EclipseLinkRefreshOnlyIfNewerComposite_refreshOnlyIfNewerDefault;
-	public static String EclipseLinkRefreshOnlyIfNewerComposite_refreshOnlyIfNewerLabel;
-	public static String EclipseLinkDisableHitsComposite_disableHitsDefault;
-	public static String EclipseLinkDisableHitsComposite_disableHitsLabel;
-	
-	public static String EclipseLinkChangeTrackingComposite_label;
-	public static String EclipseLinkChangeTrackingComposite_attribute;
-	public static String EclipseLinkChangeTrackingComposite_object;
-	public static String EclipseLinkChangeTrackingComposite_deferred;
-	public static String EclipseLinkChangeTrackingComposite_auto;
-	
-	public static String EclipseLinkConvertComposite_converterNameLabel;
-	public static String EclipseLinkConvertComposite_defineConverterSection;
-	public static String EclipseLinkConvertComposite_default;
-	public static String EclipseLinkConvertComposite_custom;
-	public static String EclipseLinkConvertComposite_type;
-	public static String EclipseLinkConvertComposite_objectType;
-	public static String EclipseLinkConvertComposite_struct;
-	
-	public static String EclipseLinkConverterComposite_nameTextLabel;
-	public static String EclipseLinkConverterComposite_classLabel;
-
-	public static String EclipseLinkConvertersComposite_customConverter;
-	public static String EclipseLinkConvertersComposite_objectTypeConverter;
-	public static String EclipseLinkConvertersComposite_structConverter;
-	public static String EclipseLinkConvertersComposite_typeConverter;
-	
-	public static String EclipseLinkCustomizerComposite_classLabel;
-		
-	public static String TypeSection_converted;
-	
-	public static String EclipseLinkExistenceCheckingComposite_label;
-	public static String JavaEclipseLinkExistenceCheckingComposite_check_cache;
-	public static String JavaEclipseLinkExistenceCheckingComposite_check_database;
-	public static String JavaEclipseLinkExistenceCheckingComposite_assume_existence;
-	public static String JavaEclipseLinkExistenceCheckingComposite_assume_non_existence;
-	public static String OrmEclipseLinkExistenceCheckingComposite_check_cache;
-	public static String OrmEclipseLinkExistenceCheckingComposite_check_database;
-	public static String OrmEclipseLinkExistenceCheckingComposite_assume_existence;
-	public static String OrmEclipseLinkExistenceCheckingComposite_assume_non_existence;
-	
-	public static String EclipseLinkExpiryComposite_expirySection;
-	public static String EclipseLinkExpiryComposite_noExpiry;
-	public static String EclipseLinkExpiryComposite_timeToLiveExpiry;
-	public static String EclipseLinkExpiryComposite_timeToLiveExpiryExpireAfter;
-	public static String EclipseLinkExpiryComposite_timeToLiveExpiryMilliseconds;
-	public static String EclipseLinkExpiryComposite_dailyExpiry;
-	public static String EclipseLinkExpiryComposite_timeOfDayExpiryExpireAt;
-	
-	public static String EclipseLinkJoinFetchComposite_label;
-	public static String EclipseLinkJoinFetchComposite_inner;
-	public static String EclipseLinkJoinFetchComposite_outer;	
-	
-	public static String EclipseLinkMutableComposite_mutableLabel;
-	public static String EclipseLinkMutableComposite_mutableLabelDefault;
-	public static String EclipseLinkMutableComposite_true;
-	public static String EclipseLinkMutableComposite_false;
-	
-	public static String EclipseLinkObjectTypeConverterComposite_dataTypeLabel;
-	public static String EclipseLinkObjectTypeConverterComposite_objectTypeLabel;
-	public static String EclipseLinkObjectTypeConverterComposite_conversionValueEdit;
-	public static String EclipseLinkObjectTypeConverterComposite_conversionValuesDataValueColumn;
-	public static String EclipseLinkObjectTypeConverterComposite_conversionValuesObjectValueColumn;
-	public static String EclipseLinkObjectTypeConverterComposite_defaultObjectValueLabel;
-	public static String EclipseLinkObjectTypeConverterComposite_conversionValuesGroupTitle;
-	
-	public static String EclipseLinkConversionValueDialog_addConversionValue;
-	public static String EclipseLinkConversionValueDialog_editConversionValue;
-	public static String EclipseLinkConversionValueDialog_addConversionValueDescriptionTitle;
-	public static String EclipseLinkConversionValueDialog_editConversionValueDescriptionTitle;
-	public static String EclipseLinkConversionValueDialog_addConversionValueDescription;
-	public static String EclipseLinkConversionValueDialog_editConversionValueDescription;
-	
-	public static String EclipseLinkConversionValueDialog_dataValue;
-	public static String EclipseLinkConversionValueDialog_objectValue;
-	public static String EclipseLinkConversionValueStateObject_dataValueMustBeSpecified;
-	public static String EclipseLinkConversionValueStateObject_objectValueMustBeSpecified;
-	public static String EclipseLinkConversionValueStateObject_dataValueAlreadyExists;
-	
-	public static String EclipseLinkPrivateOwnedComposite_privateOwnedLabel;
-	
-	public static String EclipseLinkReadOnlyComposite_readOnlyLabel;
-	public static String EclipseLinkReadOnlyComposite_readOnlyWithDefault;
-	
-	public static String EclipseLinkTypeConverterComposite_dataTypeLabel;
-	public static String EclipseLinkTypeConverterComposite_objectTypeLabel;
-
-	public static String DefaultEclipseLinkOneToOneMappingUiProvider_label;
-	public static String DefaultEclipseLinkVariableOneToOneMappingUiProvider_label;
-	public static String DefaultEclipseLinkOneToManyMappingUiProvider_label;
-	public static String DefaultEclipseLinkOneToOneMappingUiProvider_linkLabel;
-	public static String DefaultEclipseLinkVariableOneToOneMappingUiProvider_linkLabel;
-	public static String DefaultEclipseLinkOneToManyMappingUiProvider_linkLabel;
-	
-	public static String EclipseLinkConverterDialog_name;
-	public static String EclipseLinkConverterDialog_converterType;
-	public static String EclipseLinkConverterDialog_addConverter;
-	public static String EclipseLinkConverterDialog_addConverterDescriptionTitle;
-	public static String EclipseLinkConverterDialog_addConverterDescription;
-	public static String EclipseLinkConverterStateObject_nameMustBeSpecified;
-	public static String EclipseLinkConverterStateObject_typeMustBeSpecified;
-	
-	static {
-		NLS.initializeMessages("eclipselink_ui_details", EclipseLinkUiDetailsMessages.class);
-	}
-
-	private EclipseLinkUiDetailsMessages() {
-		throw new UnsupportedOperationException();
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkVariableOneToOneMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkVariableOneToOneMappingComposite.java
deleted file mode 100644
index 7fd8431..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkVariableOneToOneMappingComposite.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkVariableOneToOneMapping;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *
- * @version 2.2
- * @since 2.2
- */
-public class EclipseLinkVariableOneToOneMappingComposite extends Pane<EclipseLinkVariableOneToOneMapping>
-                                       implements JpaComposite
-{
-	/**
-	 * Creates a new <code>EclipseLinkBasicCollectionMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IManyToOneMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public EclipseLinkVariableOneToOneMappingComposite(PropertyValueModel<? extends EclipseLinkVariableOneToOneMapping> subjectHolder,
-	                                 Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkVersionMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkVersionMappingComposite.java
deleted file mode 100644
index 02aa1f8..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/EclipseLinkVersionMappingComposite.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details;
-
-import org.eclipse.jpt.core.context.Converter;
-import org.eclipse.jpt.core.context.ConvertibleMapping;
-import org.eclipse.jpt.core.context.TemporalConverter;
-import org.eclipse.jpt.core.context.VersionMapping;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConvert;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkMutable;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkVersionMapping;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AbstractVersionMappingComposite;
-import org.eclipse.jpt.ui.internal.details.ColumnComposite;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.details.TemporalTypeComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | ColumnComposite                                                       | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | MutableComposite                                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | TemporalTypeComposite                                                 | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see VersionMapping
- * @see ColumnComposite
- * @see TemporalTypeComposite
- *
- * @version 2.3
- * @since 2.1
- */
-public class EclipseLinkVersionMappingComposite<T extends VersionMapping> extends AbstractVersionMappingComposite<T>
-                                     implements JpaComposite
-{
-	/**
-	 * Creates a new <code>VersionMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IVersionMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public EclipseLinkVersionMappingComposite(PropertyValueModel<? extends T> subjectHolder,
-	                               Composite parent,
-	                               WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	
-	@Override
-	protected void initializeVersionSection(Composite container) {
-		new ColumnComposite(this, buildColumnHolder(), container);
-		new EclipseLinkMutableComposite(this, buildMutableHolder(), container);
-	}
-	
-	@Override
-	protected void initializeTypeSection(Composite container) {
-		((GridLayout) container.getLayout()).numColumns = 2;
-
-		// No converter
-		Button noConverterButton = addRadioButton(
-			container, 
-			JptUiDetailsMessages.TypeSection_default, 
-			buildConverterBooleanHolder(Converter.NO_CONVERTER), 
-			null);
-		((GridData) noConverterButton.getLayoutData()).horizontalSpan = 2;
-				
-		PropertyValueModel<Converter> converterHolder = buildConverterHolder();
-		// Temporal
-		addRadioButton(
-			container, 
-			JptUiDetailsMessages.TypeSection_temporal, 
-			buildConverterBooleanHolder(Converter.TEMPORAL_CONVERTER), 
-			null);
-		registerSubPane(new TemporalTypeComposite(buildTemporalConverterHolder(converterHolder), container, getWidgetFactory()));
-
-		// EclipseLink Converter
-		Button elConverterButton = addRadioButton(
-			container, 
-			EclipseLinkUiDetailsMessages.TypeSection_converted, 
-			buildConverterBooleanHolder(EclipseLinkConvert.ECLIPSE_LINK_CONVERTER), 
-			null);
-		((GridData) elConverterButton.getLayoutData()).horizontalSpan = 2;
-
-		Pane<EclipseLinkConvert> convertComposite = buildConvertComposite(buildEclipseLinkConverterHolder(converterHolder), container);
-		GridData gridData = (GridData) convertComposite.getControl().getLayoutData();
-		gridData.horizontalSpan = 2;
-		gridData.horizontalIndent = 20;
-		registerSubPane(convertComposite);
-	}
-	
-	protected Pane<EclipseLinkConvert> buildConvertComposite(PropertyValueModel<EclipseLinkConvert> convertHolder, Composite container) {
-		return new EclipseLinkConvertComposite(convertHolder, container, getWidgetFactory());
-	}
-
-
-	protected PropertyValueModel<EclipseLinkConvert> buildEclipseLinkConverterHolder(PropertyValueModel<Converter> converterHolder) {
-		return new TransformationPropertyValueModel<Converter, EclipseLinkConvert>(converterHolder) {
-			@Override
-			protected EclipseLinkConvert transform_(Converter converter) {
-				return (converter != null && converter.getType() == EclipseLinkConvert.ECLIPSE_LINK_CONVERTER) ? (EclipseLinkConvert) converter : null;
-			}
-		};
-	}
-
-	protected PropertyValueModel<Converter> buildConverterHolder() {
-		return new PropertyAspectAdapter<T, Converter>(getSubjectHolder(), ConvertibleMapping.CONVERTER_PROPERTY) {
-			@Override
-			protected Converter buildValue_() {
-				return this.subject.getConverter();
-			}
-		};
-	}
-	
-	protected PropertyValueModel<TemporalConverter> buildTemporalConverterHolder(PropertyValueModel<Converter> converterHolder) {
-		return new TransformationPropertyValueModel<Converter, TemporalConverter>(converterHolder) {
-			@Override
-			protected TemporalConverter transform_(Converter converter) {
-				return converter.getType() == Converter.TEMPORAL_CONVERTER ? (TemporalConverter) converter : null;
-			}
-		};
-	}
-	
-	protected PropertyValueModel<EclipseLinkMutable> buildMutableHolder() {
-		return new PropertyAspectAdapter<T, EclipseLinkMutable>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkMutable buildValue_() {
-				return ((EclipseLinkVersionMapping) this.subject).getMutable();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/AbstractJavaEclipseLinkEmbeddableComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/AbstractJavaEclipseLinkEmbeddableComposite.java
deleted file mode 100644
index b7a99d1..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/AbstractJavaEclipseLinkEmbeddableComposite.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaEmbeddable;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkConverterHolder;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkEmbeddable;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkEmbeddableAdvancedComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AbstractEmbeddableComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This pane does not have any widgets.
- *
- * @see Embeddable
- * @see JavaUiFactory - The factory creating this pane
- * @see EmbeddableUiProvider
- *
- * @version 2.3
- * @since 2.1
- */
-public abstract class AbstractJavaEclipseLinkEmbeddableComposite extends AbstractEmbeddableComposite<JavaEmbeddable>
-                                 implements JpaComposite
-{
-	/**
-	 * Creates a new <code>EmbeddableComposite</code>.
-	 *
-	 * @param subjectHolder The holder of this pane's subject
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	protected AbstractJavaEclipseLinkEmbeddableComposite(PropertyValueModel<? extends JavaEmbeddable> subjectHolder,
-	                           Composite parent,
-	                           WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		initializeConvertersCollapsibleSection(container);
-		initializeAdvancedCollapsibleSection(container);
-	}
-
-	protected void initializeConvertersCollapsibleSection(Composite container) {
-
-		container = addCollapsibleSection(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_converters
-		);
-		initializeConvertersSection(container, this.buildConverterHolderValueModel());
-	}
-
-	protected void initializeConvertersSection(Composite container, PropertyValueModel<JavaEclipseLinkConverterHolder> converterHolder) {
-		new JavaEclipseLinkConvertersComposite(this, converterHolder, container);
-	}
-
-	protected PropertyValueModel<JavaEclipseLinkConverterHolder> buildConverterHolderValueModel() {
-		return new PropertyAspectAdapter<JavaEmbeddable, JavaEclipseLinkConverterHolder>(getSubjectHolder()) {
-			@Override
-			protected JavaEclipseLinkConverterHolder buildValue_() {
-				return ((JavaEclipseLinkEmbeddable) this.subject).getConverterHolder();
-			}	
-		};
-	}
-	
-	protected void initializeAdvancedCollapsibleSection(Composite container) {
-		new EclipseLinkEmbeddableAdvancedComposite(this, container);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/AbstractJavaEclipseLinkEntityComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/AbstractJavaEclipseLinkEntityComposite.java
deleted file mode 100644
index 2b11579..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/AbstractJavaEclipseLinkEntityComposite.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaEntity;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkConverterHolder;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkEntity;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkEntityAdvancedComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AbstractEntityComposite;
-import org.eclipse.jpt.ui.internal.details.java.JavaInheritanceComposite;
-import org.eclipse.jpt.ui.internal.details.java.JavaSecondaryTablesComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * The pane used for an EclipseLink Java entity.
- *
- * @see JavaEclipseLinkEntity
- * @see EclipselinkJpaUiFactory - The factory creating this pane
- *
- * @version 2.3
- * @since 2.1
- */
-public abstract class AbstractJavaEclipseLinkEntityComposite<T extends JavaEntity>
-	extends AbstractEntityComposite<T>
-{
-	/**
-	 * Creates a new <code>EclipseLinkJavaEntityComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>JavaEntity</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	protected AbstractJavaEclipseLinkEntityComposite(
-			PropertyValueModel<? extends T> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.initializeEntityCollapsibleSection(container);
-		this.initializeCachingCollapsibleSectionPane(container);
-		this.initializeQueriesCollapsibleSection(container);
-		this.initializeInheritanceCollapsibleSection(container);
-		this.initializeAttributeOverridesCollapsibleSection(container);
-		this.initializeGeneratorsCollapsibleSection(container);
-		this.initializeConvertersCollapsibleSection(container);
-		this.initializeSecondaryTablesCollapsibleSection(container);
-		this.initializeAdvancedCollapsibleSection(container);
-	}
-	
-	protected void initializeCachingCollapsibleSectionPane(Composite container) {
-		container = addCollapsibleSection(
-				container,
-				EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_caching);
-		initializeCachingSection(container, buildCachingHolder());
-	}
-	
-	protected void initializeCachingSection(Composite container, PropertyValueModel<JavaEclipseLinkCaching> cachingHolder) {
-		new JavaEclipseLinkCachingComposite(this, cachingHolder, container);
-	}
-	
-	private PropertyAspectAdapter<JavaEntity, JavaEclipseLinkCaching> buildCachingHolder() {
-		return new PropertyAspectAdapter<JavaEntity, JavaEclipseLinkCaching>(getSubjectHolder()) {
-			@Override
-			protected JavaEclipseLinkCaching buildValue_() {
-				return ((JavaEclipseLinkEntity) this.subject).getCaching();
-			}
-		};
-	}
-	
-	protected void initializeConvertersCollapsibleSection(Composite container) {
-		container = addCollapsibleSection(
-				container,
-				EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_converters);
-		this.initializeConvertersSection(container, buildConverterHolderValueModel());
-	}
-	
-	protected void initializeConvertersSection(Composite container, PropertyValueModel<JavaEclipseLinkConverterHolder> converterHolder) {
-		new JavaEclipseLinkConvertersComposite(this, converterHolder, container);
-	}
-	
-	private PropertyValueModel<JavaEclipseLinkConverterHolder> buildConverterHolderValueModel() {
-		return new PropertyAspectAdapter<JavaEntity, JavaEclipseLinkConverterHolder>(getSubjectHolder()) {
-			@Override
-			protected JavaEclipseLinkConverterHolder buildValue_() {
-				return ((JavaEclipseLinkEntity) this.subject).getConverterHolder();
-			}	
-		};
-	}
-
-	@Override
-	protected void initializeSecondaryTablesSection(Composite container) {
-		new JavaSecondaryTablesComposite(this, container);
-	}
-
-	@Override
-	protected void initializeInheritanceSection(Composite container) {
-		new JavaInheritanceComposite(this, container);
-	}
-
-	protected void initializeAdvancedCollapsibleSection(Composite container) {
-		new EclipseLinkEntityAdvancedComposite(this, container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/AbstractJavaEclipseLinkMappedSuperclassComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/AbstractJavaEclipseLinkMappedSuperclassComposite.java
deleted file mode 100644
index 28c0584..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/AbstractJavaEclipseLinkMappedSuperclassComposite.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010, Form Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaMappedSuperclass;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkMappedSuperclass;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkConverterHolder;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkMappedSuperclass;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkMappedSuperclassAdvancedComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AbstractMappedSuperclassComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * The pane used for an EclipseLink Java Mapped Superclass.
- *
- * @see EclipseLinkMappedSuperclass
- * @see EclipselinkJpaUiFactory - The factory creating this pane
- *
- * @version 2.3
- * @since 2.1
- */
-public abstract class AbstractJavaEclipseLinkMappedSuperclassComposite
-	extends AbstractMappedSuperclassComposite<JavaMappedSuperclass>
-    implements JpaComposite
-{
-	/**
-	 * Creates a new <code>MappedSuperclassComposite</code>.
-	 *
-	 * @param subjectHolder The holder of this pane's subject
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	protected AbstractJavaEclipseLinkMappedSuperclassComposite(
-		PropertyValueModel<? extends JavaMappedSuperclass> subjectHolder,
-		Composite parent,
-		WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.initializeMappedSuperclassCollapsibleSection(container);		
-		this.initializeCachingCollapsibleSection(container);
-		this.initializeConvertersCollapsibleSection(container);
-		this.initializeAdvancedCollapsibleSection(container);
-	}
-
-	
-	protected void initializeCachingCollapsibleSection(Composite container) {
-		container = addCollapsibleSection(
-				container,
-				EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_caching);
-		this.initializeCachingSection(container, buildCachingHolder());
-	}
-	
-	protected void initializeCachingSection(Composite container, PropertyValueModel<JavaEclipseLinkCaching> cachingHolder) {
-		new JavaEclipseLinkCachingComposite(this, cachingHolder, container);
-	}
-	
-	private PropertyAspectAdapter<JavaMappedSuperclass, JavaEclipseLinkCaching> buildCachingHolder() {
-		return new PropertyAspectAdapter<JavaMappedSuperclass, JavaEclipseLinkCaching>(getSubjectHolder()) {
-			@Override
-			protected JavaEclipseLinkCaching buildValue_() {
-				return ((JavaEclipseLinkMappedSuperclass) this.subject).getCaching();
-			}
-		};
-	}
-	
-	protected void initializeConvertersCollapsibleSection(Composite container) {
-		container = addCollapsibleSection(
-				container,
-				EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_converters);
-		this.initializeConvertersSection(container, buildConverterHolderValueModel());
-	}
-	
-	private PropertyValueModel<JavaEclipseLinkConverterHolder> buildConverterHolderValueModel() {
-		return new PropertyAspectAdapter<JavaMappedSuperclass, JavaEclipseLinkConverterHolder>(getSubjectHolder()) {
-			@Override
-			protected JavaEclipseLinkConverterHolder buildValue_() {
-				return ((JavaEclipseLinkMappedSuperclass) this.subject).getConverterHolder();
-			}	
-		};
-	}
-
-	protected void initializeConvertersSection(Composite container, PropertyValueModel<JavaEclipseLinkConverterHolder> converterHolder) {
-		new JavaEclipseLinkConvertersComposite(this, converterHolder, container);
-	}
-
-	protected void initializeAdvancedCollapsibleSection(Composite container) {
-		new EclipseLinkMappedSuperclassAdvancedComposite(this, container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/DefaultJavaEclipseLinkOneToManyMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/DefaultJavaEclipseLinkOneToManyMappingUiDefinition.java
deleted file mode 100644
index 311fe7c..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/DefaultJavaEclipseLinkOneToManyMappingUiDefinition.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.MappingKeys;
-import org.eclipse.jpt.core.context.PersistentAttribute;
-import org.eclipse.jpt.core.context.java.JavaOneToManyMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.details.java.DefaultJavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaUiFactory;
-import org.eclipse.jpt.ui.internal.JpaMappingImageHelper;
-import org.eclipse.jpt.ui.internal.details.AbstractOneToManyMappingUiDefinition;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-
-public class DefaultJavaEclipseLinkOneToManyMappingUiDefinition
-	extends AbstractOneToManyMappingUiDefinition<PersistentAttribute, JavaOneToManyMapping>
-	implements DefaultJavaAttributeMappingUiDefinition<JavaOneToManyMapping>
-{
-	// singleton
-	private static final DefaultJavaEclipseLinkOneToManyMappingUiDefinition INSTANCE = 
-			new DefaultJavaEclipseLinkOneToManyMappingUiDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static DefaultJavaAttributeMappingUiDefinition<JavaOneToManyMapping> instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Ensure single instance.
-	 */
-	private DefaultJavaEclipseLinkOneToManyMappingUiDefinition() {
-		super();
-	}
-	
-	
-	@Override
-	public String getKey() {
-		return null;
-	}
-	
-	public String getDefaultKey() {
-		return MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	@Override
-	public String getLabel() {
-		return EclipseLinkUiDetailsMessages.DefaultEclipseLinkOneToManyMappingUiProvider_label;
-	}
-	
-	@Override
-	public String getLinkLabel() {
-		return EclipseLinkUiDetailsMessages.DefaultEclipseLinkOneToManyMappingUiProvider_linkLabel;
-	}
-	
-	@Override
-	public Image getImage() {
-		return JpaMappingImageHelper.imageForAttributeMapping(getDefaultKey());
-	}
-	
-	public JpaComposite buildAttributeMappingComposite(
-			JavaUiFactory factory,
-			PropertyValueModel<JavaOneToManyMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		return factory.createJavaOneToManyMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/DefaultJavaEclipseLinkOneToOneMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/DefaultJavaEclipseLinkOneToOneMappingUiDefinition.java
deleted file mode 100644
index da1ef7b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/DefaultJavaEclipseLinkOneToOneMappingUiDefinition.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.MappingKeys;
-import org.eclipse.jpt.core.context.PersistentAttribute;
-import org.eclipse.jpt.core.context.java.JavaOneToOneMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.details.java.DefaultJavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaUiFactory;
-import org.eclipse.jpt.ui.internal.JpaMappingImageHelper;
-import org.eclipse.jpt.ui.internal.details.AbstractOneToOneMappingUiDefinition;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-
-public class DefaultJavaEclipseLinkOneToOneMappingUiDefinition
-	extends AbstractOneToOneMappingUiDefinition<PersistentAttribute, JavaOneToOneMapping>
-	implements DefaultJavaAttributeMappingUiDefinition<JavaOneToOneMapping>
-{
-	// singleton
-	private static final DefaultJavaEclipseLinkOneToOneMappingUiDefinition INSTANCE = 
-			new DefaultJavaEclipseLinkOneToOneMappingUiDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static DefaultJavaAttributeMappingUiDefinition<JavaOneToOneMapping> instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Ensure single instance.
-	 */
-	private DefaultJavaEclipseLinkOneToOneMappingUiDefinition() {
-		super();
-	}
-	
-	
-	@Override
-	public String getKey() {
-		return null;
-	}
-	
-	public String getDefaultKey() {
-		return MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	@Override
-	public String getLabel() {
-		return EclipseLinkUiDetailsMessages.DefaultEclipseLinkOneToOneMappingUiProvider_label;
-	}
-	
-	@Override
-	public String getLinkLabel() {
-		return EclipseLinkUiDetailsMessages.DefaultEclipseLinkOneToOneMappingUiProvider_linkLabel;
-	}
-	
-	@Override
-	public Image getImage() {
-		return JpaMappingImageHelper.imageForAttributeMapping(getDefaultKey());
-	}
-	
-	public JpaComposite buildAttributeMappingComposite(
-			JavaUiFactory factory,
-			PropertyValueModel<JavaOneToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		return factory.createJavaOneToOneMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition.java
deleted file mode 100644
index 4458e4e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.context.PersistentAttribute;
-import org.eclipse.jpt.eclipselink.core.EclipseLinkMappingKeys;
-import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkVariableOneToOneMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkVariableOneToOneMappingComposite;
-import org.eclipse.jpt.ui.JptUiPlugin;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.details.java.DefaultJavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaUiFactory;
-import org.eclipse.jpt.ui.internal.JptUiIcons;
-import org.eclipse.jpt.ui.internal.details.AbstractMappingUiDefinition;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-
-public class DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition
-	extends AbstractMappingUiDefinition<PersistentAttribute, JavaEclipseLinkVariableOneToOneMapping>
-	implements DefaultJavaAttributeMappingUiDefinition<JavaEclipseLinkVariableOneToOneMapping>
-{
-	// singleton
-	private static final DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition INSTANCE = 
-		new DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition();
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static DefaultJavaAttributeMappingUiDefinition<JavaEclipseLinkVariableOneToOneMapping> instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Ensure single instance.
-	 */
-	private DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition() {
-		super();
-	}
-	
-	public String getKey() {
-		return null;
-	}
-	
-	public String getDefaultKey() {
-		return EclipseLinkMappingKeys.VARIABLE_ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY;
-	}	
-	
-	public Image getImage() {
-		return JptUiPlugin.getImage(JptUiIcons.JPA_CONTENT);
-	}
-	
-	public String getLabel() {
-		return EclipseLinkUiDetailsMessages.DefaultEclipseLinkVariableOneToOneMappingUiProvider_label;
-	}
-
-	public String getLinkLabel() {
-		return EclipseLinkUiDetailsMessages.DefaultEclipseLinkVariableOneToOneMappingUiProvider_linkLabel;
-	}
-	
-	public JpaComposite buildAttributeMappingComposite(
-			JavaUiFactory factory,
-			PropertyValueModel<JavaEclipseLinkVariableOneToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new EclipseLinkVariableOneToOneMappingComposite(subjectHolder, parent, widgetFactory);
-	}	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/EclipseLinkJavaResourceUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/EclipseLinkJavaResourceUiDefinition.java
deleted file mode 100644
index 509aaa5..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/EclipseLinkJavaResourceUiDefinition.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import java.util.List;
-import org.eclipse.jpt.core.context.AttributeMapping;
-import org.eclipse.jpt.core.context.TypeMapping;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.java.DefaultJavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaTypeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaUiFactory;
-import org.eclipse.jpt.ui.internal.details.java.AbstractJavaResourceUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.DefaultBasicMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.DefaultEmbeddedMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaBasicMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaEmbeddableUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaEmbeddedIdMappingUDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaEmbeddedMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaEntityUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaIdMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaManyToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaManyToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaMappedSuperclassUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaOneToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaOneToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaTransientMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaVersionMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.NullJavaAttributeMappingUiDefinition;
-
-public class EclipseLinkJavaResourceUiDefinition
-	extends AbstractJavaResourceUiDefinition
-{
-	// singleton
-	private static final ResourceUiDefinition INSTANCE = new EclipseLinkJavaResourceUiDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static ResourceUiDefinition instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * zero-argument constructor
-	 */
-	protected EclipseLinkJavaResourceUiDefinition() {
-		super();
-	}
-	
-	
-	@Override
-	protected JavaUiFactory buildJavaUiFactory() {
-		return new EclipseLinkJavaUiFactory();
-	}
-	
-	@Override
-	protected void addSpecifiedAttributeMappingUiDefinitionsTo(
-			List<JavaAttributeMappingUiDefinition<? extends AttributeMapping>> definitions) {
-		
-		definitions.add(JavaIdMappingUiDefinition.instance());
-		definitions.add(JavaEmbeddedIdMappingUDefinition.instance());
-		definitions.add(JavaBasicMappingUiDefinition.instance());
-		definitions.add(JavaVersionMappingUiDefinition.instance());
-		definitions.add(JavaManyToOneMappingUiDefinition.instance());
-		definitions.add(JavaOneToManyMappingUiDefinition.instance());
-		definitions.add(JavaOneToOneMappingUiDefinition.instance());
-		definitions.add(JavaManyToManyMappingUiDefinition.instance());
-		definitions.add(JavaEmbeddedMappingUiDefinition.instance());
-		definitions.add(JavaTransientMappingUiDefinition.instance());
-		definitions.add(JavaEclipseLinkBasicCollectionMappingUiDefinition.instance());
-		definitions.add(JavaEclipseLinkBasicMapMappingUiDefinition.instance());
-		definitions.add(JavaEclipseLinkVariableOneToOneMappingUiDefinition.instance());
-		definitions.add(JavaEclipseLinkTransformationMappingUiDefinition.instance());
-	}
-	
-	@Override
-	protected void addDefaultAttributeMappingUiDefinitionsTo(
-			List<DefaultJavaAttributeMappingUiDefinition<?>> definitions) {
-		
-		definitions.add(DefaultBasicMappingUiDefinition.instance());
-		definitions.add(DefaultEmbeddedMappingUiDefinition.instance());
-		definitions.add(NullJavaAttributeMappingUiDefinition.instance());
-		definitions.add(DefaultJavaEclipseLinkOneToOneMappingUiDefinition.instance());
-		definitions.add(DefaultJavaEclipseLinkOneToManyMappingUiDefinition.instance());
-		definitions.add(DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition.instance());
-	}
-	
-	@Override
-	protected void addSpecifiedTypeMappingUiDefinitionsTo(
-			List<JavaTypeMappingUiDefinition<? extends TypeMapping>> definitions) {
-		
-		definitions.add(JavaEntityUiDefinition.instance());
-		definitions.add(JavaMappedSuperclassUiDefinition.instance());
-		definitions.add(JavaEmbeddableUiDefinition.instance());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/EclipseLinkJavaUiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/EclipseLinkJavaUiFactory.java
deleted file mode 100644
index 3da7287..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/EclipseLinkJavaUiFactory.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaBasicMapping;
-import org.eclipse.jpt.core.context.java.JavaEmbeddable;
-import org.eclipse.jpt.core.context.java.JavaEntity;
-import org.eclipse.jpt.core.context.java.JavaIdMapping;
-import org.eclipse.jpt.core.context.java.JavaManyToManyMapping;
-import org.eclipse.jpt.core.context.java.JavaManyToOneMapping;
-import org.eclipse.jpt.core.context.java.JavaMappedSuperclass;
-import org.eclipse.jpt.core.context.java.JavaOneToManyMapping;
-import org.eclipse.jpt.core.context.java.JavaOneToOneMapping;
-import org.eclipse.jpt.core.context.java.JavaVersionMapping;
-import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkBasicCollectionMapping;
-import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkBasicMapMapping;
-import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkTransformationMapping;
-import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkVariableOneToOneMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkBasicCollectionMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkBasicMapMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkBasicMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkIdMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkManyToManyMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkManyToOneMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkOneToManyMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkOneToOneMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkTransformationMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkVariableOneToOneMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkVersionMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.java.BaseJavaUiFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLinkJavaUiFactory extends BaseJavaUiFactory
-{
-	public EclipseLinkJavaUiFactory() {
-		super();
-	}
-	
-	// **************** java type mapping composites ***************************
-	
-	@Override
-	public JpaComposite createJavaMappedSuperclassComposite(
-			PropertyValueModel<JavaMappedSuperclass> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkMappedSuperclassComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaEntityComposite(
-			PropertyValueModel<JavaEntity> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkEntityComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaEmbeddableComposite(
-			PropertyValueModel<JavaEmbeddable> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkEmbeddableComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	// **************** java attribute mapping composites **********************
-	
-	@Override
-	public JpaComposite createJavaIdMappingComposite(
-			PropertyValueModel<JavaIdMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new EclipseLinkIdMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaBasicMappingComposite(
-			PropertyValueModel<JavaBasicMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new EclipseLinkBasicMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaVersionMappingComposite(
-			PropertyValueModel<JavaVersionMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new EclipseLinkVersionMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaManyToOneMappingComposite(
-			PropertyValueModel<JavaManyToOneMapping> subjectHolder, 
-			Composite parent, 
-			WidgetFactory widgetFactory) {
-		return new EclipseLinkManyToOneMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaOneToManyMappingComposite(
-			PropertyValueModel<JavaOneToManyMapping> subjectHolder, 
-			Composite parent, 
-			WidgetFactory widgetFactory) {
-		return new EclipseLinkOneToManyMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaOneToOneMappingComposite(
-			PropertyValueModel<JavaOneToOneMapping> subjectHolder, 
-			Composite parent, 
-			WidgetFactory widgetFactory) {
-		return new EclipseLinkOneToOneMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaManyToManyMappingComposite(
-			PropertyValueModel<JavaManyToManyMapping> subjectHolder, 
-			Composite parent, 
-			WidgetFactory widgetFactory) {
-		return new EclipseLinkManyToManyMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	public JpaComposite createJavaEclipseLinkBasicMapMappingComposite(
-			PropertyValueModel<JavaEclipseLinkBasicMapMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new EclipseLinkBasicMapMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	public JpaComposite createJavaEclipseLinkBasicCollectionMappingComposite(
-			PropertyValueModel<JavaEclipseLinkBasicCollectionMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new EclipseLinkBasicCollectionMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	public JpaComposite createJavaEclipseLinkVariableOneToOneMappingComposite(
-			PropertyValueModel<JavaEclipseLinkVariableOneToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new EclipseLinkVariableOneToOneMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	public JpaComposite createJavaEclipseLinkTransformationMappingComposite(
-			PropertyValueModel<JavaEclipseLinkTransformationMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new EclipseLinkTransformationMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkBasicCollectionMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkBasicCollectionMappingUiDefinition.java
deleted file mode 100644
index 10f02fa..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkBasicCollectionMappingUiDefinition.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.context.PersistentAttribute;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkBasicCollectionMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.AbstractEclipseLinkBasicCollectionMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkBasicCollectionMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.details.java.JavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaUiFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class JavaEclipseLinkBasicCollectionMappingUiDefinition
-	extends AbstractEclipseLinkBasicCollectionMappingUiDefinition<PersistentAttribute, EclipseLinkBasicCollectionMapping>
-	implements JavaAttributeMappingUiDefinition<EclipseLinkBasicCollectionMapping>
-{
-	// singleton
-	private static final JavaEclipseLinkBasicCollectionMappingUiDefinition INSTANCE = 
-			new JavaEclipseLinkBasicCollectionMappingUiDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static JavaAttributeMappingUiDefinition<EclipseLinkBasicCollectionMapping> instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Ensure single instance.
-	 */
-	private JavaEclipseLinkBasicCollectionMappingUiDefinition() {
-		super();
-	}
-	
-	
-	public JpaComposite buildAttributeMappingComposite(
-			JavaUiFactory factory,
-			PropertyValueModel<EclipseLinkBasicCollectionMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		return new EclipseLinkBasicCollectionMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkBasicMapMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkBasicMapMappingUiDefinition.java
deleted file mode 100644
index 0115126..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkBasicMapMappingUiDefinition.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.context.PersistentAttribute;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkBasicMapMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.AbstractEclipseLinkBasicMapMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkBasicMapMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.details.java.JavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaUiFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class JavaEclipseLinkBasicMapMappingUiDefinition
-	extends AbstractEclipseLinkBasicMapMappingUiDefinition<PersistentAttribute, EclipseLinkBasicMapMapping>
-	implements JavaAttributeMappingUiDefinition<EclipseLinkBasicMapMapping>
-{
-	// singleton
-	private static final JavaEclipseLinkBasicMapMappingUiDefinition INSTANCE = 
-			new JavaEclipseLinkBasicMapMappingUiDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static JavaAttributeMappingUiDefinition<EclipseLinkBasicMapMapping> instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Ensure single instance.
-	 */
-	private JavaEclipseLinkBasicMapMappingUiDefinition() {
-		super();
-	}
-	
-	
-	public JpaComposite buildAttributeMappingComposite(
-			JavaUiFactory factory,
-			PropertyValueModel<EclipseLinkBasicMapMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		return new EclipseLinkBasicMapMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkCachingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkCachingComposite.java
deleted file mode 100644
index c2b3065..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkCachingComposite.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkCachingComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This pane shows the caching options.
- * <p>
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | x Shared                                                                  |
- * |    CacheTypeComposite                                                     |
- * |    CacheSizeComposite                                                     |
- * |    > Advanced   	                                                       |
- * |    	ExpiryComposite                                                    |
- * |    	AlwaysRefreshComposite                                             |
- * |   		RefreshOnlyIfNewerComposite                                        |
- * |    	DisableHitsComposite                                               |
- * |    	CacheCoordinationComposite                                         |
- * | ExistenceTypeComposite                                                    |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see Entity
- * @see EclipseLinkCaching2_0
- * @see JavaEclipseLinkEntityComposite - The parent container
- * @see EclipseLinkCacheTypeComposite
- * @see EclipseLinkCacheSizeComposite
- * @see EclipseLinkAlwaysRefreshComposite
- * @see EclipseLinkRefreshOnlyIfNewerComposite
- * @see EclipseLinkDisableHitsComposite
- *
- * @version 2.1
- * @since 2.1
- */
-public class JavaEclipseLinkCachingComposite extends EclipseLinkCachingComposite<JavaEclipseLinkCaching>
-{
-
-	public JavaEclipseLinkCachingComposite(Pane<?> parentPane,
-        PropertyValueModel<JavaEclipseLinkCaching> subjectHolder,
-        Composite parent) {
-
-		super(parentPane, subjectHolder, parent);
-	}
-
-	@Override
-	protected void initializeExistenceCheckingComposite(Composite parent) {
-		new JavaEclipseLinkExistenceCheckingComposite(this, parent);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkConvertersComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkConvertersComposite.java
deleted file mode 100644
index fb866e3..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkConvertersComposite.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCustomConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkObjectTypeConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkStructConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkTypeConverter;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkConverterHolder;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkCustomConverterComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkObjectTypeConverterComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkStructConverterComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkTypeConverterComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | X CustomConverter                                                         |
- * |                                                                           |
- * |   ----------------------------------------------------------------------- |
- * |   |                                                                     | |
- * |   | CustomConverterComposite                                            | |
- * |   |                                                                     | |
- * |   ----------------------------------------------------------------------- |
- * |                                                                           |
- * | X Type Converter                                                          |
- * |                                                                           |
- * |   ----------------------------------------------------------------------- |
- * |   |                                                                     | |
- * |   | TypeConverterComposite                                              | |
- * |   |                                                                     | |
- * |   ----------------------------------------------------------------------- |
- * |                                                                           |
- * | X Oject Type Converter                                                    |
- * |                                                                           |
- * |   ----------------------------------------------------------------------- |
- * |   |                                                                     | |
- * |   | ObjectTypeConverterComposite                                        | |
- * |   |                                                                     | |
- * |   ----------------------------------------------------------------------- |
- * |                                                                           |
- * | X Struct Converter                                                        |
- * |                                                                           |
- * |   ----------------------------------------------------------------------- |
- * |   |                                                                     | |
- * |   | StructConverterComposite                                            | |
- * |   |                                                                     | |
- * |   ----------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- *
- * @version 2.1
- * @since 2.1
- */
-public class JavaEclipseLinkConvertersComposite extends Pane<JavaEclipseLinkConverterHolder>
-{
-
-	/**
-	 * Creates a new <code>ConversionComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public JavaEclipseLinkConvertersComposite(Pane<?> parentPane,
-								PropertyValueModel<? extends JavaEclipseLinkConverterHolder> subjectHolder,
-								Composite parent) {
-
-		super(parentPane, subjectHolder, parent, false);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		initializeConverterPane(container);
-	}
-	
-	private void initializeConverterPane(Composite container) {
-		// Custom Converter check box
-		Button customConverterCheckBox = addCheckBox(
-			addSubPane(container, 5),
-			EclipseLinkUiDetailsMessages.EclipseLinkConvertersComposite_customConverter,
-			buildCustomConverterBooleanHolder(),
-			null
-		);
-
-		// Custom Converter pane
-		EclipseLinkCustomConverterComposite customConverterComposite = new EclipseLinkCustomConverterComposite(
-			buildCustomConverterHolder(),
-			addSubPane(container, 0, customConverterCheckBox.getBorderWidth() + 16),
-			getWidgetFactory()
-		);
-		registerSubPane(customConverterComposite);
-	
-		
-		// Type Converter check box
-		Button typeConverterCheckBox = addCheckBox(
-			addSubPane(container, 5),
-			EclipseLinkUiDetailsMessages.EclipseLinkConvertersComposite_typeConverter,
-			buildTypeConverterBooleanHolder(),
-			null
-		);
-
-		// Type Converter pane
-		EclipseLinkTypeConverterComposite typeConverterComposite = new EclipseLinkTypeConverterComposite(
-			buildTypeConverterHolder(),
-			addSubPane(container, 0, typeConverterCheckBox.getBorderWidth() + 16),
-			getWidgetFactory()
-		);
-		registerSubPane(typeConverterComposite);
-		
-		// Object Type Converter check box
-		Button objectTypeConverterCheckBox = addCheckBox(
-			addSubPane(container, 5),
-			EclipseLinkUiDetailsMessages.EclipseLinkConvertersComposite_objectTypeConverter,
-			buildObjectTypeConverterBooleanHolder(),
-			null
-		);
-
-		// Object Type Converter pane
-		EclipseLinkObjectTypeConverterComposite objectTypeConverterComposite = new EclipseLinkObjectTypeConverterComposite(
-			buildObjectTypeConverterHolder(),
-			addSubPane(container, 0, objectTypeConverterCheckBox.getBorderWidth() + 16),
-			getWidgetFactory()
-		);
-		registerSubPane(objectTypeConverterComposite);
-		
-		// Struct Converter check box
-		Button structConverterCheckBox = addCheckBox(
-			addSubPane(container, 5),
-			EclipseLinkUiDetailsMessages.EclipseLinkConvertersComposite_structConverter,
-			buildStructConverterBooleanHolder(),
-			null
-		);
-
-		// Struct Converter pane
-		EclipseLinkStructConverterComposite structConverterComposite = new EclipseLinkStructConverterComposite(
-			buildStructConverterHolder(),
-			addSubPane(container, 0, structConverterCheckBox.getBorderWidth() + 16),
-			getWidgetFactory()
-		);
-		registerSubPane(structConverterComposite);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildCustomConverterBooleanHolder() {
-		return new PropertyAspectAdapter<JavaEclipseLinkConverterHolder, Boolean>(getSubjectHolder(), JavaEclipseLinkConverterHolder.CUSTOM_CONVERTER_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.getCustomConverter() != null);
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				if (value.booleanValue() && (this.subject.getCustomConverter() == null)) {
-					this.subject.addCustomConverter();
-				}
-				else if (!value.booleanValue() && (this.subject.getCustomConverter() != null)) {
-					this.subject.removeCustomConverter();
-				}
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkCustomConverter> buildCustomConverterHolder() {
-		return new PropertyAspectAdapter<JavaEclipseLinkConverterHolder, EclipseLinkCustomConverter>(getSubjectHolder(), JavaEclipseLinkConverterHolder.CUSTOM_CONVERTER_PROPERTY) {
-			@Override
-			protected EclipseLinkCustomConverter buildValue_() {
-				return this.subject.getCustomConverter();
-			}
-		};
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildTypeConverterBooleanHolder() {
-		return new PropertyAspectAdapter<JavaEclipseLinkConverterHolder, Boolean>(getSubjectHolder(), JavaEclipseLinkConverterHolder.TYPE_CONVERTER_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.getTypeConverter() != null);
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				if (value.booleanValue() && (this.subject.getTypeConverter() == null)) {
-					this.subject.addTypeConverter();
-				}
-				else if (!value.booleanValue() && (this.subject.getTypeConverter() != null)) {
-					this.subject.removeTypeConverter();
-				}
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkTypeConverter> buildTypeConverterHolder() {
-		return new PropertyAspectAdapter<JavaEclipseLinkConverterHolder, EclipseLinkTypeConverter>(getSubjectHolder(), JavaEclipseLinkConverterHolder.TYPE_CONVERTER_PROPERTY) {
-			@Override
-			protected EclipseLinkTypeConverter buildValue_() {
-				return this.subject.getTypeConverter();
-			}
-		};
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildObjectTypeConverterBooleanHolder() {
-		return new PropertyAspectAdapter<JavaEclipseLinkConverterHolder, Boolean>(getSubjectHolder(), JavaEclipseLinkConverterHolder.OBJECT_TYPE_CONVERTER_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.getObjectTypeConverter() != null);
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				if (value.booleanValue() && (this.subject.getObjectTypeConverter() == null)) {
-					this.subject.addObjectTypeConverter();
-				}
-				else if (!value.booleanValue() && (this.subject.getObjectTypeConverter() != null)) {
-					this.subject.removeObjectTypeConverter();
-				}
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkObjectTypeConverter> buildObjectTypeConverterHolder() {
-		return new PropertyAspectAdapter<JavaEclipseLinkConverterHolder, EclipseLinkObjectTypeConverter>(getSubjectHolder(), JavaEclipseLinkConverterHolder.OBJECT_TYPE_CONVERTER_PROPERTY) {
-			@Override
-			protected EclipseLinkObjectTypeConverter buildValue_() {
-				return this.subject.getObjectTypeConverter();
-			}
-		};
-	}
-	
-	
-	private WritablePropertyValueModel<Boolean> buildStructConverterBooleanHolder() {
-		return new PropertyAspectAdapter<JavaEclipseLinkConverterHolder, Boolean>(getSubjectHolder(), JavaEclipseLinkConverterHolder.STRUCT_CONVERTER_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.getStructConverter() != null);
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				if (value.booleanValue() && (this.subject.getStructConverter() == null)) {
-					this.subject.addStructConverter();
-				}
-				else if (!value.booleanValue() && (this.subject.getStructConverter() != null)) {
-					this.subject.removeStructConverter();
-				}
-			}
-		};
-	}
-	
-	private PropertyValueModel<EclipseLinkStructConverter> buildStructConverterHolder() {
-		return new PropertyAspectAdapter<JavaEclipseLinkConverterHolder, EclipseLinkStructConverter>(getSubjectHolder(), JavaEclipseLinkConverterHolder.STRUCT_CONVERTER_PROPERTY) {
-			@Override
-			protected EclipseLinkStructConverter buildValue_() {
-				return this.subject.getStructConverter();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkEmbeddableComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkEmbeddableComposite.java
deleted file mode 100644
index c86d3b4..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkEmbeddableComposite.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaEmbeddable;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This pane does not have any widgets.
- *
- * @see Embeddable
- * @see JavaUiFactory - The factory creating this pane
- * @see EmbeddableUiProvider
- *
- * @version 2.3
- * @since 2.1
- */
-public class JavaEclipseLinkEmbeddableComposite extends AbstractJavaEclipseLinkEmbeddableComposite
-{
-	/**
-	 * Creates a new <code>EmbeddableComposite</code>.
-	 *
-	 * @param subjectHolder The holder of this pane's subject
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public JavaEclipseLinkEmbeddableComposite(PropertyValueModel<? extends JavaEmbeddable> subjectHolder,
-	                           Composite parent,
-	                           WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkEntityComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkEntityComposite.java
deleted file mode 100644
index ba1176e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkEntityComposite.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaEntity;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkEntity;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * The pane used for an EclipseLink Java entity.
- *
- * @see JavaEclipseLinkEntity
- * @see EclipselinkJpaUiFactory - The factory creating this pane
- *
- * @version 2.1
- * @since 2.1
- */
-public class JavaEclipseLinkEntityComposite
-	extends AbstractJavaEclipseLinkEntityComposite<JavaEntity>
-{
-	/**
-	 * Creates a new <code>EclipseLinkJavaEntityComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>JavaEntity</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public JavaEclipseLinkEntityComposite(
-			PropertyValueModel<? extends JavaEntity> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkExistenceCheckingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkExistenceCheckingComposite.java
deleted file mode 100644
index 505b24f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkExistenceCheckingComposite.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkExistenceType;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here is the layout of this pane:
- * <pre>
- * -------------------------------------------------------------------------
- * |       			  		---------------------------------------------- |
- * | x Existence Checking:  |                                          |v| |
- * |       					---------------------------------------------- |
- * -------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkCaching
- * @see CachingComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class JavaEclipseLinkExistenceCheckingComposite extends Pane<JavaEclipseLinkCaching> {
-
-	/**
-	 * Creates a new <code>ExistenceCheckingComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public JavaEclipseLinkExistenceCheckingComposite(Pane<? extends JavaEclipseLinkCaching> parentPane,
-	                          Composite parent) {
-
-		super(parentPane, parent, false);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		addLabeledComposite( 
-            container, 
-            addCheckBox( 
-                 container, 
-                 EclipseLinkUiDetailsMessages.EclipseLinkExistenceCheckingComposite_label, 
-                 buildExistenceCheckingHolder(), 
-                 null 
-            ), 
-            addExistenceCheckingTypeCombo(container).getControl(), 
-            null 
-       );
-	}
-
-	private EnumFormComboViewer<EclipseLinkCaching, EclipseLinkExistenceType> addExistenceCheckingTypeCombo(Composite container) {
-
-		return new EnumFormComboViewer<EclipseLinkCaching, EclipseLinkExistenceType>(this, container) {
-
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(EclipseLinkCaching.DEFAULT_EXISTENCE_TYPE_PROPERTY);
-				propertyNames.add(EclipseLinkCaching.SPECIFIED_EXISTENCE_TYPE_PROPERTY);
-			}
-
-			@Override
-			protected EclipseLinkExistenceType[] getChoices() {
-				return EclipseLinkExistenceType.values();
-			}
-
-			@Override
-			protected EclipseLinkExistenceType getDefaultValue() {
-				return getSubject().getDefaultExistenceType();
-			}
-
-			@Override
-			protected String displayString(EclipseLinkExistenceType value) {
-				return buildDisplayString(
-					EclipseLinkUiDetailsMessages.class,
-					JavaEclipseLinkExistenceCheckingComposite.this,
-					value
-				);
-			}
-
-			@Override
-			protected EclipseLinkExistenceType getValue() {
-				return getSubject().getSpecifiedExistenceType();
-			}
-
-			@Override
-			protected void setValue(EclipseLinkExistenceType value) {
-				getSubject().setSpecifiedExistenceType(value);
-			}
-			
-			@Override
-			protected boolean sortChoices() {
-				return false;
-			}
-		};
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildExistenceCheckingHolder() {
-		return new PropertyAspectAdapter<JavaEclipseLinkCaching, Boolean>(getSubjectHolder(), JavaEclipseLinkCaching.EXISTENCE_CHECKING_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.hasExistenceChecking());
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setExistenceChecking(value.booleanValue());
-			}
-		};
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkMappedSuperclassComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkMappedSuperclassComposite.java
deleted file mode 100644
index 6666f3a..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkMappedSuperclassComposite.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaMappedSuperclass;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkMappedSuperclass;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * The pane used for an EclipseLink Java Mapped Superclass.
- *
- * @see EclipseLinkMappedSuperclass
- * @see EclipselinkJpaUiFactory - The factory creating this pane
- *
- * @version 2.1
- * @since 2.1
- */
-public class JavaEclipseLinkMappedSuperclassComposite
-	extends AbstractJavaEclipseLinkMappedSuperclassComposite
-{
-	/**
-	 * Creates a new <code>MappedSuperclassComposite</code>.
-	 *
-	 * @param subjectHolder The holder of this pane's subject
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public JavaEclipseLinkMappedSuperclassComposite(
-			PropertyValueModel<? extends JavaMappedSuperclass> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkTransformationMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkTransformationMappingUiDefinition.java
deleted file mode 100644
index 9eecc40..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkTransformationMappingUiDefinition.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.context.PersistentAttribute;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkTransformationMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.AbstractEclipseLinkTransformationMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkTransformationMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.details.java.JavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaUiFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class JavaEclipseLinkTransformationMappingUiDefinition
-	extends AbstractEclipseLinkTransformationMappingUiDefinition<PersistentAttribute, EclipseLinkTransformationMapping>
-	implements JavaAttributeMappingUiDefinition<EclipseLinkTransformationMapping>
-{
-	// singleton
-	private static final JavaEclipseLinkTransformationMappingUiDefinition INSTANCE = 
-			new JavaEclipseLinkTransformationMappingUiDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static JavaAttributeMappingUiDefinition<EclipseLinkTransformationMapping> instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Ensure single instance.
-	 */
-	private JavaEclipseLinkTransformationMappingUiDefinition() {
-		super();
-	}
-	
-	
-	public JpaComposite buildAttributeMappingComposite(
-			JavaUiFactory factory,
-			PropertyValueModel<EclipseLinkTransformationMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		return new EclipseLinkTransformationMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkVariableOneToOneMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkVariableOneToOneMappingUiDefinition.java
deleted file mode 100644
index fd1e7e7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/java/JavaEclipseLinkVariableOneToOneMappingUiDefinition.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.java;
-
-import org.eclipse.jpt.core.context.PersistentAttribute;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkVariableOneToOneMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.AbstractEclipseLinkVariableOneToOneMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkVariableOneToOneMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.details.java.JavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaUiFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class JavaEclipseLinkVariableOneToOneMappingUiDefinition
-	extends AbstractEclipseLinkVariableOneToOneMappingUiDefinition<PersistentAttribute, EclipseLinkVariableOneToOneMapping>
-	implements JavaAttributeMappingUiDefinition<EclipseLinkVariableOneToOneMapping>
-{
-	// singleton
-	private static final JavaEclipseLinkVariableOneToOneMappingUiDefinition INSTANCE = 
-			new JavaEclipseLinkVariableOneToOneMappingUiDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static JavaAttributeMappingUiDefinition<EclipseLinkVariableOneToOneMapping> instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Ensure single instance.
-	 */
-	private JavaEclipseLinkVariableOneToOneMappingUiDefinition() {
-		super();
-	}
-	
-	
-	public JpaComposite buildAttributeMappingComposite(
-			JavaUiFactory factory,
-			PropertyValueModel<EclipseLinkVariableOneToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		return new EclipseLinkVariableOneToOneMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/AbstractEclipseLinkEntityMappingsDetailsPage.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/AbstractEclipseLinkEntityMappingsDetailsPage.java
deleted file mode 100644
index 00651ce..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/AbstractEclipseLinkEntityMappingsDetailsPage.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.orm.EntityMappings;
-import org.eclipse.jpt.eclipselink.core.context.orm.EclipseLinkConverterHolder;
-import org.eclipse.jpt.eclipselink.core.context.orm.EclipseLinkEntityMappings;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.db.CatalogCombo;
-import org.eclipse.jpt.ui.internal.details.db.SchemaCombo;
-import org.eclipse.jpt.ui.internal.details.orm.AbstractEntityMappingsDetailsPage;
-import org.eclipse.jpt.ui.internal.details.orm.EntityMappingsGeneratorsComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPackageChooser;
-import org.eclipse.jpt.ui.internal.details.orm.OrmQueriesComposite;
-import org.eclipse.jpt.ui.internal.details.orm.PersistenceUnitMetadataComposite;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | XmlPackageChooser                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * |              ------------------------------------------------------------ |
- * | Schema:      | SchemaCombo                                              | |
- * |              ------------------------------------------------------------ |
- * |              ------------------------------------------------------------ |
- * | Catalog:     | CatalogCombo                                             | |
- * |              ------------------------------------------------------------ |
- * |              ------------------------------------------------------------ |
- * | Access Type: |                                                        |v| |
- * |              ------------------------------------------------------------ |
- * |                                                                           |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | PersistenceUnitMetadataComposite                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OrmGeneratorsComposite                                                | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OrmQueriesComposite                                                   | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | ConvertersComposite                                                   | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see EntityMappings
- * @see AbstractEclipseLinkEntityMappingsDetailsPage - The parent container
- * @see CatalogCombo
- * @see EnumFormComboViewer
- * @see EntityMappingsGeneratorsComposite
- * @see OrmPackageChooser
- * @see OrmQueriesComposite
- * @see PersistenceUnitMetadataComposite
- * @see SchemaCombo
- *
- * @version 2.3
- * @since 2.1
- */
-public abstract class AbstractEclipseLinkEntityMappingsDetailsPage extends AbstractEntityMappingsDetailsPage
-{
-	/**
-	 * Creates a new <code>EclipseLinkEntityMappingsDetailsPage</code>.
-	 *
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	protected AbstractEclipseLinkEntityMappingsDetailsPage(Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.initializeEntityMappingsCollapsibleSection(container);
-		this.initializePersistenceUnitMetadataCollapsibleSection(container);
-		this.initializeGeneratorsCollapsibleSection(container);
-		this.initializeQueriesCollapsibleSection(container);
-		this.initializeConvertersCollapsibleSection(container);
-	}
-
-	protected void initializeConvertersCollapsibleSection(Composite container) {
-		container = addCollapsibleSection(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_converters
-		);
-
-		this.initializeConvertersSection(container);
-	}
-
-	protected void initializeConvertersSection(Composite container) {
-		new OrmEclipseLinkConvertersComposite(
-			this,
-			this.buildConverterHolder(),
-			container
-		);
-	}
-	
-	private PropertyValueModel<EclipseLinkConverterHolder> buildConverterHolder() {
-		return new PropertyAspectAdapter<EntityMappings, EclipseLinkConverterHolder>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkConverterHolder buildValue_() {
-				return ((EclipseLinkEntityMappings) this.subject).getConverterHolder();
-			}
-		};
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/AbstractOrmEclipseLinkEntityComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/AbstractOrmEclipseLinkEntityComposite.java
deleted file mode 100644
index 7e0d4d2..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/AbstractOrmEclipseLinkEntityComposite.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2008, 2010 Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmEntity;
-import org.eclipse.jpt.eclipselink.core.context.orm.EclipseLinkConverterHolder;
-import org.eclipse.jpt.eclipselink.core.context.orm.OrmEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.core.context.orm.OrmEclipseLinkEntity;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkEntityAdvancedComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.orm.AbstractOrmEntityComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public abstract class AbstractOrmEclipseLinkEntityComposite extends AbstractOrmEntityComposite
-{
-	protected AbstractOrmEclipseLinkEntityComposite(
-			PropertyValueModel<? extends OrmEntity> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.initializeEntityCollapsibleSection(container);
-		this.initializeCachingCollapsibleSectionPane(container);
-		this.initializeQueriesCollapsibleSection(container);
-		this.initializeInheritanceCollapsibleSection(container);
-		this.initializeAttributeOverridesCollapsibleSection(container);
-		this.initializeGeneratorsCollapsibleSection(container);
-		this.initializeConvertersCollapsibleSection(container);
-		this.initializeSecondaryTablesCollapsibleSection(container);
-		this.initializeAdvancedCollapsibleSection(container);
-	}
-	
-	protected void initializeCachingCollapsibleSectionPane(Composite container) {
-		container = addCollapsibleSection(
-				container,
-				EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_caching);
-		initializeCachingSection(container, buildCachingHolder());
-	}
-	
-	protected void initializeCachingSection(Composite container, PropertyValueModel<OrmEclipseLinkCaching> cachingHolder) {
-		new OrmEclipseLinkCachingComposite(this, cachingHolder, container);
-	}
-
-	
-	private PropertyAspectAdapter<OrmEntity, OrmEclipseLinkCaching> buildCachingHolder() {
-		return new PropertyAspectAdapter<OrmEntity, OrmEclipseLinkCaching>(getSubjectHolder()) {
-			@Override
-			protected OrmEclipseLinkCaching buildValue_() {
-				return ((OrmEclipseLinkEntity) this.subject).getCaching();
-			}
-		};
-	}
-	
-	protected void initializeConvertersCollapsibleSection(Composite container) {
-		container = addCollapsibleSection(
-				container,
-				EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_converters);
-		this.initializeConvertersSection(container, buildConverterHolder());
-	}
-	
-	protected void initializeConvertersSection(Composite container, PropertyValueModel<EclipseLinkConverterHolder> converterHolder) {
-		new OrmEclipseLinkConvertersComposite(this, converterHolder, container);
-	}
-	
-	private PropertyValueModel<EclipseLinkConverterHolder> buildConverterHolder() {
-		return new PropertyAspectAdapter<OrmEntity, EclipseLinkConverterHolder>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkConverterHolder buildValue_() {
-				return ((OrmEclipseLinkEntity) this.subject).getConverterHolder();
-			}
-		};
-	}
-	
-	protected void initializeAdvancedCollapsibleSection(Composite container) {
-		new EclipseLinkEntityAdvancedComposite(this, container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/AbstractOrmEclipseLinkMappedSuperclassComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/AbstractOrmEclipseLinkMappedSuperclassComposite.java
deleted file mode 100644
index 4b823b0..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/AbstractOrmEclipseLinkMappedSuperclassComposite.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.eclipselink.core.context.orm.EclipseLinkConverterHolder;
-import org.eclipse.jpt.eclipselink.core.context.orm.OrmEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.core.context.orm.OrmEclipseLinkMappedSuperclass;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkMappedSuperclassAdvancedComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AbstractMappedSuperclassComposite;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.IdClassComposite;
-import org.eclipse.jpt.ui.internal.details.orm.MetadataCompleteComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmJavaClassChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public abstract class AbstractOrmEclipseLinkMappedSuperclassComposite<T extends OrmEclipseLinkMappedSuperclass> 
-	extends AbstractMappedSuperclassComposite<T> 
-	implements JpaComposite
-{
-	protected AbstractOrmEclipseLinkMappedSuperclassComposite(
-			PropertyValueModel<? extends T> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.initializeMappedSuperclassCollapsibleSection(container);
-		this.initializeCachingCollapsibleSection(container);
-		this.initializeConvertersCollapsibleSection(container);
-		this.initializeAdvancedCollapsibleSection(container);
-	}
-	
-	@Override
-	protected void initializeMappedSuperclassSection(Composite container) {
-		new OrmJavaClassChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolder(), container);
-		new IdClassComposite(this, buildIdClassReferenceHolder(), container);
-		new MetadataCompleteComposite(this, getSubjectHolder(), container);
-	}
-
-	protected void initializeCachingCollapsibleSection(Composite container) {
-		container = addCollapsibleSection(
-				container,
-				EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_caching);
-		this.initializeCachingSection(container, buildCachingHolder());
-	}
-	
-	protected void initializeCachingSection(Composite container, PropertyValueModel<OrmEclipseLinkCaching> cachingHolder) {
-		new OrmEclipseLinkCachingComposite(this, cachingHolder, container);
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolder() {
-		return new PropertyAspectAdapter<T, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentType();
-			}
-		};
-	}
-	
-	private PropertyAspectAdapter<T, OrmEclipseLinkCaching> buildCachingHolder() {
-		return new PropertyAspectAdapter<T, OrmEclipseLinkCaching>(getSubjectHolder()) {
-			@Override
-			protected OrmEclipseLinkCaching buildValue_() {
-				return this.subject.getCaching();
-			}
-		};
-	}
-	
-	protected void initializeConvertersCollapsibleSection(Composite container) {
-		container = addCollapsibleSection(
-				container,
-				EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_converters);
-		this.initializeConvertersSection(container, buildConverterHolder());
-	}
-	
-	protected void initializeConvertersSection(Composite container, PropertyValueModel<EclipseLinkConverterHolder> converterHolder) {
-		new OrmEclipseLinkConvertersComposite(this, converterHolder, container);
-	}
-	
-	private PropertyValueModel<EclipseLinkConverterHolder> buildConverterHolder() {
-		return new PropertyAspectAdapter<T, EclipseLinkConverterHolder>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkConverterHolder buildValue_() {
-				return this.subject.getConverterHolder();
-			}
-		};
-	}
-	
-	protected void initializeAdvancedCollapsibleSection(Composite container) {
-		new EclipseLinkMappedSuperclassAdvancedComposite(this, container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/BaseEclipseLinkOrmXmlUiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/BaseEclipseLinkOrmXmlUiFactory.java
deleted file mode 100644
index bb8b346..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/BaseEclipseLinkOrmXmlUiFactory.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmBasicMapping;
-import org.eclipse.jpt.core.context.orm.OrmEmbeddable;
-import org.eclipse.jpt.core.context.orm.OrmEntity;
-import org.eclipse.jpt.core.context.orm.OrmIdMapping;
-import org.eclipse.jpt.core.context.orm.OrmManyToManyMapping;
-import org.eclipse.jpt.core.context.orm.OrmManyToOneMapping;
-import org.eclipse.jpt.core.context.orm.OrmMappedSuperclass;
-import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping;
-import org.eclipse.jpt.core.context.orm.OrmOneToOneMapping;
-import org.eclipse.jpt.core.context.orm.OrmTransientMapping;
-import org.eclipse.jpt.core.context.orm.OrmVersionMapping;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.TransientMappingComposite;
-import org.eclipse.jpt.ui.internal.details.orm.BaseOrmXmlUiFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public abstract class BaseEclipseLinkOrmXmlUiFactory extends BaseOrmXmlUiFactory
-{
-	// **************** orm type mapping composites ****************************
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public JpaComposite createOrmMappedSuperclassComposite(
-			PropertyValueModel<OrmMappedSuperclass> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkMappedSuperclassComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmEntityComposite(
-			PropertyValueModel<OrmEntity> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkEntityComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public JpaComposite createOrmEmbeddableComposite(
-			PropertyValueModel<OrmEmbeddable> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkEmbeddableComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	// **************** orm attribute mapping composites ***********************
-	
-	@Override
-	public JpaComposite createOrmIdMappingComposite(
-			PropertyValueModel<OrmIdMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkIdMappingComposite(subjectHolder, parent, widgetFactory);
-	}	
-	
-	@Override
-	public JpaComposite createOrmBasicMappingComposite(
-			PropertyValueModel<OrmBasicMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkBasicMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmVersionMappingComposite(
-			PropertyValueModel<OrmVersionMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkVersionMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmManyToOneMappingComposite(
-			PropertyValueModel<OrmManyToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkManyToOneMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmOneToManyMappingComposite(
-			PropertyValueModel<OrmOneToManyMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkOneToManyMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmOneToOneMappingComposite(
-			PropertyValueModel<OrmOneToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkOneToOneMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmManyToManyMappingComposite(
-			PropertyValueModel<OrmManyToManyMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkManyToManyMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmTransientMappingComposite(
-			PropertyValueModel<OrmTransientMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new TransientMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkConverterDialog.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkConverterDialog.java
deleted file mode 100644
index 9e1f913..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkConverterDialog.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConverter;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.DialogPane;
-import org.eclipse.jpt.ui.internal.widgets.ValidatingDialog;
-import org.eclipse.jpt.utility.internal.StringConverter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.StaticListValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-/**
- * Clients can use this dialog to prompt the user for SecondaryTable settings.
- * Use the following once the dialog is closed:
- *     @see #getSelectedTable()
- *     @see #getSelectedCatalog()
- *     @see #getSelectedSchema()
- * @version 2.1
- * @since 2.1
- */
-public class EclipseLinkConverterDialog extends ValidatingDialog<EclipseLinkConverterStateObject> {
-
-	
-	// ********** constructors **********
-
-	/**
-	 * Use this constructor to edit an existing conversion value
-	 */
-	public EclipseLinkConverterDialog(Shell parent) {
-		super(parent);
-	}
-
-	@Override
-	protected EclipseLinkConverterStateObject buildStateObject() {
-		return new EclipseLinkConverterStateObject();
-	}
-
-	// ********** open **********
-
-	@Override
-	protected void configureShell(Shell shell) {
-		super.configureShell(shell);
-		shell.setText(this.getTitle());
-	}
-
-	@Override
-	protected String getTitle() {
-		return EclipseLinkUiDetailsMessages.EclipseLinkConverterDialog_addConverter;
-	}
-
-	@Override
-	protected String getDescriptionTitle() {
-		return EclipseLinkUiDetailsMessages.EclipseLinkConverterDialog_addConverterDescriptionTitle;
-	}
-	
-	@Override
-	protected String getDescription() {
-		return EclipseLinkUiDetailsMessages.EclipseLinkConverterDialog_addConverterDescription;
-	}
-	
-	@Override
-	protected DialogPane<EclipseLinkConverterStateObject> buildLayout(Composite container) {
-		return new ConversionValueDialogPane(container);
-	}
-	
-	@Override
-	public void create() {
-		super.create();
-
-		ConversionValueDialogPane pane = (ConversionValueDialogPane) getPane();
-		pane.selectAll();
-
-		getButton(OK).setEnabled(false);
-	}
-
-
-	// ********** public API **********
-
-	/**
-	 * Return the data value set in the text widget.
-	 */
-	public String getName() {
-		return getSubject().getName();
-	}
-
-	/**
-	 * Return the object value set in the text widget.
-	 */
-	public String getConverterType() {
-		return getSubject().getConverterType();
-	}
-	
-	private class ConversionValueDialogPane extends DialogPane<EclipseLinkConverterStateObject> {
-
-		private Text nameText;
-
-		ConversionValueDialogPane(Composite parent) {
-			super(EclipseLinkConverterDialog.this.getSubjectHolder(), parent);
-		}
-
-		@Override
-		protected void initializeLayout(Composite container) {
-			this.nameText = addLabeledText(
-				container,
-				EclipseLinkUiDetailsMessages.EclipseLinkConverterDialog_name,
-				buildNameHolder()
-			);
-			
-			addLabeledCombo(
-				container, 
-				EclipseLinkUiDetailsMessages.EclipseLinkConverterDialog_converterType, 
-				buildConverterTypeListHolder(), 
-				buildConverterTypeHolder(), 
-				buildStringConverter(),
-				null);
-		}
-
-		protected ListValueModel<String> buildConverterTypeListHolder() {
-			List<String> converterTypes = new ArrayList<String>();
-			converterTypes.add(EclipseLinkConverter.CUSTOM_CONVERTER);
-			converterTypes.add(EclipseLinkConverter.OBJECT_TYPE_CONVERTER);
-			converterTypes.add(EclipseLinkConverter.STRUCT_CONVERTER);
-			converterTypes.add(EclipseLinkConverter.TYPE_CONVERTER);
-			
-			return new StaticListValueModel<String>(converterTypes);
-		}
-		
-		private StringConverter<String> buildStringConverter() {
-			return new StringConverter<String>() {
-				public String convertToString(String value) {
-					if (value == EclipseLinkConverter.CUSTOM_CONVERTER) {
-						return EclipseLinkUiDetailsMessages.EclipseLinkConvertersComposite_customConverter;
-					}
-					if (value == EclipseLinkConverter.OBJECT_TYPE_CONVERTER) {
-						return EclipseLinkUiDetailsMessages.EclipseLinkConvertersComposite_objectTypeConverter;
-					}
-					if (value == EclipseLinkConverter.STRUCT_CONVERTER) {
-						return EclipseLinkUiDetailsMessages.EclipseLinkConvertersComposite_structConverter;
-					}
-					if (value == EclipseLinkConverter.TYPE_CONVERTER) {
-						return EclipseLinkUiDetailsMessages.EclipseLinkConvertersComposite_typeConverter;
-					}
-					return value;
-				}
-			};
-		}
-		
-		private WritablePropertyValueModel<String> buildNameHolder() {
-			return new PropertyAspectAdapter<EclipseLinkConverterStateObject, String>(getSubjectHolder(), EclipseLinkConverterStateObject.NAME_PROPERTY) {
-				@Override
-				protected String buildValue_() {
-					return this.subject.getName();
-				}
-
-				@Override
-				protected void setValue_(String value) {
-					this.subject.setName(value);
-				}
-			};
-		}
-
-		private WritablePropertyValueModel<String> buildConverterTypeHolder() {
-			return new PropertyAspectAdapter<EclipseLinkConverterStateObject, String>(getSubjectHolder(), EclipseLinkConverterStateObject.CONVERTER_TYPE_PROPERTY) {
-				@Override
-				protected String buildValue_() {
-					return this.subject.getConverterType();
-				}
-
-				@Override
-				protected void setValue_(String value) {
-					this.subject.setConverterType(value);
-				}
-			};
-		}
-
-		void selectAll() {
-			this.nameText.selectAll();
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkConverterStateObject.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkConverterStateObject.java
deleted file mode 100644
index d97f018..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkConverterStateObject.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import java.util.List;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.node.AbstractNode;
-import org.eclipse.jpt.utility.internal.node.Node;
-import org.eclipse.jpt.utility.internal.node.Problem;
-
-/**
- * This is the state object used by the <code>EclipseLinkConverterDialog</code>, which stores
- * the current name and validates it when it is modified.
- *
- * @see EclipseLinkConverterDialog
- *
- * @version 2.1
- * @since 2.1
- */
-final class EclipseLinkConverterStateObject extends AbstractNode
-{
-	/**
-	 * The initial name or <code>null</code>
-	 */
-	private String name;
-
-	/**
-	 * The initial converterType or <code>null</code>
-	 */
-	private String converterType;
-
-	/**
-	 * The <code>Validator</code> used to validate this state object.
-	 */
-	private Validator validator;
-
-	/**
-	 * Notifies a change in the data value property.
-	 */
-	static final String NAME_PROPERTY = "name"; //$NON-NLS-1$
-	
-	/**
-	 * Notifies a change in the object value property.
-	 */
-	static final String CONVERTER_TYPE_PROPERTY = "converterType"; //$NON-NLS-1$
-
-	/**
-	 * Creates a new <code>NewNameStateObject</code>.
-	 *
-	 * @param name The initial input or <code>null</code> if no initial value can
-	 * be specified
-	 * @param names The collection of names that can't be used or an empty
-	 * collection if none are available
-	 */
-	EclipseLinkConverterStateObject() {
-		super(null);
-
-	}
-
-	private void addNameProblemsTo(List<Problem> currentProblems) {
-		if (StringTools.stringIsEmpty(this.name)) {
-			currentProblems.add(buildProblem(EclipseLinkUiDetailsMessages.EclipseLinkConverterStateObject_nameMustBeSpecified));
-		}
-	}
-
-	private void addConverterTypeProblemsTo(List<Problem> currentProblems) {
-		if (StringTools.stringIsEmpty(this.converterType)) {
-			currentProblems.add(buildProblem(EclipseLinkUiDetailsMessages.EclipseLinkConverterStateObject_typeMustBeSpecified));
-		}
-	}
-
-	@Override
-	protected void addProblemsTo(List<Problem> currentProblems) {
-		super.addProblemsTo(currentProblems);
-		addNameProblemsTo(currentProblems);
-		addConverterTypeProblemsTo(currentProblems);
-	}
-
-	@Override
-	protected void checkParent(@SuppressWarnings("unused") Node parentNode) {
-		//no parent
-	}
-
-	public String displayString() {
-		return null;
-	}
-
-	String getName() {
-		return this.name;
-	}
-
-	String getConverterType() {
-		return this.converterType;
-	}
-
-	public void setName(String newName) {
-		String oldName = this.name;
-		this.name = newName;
-		firePropertyChanged(NAME_PROPERTY, oldName, newName);
-	}
-
-	public void setConverterType(String newConverterType) {
-		String oldConverterType = this.converterType;
-		this.converterType = newConverterType;
-		firePropertyChanged(CONVERTER_TYPE_PROPERTY, oldConverterType, newConverterType);
-	}
-
-	@Override
-	public void setValidator(Validator validator) {
-		this.validator = validator;
-	}
-
-	@Override
-	public Validator getValidator() {
-		return this.validator;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappingsDetailsPage.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappingsDetailsPage.java
deleted file mode 100644
index 5a162d1..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappingsDetailsPage.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.orm.EntityMappings;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.db.CatalogCombo;
-import org.eclipse.jpt.ui.internal.details.db.SchemaCombo;
-import org.eclipse.jpt.ui.internal.details.orm.EntityMappingsGeneratorsComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPackageChooser;
-import org.eclipse.jpt.ui.internal.details.orm.OrmQueriesComposite;
-import org.eclipse.jpt.ui.internal.details.orm.PersistenceUnitMetadataComposite;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | XmlPackageChooser                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * |              ------------------------------------------------------------ |
- * | Schema:      | SchemaCombo                                              | |
- * |              ------------------------------------------------------------ |
- * |              ------------------------------------------------------------ |
- * | Catalog:     | CatalogCombo                                             | |
- * |              ------------------------------------------------------------ |
- * |              ------------------------------------------------------------ |
- * | Access Type: |                                                        |v| |
- * |              ------------------------------------------------------------ |
- * |                                                                           |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | PersistenceUnitMetadataComposite                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OrmGeneratorsComposite                                                | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OrmQueriesComposite                                                   | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | ConvertersComposite                                                   | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see EntityMappings
- * @see EclipseLinkEntityMappingsDetailsPage - The parent container
- * @see CatalogCombo
- * @see EnumFormComboViewer
- * @see EntityMappingsGeneratorsComposite
- * @see OrmPackageChooser
- * @see OrmQueriesComposite
- * @see PersistenceUnitMetadataComposite
- * @see SchemaCombo
- *
- * @version 2.2
- * @since 2.1
- */
-public class EclipseLinkEntityMappingsDetailsPage extends AbstractEclipseLinkEntityMappingsDetailsPage
-{
-	/**
-	 * Creates a new <code>EclipseLinkEntityMappingsDetailsPage</code>.
-	 *
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public EclipseLinkEntityMappingsDetailsPage(Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(parent, widgetFactory);
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappingsDetailsProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappingsDetailsProvider.java
deleted file mode 100644
index 2ea7998..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappingsDetailsProvider.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.JpaResourceType;
-import org.eclipse.jpt.core.JpaStructureNode;
-import org.eclipse.jpt.eclipselink.core.internal.JptEclipseLinkCorePlugin;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaDetailsPage;
-import org.eclipse.jpt.ui.details.JpaDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.AbstractEntityMappingsDetailsProvider;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This provider is responsible for creating the {@link JpaDetailsPage}
- * when the information comes from the XML file (either from the persistence
- * configuration or from the Mappings Descriptor).
- *
- * @version 2.2
- * @since 2.2
- */
-public class EclipseLinkEntityMappingsDetailsProvider
-	extends AbstractEntityMappingsDetailsProvider
-{
-	// singleton
-	private static final JpaDetailsProvider INSTANCE = new EclipseLinkEntityMappingsDetailsProvider();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static JpaDetailsProvider instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private EclipseLinkEntityMappingsDetailsProvider() {
-		super();
-	}
-	
-	
-	@Override
-	protected boolean providesDetails(JpaResourceType resourceType) {
-		return resourceType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_1_0_RESOURCE_TYPE)
-				|| resourceType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_1_1_RESOURCE_TYPE)
-				|| resourceType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_1_2_RESOURCE_TYPE);
-	}
-	
-	public JpaDetailsPage<? extends JpaStructureNode> buildDetailsPage(
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		return new EclipseLinkEntityMappingsDetailsPage(parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkOrmXmlUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkOrmXmlUiDefinition.java
deleted file mode 100644
index 9806386..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkOrmXmlUiDefinition.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import java.util.List;
-import org.eclipse.jpt.core.JpaResourceType;
-import org.eclipse.jpt.core.context.AttributeMapping;
-import org.eclipse.jpt.core.context.TypeMapping;
-import org.eclipse.jpt.eclipselink.core.internal.JptEclipseLinkCorePlugin;
-import org.eclipse.jpt.eclipselink.ui.internal.structure.EclipseLinkOrmResourceModelStructureProvider;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmTypeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmXmlUiFactory;
-import org.eclipse.jpt.ui.internal.details.orm.AbstractOrmXmlResourceUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmBasicMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddableUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddedIdMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddedMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEntityUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmIdMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmManyToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmManyToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappedSuperclassUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmOneToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmOneToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmTransientMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmVersionMappingUiDefinition;
-import org.eclipse.jpt.ui.structure.JpaStructureProvider;
-
-public class EclipseLinkOrmXmlUiDefinition
-	extends AbstractOrmXmlResourceUiDefinition
-{
-	// singleton
-	private static final ResourceUiDefinition INSTANCE = new EclipseLinkOrmXmlUiDefinition();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static ResourceUiDefinition instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private EclipseLinkOrmXmlUiDefinition() {
-		super();
-	}
-	
-	
-	@Override
-	protected OrmXmlUiFactory buildOrmXmlUiFactory() {
-		return new EclipseLinkOrmXmlUiFactory();
-	}
-	
-	public boolean providesUi(JpaResourceType resourceType) {
-		return resourceType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_1_0_RESOURCE_TYPE);
-	}
-	
-	public JpaStructureProvider getStructureProvider() {
-		return EclipseLinkOrmResourceModelStructureProvider.instance();
-	}
-	
-	@Override
-	protected void addOrmAttributeMappingUiDefinitionsTo(
-			List<OrmAttributeMappingUiDefinition<? extends AttributeMapping>> definitions) {
-		
-		definitions.add(OrmIdMappingUiDefinition.instance());
-		definitions.add(OrmEmbeddedIdMappingUiDefinition.instance());
-		definitions.add(OrmBasicMappingUiDefinition.instance());
-		definitions.add(OrmVersionMappingUiDefinition.instance());
-		definitions.add(OrmManyToOneMappingUiDefinition.instance());
-		definitions.add(OrmOneToManyMappingUiDefinition.instance());
-		definitions.add(OrmOneToOneMappingUiDefinition.instance());
-		definitions.add(OrmManyToManyMappingUiDefinition.instance());
-		definitions.add(OrmEmbeddedMappingUiDefinition.instance());
-		definitions.add(OrmTransientMappingUiDefinition.instance());
-		
-		definitions.add(OrmEclipseLinkBasicCollectionMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkBasicMapMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkVariableOneToOneMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkTransformationMappingUiDefinition.instance());		
-	}
-	
-	@Override
-	protected void addOrmTypeMappingUiDefinitionsTo(
-			List<OrmTypeMappingUiDefinition<? extends TypeMapping>> definitions) {
-		
-		definitions.add(OrmEntityUiDefinition.instance());
-		definitions.add(OrmMappedSuperclassUiDefinition.instance());
-		definitions.add(OrmEmbeddableUiDefinition.instance());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkOrmXmlUiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkOrmXmlUiFactory.java
deleted file mode 100644
index 079ae5b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/EclipseLinkOrmXmlUiFactory.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-public class EclipseLinkOrmXmlUiFactory extends BaseEclipseLinkOrmXmlUiFactory
-{
-	//nothing
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkBasicCollectionMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkBasicCollectionMappingUiDefinition.java
deleted file mode 100644
index cb82b57..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkBasicCollectionMappingUiDefinition.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.PersistentAttribute;
-import org.eclipse.jpt.eclipselink.core.internal.context.orm.OrmEclipseLinkBasicCollectionMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.AbstractEclipseLinkBasicCollectionMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkBasicCollectionMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.details.orm.OrmAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmXmlUiFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkBasicCollectionMappingUiDefinition
-	extends AbstractEclipseLinkBasicCollectionMappingUiDefinition<PersistentAttribute, OrmEclipseLinkBasicCollectionMapping>
-	implements OrmAttributeMappingUiDefinition<OrmEclipseLinkBasicCollectionMapping>
-{
-	// singleton
-	private static final OrmEclipseLinkBasicCollectionMappingUiDefinition INSTANCE = 
-			new OrmEclipseLinkBasicCollectionMappingUiDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static OrmAttributeMappingUiDefinition<OrmEclipseLinkBasicCollectionMapping> instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Ensure single instance.
-	 */
-	private OrmEclipseLinkBasicCollectionMappingUiDefinition() {
-		super();
-	}
-	
-	
-	public JpaComposite buildAttributeMappingComposite(
-			OrmXmlUiFactory factory,
-			PropertyValueModel<OrmEclipseLinkBasicCollectionMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		return new EclipseLinkBasicCollectionMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkBasicMapMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkBasicMapMappingUiDefinition.java
deleted file mode 100644
index 98ac982..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkBasicMapMappingUiDefinition.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.PersistentAttribute;
-import org.eclipse.jpt.eclipselink.core.internal.context.orm.OrmEclipseLinkBasicMapMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.AbstractEclipseLinkBasicMapMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkBasicMapMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.details.orm.OrmAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmXmlUiFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkBasicMapMappingUiDefinition
-	extends AbstractEclipseLinkBasicMapMappingUiDefinition<PersistentAttribute, OrmEclipseLinkBasicMapMapping>
-	implements OrmAttributeMappingUiDefinition<OrmEclipseLinkBasicMapMapping>
-{
-	// singleton
-	private static final OrmEclipseLinkBasicMapMappingUiDefinition INSTANCE = 
-			new OrmEclipseLinkBasicMapMappingUiDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static OrmAttributeMappingUiDefinition<OrmEclipseLinkBasicMapMapping> instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Ensure single instance.
-	 */
-	private OrmEclipseLinkBasicMapMappingUiDefinition() {
-		super();
-	}
-	
-	
-	public JpaComposite buildAttributeMappingComposite(
-			OrmXmlUiFactory factory,
-			PropertyValueModel<OrmEclipseLinkBasicMapMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		return new EclipseLinkBasicMapMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkBasicMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkBasicMappingComposite.java
deleted file mode 100644
index 8b2800d..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkBasicMappingComposite.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmBasicMapping;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConvert;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkBasicMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkMutableComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.ColumnComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-//Remove the Converters section from 1.0 orm basic mappings.
-//This is supported in EclipseLink in version 1.1, but not 1.0
-public class OrmEclipseLinkBasicMappingComposite extends EclipseLinkBasicMappingComposite<OrmBasicMapping>
-{
-	/**
-	 * Creates a new <code>EclipseLinkOrmBasicMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>BasicMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkBasicMappingComposite(PropertyValueModel<? extends OrmBasicMapping> subjectHolder,
-	                               Composite parent,
-	                               WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeBasicSection(Composite container) {
-		new ColumnComposite(this, buildColumnHolder(), container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new FetchTypeComposite(this, container);
-		new OptionalComposite(this, addSubPane(container, 4));
-		new EclipseLinkMutableComposite(this, buildMutableHolder(), container);
-	}
-
-	@Override
-	//everything but the 'Define Converter' section.  This is not supported in eclipselink 1.0, but is in 1.1
-	protected Pane<EclipseLinkConvert> buildConvertComposite(PropertyValueModel<EclipseLinkConvert> convertHolder, Composite container) {
-		return new OrmEclipseLinkConvert1_0Composite(convertHolder, container, getWidgetFactory());
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkCachingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkCachingComposite.java
deleted file mode 100644
index d63a1f4..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkCachingComposite.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.eclipselink.core.context.orm.OrmEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkCachingComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This pane shows the caching options.
- * <p>
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | x Shared                                                                  |
- * |    CacheTypeComposite                                                     |
- * |    CacheSizeComposite                                                     |
- * |    > Advanced   	                                                       |
- * |    	ExpiryComposite                                                    |
- * |    	AlwaysRefreshComposite                                             |
- * |   		RefreshOnlyIfNewerComposite                                        |
- * |    	DisableHitsComposite                                               |
- * |    	CacheCoordinationComposite                                         |
- * | ExistenceTypeComposite                                                    |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see Entity
- * @see EclipseLinkCaching
- * @see JavaEclipseLinkEntityComposite - The parent container
- * @see EclipseLinkCacheTypeComposite
- * @see EclipseLinkCacheSizeComposite
- * @see EclipseLinkAlwaysRefreshComposite
- * @see EclipseLinkRefreshOnlyIfNewerComposite
- * @see EclipseLinkDisableHitsComposite
- *
- * @version 2.1
- * @since 2.1
- */
-public class OrmEclipseLinkCachingComposite extends EclipseLinkCachingComposite<OrmEclipseLinkCaching>
-{
-
-	public OrmEclipseLinkCachingComposite(Pane<?> parentPane,
-        PropertyValueModel<OrmEclipseLinkCaching> subjectHolder,
-        Composite parent) {
-
-		super(parentPane, subjectHolder, parent);
-	}
-
-	@Override
-	protected void initializeExistenceCheckingComposite(Composite parent) {
-		new OrmEclipseLinkExistenceCheckingComposite(this, parent);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkConvert1_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkConvert1_0Composite.java
deleted file mode 100644
index dd054ac..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkConvert1_0Composite.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import java.util.ArrayList;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConvert;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.EclipseLinkPersistenceUnit;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringConverter;
-import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.StaticListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * |            -------------------------------------------------------------- |
- * | Converter: |                                                          |v| |
- * |            -------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkConvert
- * @see EclipseLinkBasicMappingComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-
-//Removes the Define Converters section from orm basic, id, version mapping.
-//This is supported in EclipseLink in version 1.1, but not 1.0
-public class OrmEclipseLinkConvert1_0Composite extends Pane<EclipseLinkConvert>
-{
-
-	/**
-	 * A key used to represent the default value, this is required to convert
-	 * the selected item from a combo to <code>null</code>. This key is most
-	 * likely never typed the user and it will help to convert the value to
-	 * <code>null</code> when it's time to set the new selected value into the
-	 * model.
-	 */
-	protected static String DEFAULT_KEY = "?!#!?#?#?default?#?!#?!#?"; //$NON-NLS-1$
-	
-	
-	/**
-	 * Creates a new <code>EnumTypeComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public OrmEclipseLinkConvert1_0Composite(PropertyValueModel<? extends EclipseLinkConvert> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		Combo combo = addLabeledEditableCombo(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkConvertComposite_converterNameLabel,
-			buildConvertNameListHolder(),
-			buildConvertNameHolder(),
-			buildNameConverter(),
-			null
-		);
-		SWTUtil.attachDefaultValueHandler(combo);
-				
-		new PaneEnabler(buildBooleanHolder(), this);
-	}
-	
-	protected final WritablePropertyValueModel<String> buildConvertNameHolder() {
-		return new PropertyAspectAdapter<EclipseLinkConvert, String>(getSubjectHolder(), EclipseLinkConvert.SPECIFIED_CONVERTER_NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getSpecifiedConverterName();
-			}
-
-			@Override
-			protected void setValue_(String value) {
-				// Convert the default value or an empty string to null
-				if ((value != null) &&
-				   ((value.length() == 0) || value.startsWith(DEFAULT_KEY))) {
-
-					value = null;
-				}
-				this.subject.setSpecifiedConverterName(value);
-			}
-		};
-	}
-	private ListValueModel<String> buildConvertNameListHolder() {
-		java.util.List<ListValueModel<String>> list = new ArrayList<ListValueModel<String>>();
-		list.add(buildDefaultNameListHolder());
-		list.add(buildReservedConverterNameListHolder());
-		list.add(buildConverterNameListHolder());
-		return new CompositeListValueModel<ListValueModel<String>, String>(list);
-	}
-	
-	protected ListValueModel<String> buildDefaultNameListHolder() {
-		return new PropertyListValueModelAdapter<String>(
-			buildDefaultNameHolder()
-		);
-	}
-
-	private WritablePropertyValueModel<String> buildDefaultNameHolder() {
-		return new PropertyAspectAdapter<EclipseLinkConvert, String>(getSubjectHolder(), EclipseLinkConvert.DEFAULT_CONVERTER_NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				String name = this.subject.getDefaultConverterName();
-
-				if (name == null) {
-					name = DEFAULT_KEY;
-				}
-				else {
-					name = DEFAULT_KEY + name;
-				}
-
-				return name;
-			}
-		};
-	}
-
-	private StringConverter<String> buildNameConverter() {
-		return new StringConverter<String>() {
-			public String convertToString(String value) {
-
-				if (getSubject() == null) {
-					return value;
-				}
-
-				if (value == null) {
-					value = getSubject().getDefaultConverterName();
-
-					if (value != null) {
-						value = DEFAULT_KEY + value;
-					}
-					else {
-						value = DEFAULT_KEY;
-					}
-				}
-
-				if (value.startsWith(DEFAULT_KEY)) {
-					String defaultName = value.substring(DEFAULT_KEY.length());
-
-					if (defaultName.length() > 0) {
-						value = NLS.bind(
-							JptUiDetailsMessages.DefaultWithOneParam,
-							defaultName
-						);
-					}
-					else {
-						value = JptUiDetailsMessages.DefaultEmpty;
-					}
-				}
-
-				return value;
-			}
-		};
-	}
-
-	protected ListValueModel<String> buildReservedConverterNameListHolder() {
-		return new StaticListValueModel<String>(EclipseLinkConvert.RESERVED_CONVERTER_NAMES);
-	}
-	
-	protected ListValueModel<String> buildConverterNameListHolder() {
-		return new ListAspectAdapter<EclipseLinkPersistenceUnit, String>(
-			buildPersistenceUnitHolder(),
-			EclipseLinkPersistenceUnit.CONVERTERS_LIST)//TODO need EclipseLinkPersistenceUnit interface
-		{
-			@Override
-			protected ListIterator<String> listIterator_() {
-				return CollectionTools.listIterator(ArrayTools.sort(this.subject.uniqueConverterNames()));
-			}
-		};
-	}
-	
-	protected PropertyValueModel<EclipseLinkPersistenceUnit> buildPersistenceUnitHolder() {
-		return new PropertyAspectAdapter<EclipseLinkConvert, EclipseLinkPersistenceUnit>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkPersistenceUnit buildValue_() {
-				return (EclipseLinkPersistenceUnit) getSubject().getPersistenceUnit();
-			}
-		};
-	}
-
-	protected PropertyValueModel<Boolean> buildBooleanHolder() {
-		return new TransformationPropertyValueModel<EclipseLinkConvert, Boolean>(getSubjectHolder()) {
-			@Override
-			protected Boolean transform(EclipseLinkConvert value) {
-				if (getSubject() != null && getSubject().getParent().getPersistentAttribute().isVirtual()) {
-					return Boolean.FALSE;
-				}
-				return Boolean.valueOf(value != null);
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkConvertersComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkConvertersComposite.java
deleted file mode 100644
index 4281b3c..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkConvertersComposite.java
+++ /dev/null
@@ -1,407 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCustomConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkObjectTypeConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkStructConverter;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkTypeConverter;
-import org.eclipse.jpt.eclipselink.core.context.orm.EclipseLinkConverterHolder;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkCustomConverterComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkObjectTypeConverterComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkStructConverterComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkTypeConverterComposite;
-import org.eclipse.jpt.ui.internal.util.ControlSwitcher;
-import org.eclipse.jpt.ui.internal.widgets.AddRemoveListPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.ui.internal.widgets.AddRemovePane.Adapter;
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.ItemPropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ObjectListSelectionModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.part.PageBook;
-
-/**
- * This pane shows the list of named queries and named native queries.
- * <p>
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | AddRemoveListPane                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | ConverterComposite or ObjectTypeConverterComposite                    | |
- * | | or StructConverterComposite or TypeConverterComposite                 | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see Entity
- * @see Query
- * @see NamedNativeQuery
- * @see NamedQuery
- * @see AbstractEntityComposite - The parent container
- * @see NamedNativeQueryPropertyComposite
- * @see NamedQueryPropertyComposite
- *
- * @version 2.1
- * @since 2.1
- */
-public class OrmEclipseLinkConvertersComposite extends Pane<EclipseLinkConverterHolder>
-{
-	private AddRemoveListPane<EclipseLinkConverterHolder> listPane;
-	private EclipseLinkCustomConverterComposite converterComposite;
-	private EclipseLinkObjectTypeConverterComposite objectTypeConverterComposite;
-	private EclipseLinkStructConverterComposite structConverterComposite;
-	private EclipseLinkTypeConverterComposite typeConverterComposite;
-	private WritablePropertyValueModel<EclipseLinkConverter> selectedConverterHolder;
-
-	public OrmEclipseLinkConvertersComposite(
-		Pane<?> parentPane, 
-		PropertyValueModel<? extends EclipseLinkConverterHolder> subjectHolder,
-		Composite parent) {
-
-			super(parentPane, subjectHolder, parent, false);
-	}
-
-	@Override
-	protected void initialize() {
-		super.initialize();
-		this.selectedConverterHolder = buildSelectedConverterHolder();
-	}
-
-	private WritablePropertyValueModel<EclipseLinkConverter> buildSelectedConverterHolder() {
-		return new SimplePropertyValueModel<EclipseLinkConverter>();
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		// List pane
-		this.listPane = addListPane(container);
-
-		// Property pane
-		PageBook pageBook = new PageBook(container, SWT.NULL);
-		pageBook.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-		this.converterComposite = new EclipseLinkCustomConverterComposite(
-			buildCustomConverterHolder(),
-			pageBook,
-			getWidgetFactory()
-		);
-		registerSubPane(this.converterComposite);
-		
-		this.objectTypeConverterComposite = new EclipseLinkObjectTypeConverterComposite(
-			buildObjectTypeConverterHolder(),
-			pageBook,
-			getWidgetFactory()
-		);
-		registerSubPane(this.objectTypeConverterComposite);
-		
-		this.structConverterComposite = new EclipseLinkStructConverterComposite(
-			buildStructConverterHolder(),
-			pageBook,
-			getWidgetFactory()
-		);
-		registerSubPane(this.structConverterComposite);
-		
-		this.typeConverterComposite = new EclipseLinkTypeConverterComposite(
-			buildTypeConverterHolder(),
-			pageBook,
-			getWidgetFactory()
-		);
-		registerSubPane(this.typeConverterComposite);
-
-		installPaneSwitcher(pageBook);
-	}
-
-	private AddRemoveListPane<EclipseLinkConverterHolder> addListPane(Composite container) {
-
-		return new AddRemoveListPane<EclipseLinkConverterHolder>(
-			this,
-			container,
-			buildConvertersAdapter(),
-			buildDisplayableConvertersListHolder(),
-			this.selectedConverterHolder,
-			buildConvertersListLabelProvider(),
-			null//JpaHelpContextIds.MAPPING_NAMED_QUERIES
-		) {
-			//TODO yeah, this is weird, but i don't want this to be disabled just
-			//because the subject is null. i have no need for that and that is
-			//currently how AddRemovePane works.  See OrmQueriesComposite where
-			//the work around there is yet another pane enabler.  I want to change
-			//how this works in 2.2
-			@Override
-			public void enableWidgets(boolean enabled) {
-				super.enableWidgets(true);
-			}
-		};
-	}
-
-	private void installPaneSwitcher(PageBook pageBook) {
-		new ControlSwitcher(this.selectedConverterHolder, buildPaneTransformer(), pageBook);
-	}
-	
-	private Adapter buildConvertersAdapter() {
-
-		return new AddRemoveListPane.AbstractAdapter() {
-
-			public void addNewItem(ObjectListSelectionModel listSelectionModel) {
-				addConverter();
-			}
-
-			public void removeSelectedItems(ObjectListSelectionModel listSelectionModel) {
-				for (Object item : listSelectionModel.selectedValues()) {
-					if (((EclipseLinkConverter) item).getType() == EclipseLinkConverter.CUSTOM_CONVERTER) {
-						getSubject().removeCustomConverter((EclipseLinkCustomConverter) item);
-					}
-					else if (((EclipseLinkConverter) item).getType() == EclipseLinkConverter.OBJECT_TYPE_CONVERTER) {
-						getSubject().removeObjectTypeConverter((EclipseLinkObjectTypeConverter) item);
-					}
-					else if (((EclipseLinkConverter) item).getType() == EclipseLinkConverter.STRUCT_CONVERTER) {
-						getSubject().removeStructConverter((EclipseLinkStructConverter) item);
-					}
-					else if (((EclipseLinkConverter) item).getType() == EclipseLinkConverter.TYPE_CONVERTER) {
-						getSubject().removeTypeConverter((EclipseLinkTypeConverter) item);
-					}
-				}
-			}
-		};
-	}
-
-	private void addConverter() {
-		addEclipseLinkConverterFromDialog(buildEclipseLinkConverterDialog());
-	}
-	
-	protected EclipseLinkConverterDialog buildEclipseLinkConverterDialog() {
-		return new EclipseLinkConverterDialog(getShell());
-	}
-
-	protected void addEclipseLinkConverterFromDialog(EclipseLinkConverterDialog dialog) {
-		if (dialog.open() != Window.OK) {
-			return;
-		}
-		String converterType = dialog.getConverterType();
-		EclipseLinkConverter converter;
-		if (converterType == EclipseLinkConverter.CUSTOM_CONVERTER) {
-			converter = this.getSubject().addCustomConverter(getSubject().customConvertersSize());
-		}
-		else if (converterType == EclipseLinkConverter.OBJECT_TYPE_CONVERTER) {
-			converter = this.getSubject().addObjectTypeConverter(getSubject().objectTypeConvertersSize());
-		}
-		else if (converterType == EclipseLinkConverter.STRUCT_CONVERTER) {
-			converter = this.getSubject().addStructConverter(getSubject().structConvertersSize());
-		}
-		else if (converterType == EclipseLinkConverter.TYPE_CONVERTER) {
-			converter = this.getSubject().addTypeConverter(getSubject().typeConvertersSize());
-		}
-		else {
-			throw new IllegalArgumentException();
-		}
-		converter.setName(dialog.getName());
-		this.selectedConverterHolder.setValue(converter);//so that it gets selected in the List for the user to edit
-	}
-
-	private Transformer<EclipseLinkConverter, Control> buildPaneTransformer() {
-		return new Transformer<EclipseLinkConverter, Control>() {
-			public Control transform(EclipseLinkConverter converter) {
-				if (converter == null) {
-					return null;
-				}
-
-				if (converter.getType() == EclipseLinkConverter.CUSTOM_CONVERTER) {
-					return OrmEclipseLinkConvertersComposite.this.converterComposite.getControl();
-				}
-				if (converter.getType() == EclipseLinkConverter.OBJECT_TYPE_CONVERTER) {
-					return OrmEclipseLinkConvertersComposite.this.objectTypeConverterComposite.getControl();
-				}
-				if (converter.getType() == EclipseLinkConverter.STRUCT_CONVERTER) {
-					return OrmEclipseLinkConvertersComposite.this.structConverterComposite.getControl();
-				}
-				if (converter.getType() == EclipseLinkConverter.TYPE_CONVERTER) {
-					return OrmEclipseLinkConvertersComposite.this.typeConverterComposite.getControl();
-				}
-
-				return null;
-			}
-		};
-	}
-
-	private ListValueModel<EclipseLinkConverter> buildDisplayableConvertersListHolder() {
-		return new ItemPropertyListValueModelAdapter<EclipseLinkConverter>(
-			buildEclipseLinkConvertersHolder(),
-			EclipseLinkConverter.NAME_PROPERTY
-		);
-	}
-
-	private ListValueModel<EclipseLinkConverter> buildEclipseLinkConvertersHolder() {
-		List<ListValueModel<? extends EclipseLinkConverter>> list = new ArrayList<ListValueModel<? extends EclipseLinkConverter>>();
-		list.add(buildCustomConvertersListHolder());
-		list.add(buildObjectTypeConvertersListHolder());
-		list.add(buildStructConvertersListHolder());
-		list.add(buildTypeConvertersListHolder());
-		return new CompositeListValueModel<ListValueModel<? extends EclipseLinkConverter>, EclipseLinkConverter>(list);
-	}
-
-	private ListValueModel<EclipseLinkCustomConverter> buildCustomConvertersListHolder() {
-		return new ListAspectAdapter<EclipseLinkConverterHolder, EclipseLinkCustomConverter>(
-			getSubjectHolder(),
-			EclipseLinkConverterHolder.CUSTOM_CONVERTERS_LIST)
-		{
-			@Override
-			protected ListIterator<EclipseLinkCustomConverter> listIterator_() {
-				return this.subject.customConverters();
-			}
-
-			@Override
-			protected int size_() {
-				return this.subject.customConvertersSize();
-			}
-		};
-	}
-
-	private ListValueModel<EclipseLinkObjectTypeConverter> buildObjectTypeConvertersListHolder() {
-		return new ListAspectAdapter<EclipseLinkConverterHolder, EclipseLinkObjectTypeConverter>(
-			getSubjectHolder(),
-			EclipseLinkConverterHolder.OBJECT_TYPE_CONVERTERS_LIST)
-		{
-			@Override
-			protected ListIterator<EclipseLinkObjectTypeConverter> listIterator_() {
-				return this.subject.objectTypeConverters();
-			}
-
-			@Override
-			protected int size_() {
-				return this.subject.objectTypeConvertersSize();
-			}
-		};
-	}
-
-	private ListValueModel<EclipseLinkStructConverter> buildStructConvertersListHolder() {
-		return new ListAspectAdapter<EclipseLinkConverterHolder, EclipseLinkStructConverter>(
-			getSubjectHolder(),
-			EclipseLinkConverterHolder.STRUCT_CONVERTERS_LIST)
-		{
-			@Override
-			protected ListIterator<EclipseLinkStructConverter> listIterator_() {
-				return this.subject.structConverters();
-			}
-
-			@Override
-			protected int size_() {
-				return this.subject.structConvertersSize();
-			}
-		};
-	}
-
-	private ListValueModel<EclipseLinkTypeConverter> buildTypeConvertersListHolder() {
-		return new ListAspectAdapter<EclipseLinkConverterHolder, EclipseLinkTypeConverter>(
-			getSubjectHolder(),
-			EclipseLinkConverterHolder.TYPE_CONVERTERS_LIST)
-		{
-			@Override
-			protected ListIterator<EclipseLinkTypeConverter> listIterator_() {
-				return this.subject.typeConverters();
-			}
-
-			@Override
-			protected int size_() {
-				return this.subject.typeConvertersSize();
-			}
-		};
-	}
-
-	private PropertyValueModel<EclipseLinkCustomConverter> buildCustomConverterHolder() {
-		return new TransformationPropertyValueModel<EclipseLinkConverter, EclipseLinkCustomConverter>(this.selectedConverterHolder) {
-			@Override
-			protected EclipseLinkCustomConverter transform_(EclipseLinkConverter value) {
-				return value.getType() == EclipseLinkConverter.CUSTOM_CONVERTER ? (EclipseLinkCustomConverter) value : null;
-			}
-		};
-	}
-
-	private PropertyValueModel<EclipseLinkObjectTypeConverter> buildObjectTypeConverterHolder() {
-		return new TransformationPropertyValueModel<EclipseLinkConverter, EclipseLinkObjectTypeConverter>(this.selectedConverterHolder) {
-			@Override
-			protected EclipseLinkObjectTypeConverter transform_(EclipseLinkConverter value) {
-				return value.getType() == EclipseLinkConverter.OBJECT_TYPE_CONVERTER ? (EclipseLinkObjectTypeConverter) value : null;
-			}
-		};
-	}
-
-	private PropertyValueModel<EclipseLinkStructConverter> buildStructConverterHolder() {
-		return new TransformationPropertyValueModel<EclipseLinkConverter, EclipseLinkStructConverter>(this.selectedConverterHolder) {
-			@Override
-			protected EclipseLinkStructConverter transform_(EclipseLinkConverter value) {
-				return value.getType() == EclipseLinkConverter.STRUCT_CONVERTER ? (EclipseLinkStructConverter) value : null;
-			}
-		};
-	}
-
-	private PropertyValueModel<EclipseLinkTypeConverter> buildTypeConverterHolder() {
-		return new TransformationPropertyValueModel<EclipseLinkConverter, EclipseLinkTypeConverter>(this.selectedConverterHolder) {
-			@Override
-			protected EclipseLinkTypeConverter transform_(EclipseLinkConverter value) {
-				return value.getType() == EclipseLinkConverter.TYPE_CONVERTER ? (EclipseLinkTypeConverter) value : null;
-			}
-		};
-	}
-
-	private ILabelProvider buildConvertersListLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				return ((EclipseLinkConverter) element).getName();
-			}
-		};
-	}
-
-	@Override
-	public void enableWidgets(boolean enabled) {
-		super.enableWidgets(enabled);
-		this.listPane.enableWidgets(enabled);
-	}
-
-	//TODO need to check the converter repository for this, should check all converters, except for the override case, hmm
-	//we at least need to check typeconverters, converters, structconverters, and objectypeconverters, on this particular
-	//object.  or we need to give a warning about the case where you are overriding or an error if it's not an override?
-	private Iterator<String> converterNames() {
-		return new TransformationIterator<EclipseLinkCustomConverter, String>(getSubject().customConverters()) {
-			@Override
-			protected String transform(EclipseLinkCustomConverter next) {
-				return next.getName();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkEmbeddableComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkEmbeddableComposite.java
deleted file mode 100644
index 6336532..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkEmbeddableComposite.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.eclipselink.core.context.orm.EclipseLinkConverterHolder;
-import org.eclipse.jpt.eclipselink.core.context.orm.OrmEclipseLinkEmbeddable;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkEmbeddableAdvancedComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AbstractEmbeddableComposite;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.orm.MetadataCompleteComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmJavaClassChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This pane does not have any widgets.
- *
- * @see Embeddable
- * @see EmbeddableUiProvider
- *
- * @version 2.3
- * @since 2.1
- */
-public class OrmEclipseLinkEmbeddableComposite<T extends OrmEclipseLinkEmbeddable> 
-	extends AbstractEmbeddableComposite<T>
-	implements JpaComposite
-{
-	/**
-	 * Creates a new <code>EmbeddableComposite</code>.
-	 *
-	 * @param subjectHolder The holder of this pane's subject
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkEmbeddableComposite(PropertyValueModel<? extends T> subjectHolder,
-	                           Composite parent,
-	                           WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.initializeEmbeddableCollapsibleSection(container);
-		initializeConvertersCollapsibleSection(container);
-		initializeAdvancedCollapsibleSection(container);
-	}
-
-	@Override
-	protected void initializeEmbeddableSection(Composite container) {
-		new OrmJavaClassChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolder(), container);
-		new MetadataCompleteComposite(this, getSubjectHolder(), container);
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolder() {
-		return new PropertyAspectAdapter<T, AccessHolder>(
-			getSubjectHolder())
-		{
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentType();
-			}
-		};
-	}
-	protected void initializeConvertersCollapsibleSection(Composite container) {
-
-		container = addCollapsibleSection(
-			container,
-			EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_converters
-		);
-		initializeConvertersSection(container, this.buildConverterHolder());
-	}
-
-	protected void initializeConvertersSection(Composite container, PropertyValueModel<EclipseLinkConverterHolder> converterHolder) {
-		new OrmEclipseLinkConvertersComposite(this, converterHolder, container);
-	}
-	
-	private PropertyValueModel<EclipseLinkConverterHolder> buildConverterHolder() {
-		return new PropertyAspectAdapter<T, EclipseLinkConverterHolder>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkConverterHolder buildValue_() {
-				return this.subject.getConverterHolder();
-			}
-		};
-	}
-	
-	protected void initializeAdvancedCollapsibleSection(Composite container) {
-		new EclipseLinkEmbeddableAdvancedComposite(this, container);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkEntityComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkEntityComposite.java
deleted file mode 100644
index ede8d0d..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkEntityComposite.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2008, 2009 Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmEntity;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkEntityComposite extends AbstractOrmEclipseLinkEntityComposite
-{
-	public OrmEclipseLinkEntityComposite(
-			PropertyValueModel<? extends OrmEntity> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkExistenceCheckingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkExistenceCheckingComposite.java
deleted file mode 100644
index ec4c2c7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkExistenceCheckingComposite.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkExistenceType;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here is the layout of this pane:
- * <pre>
- * -------------------------------------------------------------------------
- * |       			  		---------------------------------------------- |
- * | x Existence Checking:  |                                          |v| |
- * |       					---------------------------------------------- |
- * -------------------------------------------------------------------------</pre>
- *
- * @see EclipseLinkCaching
- * @see CachingComposite - A container of this widget
- *
- * @version 2.1
- * @since 2.1
- */
-public class OrmEclipseLinkExistenceCheckingComposite extends Pane<EclipseLinkCaching> {
-
-	/**
-	 * Creates a new <code>ExistenceCheckingComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public OrmEclipseLinkExistenceCheckingComposite(Pane<? extends EclipseLinkCaching> parentPane,
-	                          Composite parent) {
-
-		super(parentPane, parent, false);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		addLabeledComposite( 
-            container, 
-            EclipseLinkUiDetailsMessages.EclipseLinkExistenceCheckingComposite_label,
-            addExistenceCheckingTypeCombo(container).getControl(), 
-            null 
-       );
-	}
-
-	private EnumFormComboViewer<EclipseLinkCaching, EclipseLinkExistenceType> addExistenceCheckingTypeCombo(Composite container) {
-
-		return new EnumFormComboViewer<EclipseLinkCaching, EclipseLinkExistenceType>(this, container) {
-
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(EclipseLinkCaching.DEFAULT_EXISTENCE_TYPE_PROPERTY);
-				propertyNames.add(EclipseLinkCaching.SPECIFIED_EXISTENCE_TYPE_PROPERTY);
-			}
-
-			@Override
-			protected EclipseLinkExistenceType[] getChoices() {
-				return EclipseLinkExistenceType.values();
-			}
-
-			@Override
-			protected EclipseLinkExistenceType getDefaultValue() {
-				return getSubject().getDefaultExistenceType();
-			}
-
-			@Override
-			protected String displayString(EclipseLinkExistenceType value) {
-				return buildDisplayString(
-					EclipseLinkUiDetailsMessages.class,
-					OrmEclipseLinkExistenceCheckingComposite.this,
-					value
-				);
-			}
-
-			@Override
-			protected EclipseLinkExistenceType getValue() {
-				return getSubject().getSpecifiedExistenceType();
-			}
-
-			@Override
-			protected void setValue(EclipseLinkExistenceType value) {
-				getSubject().setSpecifiedExistenceType(value);
-			}
-			
-			@Override
-			protected boolean sortChoices() {
-				return false;
-			}
-		};
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkIdMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkIdMappingComposite.java
deleted file mode 100644
index 263c079..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkIdMappingComposite.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmIdMapping;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConvert;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkIdMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkMutableComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.ColumnComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-//Remove the Converters section from 1.0 orm id mappings.
-//This is supported in EclipseLink in version 1.1, but not 1.0
-public class OrmEclipseLinkIdMappingComposite
-	extends EclipseLinkIdMappingComposite<OrmIdMapping>
-{
-	public OrmEclipseLinkIdMappingComposite(
-			PropertyValueModel<? extends OrmIdMapping> subjectHolder,
-	        Composite parent,
-	        WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeIdSection(Composite container) {		
-		new ColumnComposite(this, buildColumnHolder(), container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new EclipseLinkMutableComposite(this, buildMutableHolder(), container);
-	}	
-	
-	@Override
-	//everything but the 'Define Converter' section.  This is not supported in eclipselink 1.0, but is in 1.1
-	protected Pane<EclipseLinkConvert> buildConvertComposite(PropertyValueModel<EclipseLinkConvert> convertHolder, Composite container) {
-		return new OrmEclipseLinkConvert1_0Composite(convertHolder, container, getWidgetFactory());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkManyToManyMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkManyToManyMappingComposite.java
deleted file mode 100644
index 8e8d4a2..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkManyToManyMappingComposite.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.ManyToManyMapping;
-import org.eclipse.jpt.core.context.orm.OrmManyToManyMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkManyToManyMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.CascadeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.ManyToManyJoiningStrategyPane;
-import org.eclipse.jpt.ui.internal.details.OrderingComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | TargetEntityComposite                                                 | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | JoiningStrategyComposite                                              | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | FetchTypeComposite                                                    | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | CascadeComposite                                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OrderingComposite                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see {@link ManyToManyMapping}
- * @see {@link TargetEntityComposite}
- * @see {@link ManyToManyJoiningStrategyPane}
- * @see {@link FetchTypeComposite}
- * @see {@link CascadeComposite}
- * @see {@link OrderingComposite}
- *
- * @version 2.3
- * @since 2.2
- */
-public class OrmEclipseLinkManyToManyMappingComposite
-	extends EclipseLinkManyToManyMappingComposite<OrmManyToManyMapping>
-{
-	/**
-	 * Creates a new <code>ManyToManyMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IManyToManyMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkManyToManyMappingComposite(PropertyValueModel<? extends OrmManyToManyMapping> subjectHolder,
-	                                  Composite parent,
-	                                  WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeManyToManySection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkManyToOneMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkManyToOneMappingComposite.java
deleted file mode 100644
index 8c19987..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkManyToOneMappingComposite.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.ManyToOneMapping;
-import org.eclipse.jpt.core.context.orm.OrmManyToOneMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkManyToOneMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.CascadeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.ManyToOneJoiningStrategyPane;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | TargetEntityComposite                                                 | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | JoiningStrategyComposite                                              | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | FetchTypeComposite                                                    | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OptionalComposite                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | CascadeComposite                                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see {@link ManyToOneMapping}
- * @see {@link TargetEntityComposite}
- * @see {@link ManyToOneJoiningStrategyPane}
- * @see {@link FetchTypeComposite}
- * @see {@link OptionalComposite}
- * @see {@link CascadeComposite}
- *
- * @version 2.3
- * @since 2.2
- */
-public class OrmEclipseLinkManyToOneMappingComposite
-	extends EclipseLinkManyToOneMappingComposite<OrmManyToOneMapping>
-{
-	/**
-	 * Creates a new <code>EclipseLink1_1ManyToOneMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>ManyToOneMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkManyToOneMappingComposite(PropertyValueModel<? extends OrmManyToOneMapping> subjectHolder,
-	                                 Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeManyToOneSection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new FetchTypeComposite(this, container);		
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new OptionalComposite(this, container);
-		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<ManyToOneMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclassComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclassComposite.java
deleted file mode 100644
index 1360123..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclassComposite.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2008, 2010 Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.eclipselink.core.context.orm.OrmEclipseLinkMappedSuperclass;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkMappedSuperclassComposite<T extends OrmEclipseLinkMappedSuperclass>
-	extends AbstractOrmEclipseLinkMappedSuperclassComposite<T>
-{
-	public OrmEclipseLinkMappedSuperclassComposite(
-			PropertyValueModel<? extends T> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkOneToManyMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkOneToManyMappingComposite.java
deleted file mode 100644
index d25223b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkOneToManyMappingComposite.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkOneToManyMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkPrivateOwnedComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.CascadeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-
-public class OrmEclipseLinkOneToManyMappingComposite
-	extends EclipseLinkOneToManyMappingComposite<OrmOneToManyMapping>
-{
-	public OrmEclipseLinkOneToManyMappingComposite(
-			PropertyValueModel<? extends OrmOneToManyMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeOneToManySection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new EclipseLinkPrivateOwnedComposite(this, buildPrivateOwnableHolder(), container);
-		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<OrmOneToManyMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkOneToOneMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkOneToOneMappingComposite.java
deleted file mode 100644
index 61fae41..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkOneToOneMappingComposite.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.OneToOneMapping;
-import org.eclipse.jpt.core.context.orm.OrmOneToOneMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkOneToOneMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkPrivateOwnedComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.CascadeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.OneToOneJoiningStrategyPane;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | TargetEntityComposite                                                 | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | AccessTypeComposite                                                   | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OneToOneJoiningStrategyPane                                           | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | FetchTypeComposite                                                    | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | EclipseLinkJoinFetchComposite                                         | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OptionalComposite                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | EclipseLinkPrivateOwnedComposite                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | CascadeComposite                                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see OneToOneMapping
- * @see AccessTypeComposite
- * @see CascadeComposite
- * @see EclipseLinkJoinFetchComposite
- * @see EclipseLinkPrivateOwnedComposite
- * @see FetchTypeComposite
- * @see MappedByPane
- * @see OneToOneJoiningStrategyPane
- * @see OptionalComposite
- * @see TargetEntityComposite
- *
- * @version 2.2
- * @since 2.2
- */
-public class OrmEclipseLinkOneToOneMappingComposite
-extends EclipseLinkOneToOneMappingComposite<OrmOneToOneMapping>
-{
-	/**
-	 * Creates a new <code>Eclipselink1_1OneToOneMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IOneToOneMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkOneToOneMappingComposite(PropertyValueModel<? extends OrmOneToOneMapping> subjectHolder,
-	                                Composite parent,
-	                                WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeOneToOneSection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new OptionalComposite(this, container);
-		new EclipseLinkPrivateOwnedComposite(this, buildPrivateOwnableHolder(), container);
-		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-		
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<OneToOneMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkTransformationMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkTransformationMappingUiDefinition.java
deleted file mode 100644
index 2b233b8..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkTransformationMappingUiDefinition.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.PersistentAttribute;
-import org.eclipse.jpt.eclipselink.core.internal.context.orm.OrmEclipseLinkTransformationMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.AbstractEclipseLinkTransformationMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkTransformationMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.details.orm.OrmAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmXmlUiFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkTransformationMappingUiDefinition
-	extends AbstractEclipseLinkTransformationMappingUiDefinition<PersistentAttribute, OrmEclipseLinkTransformationMapping>
-	implements OrmAttributeMappingUiDefinition<OrmEclipseLinkTransformationMapping>
-{
-	// singleton
-	private static final OrmEclipseLinkTransformationMappingUiDefinition INSTANCE = 
-			new OrmEclipseLinkTransformationMappingUiDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static OrmAttributeMappingUiDefinition<OrmEclipseLinkTransformationMapping> instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Ensure single instance.
-	 */
-	private OrmEclipseLinkTransformationMappingUiDefinition() {
-		super();
-	}
-	
-	
-	public JpaComposite buildAttributeMappingComposite(
-			OrmXmlUiFactory factory,
-			PropertyValueModel<OrmEclipseLinkTransformationMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		return new EclipseLinkTransformationMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkVariableOneToOneMappingUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkVariableOneToOneMappingUiDefinition.java
deleted file mode 100644
index f8e8a04..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkVariableOneToOneMappingUiDefinition.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.PersistentAttribute;
-import org.eclipse.jpt.eclipselink.core.internal.context.orm.OrmEclipseLinkVariableOneToOneMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.AbstractEclipseLinkVariableOneToOneMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkVariableOneToOneMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.details.orm.OrmAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmXmlUiFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkVariableOneToOneMappingUiDefinition
-	extends AbstractEclipseLinkVariableOneToOneMappingUiDefinition<PersistentAttribute, OrmEclipseLinkVariableOneToOneMapping>
-	implements OrmAttributeMappingUiDefinition<OrmEclipseLinkVariableOneToOneMapping>
-{
-	// singleton
-	private static final OrmEclipseLinkVariableOneToOneMappingUiDefinition INSTANCE = 
-			new OrmEclipseLinkVariableOneToOneMappingUiDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static OrmAttributeMappingUiDefinition<OrmEclipseLinkVariableOneToOneMapping> instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Ensure single instance.
-	 */
-	private OrmEclipseLinkVariableOneToOneMappingUiDefinition() {
-		super();
-	}
-	
-	
-	public JpaComposite buildAttributeMappingComposite(
-			OrmXmlUiFactory factory,
-			PropertyValueModel<OrmEclipseLinkVariableOneToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		return new EclipseLinkVariableOneToOneMappingComposite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkVersionMappingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkVersionMappingComposite.java
deleted file mode 100644
index 5ee4e75..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/details/orm/OrmEclipseLinkVersionMappingComposite.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.details.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmVersionMapping;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkConvert;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkMutableComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkVersionMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.ColumnComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-//Remove the Converters section from 1.0 orm version mappings.
-//This is supported in EclipseLink in version 1.1, but not 1.0
-public class OrmEclipseLinkVersionMappingComposite extends EclipseLinkVersionMappingComposite<OrmVersionMapping>
-{
-	/**
-	 * Creates a new <code>EclipseLinkOrmVersionMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>VersionMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkVersionMappingComposite(PropertyValueModel<? extends OrmVersionMapping> subjectHolder,
-	                               Composite parent,
-	                               WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeVersionSection(Composite container) {
-		new ColumnComposite(this, buildColumnHolder(), container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new EclipseLinkMutableComposite(this, buildMutableHolder(), container);
-	}
-
-
-	@Override
-	//everything but the 'Define Converter' section.  This is not supported in eclipselink 1.0, but is in 1.1
-	protected Pane<EclipseLinkConvert> buildConvertComposite(PropertyValueModel<EclipseLinkConvert> convertHolder, Composite container) {
-		return new OrmEclipseLinkConvert1_0Composite(convertHolder, container, getWidgetFactory());
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/EclipseLinkPersistenceXmlUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/EclipseLinkPersistenceXmlUiDefinition.java
deleted file mode 100644
index 1f53e72..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/EclipseLinkPersistenceXmlUiDefinition.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2009  Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence;
-
-import org.eclipse.jpt.core.JpaResourceType;
-import org.eclipse.jpt.core.JptCorePlugin;
-import org.eclipse.jpt.eclipselink.ui.internal.structure.EclipseLinkPersistenceResourceModelStructureProvider;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.internal.persistence.details.AbstractPersistenceXmlResourceUiDefinition;
-import org.eclipse.jpt.ui.internal.persistence.details.PersistenceXmlUiFactory;
-import org.eclipse.jpt.ui.structure.JpaStructureProvider;
-
-public class EclipseLinkPersistenceXmlUiDefinition extends AbstractPersistenceXmlResourceUiDefinition
-{
-	// singleton
-	private static final ResourceUiDefinition INSTANCE = new EclipseLinkPersistenceXmlUiDefinition();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static ResourceUiDefinition instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private EclipseLinkPersistenceXmlUiDefinition() {
-		super();
-	}
-	
-	
-	@Override
-	protected PersistenceXmlUiFactory buildPersistenceXmlUiFactory() {
-		return new EclipseLinkPersistenceXmlUiFactory();
-	}
-	
-	public boolean providesUi(JpaResourceType resourceType) {
-		return resourceType.equals(JptCorePlugin.PERSISTENCE_XML_1_0_RESOURCE_TYPE);
-	}
-	
-	public JpaStructureProvider getStructureProvider() {
-		return EclipseLinkPersistenceResourceModelStructureProvider.instance();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/EclipseLinkPersistenceXmlUiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/EclipseLinkPersistenceXmlUiFactory.java
deleted file mode 100644
index f158828..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/EclipseLinkPersistenceXmlUiFactory.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence;
-
-import java.util.ArrayList;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logging;
-import org.eclipse.jpt.eclipselink.core.context.persistence.options.Options;
-import org.eclipse.jpt.eclipselink.core.context.persistence.schema.generation.SchemaGeneration;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.EclipseLinkPersistenceUnit;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.caching.PersistenceXmlCachingTab;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.connection.PersistenceXmlConnectionTab;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.customization.PersistenceXmlCustomizationTab;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.general.EclipseLinkPersistenceUnitGeneralComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.logging.PersistenceXmlLoggingTab;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.options.PersistenceXmlOptionsTab;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.schema.generation.PersistenceXmlSchemaGenerationTab;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaPageComposite;
-import org.eclipse.jpt.ui.internal.persistence.details.PersistenceUnitPropertiesComposite;
-import org.eclipse.jpt.ui.internal.persistence.details.PersistenceXmlUiFactory;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLinkPersistenceXmlUiFactory implements PersistenceXmlUiFactory
-{
-	// ********** constructors **********
-	
-	public EclipseLinkPersistenceXmlUiFactory() {
-		super();
-	}
-
-	// **************** persistence unit composites ****************************
-	
-	public ListIterator<JpaPageComposite> createPersistenceUnitComposites(
-						PropertyValueModel<PersistenceUnit> subjectHolder,
-						Composite parent,
-						WidgetFactory widgetFactory) {
-
-		ArrayList<JpaPageComposite> pages = new ArrayList<JpaPageComposite>(8);
-
-		PropertyValueModel<EclipseLinkPersistenceUnit> eclipseLinkPersistenceUnitHolder = 
-			this.buildEclipseLinkPersistenceUnitHolder(subjectHolder);
-
-		pages.add(this.buildGeneralTab(subjectHolder, parent, widgetFactory));
-		pages.add(this.buildConnectionTab(subjectHolder, parent, widgetFactory));
-		pages.add(this.buildCustomizationTab(eclipseLinkPersistenceUnitHolder, parent, widgetFactory));
-		pages.add(this.buildCachingTab(eclipseLinkPersistenceUnitHolder, parent, widgetFactory));
-		pages.add(this.buildLoggingTab(eclipseLinkPersistenceUnitHolder, parent, widgetFactory));
-		pages.add(this.buildOptionsTab(subjectHolder, parent, widgetFactory));
-		pages.add(this.buildSchemaGenerationTab(eclipseLinkPersistenceUnitHolder, parent, widgetFactory));
-		pages.add(this.buildPropertiesTab(subjectHolder, parent, widgetFactory));
-
-		return pages.listIterator();
-	}
-
-	// ********** persistence unit tabs **********
-	
-	protected EclipseLinkPersistenceUnitGeneralComposite buildGeneralTab(
-				PropertyValueModel<PersistenceUnit> subjectHolder,
-				Composite parent,
-				WidgetFactory widgetFactory) {
-
-		return new EclipseLinkPersistenceUnitGeneralComposite(subjectHolder, parent, widgetFactory);
-	}
-	
-	protected PersistenceXmlConnectionTab<? extends Connection> buildConnectionTab(
-				PropertyValueModel<PersistenceUnit> subjectHolder,
-				Composite parent,
-				WidgetFactory widgetFactory) {
-		PropertyValueModel<Connection> connectionHolder = this.buildConnectionHolder(subjectHolder);
-
-		return new PersistenceXmlConnectionTab<Connection>(connectionHolder, parent, widgetFactory);
-	}
-	
-	protected PersistenceXmlCustomizationTab buildCustomizationTab(
-				PropertyValueModel<EclipseLinkPersistenceUnit> subjectHolder,
-				Composite parent,
-				WidgetFactory widgetFactory) {
-		PropertyValueModel<Customization> customizationHolder = this.buildCustomizationHolder(subjectHolder);
-
-		return new PersistenceXmlCustomizationTab(customizationHolder, parent, widgetFactory);
-	}
-	
-	protected PersistenceXmlCachingTab<? extends Caching> buildCachingTab(
-				PropertyValueModel<EclipseLinkPersistenceUnit> subjectHolder,
-				Composite parent,
-				WidgetFactory widgetFactory) {
-		PropertyValueModel<Caching> cachingHolder = this.buildCachingHolder(subjectHolder);
-
-		return new PersistenceXmlCachingTab<Caching>(cachingHolder, parent, widgetFactory);
-	}
-	
-	protected PersistenceXmlLoggingTab<? extends Logging> buildLoggingTab(
-				PropertyValueModel<EclipseLinkPersistenceUnit> subjectHolder,
-				Composite parent,
-				WidgetFactory widgetFactory) {
-		PropertyValueModel<Logging> loggingHolder = this.buildLoggingHolder(subjectHolder);
-
-		return new PersistenceXmlLoggingTab<Logging>(loggingHolder, parent, widgetFactory);
-	}
-	
-	protected PersistenceXmlOptionsTab<? extends Options> buildOptionsTab(
-				PropertyValueModel<PersistenceUnit> subjectHolder,
-				Composite parent,
-				WidgetFactory widgetFactory) {
-		PropertyValueModel<Options> optionsHolder = this.buildOptionsHolder(subjectHolder);
-
-		return new PersistenceXmlOptionsTab<Options>(optionsHolder, parent, widgetFactory);
-	}
-	
-	protected PersistenceXmlSchemaGenerationTab buildSchemaGenerationTab(
-				PropertyValueModel<EclipseLinkPersistenceUnit> subjectHolder,
-				Composite parent,
-				WidgetFactory widgetFactory) {
-		PropertyValueModel<SchemaGeneration> schemaGenHolder = this.buildSchemaGenerationHolder(subjectHolder);
-
-		return new PersistenceXmlSchemaGenerationTab(schemaGenHolder, parent, widgetFactory);
-	}
-	
-	protected PersistenceUnitPropertiesComposite buildPropertiesTab(
-				PropertyValueModel<PersistenceUnit> subjectHolder,
-				Composite parent,
-				WidgetFactory widgetFactory) {
-
-		return new PersistenceUnitPropertiesComposite(subjectHolder, parent, widgetFactory);
-	}
-
-	// ********** private methods **********
-	
-	private PropertyValueModel<EclipseLinkPersistenceUnit> buildEclipseLinkPersistenceUnitHolder(
-				PropertyValueModel<PersistenceUnit> subjectHolder) {
-		return new TransformationPropertyValueModel<PersistenceUnit, EclipseLinkPersistenceUnit>(subjectHolder) {
-			@Override
-			protected EclipseLinkPersistenceUnit transform_(PersistenceUnit value) {
-				return (EclipseLinkPersistenceUnit) value;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Connection> buildConnectionHolder(
-				PropertyValueModel<PersistenceUnit> subjectHolder) {
-		return new TransformationPropertyValueModel<PersistenceUnit, Connection>(subjectHolder) {
-			@Override
-			protected Connection transform_(PersistenceUnit value) {
-
-				return ((EclipseLinkPersistenceUnit)value).getConnection();
-			}
-		};
-	}
-	
-	private PropertyValueModel<Customization> buildCustomizationHolder(
-				PropertyValueModel<EclipseLinkPersistenceUnit> subjectHolder) {
-		return new TransformationPropertyValueModel<EclipseLinkPersistenceUnit, Customization>(subjectHolder) {
-			@Override
-			protected Customization transform_(EclipseLinkPersistenceUnit value) {
-				return value.getCustomization();
-			}
-		};
-	}
-	
-	protected PropertyValueModel<Caching> buildCachingHolder(
-				PropertyValueModel<EclipseLinkPersistenceUnit> subjectHolder) {
-		return new TransformationPropertyValueModel<EclipseLinkPersistenceUnit, Caching>(subjectHolder) {
-			@Override
-			protected Caching transform_(EclipseLinkPersistenceUnit value) {
-				return value.getCaching();
-			}
-		};
-	}
-	
-	private PropertyValueModel<Logging> buildLoggingHolder(
-				PropertyValueModel<EclipseLinkPersistenceUnit> subjectHolder) {
-		return new TransformationPropertyValueModel<EclipseLinkPersistenceUnit, Logging>(subjectHolder) {
-			@Override
-			protected Logging transform_(EclipseLinkPersistenceUnit value) {
-				return value.getLogging();
-			}
-		};
-	}
-	
-	private PropertyValueModel<Options> buildOptionsHolder(
-				PropertyValueModel<PersistenceUnit> subjectHolder) {
-		return new TransformationPropertyValueModel<PersistenceUnit, Options>(subjectHolder) {
-			@Override
-			protected Options transform_(PersistenceUnit value) {
-
-				return ((EclipseLinkPersistenceUnit)value).getOptions();
-			}
-		};
-	}
-	
-	private PropertyValueModel<SchemaGeneration> buildSchemaGenerationHolder(
-				PropertyValueModel<EclipseLinkPersistenceUnit> subjectHolder) {
-		return new TransformationPropertyValueModel<EclipseLinkPersistenceUnit, SchemaGeneration>(subjectHolder) {
-			@Override
-			protected SchemaGeneration transform_(EclipseLinkPersistenceUnit value) {
-				return value.getSchemaGeneration();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/CacheDefaultsComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/CacheDefaultsComposite.java
deleted file mode 100644
index 8a87832..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/CacheDefaultsComposite.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  CacheDefaultsComposite
- */
-public class CacheDefaultsComposite<T extends Caching> extends Pane<T>
-{
-	public CacheDefaultsComposite(Pane<T> subjectHolder,
-	                                       Composite container) {
-
-		super(subjectHolder, container);
-	}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-		
-		this.initializeCacheDefaultsPane(parent);
-	}
-	
-	protected void initializeCacheDefaultsPane(Composite parent) {
-
-		Composite defaultPane = this.addTitledGroup(
-			parent,
-			EclipseLinkUiMessages.CacheDefaultsComposite_groupTitle
-		);
-
-		this.initializeCacheDefaultsComposites(defaultPane);
-	}
-	
-	protected void initializeCacheDefaultsComposites(Composite parent) {
-
-		// Default Cache Type
-		new DefaultCacheTypeComposite(this, parent);
-
-		// Default Cache Size
-		new DefaultCacheSizeComposite<T>(this, parent);
-
-		// Default Shared Cache
-		new DefaultSharedCacheComposite(this, parent);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/CacheSizeComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/CacheSizeComposite.java
deleted file mode 100644
index 936de3a..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/CacheSizeComposite.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.caching.Entity;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.IntegerCombo;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * CacheSizeComposite
- */
-public class CacheSizeComposite extends Pane<Entity>
-{
-	/**
-	 * Creates a new <code>CacheTypeComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public CacheSizeComposite(Pane<Entity> parentComposite,
-	                          Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.addCacheSizeCombo(container);
-	}	
-	
-	private void addCacheSizeCombo(Composite container) {
-		new IntegerCombo<Entity>(this, container) {
-			
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiMessages.CacheSizeComposite_cacheSize;
-			}
-		
-			@Override
-			protected String getHelpId() {
-				return EclipseLinkHelpContextIds.PERSISTENCE_CACHING;
-			}
-			
-			@Override
-			protected PropertyValueModel<Integer> buildDefaultHolder() {
-				return new PropertyAspectAdapter<Caching, Integer>(buildCachingHolder(), Caching.CACHE_SIZE_DEFAULT_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						Integer value = this.subject.getCacheSizeDefault();
-						if (value == null) {
-							value = this.subject.getDefaultCacheSizeDefault();
-						}
-						return value;
-					}
-				};
-			}
-		
-			@Override
-			protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
-				return new PropertyAspectAdapter<Entity, Integer>(this.getSubjectHolder(), Entity.CACHE_SIZE_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						return getSubjectParent().getCacheSizeOf(getSubjectName());
-					}
-
-					@Override
-					protected void setValue_(Integer value) {
-						getSubjectParent().setCacheSizeOf(getSubjectName(), value);
-					}
-				};
-			}
-		};
-	}
-	
-	private String getSubjectName() {
-		return this.getSubjectHolder().getValue().getName();
-	}
-	
-	private Caching getSubjectParent() {
-		return this.getSubjectHolder().getValue().getParent();
-	}
-	
-	private PropertyValueModel<Caching> buildCachingHolder() {
-		return new TransformationPropertyValueModel<Entity, Caching>(this.getSubjectHolder()) {
-			@Override
-			protected Caching transform_(Entity value) {
-				return value.getParent();
-			}
-		};
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/CacheTypeComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/CacheTypeComposite.java
deleted file mode 100644
index 1ebfc9d..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/CacheTypeComposite.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.CacheType;
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.caching.Entity;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.listeners.SWTPropertyChangeListenerWrapper;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * CacheTypeComposite
- */
-public class CacheTypeComposite extends Pane<Entity>
-{
-	/**
-	 * Creates a new <code>CacheTypeComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public CacheTypeComposite(Pane<Entity> parentComposite,
-	                          Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addLabeledComposite(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCachingTab_cacheTypeLabel,
-			new CacheTypeCombo(container),
-			EclipseLinkHelpContextIds.PERSISTENCE_CACHING
-		);
-	}
-
-	private class CacheTypeCombo extends EnumFormComboViewer<Entity, CacheType> {
-
-		private CacheTypeCombo(Composite parent) {
-			super(CacheTypeComposite.this, parent);
-		}
-
-		@Override
-		protected void addPropertyNames(Collection<String> propertyNames) {
-			super.addPropertyNames(propertyNames);
-			propertyNames.add(Entity.CACHE_TYPE_PROPERTY);
-		}
-
-		private PropertyValueModel<Caching> buildCachingHolder() {
-			return new TransformationPropertyValueModel<Entity, Caching>(getSubjectHolder()) {
-				@Override
-				protected Caching transform_(Entity value) {
-					return value.getParent();
-				}
-			};
-		}
-
-		private PropertyValueModel<CacheType> buildDefaultCacheTypeHolder() {
-			return new PropertyAspectAdapter<Caching, CacheType>(buildCachingHolder(), Caching.CACHE_TYPE_DEFAULT_PROPERTY) {
-				@Override
-				protected CacheType buildValue_() {
-					CacheType cacheType = subject.getCacheTypeDefault();
-					if (cacheType == null) {
-						cacheType = subject.getDefaultCacheTypeDefault();
-					}
-					return cacheType;
-				}
-			};
-		}
-
-		private PropertyChangeListener buildDefaultCachingTypePropertyChangeListener() {
-			return new SWTPropertyChangeListenerWrapper(
-				buildDefaultCachingTypePropertyChangeListener_()
-			);
-		}
-
-		private PropertyChangeListener buildDefaultCachingTypePropertyChangeListener_() {
-			return new PropertyChangeListener() {
-				public void propertyChanged(PropertyChangeEvent e) {
-					if ((e.getNewValue() != null) && !getCombo().isDisposed()) {
-						CacheTypeCombo.this.doPopulate();
-					}
-				}
-			};
-		}
-
-		@Override
-		protected CacheType[] getChoices() {
-			return CacheType.values();
-		}
-
-		@Override
-		protected CacheType getDefaultValue() {
-			return getSubjectParent().getDefaultCacheType();
-		}
-
-		@Override
-		protected String displayString(CacheType value) {
-			return buildDisplayString(
-				EclipseLinkUiMessages.class,
-				CacheTypeComposite.this,
-				value
-			);
-		}
-
-		@Override
-		protected void doPopulate() {
-			// This is required to allow the class loader to let the listener
-			// written above to access this method
-			super.doPopulate();
-		}
-
-		@Override
-		protected CacheType getValue() {
-			return getSubjectParent().getCacheTypeOf(getSubjectName());
-		}
-
-		@Override
-		protected void initialize() {
-			super.initialize();
-
-			PropertyValueModel<CacheType> defaultCacheTypeHolder =
-				buildDefaultCacheTypeHolder();
-
-			defaultCacheTypeHolder.addPropertyChangeListener(
-				PropertyValueModel.VALUE,
-				buildDefaultCachingTypePropertyChangeListener()
-			);
-		}
-
-		@Override
-		protected void setValue(CacheType value) {
-			getSubjectParent().setCacheTypeOf(getSubjectName(), value);
-		}
-
-		@Override
-		protected boolean sortChoices() {
-			return false;
-		}
-	}
-	
-	private String getSubjectName() {
-		return this.getSubjectHolder().getValue().getName();
-	}
-
-	private Caching getSubjectParent() {
-		return this.getSubjectHolder().getValue().getParent();
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/DefaultCacheSizeComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/DefaultCacheSizeComposite.java
deleted file mode 100644
index 5d745a6..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/DefaultCacheSizeComposite.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.IntegerCombo;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * CacheSizeComposite
- */
-public class DefaultCacheSizeComposite<T extends Caching> extends Pane<T>
-{
-	/**
-	 * Creates a new <code>CacheTypeComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public DefaultCacheSizeComposite(Pane<T> parentComposite,
-	                                 Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		addDefaultCacheSizeCombo(container);
-	}
-	
-	private void addDefaultCacheSizeCombo(Composite container) {
-		new IntegerCombo<Caching>(this, container) {
-			
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiMessages.DefaultCacheSizeComposite_defaultCacheSize;
-			}
-		
-			@Override
-			protected String getHelpId() {
-				return EclipseLinkHelpContextIds.PERSISTENCE_CACHING_DEFAULT_SIZE;
-			}
-
-			@Override
-			protected PropertyValueModel<Integer> buildDefaultHolder() {
-				return new PropertyAspectAdapter<Caching, Integer>(getSubjectHolder()) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getDefaultCacheSizeDefault();
-					}
-				};
-			}
-			
-			@Override
-			protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
-				return new PropertyAspectAdapter<Caching, Integer>(getSubjectHolder(), Caching.CACHE_SIZE_DEFAULT_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getCacheSizeDefault();
-					}
-
-					@Override
-					protected void setValue_(Integer value) {
-						this.subject.setCacheSizeDefault(value);
-					}
-				};			
-			}
-		};
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/DefaultCacheTypeComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/DefaultCacheTypeComposite.java
deleted file mode 100644
index 55de009..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/DefaultCacheTypeComposite.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.CacheType;
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * DefaultCacheTypeComposite
- */
-public class DefaultCacheTypeComposite extends Pane<Caching>
-{
-	/**
-	 * Creates a new <code>DefaultCacheTypeComposite</code>.
-	 * 
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public DefaultCacheTypeComposite(
-					Pane<? extends Caching> parentComposite, 
-					Composite parent) {
-
-		super( parentComposite, parent);
-	}
-
-	private EnumFormComboViewer<Caching, CacheType> buildDefaultCacheTypeCombo(Composite container) {
-		return new EnumFormComboViewer<Caching, CacheType>(this, container) {
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(Caching.CACHE_TYPE_DEFAULT_PROPERTY);
-			}
-
-			@Override
-			protected CacheType[] getChoices() {
-				return CacheType.values();
-			}
-			
-			@Override
-			protected boolean sortChoices() {
-				return false;
-			}
-
-			@Override
-			protected CacheType getDefaultValue() {
-				return getSubject().getDefaultCacheTypeDefault();
-			}
-
-			@Override
-			protected String displayString(CacheType value) {
-				return buildDisplayString(EclipseLinkUiMessages.class, DefaultCacheTypeComposite.this, value);
-			}
-
-			@Override
-			protected CacheType getValue() {
-				return getSubject().getCacheTypeDefault();
-			}
-
-			@Override
-			protected void setValue(CacheType value) {
-				getSubject().setCacheTypeDefault(value);
-			}
-		};
-	}
-	
-	@Override
-	protected void initializeLayout( Composite container) {
-
-		this.addLabeledComposite(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCachingTab_defaultCacheTypeLabel,
-			this.buildDefaultCacheTypeCombo( container),
-			EclipseLinkHelpContextIds.PERSISTENCE_CACHING_DEFAULT_TYPE	
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/DefaultSharedCacheComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/DefaultSharedCacheComposite.java
deleted file mode 100644
index 5e34a18..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/DefaultSharedCacheComposite.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * DefaultShareCacheComposite
- */
-public class DefaultSharedCacheComposite extends Pane<Caching>
-{
-	/**
-	 * Creates a new <code>DefaultShareCacheComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public DefaultSharedCacheComposite(
-					Pane<? extends Caching> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCachingTab_sharedCacheDefaultLabel,
-			this.buildDefaultSharedCacheHolder(),
-			this.buildDefaultSharedCacheStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_CACHING_DEFAULT_SHARED
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildDefaultSharedCacheHolder() {
-		return new PropertyAspectAdapter<Caching, Boolean>(getSubjectHolder(), Caching.SHARED_CACHE_DEFAULT_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getSharedCacheDefault();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setSharedCacheDefault(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildDefaultSharedCacheStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultDefaultSharedCacheHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlCachingTab_defaultSharedCacheDefaultLabel, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlCachingTab_sharedCacheDefaultLabel;
-			}
-		};
-	}
-	private PropertyValueModel<Boolean> buildDefaultDefaultSharedCacheHolder() {
-		return new PropertyAspectAdapter<Caching, Boolean>(
-			getSubjectHolder(),
-			Caching.SHARED_CACHE_DEFAULT_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getSharedCacheDefault() != null) {
-					return null;
-				}
-				return this.subject.getDefaultSharedCacheDefault();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/EclipseLinkCachingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/EclipseLinkCachingComposite.java
deleted file mode 100644
index a2c502f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/EclipseLinkCachingComposite.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  EclipseLinkCachingComposite
- */
-public class EclipseLinkCachingComposite<T extends Caching> extends Pane<T>
-{
-	public EclipseLinkCachingComposite(Pane<T> subjectHolder,
-	                                       Composite container) {
-
-		super(subjectHolder, container);
-	}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-
-		Composite container = this.addSection(
-			parent,
-			EclipseLinkUiMessages.PersistenceXmlCachingTab_sectionTitle,
-			EclipseLinkUiMessages.PersistenceXmlCachingTab_sectionDescription
-		);
-
-		// Defaults
-		new CacheDefaultsComposite<T>(this, container);
-		// EntitiesList
-		new EntityListComposite<T>(this, container);
-		// Flush Clear Cache
-		new FlushClearCacheComposite(this, container);
-	}
-	
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/EntityCachingPropertyComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/EntityCachingPropertyComposite.java
deleted file mode 100644
index b658f03..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/EntityCachingPropertyComposite.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.caching.Entity;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * @version 2.0
- * @since 2.0
- */
-public class EntityCachingPropertyComposite extends Pane<Entity> {
-
-	/**
-	 * Creates a new <code>EntityCachingPropertyComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param subjectHolder The holder of this pane's subject
-	 * @param parent The parent container
-	 */
-	public EntityCachingPropertyComposite(Pane<? extends Caching> parentComposite,
-	                                      PropertyValueModel<Entity> subjectHolder,
-	                                      Composite parent) {
-
-		super(parentComposite, subjectHolder, parent);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 */
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		// Cache Type
-		new CacheTypeComposite(this, container);
-
-		// Cache Size
-		new CacheSizeComposite(this, container);
-
-		// Share Cache
-		new SharedCacheComposite(this, container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/EntityListComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/EntityListComposite.java
deleted file mode 100644
index a0f315a..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/EntityListComposite.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2007, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;
-
-import java.util.ListIterator;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.SearchEngine;
-import org.eclipse.jdt.ui.IJavaElementSearchConstants;
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.caching.Entity;
-import org.eclipse.jpt.eclipselink.ui.JptEclipseLinkUiPlugin;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.AddRemoveListPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ObjectListSelectionModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.SelectionDialog;
-import org.eclipse.ui.progress.IProgressService;
-
-/**
- *  EntityListComposite
- */
-public class EntityListComposite<T extends Caching> extends Pane<T>
-{
-	WritablePropertyValueModel<Entity> entityHolder;
-	
-	public EntityListComposite(Pane<T> parentComposite, Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initialize() {
-		super.initialize();
-		this.entityHolder = this.buildEntityHolder();
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		container = this.addTitledGroup(
-			container,
-			EclipseLinkUiMessages.CachingEntityListComposite_groupTitle
-		);
-
-		// Entities add/remove list pane
-		new AddRemoveListPane<Caching>(
-			this,
-			container,
-			this.buildEntitiesAdapter(),
-			this.buildEntitiesListHolder(),
-			this.entityHolder,
-			this.buildEntityLabelProvider(),
-			EclipseLinkHelpContextIds.PERSISTENCE_CACHING
-		);
-
-		// Entity Caching property pane
-		EntityCachingPropertyComposite pane = new EntityCachingPropertyComposite(
-			this,
-			this.entityHolder,
-			container
-		);
-		this.installPaneEnabler(this.entityHolder, pane);
-	}
-	
-	private AddRemoveListPane.Adapter buildEntitiesAdapter() {
-		return new AddRemoveListPane.AbstractAdapter() {
-			public void addNewItem(ObjectListSelectionModel listSelectionModel) {
-				EntityListComposite.this.addEntities(listSelectionModel);
-			}
-
-			public void removeSelectedItems(ObjectListSelectionModel listSelectionModel) {
-				Caching caching = getSubject();
-				for (Object item : listSelectionModel.selectedValues()) {
-					Entity entityCaching = (Entity) item;
-					caching.removeEntity(entityCaching.getName());
-				}
-			}
-		};
-	}
-	
-	private void addEntities(ObjectListSelectionModel listSelectionModel) {
-
-		IType type = this.chooseEntity();
-
-		if (type != null) {
-			String entityName = this.getEntityName(type.getFullyQualifiedName());
-			if (entityName == null) {
-				entityName = type.getElementName();
-			}
-			
-			if( ! this.getSubject().entityExists(entityName)) {
-				this.getSubject().addEntity(entityName);
-				int index = CollectionTools.indexOf(this.getSubject().entityNames(), entityName);
-				Entity entity = (Entity) listSelectionModel.getListModel().getElementAt(index);
-				listSelectionModel.setSelectedValue(entity);
-				this.entityHolder.setValue(entity);
-			}
-		}
-	}
-
-	private String getEntityName(String fullyQualifiedTypeName) {
-
-		org.eclipse.jpt.core.context.Entity entity = getSubject().getPersistenceUnit().getEntity(fullyQualifiedTypeName);
-		return (entity != null) ? entity.getName() : null;
-	}
-	
-	private IType chooseEntity() {
-		IJavaProject javaProject = getJavaProject();
-		IJavaElement[] elements = new IJavaElement[] { javaProject };
-		IJavaSearchScope scope = SearchEngine.createJavaSearchScope(elements);
-		IProgressService service = PlatformUI.getWorkbench().getProgressService();
-		SelectionDialog typeSelectionDialog;
-
-		try {
-			typeSelectionDialog = JavaUI.createTypeDialog(
-				getShell(),
-				service,
-				scope,
-				IJavaElementSearchConstants.CONSIDER_CLASSES,
-				false,
-				""
-			);
-		}
-		catch (JavaModelException e) {
-			JptEclipseLinkUiPlugin.log(e);
-			return null;
-		}
-		typeSelectionDialog.setTitle(EclipseLinkUiMessages.CachingEntityListComposite_dialogTitle);
-		typeSelectionDialog.setMessage(EclipseLinkUiMessages.CachingEntityListComposite_dialogMessage);
-
-		if (typeSelectionDialog.open() == Window.OK) {
-			return (IType) typeSelectionDialog.getResult()[0];
-		}
-		return null;
-	}
-
-	private IJavaProject getJavaProject() {
-		return getSubject().getJpaProject().getJavaProject();
-	}
-
-	private ILabelProvider buildEntityLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				Entity entityCaching = (Entity) element;
-				return entityCaching.getName();
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Entity> buildEntityHolder() {
-		return new SimplePropertyValueModel<Entity>();
-	}
-
-	private ListValueModel<Entity> buildEntitiesListHolder() {
-		return new ListAspectAdapter<Caching, Entity>(
-					this.getSubjectHolder(), Caching.ENTITIES_LIST) {
-			@Override
-			protected ListIterator<Entity> listIterator_() {
-				return this.subject.entities();
-			}
-			@Override
-			protected int size_() {
-				return this.subject.entitiesSize();
-			}
-		};
-	}
-
-	private void installPaneEnabler(WritablePropertyValueModel<Entity> entityHolder,
-	                                EntityCachingPropertyComposite pane) {
-
-		new PaneEnabler(
-			this.buildPaneEnablerHolder(entityHolder),
-			pane
-		);
-	}
-
-	private PropertyValueModel<Boolean> buildPaneEnablerHolder(WritablePropertyValueModel<Entity> entityHolder) {
-		return new TransformationPropertyValueModel<Entity, Boolean>(entityHolder) {
-			@Override
-			protected Boolean transform_(Entity value) {
-				return value.entityNameIsValid();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/FlushClearCacheComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/FlushClearCacheComposite.java
deleted file mode 100644
index 5b37dd0..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/FlushClearCacheComposite.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.FlushClearCache;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * FlushClearCacheComposite
- */
-public class FlushClearCacheComposite extends Pane<Caching>
-{
-	/**
-	 * Creates a new <code>FlushClearCacheComposite</code>.
-	 * 
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public FlushClearCacheComposite(
-				Pane<? extends Caching> parentComposite, 
-				Composite parent) {
-		
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-		this.addLabeledComposite(
-				parent,
-				EclipseLinkUiMessages.PersistenceXmlCachingTab_FlushClearCacheLabel,
-				this.addFlushClearCacheCombo(parent),
-				EclipseLinkHelpContextIds.PERSISTENCE_CACHING
-		);
-	}
-
-	private EnumFormComboViewer<Caching, FlushClearCache> addFlushClearCacheCombo(Composite container) {
-		return new EnumFormComboViewer<Caching, FlushClearCache>(this, container) {
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(Caching.FLUSH_CLEAR_CACHE_PROPERTY);
-			}
-
-			@Override
-			protected FlushClearCache[] getChoices() {
-				return FlushClearCache.values();
-			}
-			
-			@Override
-			protected boolean sortChoices() {
-				return false;
-			}
-			
-			@Override
-			protected FlushClearCache getDefaultValue() {
-				return this.getSubject().getDefaultFlushClearCache();
-			}
-
-			@Override
-			protected String displayString(FlushClearCache value) {
-				return this.buildDisplayString(EclipseLinkUiMessages.class, FlushClearCacheComposite.class, value);
-			}
-
-			@Override
-			protected FlushClearCache getValue() {
-				return this.getSubject().getFlushClearCache();
-			}
-
-			@Override
-			protected void setValue(FlushClearCache value) {
-				this.getSubject().setFlushClearCache(value);
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/PersistenceXmlCachingTab.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/PersistenceXmlCachingTab.java
deleted file mode 100644
index 6aea5bf..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/PersistenceXmlCachingTab.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2007, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaPageComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  PersistenceXmlCachingTab
- */
-public class PersistenceXmlCachingTab<T extends Caching>
-								extends Pane<T>
-								implements JpaPageComposite
-{
-	public PersistenceXmlCachingTab(
-			PropertyValueModel<T> subjectHolder,
-			Composite parent,
-            WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		
-		new EclipseLinkCachingComposite<T>(this, container);
-	}
-
-	// ********** JpaPageComposite implementation **********
-
-	public String getHelpID() {
-		return EclipseLinkHelpContextIds.PERSISTENCE_CACHING;
-	}
-
-	public ImageDescriptor getPageImageDescriptor() {
-		return null;
-	}
-	public String getPageText() {
-		return EclipseLinkUiMessages.PersistenceXmlCachingTab_title;
-	}
-
-	// ********** Layout **********
-	
-	@Override
-	protected Composite addContainer(Composite parent) {
-		GridLayout layout = new GridLayout(1, true);
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		layout.marginTop = 0;
-		layout.marginLeft = 0;
-		layout.marginBottom = 0;
-		layout.marginRight = 0;
-		layout.verticalSpacing = 15;
-		
-		Composite container = addPane(parent, layout);
-		updateGridData(container);
-		
-		return container;
-	}
-
-	private void updateGridData(Composite container) {
-		GridData gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		container.setLayoutData(gridData);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/SharedCacheComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/SharedCacheComposite.java
deleted file mode 100644
index 1540bd7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/caching/SharedCacheComposite.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.caching;
-
-import java.util.ArrayList;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.caching.Entity;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.ui.internal.widgets.TriStateCheckBox;
-import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.ListPropertyValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  SharedCacheComposite
- */
-public class SharedCacheComposite extends Pane<Entity>
-{
-	private TriStateCheckBox sharedCacheCheckBox;
-
-	/**
-	 * Creates a new <code>ShareCacheComposite</code>.
-	 *
-	 * @param parentController The parent container of this one
-	 * @param parent The parent container
-	 */
-	public SharedCacheComposite(Pane<Entity> parentComposite,
-	                           Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	private PropertyValueModel<Caching> buildCachingHolder() {
-		return new TransformationPropertyValueModel<Entity, Caching>(this.getSubjectHolder()) {
-			@Override
-			protected Caching transform_(Entity value) {
-				return value.getParent();
-			}
-		};
-	}
-
-	private PropertyValueModel<Boolean> buildDefaultAndNonDefaultSharedCacheHolder() {
-		return new ListPropertyValueModelAdapter<Boolean>(
-			buildDefaultAndNonDefaultSharedCacheListHolder()
-		) {
-			@Override
-			protected Boolean buildValue() {
-				// If the number of ListValueModel equals 1, that means the shared
-				// Cache properties is not set (partially selected), which means we
-				// want to see the default value appended to the text
-				if (this.listHolder.size() == 1) {
-					return (Boolean) this.listHolder.listIterator().next();
-				}
-				return null;
-			}
-		};
-	}
-
-	private ListValueModel<Boolean> buildDefaultAndNonDefaultSharedCacheListHolder() {
-		ArrayList<ListValueModel<Boolean>> holders = new ArrayList<ListValueModel<Boolean>>(2);
-		holders.add(buildSharedCacheListHolder());
-		holders.add(buildDefaultSharedCacheListHolder());
-
-		return new CompositeListValueModel<ListValueModel<Boolean>, Boolean>(
-			holders
-		);
-	}
-
-	private PropertyValueModel<Boolean> buildDefaultSharedCacheHolder() {
-		return new PropertyAspectAdapter<Caching, Boolean>(buildCachingHolder(), Caching.SHARED_CACHE_DEFAULT_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				Boolean value = this.subject.getSharedCacheDefault();
-				if (value == null) {
-					value = this.subject.getDefaultSharedCacheDefault();
-				}
-				return value;
-			}
-		};
-	}
-
-	private ListValueModel<Boolean> buildDefaultSharedCacheListHolder() {
-		return new PropertyListValueModelAdapter<Boolean>(
-			buildDefaultSharedCacheHolder()
-		);
-	}
-
-	private WritablePropertyValueModel<Boolean> buildSharedCacheHolder() {
-		return new PropertyAspectAdapter<Entity, Boolean>(
-					getSubjectHolder(), Entity.SHARED_CACHE_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return getSubjectParent().getSharedCacheOf(getSubjectName());
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				getSubjectParent().setSharedCacheOf(getSubjectName(), value);
-			}
-		};
-	}
-	
-	private String getSubjectName() {
-		return this.getSubjectHolder().getValue().getName();
-	}
-	
-	private Caching getSubjectParent() {
-		return this.getSubjectHolder().getValue().getParent();
-	}
-
-	private ListValueModel<Boolean> buildSharedCacheListHolder() {
-		return new PropertyListValueModelAdapter<Boolean>(
-			buildSharedCacheHolder()
-		);
-	}
-
-	private PropertyValueModel<String> buildSharedCacheStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultAndNonDefaultSharedCacheHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlCachingTab_defaultSharedCacheLabel, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlCachingTab_sharedCacheLabel;
-			}
-		};
-	}
-
-	@Override
-	public void enableWidgets(boolean enabled) {
-		super.enableWidgets(enabled);
-		this.sharedCacheCheckBox.setEnabled(enabled);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.sharedCacheCheckBox = this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCachingTab_sharedCacheLabel,
-			this.buildSharedCacheHolder(),
-			this.buildSharedCacheStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_CACHING
-		);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/BatchWritingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/BatchWritingComposite.java
deleted file mode 100644
index d9dcd01..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/BatchWritingComposite.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.BatchWriting;
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * BatchWritingComposite
- */
-public class BatchWritingComposite<T extends Connection>
-		extends Pane<T>
-{
-	/**
-	 * Creates a new <code>BatchWritingComposite</code>.
-	 * 
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public BatchWritingComposite(
-					Pane<T> parentComposite, 
-					Composite parent) {
-
-		super( parentComposite, parent);
-	}
-
-	private EnumFormComboViewer<Connection, BatchWriting> addBatchWritingCombo(Composite container) {
-		return new EnumFormComboViewer<Connection, BatchWriting>(this, container) {
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(Connection.BATCH_WRITING_PROPERTY);
-			}
-
-			@Override
-			protected BatchWriting[] getChoices() {
-				return BatchWriting.values();
-			}
-
-			@Override
-			protected BatchWriting getDefaultValue() {
-				return getSubject().getDefaultBatchWriting();
-			}
-
-			@Override
-			protected String displayString(BatchWriting value) {
-				return buildDisplayString(EclipseLinkUiMessages.class, BatchWritingComposite.this, value);
-			}
-
-			@Override
-			protected BatchWriting getValue() {
-				return getSubject().getBatchWriting();
-			}
-
-			@Override
-			protected void setValue(BatchWriting value) {
-				getSubject().setBatchWriting(value);
-			}
-		};
-	}
-	
-	@Override
-	protected void initializeLayout( Composite container) {
-
-		this.addLabeledComposite(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_batchWritingLabel,
-			this.addBatchWritingCombo( container),
-			JpaHelpContextIds.PERSISTENCE_XML_CONNECTION
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/CacheStatementsPropertiesComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/CacheStatementsPropertiesComposite.java
deleted file mode 100644
index a0a2a52..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/CacheStatementsPropertiesComposite.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.IntegerCombo;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.StringConverter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  CacheStatementsPropertiesComposite
- */
-public class CacheStatementsPropertiesComposite<T extends Connection> 
-	extends Pane<T>
-{
-	public CacheStatementsPropertiesComposite(
-						Pane<T> parentComposite, 
-						Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		WritablePropertyValueModel<Boolean> cacheStatementsHolder = buildCacheStatementsHolder();
-
-		container = this.addSubPane(container, 3, 5, 0, 0, 0);
-		
-		this.addTriStateCheckBox(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_cacheStatementsLabel,
-			cacheStatementsHolder,
-			JpaHelpContextIds.PERSISTENCE_XML_CONNECTION
-		);
-		IntegerCombo<?> combo = addCacheStatementsSizeCombo(container);
-
-		this.installControlEnabler(cacheStatementsHolder, combo);
-	}
-
-	private WritablePropertyValueModel<Boolean> buildCacheStatementsHolder() {
-		return new PropertyAspectAdapter<Connection, Boolean>(getSubjectHolder(), Connection.CACHE_STATEMENTS_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getCacheStatements();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setCacheStatements(value);
-			}
-
-			@Override
-			protected void subjectChanged() {
-				Object oldValue = this.getValue();
-				super.subjectChanged();
-				Object newValue = this.getValue();
-
-				// Make sure the default value is appended to the text
-				if (oldValue == newValue && newValue == null) {
-					this.fireAspectChanged(Boolean.TRUE, newValue);
-				}
-			}
-		};
-	}
-	
-	private IntegerCombo<Connection> addCacheStatementsSizeCombo(Composite container) {
-		return new IntegerCombo<Connection>(this, container) {
-			
-			@Override
-			protected Combo addIntegerCombo(Composite container) {
-				return this.addEditableCombo(
-						container,
-						buildDefaultListHolder(),
-						buildSelectedItemStringHolder(),
-						StringConverter.Default.<String>instance());
-			}
-		
-			@Override
-			protected String getLabelText() {
-				throw new UnsupportedOperationException();
-			}
-		
-			@Override
-			protected String getHelpId() {
-				return JpaHelpContextIds.PERSISTENCE_XML_CONNECTION;
-			}
-
-			@Override
-			protected PropertyValueModel<Integer> buildDefaultHolder() {
-				return new PropertyAspectAdapter<Connection, Integer>(getSubjectHolder()) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getDefaultCacheStatementsSize();
-					}
-				};
-			}
-			
-			@Override
-			protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
-				return new PropertyAspectAdapter<Connection, Integer>(getSubjectHolder(), Connection.CACHE_STATEMENTS_SIZE_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getCacheStatementsSize();
-					}
-
-					@Override
-					protected void setValue_(Integer value) {
-						this.subject.setCacheStatementsSize(value);
-					}
-				};
-			}
-		};
-	}
-
-	private void installControlEnabler(WritablePropertyValueModel<Boolean> cacheStatementsHolder, IntegerCombo<?> combo) {
-
-		new PaneEnabler(cacheStatementsHolder, combo);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/ConnectionPropertiesComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/ConnectionPropertiesComposite.java
deleted file mode 100644
index e173e28..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/ConnectionPropertiesComposite.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  ConnectionPropertiesComposite
- */
-public class ConnectionPropertiesComposite<T extends Connection> 
-	extends Pane<T>
-{
-	public ConnectionPropertiesComposite(
-					Pane<T> parentComposite, 
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		container = addTitledGroup(
-			container,
-			EclipseLinkUiMessages.ConnectionPropertiesComposite_Database_GroupBox
-		);
-
-		// Data source
-		new DataSourcePropertiesComposite<T>(this, container);
-		// EclipseLink Connection Pool
-		new JdbcPropertiesComposite<T>(this, container);
-		// Exclusive Connections
-		new JdbcExclusiveConnectionsPropertiesComposite<T>(this, container);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/DataSourcePropertiesComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/DataSourcePropertiesComposite.java
deleted file mode 100644
index d65753a..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/DataSourcePropertiesComposite.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
-import org.eclipse.jpt.core.context.persistence.PersistenceUnitTransactionType;
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-
-/**
- * @version 2.0
- * @since 2.0
- */
-public class DataSourcePropertiesComposite<T extends Connection> 
-	extends Pane<T>
-{
-	/**
-	 * Creates a new <code>DataSourcePropertiesComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public DataSourcePropertiesComposite(
-							Pane<T> parentComposite,
-							Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	private WritablePropertyValueModel<String> buildJtaDataSourceHolder() {
-		return new PropertyAspectAdapter<PersistenceUnit, String>(buildPersistenceUnitHolder(), PersistenceUnit.JTA_DATA_SOURCE_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getJtaDataSource();
-			}
-
-			@Override
-			protected void setValue_(String value) {
-				if (value.length() == 0) {
-					value = null;
-				}
-				this.subject.setJtaDataSource(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<Boolean> buildJTADataSourceHolder() {
-		return new TransformationPropertyValueModel<PersistenceUnitTransactionType, Boolean>(buildTransactionTypeHolder()) {
-			@Override
-			protected Boolean transform(PersistenceUnitTransactionType value) {
-				return Boolean.valueOf(this.transform2(value));
-			}
-			private boolean transform2(PersistenceUnitTransactionType value) {
-				return value == null || value == PersistenceUnitTransactionType.JTA;
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<String> buildNonJtaDataSourceHolder() {
-		return new PropertyAspectAdapter<PersistenceUnit, String>(buildPersistenceUnitHolder(), PersistenceUnit.NON_JTA_DATA_SOURCE_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getNonJtaDataSource();
-			}
-
-			@Override
-			protected void setValue_(String value) {
-				if (value.length() == 0) {
-					value = null;
-				}
-				this.subject.setNonJtaDataSource(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<Boolean> buildNonJTADataSourceHolder() {
-		return new TransformationPropertyValueModel<PersistenceUnitTransactionType, Boolean>(buildTransactionTypeHolder()) {
-			@Override
-			protected Boolean transform(PersistenceUnitTransactionType value) {
-				return Boolean.valueOf(value == PersistenceUnitTransactionType.RESOURCE_LOCAL);
-			}
-		};
-	}
-
-	private PropertyValueModel<PersistenceUnitTransactionType> buildTransactionTypeHolder() {
-		return new PropertyAspectAdapter<PersistenceUnit, PersistenceUnitTransactionType>(
-				buildPersistenceUnitHolder(), 
-				PersistenceUnit.SPECIFIED_TRANSACTION_TYPE_PROPERTY, 
-				PersistenceUnit.DEFAULT_TRANSACTION_TYPE_PROPERTY) {
-			@Override
-			protected PersistenceUnitTransactionType buildValue_() {
-				return this.subject.getTransactionType();
-			}
-		};
-	}
-
-	private PropertyValueModel<PersistenceUnit> buildPersistenceUnitHolder() {
-		return new PropertyAspectAdapter<Connection, PersistenceUnit>(getSubjectHolder()) {
-			@Override
-			protected PersistenceUnit buildValue_() {
-				return this.subject.getPersistenceUnit();
-			}
-		};
-		
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		int groupBoxMargin = getGroupBoxMargin();
-
-		container = addSubPane(container, 0, groupBoxMargin, 0, groupBoxMargin);
-
-		// JTA Data Source
-		PropertyValueModel<Boolean> jtaEnabled = this.buildJTADataSourceHolder();
-		Label jtaLabel = addLabel(container, EclipseLinkUiMessages.PersistenceXmlConnectionTab_jtaDataSourceLabel, jtaEnabled);
-		Text jtaText = addText(container, this.buildJtaDataSourceHolder(), this.getHelpID(), jtaEnabled);
-		this.addLabeledComposite(container, jtaLabel, jtaText, this.getHelpID());
-
-		// Non-JTA Data Source
-		PropertyValueModel<Boolean> nonJtaEnabled = this.buildNonJTADataSourceHolder();
-		Label nonJtaLabel = addLabel(container, EclipseLinkUiMessages.PersistenceXmlConnectionTab_nonJtaDataSourceLabel, nonJtaEnabled);
-		Text nonJtaText = addText(container, buildNonJtaDataSourceHolder(), this.getHelpID(), nonJtaEnabled);
-		this.addLabeledComposite(container, nonJtaLabel, nonJtaText, this.getHelpID());
-	}
-
-	public String getHelpID() {
-		return JpaHelpContextIds.PERSISTENCE_XML_CONNECTION;
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/EclipseLinkConnectionComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/EclipseLinkConnectionComposite.java
deleted file mode 100644
index a0155e7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/EclipseLinkConnectionComposite.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * EclipseLinkConnectionComposite
- */
-public class EclipseLinkConnectionComposite<T extends Connection>
-	extends Pane<T>
-{
-	public EclipseLinkConnectionComposite(
-					Pane<T> subjectHolder,
-					Composite container) {
-		super(subjectHolder, container, false);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		int groupBoxMargin = getGroupBoxMargin() * 2;
-
-		container = addSection(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_sectionTitle,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_sectionDescription
-		);
-
-		Composite subPane = addSubPane(
-			container,
-			0, groupBoxMargin, 10, groupBoxMargin
-		);
-
-		new TransactionTypeComposite<T>(this, subPane);
-
-		new BatchWritingComposite<T>(this, subPane);
-
-		new CacheStatementsPropertiesComposite<T>(this, subPane);
-
-		new NativeSqlComposite<T>(this, subPane);
-
-		new ConnectionPropertiesComposite<T>(this, container);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcBindParametersComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcBindParametersComposite.java
deleted file mode 100644
index 10f2e9c..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcBindParametersComposite.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * JdbcBindParametersComposite
- */
-public class JdbcBindParametersComposite extends Pane<Connection>
-{
-	/**
-	 * Creates a new <code>JdbcBindParametersComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public JdbcBindParametersComposite(
-					Pane<? extends Connection> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_bindParametersLabel,
-			this.buildBindParametersHolder(),
-			this.buildBindParametersStringHolder(),
-			JpaHelpContextIds.PERSISTENCE_XML_CONNECTION
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildBindParametersHolder() {
-		return new PropertyAspectAdapter<Connection, Boolean>(getSubjectHolder(), Connection.BIND_PARAMETERS_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getBindParameters();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setBindParameters(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildBindParametersStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultBindParametersHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlConnectionTab_bindParametersLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlConnectionTab_bindParametersLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultBindParametersHolder() {
-		return new PropertyAspectAdapter<Connection, Boolean>(
-			getSubjectHolder(),
-			Connection.BIND_PARAMETERS_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getBindParameters() != null) {
-					return null;
-				}
-				return this.subject.getDefaultBindParameters();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcConnectionPropertiesComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcConnectionPropertiesComposite.java
deleted file mode 100644
index a34aa45..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcConnectionPropertiesComposite.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import java.util.Comparator;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jpt.db.ConnectionProfile;
-import org.eclipse.jpt.db.ConnectionProfileFactory;
-import org.eclipse.jpt.db.JptDbPlugin;
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.JptUiPlugin;
-import org.eclipse.jpt.ui.internal.jpa2.persistence.JptUiPersistence2_0Messages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
-
-/**
- *  JdbcConnectionPropertiesComposite
- */
-@SuppressWarnings("nls")
-public class JdbcConnectionPropertiesComposite<T extends Connection> 
-	extends Pane<T>
-{
-	/**
-	 * The constant ID used to retrieve the dialog settings.
-	 */
-	private static final String DIALOG_SETTINGS = "org.eclipse.jpt.eclipselink.ui.dialogs.ConnectionDialog";
-
-	public JdbcConnectionPropertiesComposite(
-					Pane<T> parentComposite, 
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	private WritablePropertyValueModel<String> buildPasswordHolder() {
-		return new PropertyAspectAdapter<Connection, String>(getSubjectHolder(), Connection.PASSWORD_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return subject.getPassword();
-			}
-
-			@Override
-			protected void setValue_(String value) {
-				if (value.length() == 0) {
-					value = null;
-				}
-				subject.setPassword(value);
-			}
-		};
-	}
-
-	private Runnable buildPopulateFromConnectionAction() {
-		return new Runnable() {
-			public void run() {
-				promptConnection();
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<String> buildUrlHolder() {
-		return new PropertyAspectAdapter<Connection, String>(getSubjectHolder(), Connection.URL_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return subject.getUrl();
-			}
-
-			@Override
-			protected void setValue_(String value) {
-				if (value.length() == 0) {
-					value = null;
-				}
-				subject.setUrl(value);
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<String> buildUserHolder() {
-		return new PropertyAspectAdapter<Connection, String>(getSubjectHolder(), Connection.USER_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return subject.getUser();
-			}
-
-			@Override
-			protected void setValue_(String value) {
-				if (value.length() == 0) {
-					value = null;
-				}
-				subject.setUser(value);
-			}
-		};
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		// Populate from Connection hyperlink
-		this.addHyperlink(
-			container,
-			JptUiPersistence2_0Messages.JdbcConnectionPropertiesComposite_populateFromConnectionHyperLink,
-			buildPopulateFromConnectionAction()
-		);
-
-		// Driver
-		new JdbcDriverComposite(this, container);
-
-		// Url
-		this.addLabeledText(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_urlLabel,
-			buildUrlHolder()
-		);
-
-		// User
-		this.addLabeledText(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_userLabel,
-			buildUserHolder()
-		);
-
-		// Password
-		this.addLabeledPasswordText(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_passwordLabel,
-			buildPasswordHolder()
-		);
-
-		// Bind Parameters
-		new JdbcBindParametersComposite(this, container);
-	}
-
-	void promptConnection() {
-
-		ConnectionSelectionDialog dialog = new ConnectionSelectionDialog();
-
-		if (dialog.open() != IDialogConstants.OK_ID) {
-			return;
-		}
-
-		String name = (String) dialog.getResult()[0];
-		ConnectionProfile cp = this.getConnectionProfileFactory().buildConnectionProfile(name);
-
-		Connection connection = getSubject();
-		connection.setUrl((cp == null) ? "" : cp.getURL());
-		connection.setUser((cp == null) ? "" : cp.getUserName());
-		connection.setPassword((cp == null) ? "" : cp.getUserPassword());
-		connection.setDriver((cp == null) ? "" : cp.getDriverClassName());
-	}
-
-	ConnectionProfileFactory getConnectionProfileFactory() {
-		// we allow the user to select any connection profile and simply
-		// take the settings from it (user, password, etc.) and give them
-		// to the EclipseLink connection, so we go
-		// to the db plug-in directly to get the factory
-		return JptDbPlugin.instance().getConnectionProfileFactory();
-	}
-
-	// broaden access a bit
-	Shell getShell_() {
-		return this.getShell();
-	}
-
-	/**
-	 * This dialog shows the list of possible connection names and lets the user
-	 * the option to filter them using a search field.
-	 */
-	protected class ConnectionSelectionDialog extends FilteredItemsSelectionDialog {
-
-		/**
-		 * Creates a new <code>MappingSelectionDialog</code>.
-		 */
-		protected ConnectionSelectionDialog() {
-			super(JdbcConnectionPropertiesComposite.this.getShell_(), false);
-			setMessage(EclipseLinkUiMessages.JdbcConnectionPropertiesComposite_ConnectionDialog_Message);
-			setTitle(EclipseLinkUiMessages.JdbcConnectionPropertiesComposite_ConnectionDialog_Title);
-			setListLabelProvider(buildLabelProvider());
-			setDetailsLabelProvider(buildLabelProvider());
-		}
-
-		protected ILabelProvider buildLabelProvider() {
-			return new LabelProvider() {
-				@Override
-				public Image getImage(Object element) {
-					return null;
-				}
-
-				@Override
-				public String getText(Object element) {
-					return (element == null) ? "" : element.toString();
-				}
-			};
-		}
-
-		/*
-		 * (non-Javadoc)
-		 */
-		@Override
-		protected Control createExtendedContentArea(Composite parent) {
-			return null;
-		}
-
-		/*
-		 * (non-Javadoc)
-		 */
-		@Override
-		protected ItemsFilter createFilter() {
-			return new ConnectionItemsFilter();
-		}
-
-		/*
-		 * (non-Javadoc)
-		 */
-		@Override
-		protected void fillContentProvider(AbstractContentProvider provider,
-		                                   ItemsFilter itemsFilter,
-		                                   IProgressMonitor monitor) throws CoreException {
-
-			monitor.beginTask(null, -1);
-
-			try {
-				// Add the connection names to the dialog
-				for (String name : this.getConnectionProfileNames()) {
-					provider.add(name, itemsFilter);
-				}
-			}
-			finally {
-				monitor.done();
-			}
-		}
-
-		private Iterable<String> getConnectionProfileNames() {
-			return JdbcConnectionPropertiesComposite.this.getConnectionProfileFactory().getConnectionProfileNames();
-		}
-
-		/*
-		 * (non-Javadoc)
-		 */
-		@Override
-		protected IDialogSettings getDialogSettings() {
-
-			IDialogSettings dialogSettings = JptUiPlugin.instance().getDialogSettings();
-			IDialogSettings settings = dialogSettings.getSection(DIALOG_SETTINGS);
-
-			if (settings == null) {
-				settings = dialogSettings.addNewSection(DIALOG_SETTINGS);
-			}
-
-			return settings;
-		}
-
-		/*
-		 * (non-Javadoc)
-		 */
-		@Override
-		public String getElementName(Object object) {
-			return object.toString();
-		}
-
-		/*
-		 * (non-Javadoc)
-		 */
-		@Override
-		protected Comparator<String> getItemsComparator() {
-			return new Comparator<String>() {
-				public int compare(String item1, String item2) {
-					return item1.compareTo(item2);
-				}
-			};
-		}
-
-		/*
-		 * (non-Javadoc)
-		 */
-		@Override
-		protected IStatus validateItem(Object item) {
-
-			if (item == null) {
-				return new Status(IStatus.ERROR, JptUiPlugin.PLUGIN_ID, IStatus.ERROR, "", null);
-			}
-
-			return Status.OK_STATUS;
-		}
-
-		/**
-		 * Create the filter responsible to remove any connection name based on
-		 * the pattern entered in the text field.
-		 */
-		private class ConnectionItemsFilter extends ItemsFilter {
-
-			/**
-			 * Creates a new <code>ConnectionItemsFilter</code>.
-			 */
-			ConnectionItemsFilter() {
-
-				super();
-
-				// Make sure that if the pattern is empty, we specify * in order
-				// to show all the mapping types
-				if (StringTools.stringIsEmpty(getPattern())) {
-					patternMatcher.setPattern("*");
-				}
-			}
-
-			/*
-			 * (non-Javadoc)
-			 */
-			@Override
-			public boolean isConsistentItem(Object item) {
-				return true;
-			}
-
-			/*
-			 * (non-Javadoc)
-			 */
-			@Override
-			public boolean matchItem(Object item) {
-				return matches(item.toString());
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcDriverComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcDriverComposite.java
deleted file mode 100644
index d4e5c29..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcDriverComposite.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.ClassChooserPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  JdbcDriverComposite
- */
-public class JdbcDriverComposite extends Pane<Connection>
-{
-	/**
-	 * Creates a new <code>EventListenerComposite</code>.
-	 *
-	 * @param parentPane The parent pane of this one
-	 * @param parent The parent container
-	 */
-	public JdbcDriverComposite(Pane<? extends Connection> parentPane,
-                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	private ClassChooserPane<Connection> initializeClassChooser(Composite container) {
-
-		return new ClassChooserPane<Connection>(this, container) {
-
-			@Override
-			protected WritablePropertyValueModel<String> buildTextHolder() {
-				return new PropertyAspectAdapter<Connection, String>(
-							this.getSubjectHolder(), Connection.DRIVER_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-						return this.subject.getDriver();
-					}
-
-					@Override
-					protected void setValue_(String value) {
-
-						if (value.length() == 0) {
-							value = null;
-						}
-						this.subject.setDriver(value);
-					}
-				};
-			}
-
-			@Override
-			protected String getClassName() {
-				return this.getSubject().getDriver();
-			}
-
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiMessages.PersistenceXmlConnectionTab_driverLabel;
-			}
-			
-			@Override
-			protected JpaProject getJpaProject() {
-				return getSubject().getJpaProject();
-			}
-			@Override
-			protected void setClassName(String className) {
-				this.getSubject().setDriver(className);				
-			}
-			
-			@Override
-			protected boolean allowTypeCreation() {
-				//Does not make sense to allow the user to create a new Driver class
-				return false;
-			}
-		};
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.initializeClassChooser(container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcExclusiveConnectionModeComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcExclusiveConnectionModeComposite.java
deleted file mode 100644
index 34b5c48..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcExclusiveConnectionModeComposite.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.ExclusiveConnectionMode;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * ExclusiveConnectionModeComposite
- */
-public class JdbcExclusiveConnectionModeComposite<T extends Connection>
-		extends Pane<T>
-{
-	/**
-	 * Creates a new <code>ExclusiveConnectionModeComposite</code>.
-	 * 
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public JdbcExclusiveConnectionModeComposite(
-					Pane<T> parentComposite, 
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-	
-	@Override
-	protected void initializeLayout( Composite container) {
-
-		this.addLabeledComposite(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_exclusiveConnectionModeLabel,
-			this.addExclusiveConnectionModeCombo(container),
-			JpaHelpContextIds.PERSISTENCE_XML_CONNECTION
-		);
-	}
-
-	private EnumFormComboViewer<Connection, ExclusiveConnectionMode> addExclusiveConnectionModeCombo(Composite container) {
-		return new EnumFormComboViewer<Connection, ExclusiveConnectionMode>(this, container) {
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(Connection.EXCLUSIVE_CONNECTION_MODE_PROPERTY);
-			}
-
-			@Override
-			protected ExclusiveConnectionMode[] getChoices() {
-				return ExclusiveConnectionMode.values();
-			}
-
-			@Override
-			protected ExclusiveConnectionMode getDefaultValue() {
-				return this.getSubject().getDefaultExclusiveConnectionMode();
-			}
-
-			@Override
-			protected String displayString(ExclusiveConnectionMode value) {
-				return this.buildDisplayString(EclipseLinkUiMessages.class, JdbcExclusiveConnectionModeComposite.this, value);
-			}
-
-			@Override
-			protected ExclusiveConnectionMode getValue() {
-				return this.getSubject().getExclusiveConnectionMode();
-			}
-
-			@Override
-			protected void setValue(ExclusiveConnectionMode value) {
-				this.getSubject().setExclusiveConnectionMode(value);
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcExclusiveConnectionsPropertiesComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcExclusiveConnectionsPropertiesComposite.java
deleted file mode 100644
index b6ab1b7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcExclusiveConnectionsPropertiesComposite.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
-import org.eclipse.jpt.core.context.persistence.PersistenceUnitTransactionType;
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  JdbcExclusiveConnectionsPropertiesComposite
- */
-public class JdbcExclusiveConnectionsPropertiesComposite<T extends Connection> 
-	extends Pane<T>
-{
-	public JdbcExclusiveConnectionsPropertiesComposite(Pane<T> parentComposite, Composite parent) {
-
-		super(parentComposite, parent);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		container = this.addTitledGroup(
-			this.addSubPane(container, 10),
-			EclipseLinkUiMessages.JdbcExclusiveConnectionsPropertiesComposite_GroupBox
-		);
-
-		// Exclusive connection mode
-		new JdbcExclusiveConnectionModeComposite<T>(this, container);
-
-		// Lazy Connection
-		new JdbcLazyConnectionComposite<T>(this, container);
-
-		this.installPaneEnabler();
-	}
-
-	private void installPaneEnabler() {
-		new PaneEnabler(this.buildPaneEnablerHolder(), this);
-	}
-
-	private PropertyValueModel<Boolean> buildPaneEnablerHolder() {
-		return new TransformationPropertyValueModel<PersistenceUnitTransactionType, Boolean>(this.buildTransactionTypeHolder()) {
-			@Override
-			protected Boolean transform(PersistenceUnitTransactionType value) {
-				return value == PersistenceUnitTransactionType.RESOURCE_LOCAL;
-			}
-		};
-	}
-
-	private PropertyValueModel<PersistenceUnitTransactionType> buildTransactionTypeHolder() {
-		return new PropertyAspectAdapter<PersistenceUnit, PersistenceUnitTransactionType>(
-			this.buildPersistenceUnitHolder(), 
-			PersistenceUnit.SPECIFIED_TRANSACTION_TYPE_PROPERTY, 
-			PersistenceUnit.DEFAULT_TRANSACTION_TYPE_PROPERTY) {
-			@Override
-			protected PersistenceUnitTransactionType buildValue_() {
-				return this.subject.getTransactionType();
-			}
-		};
-	}
-
-	private PropertyValueModel<PersistenceUnit> buildPersistenceUnitHolder() {
-		return new PropertyAspectAdapter<Connection, PersistenceUnit>(this.getSubjectHolder()) {
-			@Override
-			protected PersistenceUnit buildValue_() {
-				return this.subject.getPersistenceUnit();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcLazyConnectionComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcLazyConnectionComposite.java
deleted file mode 100644
index 9eaebd0..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcLazyConnectionComposite.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * JdbcLazyConnectionComposite
- */
-public class JdbcLazyConnectionComposite<T extends Connection> 
-	extends Pane<T>
-{
-	/**
-	 * Creates a new <code>JdbcLazyConnectionComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public JdbcLazyConnectionComposite(
-								Pane<T> parentComposite,
-								Composite parent) {
-
-		super(parentComposite, parent);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_lazyConnectionLabel,
-			this.buildLazyConnectionHolder(),
-			this.buildLazyConnectionStringHolder(),
-			JpaHelpContextIds.PERSISTENCE_XML_CONNECTION
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildLazyConnectionHolder() {
-		return new PropertyAspectAdapter<Connection, Boolean>(this.getSubjectHolder(), Connection.LAZY_CONNECTION_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getLazyConnection();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setLazyConnection(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildLazyConnectionStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(this.buildDefaultLazyConnectionHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? JptUiDetailsMessages.Boolean_True : JptUiDetailsMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlConnectionTab_lazyConnectionLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlConnectionTab_lazyConnectionLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultLazyConnectionHolder() {
-		return new PropertyAspectAdapter<Connection, Boolean>(
-			this.getSubjectHolder(),
-			Connection.LAZY_CONNECTION_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getLazyConnection() != null) {
-					return null;
-				}
-				return this.subject.getDefaultLazyConnection();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcPropertiesComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcPropertiesComposite.java
deleted file mode 100644
index 8fdb2d9..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcPropertiesComposite.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
-import org.eclipse.jpt.core.context.persistence.PersistenceUnitTransactionType;
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  JdbcPropertiesComposite
- */
-public class JdbcPropertiesComposite<T extends Connection> 
-	extends Pane<T>
-{
-	public JdbcPropertiesComposite(Pane<T> parentComposite, Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		container = this.addTitledGroup(
-			this.addSubPane(container, 10),
-			EclipseLinkUiMessages.JdbcPropertiesComposite_EclipseLinkConnectionPool_GroupBox
-		);
-
-		// Connection Properties
-		new JdbcConnectionPropertiesComposite<T>(this, container);
-
-		container = this.addPane(container, new GridLayout(2, true));
-
-		// Read Connection
-		new JdbcReadConnectionPropertiesComposite<T>(this, container);
-		// Write Connection
-		new JdbcWriteConnectionPropertiesComposite<T>(this, container);
-		
-		this.installPaneEnabler();
-	}
-
-	private void installPaneEnabler() {
-		new PaneEnabler(this.buildPaneEnablerHolder(), this);
-	}
-
-	private PropertyValueModel<Boolean> buildPaneEnablerHolder() {
-		return new TransformationPropertyValueModel<PersistenceUnitTransactionType, Boolean>(this.buildTransactionTypeHolder()) {
-			@Override
-			protected Boolean transform(PersistenceUnitTransactionType value) {
-				return value == PersistenceUnitTransactionType.RESOURCE_LOCAL;
-			}
-		};
-	}
-
-	private PropertyValueModel<PersistenceUnitTransactionType> buildTransactionTypeHolder() {
-		return new PropertyAspectAdapter<PersistenceUnit, PersistenceUnitTransactionType>(
-			this.buildPersistenceUnitHolder(), 
-			PersistenceUnit.SPECIFIED_TRANSACTION_TYPE_PROPERTY, 
-			PersistenceUnit.DEFAULT_TRANSACTION_TYPE_PROPERTY) {
-			@Override
-			protected PersistenceUnitTransactionType buildValue_() {
-				return this.subject.getTransactionType();
-			}
-		};
-	}
-
-	private PropertyValueModel<PersistenceUnit> buildPersistenceUnitHolder() {
-		return new PropertyAspectAdapter<Connection, PersistenceUnit>(this.getSubjectHolder()) {
-			@Override
-			protected PersistenceUnit buildValue_() {
-				return this.subject.getPersistenceUnit();
-			}
-		};
-		
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcReadConnectionPropertiesComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcReadConnectionPropertiesComposite.java
deleted file mode 100644
index b6cffe7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcReadConnectionPropertiesComposite.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  JdbcReadConnectionPropertiesComposite
- */
-public class JdbcReadConnectionPropertiesComposite<T extends Connection> 
-	extends Pane<T>
-{
-	public JdbcReadConnectionPropertiesComposite(
-					Pane<T> parentComposite, 
-					Composite parent) {
-
-		super(parentComposite, parent, false);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		container = this.addCollapsibleSubSection(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_readConnectionsSectionTitle,
-			new SimplePropertyValueModel<Boolean>(Boolean.TRUE) //exapanded
-		);
-
-		GridData data = (GridData) container.getLayoutData();
-		data.verticalAlignment = SWT.TOP;
-
-		data = (GridData) getControl().getLayoutData();
-		data.verticalAlignment = SWT.TOP;
-
-		// Read Connections Shared
-		new JdbcReadConnectionsSharedComposite<T>(this, container);
-
-		// Read Connections Minimum
-		new JdbcReadConnectionsMinComposite<T>(this, container);
-
-		// Read Connections Maximum
-		new JdbcReadConnectionsMaxComposite<T>(this, container);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcReadConnectionsMaxComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcReadConnectionsMaxComposite.java
deleted file mode 100644
index 7567047..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcReadConnectionsMaxComposite.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.widgets.IntegerCombo;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * JdbcReadConnectionsMaxComposite
- */
-public class JdbcReadConnectionsMaxComposite<T extends Connection> 
-	extends Pane<T>
-{
-	/**
-	 * Creates a new <code>JdbcReadConnectionsMaxComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public JdbcReadConnectionsMaxComposite(
-								Pane<T> parentComposite,
-								Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		addReadConnectionsMaxCombo(container);
-	}
-	
-	private void addReadConnectionsMaxCombo(Composite container) {
-		new IntegerCombo<Connection>(this, container) {
-			
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiMessages.PersistenceXmlConnectionTab_readConnectionsMaxLabel;
-			}
-		
-			@Override
-			protected String getHelpId() {
-				return JpaHelpContextIds.PERSISTENCE_XML_CONNECTION;
-			}
-			
-			@Override
-			protected PropertyValueModel<Integer> buildDefaultHolder() {
-				return new PropertyAspectAdapter<Connection, Integer>(getSubjectHolder()) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getDefaultReadConnectionsMax();
-					}
-				};
-			}
-			
-			@Override
-			protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
-				return new PropertyAspectAdapter<Connection, Integer>(getSubjectHolder(), Connection.READ_CONNECTIONS_MAX_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getReadConnectionsMax();
-					}
-
-					@Override
-					protected void setValue_(Integer value) {
-						this.subject.setReadConnectionsMax(value);
-					}
-				};
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcReadConnectionsMinComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcReadConnectionsMinComposite.java
deleted file mode 100644
index 2b43336..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcReadConnectionsMinComposite.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.widgets.IntegerCombo;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * JdbcReadConnectionsMinComposite
- */
-public class JdbcReadConnectionsMinComposite<T extends Connection> 
-	extends Pane<T>
-{
-	/**
-	 * Creates a new <code>JdbcReadConnectionsMinComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public JdbcReadConnectionsMinComposite(
-							Pane<T> parentComposite,
-							Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		addReadConnectionsMinCombo(container);
-	}
-	
-	private void addReadConnectionsMinCombo(Composite container) {
-		new IntegerCombo<Connection>(this, container) {
-			
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiMessages.PersistenceXmlConnectionTab_readConnectionsMinLabel;
-			}
-		
-			@Override
-			protected String getHelpId() {
-				return JpaHelpContextIds.PERSISTENCE_XML_CONNECTION;
-			}
-			
-			@Override
-			protected PropertyValueModel<Integer> buildDefaultHolder() {
-				return new PropertyAspectAdapter<Connection, Integer>(getSubjectHolder()) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getDefaultReadConnectionsMin();
-					}
-				};
-			}
-			
-			@Override
-			protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
-				return new PropertyAspectAdapter<Connection, Integer>(getSubjectHolder(), Connection.READ_CONNECTIONS_MIN_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getReadConnectionsMin();
-					}
-
-					@Override
-					protected void setValue_(Integer value) {
-						this.subject.setReadConnectionsMin(value);
-					}
-				};
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcReadConnectionsSharedComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcReadConnectionsSharedComposite.java
deleted file mode 100644
index 2bd8bd9..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcReadConnectionsSharedComposite.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * ReadConnectionsSharedComposite
- */
-public class JdbcReadConnectionsSharedComposite<T extends Connection> 
-	extends Pane<T>
-{
-	/**
-	 * Creates a new <code>ReadConnectionsSharedComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public JdbcReadConnectionsSharedComposite(
-								Pane<T> parentComposite,
-								Composite parent) {
-
-		super(parentComposite, parent);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_readConnectionsSharedLabel,
-			this.buildReadConnectionsSharedHolder(),
-			this.buildReadConnectionsSharedStringHolder(),
-			JpaHelpContextIds.PERSISTENCE_XML_CONNECTION
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildReadConnectionsSharedHolder() {
-		return new PropertyAspectAdapter<Connection, Boolean>(getSubjectHolder(), Connection.READ_CONNECTIONS_SHARED_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getReadConnectionsShared();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setReadConnectionsShared(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildReadConnectionsSharedStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultReadConnectionsSharedHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? JptUiDetailsMessages.Boolean_True : JptUiDetailsMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlConnectionTab_readConnectionsSharedLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlConnectionTab_readConnectionsSharedLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultReadConnectionsSharedHolder() {
-		return new PropertyAspectAdapter<Connection, Boolean>(
-			getSubjectHolder(),
-			Connection.READ_CONNECTIONS_SHARED_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getReadConnectionsShared() != null) {
-					return null;
-				}
-				return this.subject.getDefaultReadConnectionsShared();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcWriteConnectionPropertiesComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcWriteConnectionPropertiesComposite.java
deleted file mode 100644
index 80719c7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcWriteConnectionPropertiesComposite.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  JdbcWriteConnectionPropertiesComposite
- */
-@SuppressWarnings("nls")
-public class JdbcWriteConnectionPropertiesComposite<T extends Connection> 
-	extends Pane<T>
-{
-	public JdbcWriteConnectionPropertiesComposite(
-							Pane<T> parentComposite, 
-							Composite parent) {
-
-		super(parentComposite, parent, false);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		container = this.addCollapsibleSubSection(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_writeConnectionsSectionTitle,
-			new SimplePropertyValueModel<Boolean>(Boolean.TRUE) //exapanded
-		);
-
-		GridData data = (GridData) container.getLayoutData();
-		data.verticalAlignment = SWT.TOP;
-
-		data = (GridData) getControl().getLayoutData();
-		data.verticalAlignment = SWT.TOP;
-
-		// This will add space to have the same layout than read connection pool
-		Button space = this.getWidgetFactory().createCheckBox(container, "m");
-		Point size = space.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		container = this.addSubPane(container, size.y + 5);
-		space.dispose();
-
-		// Write Connections Minimum
-		new JdbcWriteConnectionsMinComposite<T>(this, container);
-
-		// Write Connections Maximum
-		new JdbcWriteConnectionsMaxComposite<T>(this, container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcWriteConnectionsMaxComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcWriteConnectionsMaxComposite.java
deleted file mode 100644
index aeec73a..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcWriteConnectionsMaxComposite.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.widgets.IntegerCombo;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * JdbcWriteConnectionsMaxComposite
- */
-public class JdbcWriteConnectionsMaxComposite<T extends Connection> 
-	extends Pane<T>
-{
-	/**
-	 * Creates a new <code>JdbcWriteConnectionsMaxComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public JdbcWriteConnectionsMaxComposite(
-								Pane<T> parentComposite,
-	                            Composite parent) {
-
-		super(parentComposite, parent);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		addWriteConnectionsMaxCombo(container);
-	}
-	
-	private void addWriteConnectionsMaxCombo(Composite container) {
-		new IntegerCombo<Connection>(this, container) {
-			
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiMessages.PersistenceXmlConnectionTab_writeConnectionsMaxLabel;
-			}
-		
-			@Override
-			protected String getHelpId() {
-				return JpaHelpContextIds.PERSISTENCE_XML_CONNECTION;
-			}
-			
-			@Override
-			protected PropertyValueModel<Integer> buildDefaultHolder() {
-				return new PropertyAspectAdapter<Connection, Integer>(getSubjectHolder()) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getDefaultWriteConnectionsMax();
-					}
-				};
-			}
-			
-			@Override
-			protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
-				return new PropertyAspectAdapter<Connection, Integer>(getSubjectHolder(), Connection.WRITE_CONNECTIONS_MAX_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getWriteConnectionsMax();
-					}
-
-					@Override
-					protected void setValue_(Integer value) {
-						this.subject.setWriteConnectionsMax(value);
-					}
-				};
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcWriteConnectionsMinComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcWriteConnectionsMinComposite.java
deleted file mode 100644
index ae6010e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/JdbcWriteConnectionsMinComposite.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.widgets.IntegerCombo;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * JdbcWriteConnectionsMinComposite
- */
-public class JdbcWriteConnectionsMinComposite<T extends Connection> 
-	extends Pane<T>
-{
-	/**
-	 * Creates a new <code>JdbcWriteConnectionsMinComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public JdbcWriteConnectionsMinComposite(
-								Pane<T> parentComposite,
-	                            Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		addWriteConnectionsMinCombo(container);
-	}
-	
-	private void addWriteConnectionsMinCombo(Composite container) {
-		new IntegerCombo<Connection>(this, container) {
-			
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiMessages.PersistenceXmlConnectionTab_writeConnectionsMinLabel;
-			}
-		
-			@Override
-			protected String getHelpId() {
-				return JpaHelpContextIds.PERSISTENCE_XML_CONNECTION;
-			}
-			
-			@Override
-			protected PropertyValueModel<Integer> buildDefaultHolder() {
-				return new PropertyAspectAdapter<Connection, Integer>(getSubjectHolder()) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getDefaultWriteConnectionsMin();
-					}
-				};
-			}
-			
-			@Override
-			protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
-				return new PropertyAspectAdapter<Connection, Integer>(getSubjectHolder(), Connection.WRITE_CONNECTIONS_MIN_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getWriteConnectionsMin();
-					}
-
-					@Override
-					protected void setValue_(Integer value) {
-						this.subject.setWriteConnectionsMin(value);
-					}
-				};
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/NativeSqlComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/NativeSqlComposite.java
deleted file mode 100644
index bcc7396..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/NativeSqlComposite.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * NativeSqlComposite
- */
-public class NativeSqlComposite<T extends Connection> 
-	extends Pane<T>
-{
-	/**
-	 * Creates a new <code>NativeSqlComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public NativeSqlComposite(
-					Pane<T> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_nativeSqlLabel,
-			this.buildNativeSqlHolder(),
-			this.buildNativeSqlStringHolder(),
-			JpaHelpContextIds.PERSISTENCE_XML_CONNECTION
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildNativeSqlHolder() {
-		return new PropertyAspectAdapter<Connection, Boolean>(getSubjectHolder(), Connection.NATIVE_SQL_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getNativeSql();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setNativeSql(value);
-			}
-
-		};
-	}
-
-	private PropertyValueModel<String> buildNativeSqlStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultNativeSqlHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? JptUiDetailsMessages.Boolean_True : JptUiDetailsMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlConnectionTab_nativeSqlLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlConnectionTab_nativeSqlLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultNativeSqlHolder() {
-		return new PropertyAspectAdapter<Connection, Boolean>(
-			getSubjectHolder(),
-			Connection.NATIVE_SQL_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getNativeSql() != null) {
-					return null;
-				}
-				return this.subject.getDefaultNativeSql();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/PersistenceXmlConnectionTab.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/PersistenceXmlConnectionTab.java
deleted file mode 100644
index 9bea6ce..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/PersistenceXmlConnectionTab.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaPageComposite;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * PersistenceXmlConnectionTab
- */
-public class PersistenceXmlConnectionTab<T extends Connection>
-	extends Pane<T>
-	implements JpaPageComposite
-{
-	// ********** constructors/initialization **********
-	public PersistenceXmlConnectionTab(
-				PropertyValueModel<T> subjectHolder, 
-				Composite parent, 
-				WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		new EclipseLinkConnectionComposite<T>(this, container);
-	}
-
-	// ********** JpaPageComposite implementation **********
-
-	public String getHelpID() {
-		return JpaHelpContextIds.PERSISTENCE_XML_CONNECTION;
-	}
-
-	public ImageDescriptor getPageImageDescriptor() {
-		return null;
-	}
-
-	public String getPageText() {
-		return EclipseLinkUiMessages.PersistenceXmlConnectionTab_title;
-	}
-
-	// ********** Layout **********
-	@Override
-	protected Composite addContainer(Composite parent) {
-		GridLayout layout = new GridLayout(1, true);
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		layout.marginTop = 0;
-		layout.marginLeft = 0;
-		layout.marginBottom = 0;
-		layout.marginRight = 0;
-		layout.verticalSpacing = 15;
-		Composite container = this.addPane(parent, layout);
-		this.updateGridData(container);
-		return container;
-	}
-
-	private void updateGridData(Composite container) {
-		GridData gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		container.setLayoutData(gridData);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/TransactionTypeComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/TransactionTypeComposite.java
deleted file mode 100644
index cf79d30..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/connection/TransactionTypeComposite.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.connection;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
-import org.eclipse.jpt.core.context.persistence.PersistenceUnitTransactionType;
-import org.eclipse.jpt.eclipselink.core.context.persistence.connection.Connection;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * TransactionTypeComposite
- */
-public class TransactionTypeComposite<T extends Connection>
-	extends Pane<T>
-{
-	/**
-	 * Creates a new <code>TransactionTypeComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public TransactionTypeComposite(
-					Pane<T> parentComposite,
-					Composite parent) {
-
-		super( parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout( Composite container) {
-
-		this.addLabeledComposite(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlConnectionTab_transactionTypeLabel,
-			this.addTransactionTypeCombo( container),
-			JpaHelpContextIds.PERSISTENCE_XML_CONNECTION
-		);
-	}
-
-	private EnumFormComboViewer<PersistenceUnit, PersistenceUnitTransactionType> addTransactionTypeCombo(Composite container) {
-		return new EnumFormComboViewer<PersistenceUnit, PersistenceUnitTransactionType>(this, this.buildPersistenceUnitHolder(), container) {
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(PersistenceUnit.SPECIFIED_TRANSACTION_TYPE_PROPERTY);
-				propertyNames.add(PersistenceUnit.DEFAULT_TRANSACTION_TYPE_PROPERTY);
-			}
-
-			@Override
-			protected PersistenceUnitTransactionType[] getChoices() {
-				return PersistenceUnitTransactionType.values();
-			}
-
-			@Override
-			protected PersistenceUnitTransactionType getDefaultValue() {
-				return this.getSubject().getDefaultTransactionType();
-			}
-
-			@Override
-			protected String displayString(PersistenceUnitTransactionType value) {
-				return this.buildDisplayString(EclipseLinkUiMessages.class, TransactionTypeComposite.this, value);
-			}
-
-			@Override
-			protected PersistenceUnitTransactionType getValue() {
-				return this.getSubject().getSpecifiedTransactionType();
-			}
-
-			@Override
-			protected void setValue(PersistenceUnitTransactionType value) {
-				this.getSubject().setSpecifiedTransactionType(value);
-
-				if (value == PersistenceUnitTransactionType.RESOURCE_LOCAL) {
-					clearJTAProperties();
-				}
-				else {
-					clearResourceLocalProperties();
-				}
-			}
-		};
-	}
-
-	private PropertyValueModel<PersistenceUnit> buildPersistenceUnitHolder() {
-		return new PropertyAspectAdapter<Connection, PersistenceUnit>(getSubjectHolder()) {
-			@Override
-			protected PersistenceUnit buildValue_() {
-				return this.subject.getPersistenceUnit();
-			}
-		};
-		
-	}
-
-	private void clearJTAProperties() {
-		getSubject().getPersistenceUnit().setJtaDataSource(null);
-	}
-
-	private void clearResourceLocalProperties() {
-		Connection connection = this.getSubject();
-		connection.getPersistenceUnit().setNonJtaDataSource(null);
-		connection.setDriver(null);
-		connection.setUrl(null);
-		connection.setUser(null);
-		connection.setPassword(null);
-		connection.setBindParameters(null);
-		connection.setWriteConnectionsMax(null);
-		connection.setWriteConnectionsMin(null);
-		connection.setReadConnectionsMax(null);
-		connection.setReadConnectionsMin(null);
-		connection.setReadConnectionsShared(null);
-		connection.setExclusiveConnectionMode(null);
-		connection.setLazyConnection(null);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/CustomizerComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/CustomizerComposite.java
deleted file mode 100644
index ee345a1..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/CustomizerComposite.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCustomizer;
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.customization.Entity;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.ClassChooserPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  CustomizerComposite
- */
-public class CustomizerComposite extends Pane<Entity>
-{
-	/**
-	 * Creates a new <code>CustomizerComposite</code>.
-	 *
-	 * @param parentPane The parent pane of this one
-	 * @param parent The parent container
-	 */
-	public CustomizerComposite(Pane<? extends Entity> parentPane,
-                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	private ClassChooserPane<Entity> initializeClassChooser(Composite container) {
-
-		return new ClassChooserPane<Entity>(this, container) {
-
-			@Override
-			protected WritablePropertyValueModel<String> buildTextHolder() {
-				return new PropertyAspectAdapter<Entity, String>(
-					this.getSubjectHolder(), Entity.DESCRIPTOR_CUSTOMIZER_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-						return getSubjectParent().getDescriptorCustomizerOf(getSubjectName());
-					}
-
-					@Override
-					protected void setValue_(String value) {
-
-						if (value.length() == 0) {
-							value = null;
-						}
-						getSubjectParent().setDescriptorCustomizerOf(getSubjectName(), value);
-					}
-				};
-			}
-
-			@Override
-			protected String getClassName() {
-				return getSubjectParent().getDescriptorCustomizerOf(getSubjectName());
-			}
-
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_customizerLabel;
-			}
-			
-			@Override
-			protected JpaProject getJpaProject() {
-				return getSubjectParent().getJpaProject();
-			}
-
-			@Override
-			protected void setClassName(String className) {
-				getSubjectParent().setDescriptorCustomizerOf(getSubjectName(), className);
-			}
-			
-			@Override
-			protected String getSuperInterfaceName() {
-				return EclipseLinkCustomizer.ECLIPSELINK_DESCRIPTOR_CUSTOMIZER_CLASS_NAME;
-			}
-		};
-	}
-	
-	private String getSubjectName() {
-		return this.getSubjectHolder().getValue().getName();
-	}
-	
-	private Customization getSubjectParent() {
-		return this.getSubjectHolder().getValue().getParent();
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.initializeClassChooser(container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/EclipseLinkCustomizationComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/EclipseLinkCustomizationComposite.java
deleted file mode 100644
index 03c4a46..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/EclipseLinkCustomizationComposite.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.Section;
-
-/**
- *  PersistenceUnitCustomizationComposite
- */
-public class EclipseLinkCustomizationComposite extends Pane<Customization>
-{
-	public EclipseLinkCustomizationComposite(Pane<Customization> subjectHolder,
-	                                       Composite container) {
-
-		super(subjectHolder, container);
-	}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-		Section section = getWidgetFactory().createSection(parent, SWT.FLAT | ExpandableComposite.TITLE_BAR | Section.DESCRIPTION);
-		section.setText(EclipseLinkUiMessages.PersistenceXmlCustomizationTab_sectionTitle);
-		section.setDescription(EclipseLinkUiMessages.PersistenceXmlCustomizationTab_sectionDescription);
-		section.setLayoutData(new GridData(GridData.FILL_BOTH));
-
-		Composite composite = this.addSubPane(section);
-		section.setClient(composite);
-
-		// Default pane
-		int groupBoxMargin = this.getGroupBoxMargin();
-
-		Composite defaultPane = this.addSubPane(
-			composite,
-			0, groupBoxMargin, 0, groupBoxMargin
-		);
-
-		// Weaving Group
-		new WeavingPropertiesComposite(this, defaultPane);
-
-		// Validation Only
-		new ValidationOnlyComposite(this, defaultPane);
-
-		// Mapping Files Validate Schema
-		new ValidateSchemaComposite(this, defaultPane);
-
-		// Throw Exceptions
-		new ThrowExceptionsComposite(this, defaultPane);
-
-		// Exception Handler
-		new ExceptionHandlerComposite(this, defaultPane);
-
-		// Session Customizer
-		new SessionCustomizersComposite(this, composite);
-
-		// EntitiesList
-		new EntityListComposite(this, composite);
-
-		// Profiler:
-		new ProfilerComposite(this, composite);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/EntityCustomizationPropertyComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/EntityCustomizationPropertyComposite.java
deleted file mode 100644
index c8b944f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/EntityCustomizationPropertyComposite.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.customization.Entity;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * EntityCustomizationPropertyComposite
- */
-public class EntityCustomizationPropertyComposite extends Pane<Entity> {
-
-	/**
-	 * Creates a new <code>EntityCustomizationPropertyComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param subjectHolder The holder of this pane's subject
-	 * @param parent The parent container
-	 */
-	public EntityCustomizationPropertyComposite(Pane<Customization> parentComposite,
-	                                      PropertyValueModel<Entity> subjectHolder,
-	                                      Composite parent) {
-
-		super(parentComposite, subjectHolder, parent);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 */
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		// Customizer
-		new CustomizerComposite(this, container);
-		
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/EntityListComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/EntityListComposite.java
deleted file mode 100644
index 4a67dbe..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/EntityListComposite.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2007, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import java.util.ListIterator;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.SearchEngine;
-import org.eclipse.jdt.ui.IJavaElementSearchConstants;
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.customization.Entity;
-import org.eclipse.jpt.eclipselink.ui.JptEclipseLinkUiPlugin;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.AddRemoveListPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ObjectListSelectionModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.SelectionDialog;
-import org.eclipse.ui.progress.IProgressService;
-
-/**
- *  EntityListComposite
- */
-public class EntityListComposite extends Pane<Customization>
-{
-	private WritablePropertyValueModel<Entity> entityHolder;
-
-	public EntityListComposite(Pane<Customization> parentComposite, Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initialize() {
-		super.initialize();
-		this.entityHolder = this.buildEntityHolder();
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		container = this.addTitledGroup(
-			container,
-			EclipseLinkUiMessages.CustomizationEntityListComposite_groupTitle
-		);
-
-		// Entities add/remove list pane
-		new AddRemoveListPane<Customization>(
-			this,
-			container,
-			this.buildEntitiesAdapter(),
-			this.buildEntitiesListHolder(),
-			this.entityHolder,
-			this.buildEntityLabelProvider(),
-			EclipseLinkHelpContextIds.PERSISTENCE_CUSTOMIZATION
-		);
-
-		// Entity Customization property pane
-		EntityCustomizationPropertyComposite pane = new EntityCustomizationPropertyComposite(
-			this,
-			this.entityHolder,
-			container
-		);
-		this.installPaneEnabler(this.entityHolder, pane);
-	}
-
-	private AddRemoveListPane.Adapter buildEntitiesAdapter() {
-		return new AddRemoveListPane.AbstractAdapter() {
-			public void addNewItem(ObjectListSelectionModel listSelectionModel) {
-				EntityListComposite.this.addEntities(listSelectionModel);
-			}
-
-			public void removeSelectedItems(ObjectListSelectionModel listSelectionModel) {
-				Customization customization = getSubject();
-				for (Object item : listSelectionModel.selectedValues()) {
-					Entity entityCustomization = (Entity) item;
-					customization.removeEntity(entityCustomization.getName());
-				}
-			}
-		};
-	}
-	
-	private void addEntities(ObjectListSelectionModel listSelectionModel) {
-
-		IType type = this.chooseEntity();
-
-		if (type != null) {
-			String entityName = this.getEntityName(type.getFullyQualifiedName());
-			if (entityName == null) {
-				entityName = type.getElementName();
-			}
-			
-			if( ! this.getSubject().entityExists(entityName)) {
-				this.getSubject().addEntity(entityName);
-				int index = CollectionTools.indexOf(this.getSubject().entityNames(), entityName);
-				Entity entity = (Entity) listSelectionModel.getListModel().getElementAt(index);
-				listSelectionModel.setSelectedValue(entity);
-				this.entityHolder.setValue(entity);
-			}
-		}
-	}
-	
-	private String getEntityName(String fullyQualifiedTypeName) {
-
-		org.eclipse.jpt.core.context.Entity entity = getSubject().getPersistenceUnit().getEntity(fullyQualifiedTypeName);
-		return entity != null ? entity.getName() : null;
-	}
-	
-	private IType chooseEntity() {
-		IJavaProject javaProject = getJavaProject();
-		IJavaElement[] elements = new IJavaElement[] { javaProject };
-		IJavaSearchScope scope = SearchEngine.createJavaSearchScope(elements);
-		IProgressService service = PlatformUI.getWorkbench().getProgressService();
-		SelectionDialog typeSelectionDialog;
-
-		try {
-			typeSelectionDialog = JavaUI.createTypeDialog(
-				getShell(),
-				service,
-				scope,
-				IJavaElementSearchConstants.CONSIDER_CLASSES,
-				false,
-				""
-			);
-		}
-		catch (JavaModelException e) {
-			JptEclipseLinkUiPlugin.log(e);
-			return null;
-		}
-		typeSelectionDialog.setTitle(EclipseLinkUiMessages.CustomizationEntityListComposite_dialogTitle);
-		typeSelectionDialog.setMessage(EclipseLinkUiMessages.CustomizationEntityListComposite_dialogMessage);
-
-		if (typeSelectionDialog.open() == Window.OK) {
-			return (IType) typeSelectionDialog.getResult()[0];
-		}
-		return null;
-	}
-
-	private IJavaProject getJavaProject() {
-		return getSubject().getJpaProject().getJavaProject();
-	}
-
-	private ILabelProvider buildEntityLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				Entity entityCustomization = (Entity) element;
-				return entityCustomization.getName();
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Entity> buildEntityHolder() {
-		return new SimplePropertyValueModel<Entity>();
-	}
-
-	private ListValueModel<Entity> buildEntitiesListHolder() {
-		return new ListAspectAdapter<Customization, Entity>(
-				this.getSubjectHolder(), Customization.ENTITIES_LIST) {
-			@Override
-			protected ListIterator<Entity> listIterator_() {
-				return this.subject.entities();
-			}
-			@Override
-			protected int size_() {
-				return this.subject.entitiesSize();
-			}
-		};
-	}
-
-	private void installPaneEnabler(WritablePropertyValueModel<Entity> entityHolder,
-	                                EntityCustomizationPropertyComposite pane) {
-
-		new PaneEnabler(
-			this.buildPaneEnablerHolder(entityHolder),
-			pane
-		);
-	}
-
-	private PropertyValueModel<Boolean> buildPaneEnablerHolder(WritablePropertyValueModel<Entity> entityHolder) {
-		return new TransformationPropertyValueModel<Entity, Boolean>(entityHolder) {
-			@Override
-			protected Boolean transform_(Entity value) {
-				return value.entityNameIsValid();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ExceptionHandlerComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ExceptionHandlerComposite.java
deleted file mode 100644
index c2cb45e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ExceptionHandlerComposite.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.ClassChooserPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  ExceptionHandlerComposite
- */
-public class ExceptionHandlerComposite extends Pane<Customization>
-{
-	/**
-	 * Creates a new <code>ExceptionHandlerComposite</code>.
-	 *
-	 * @param parentPane The parent pane of this one
-	 * @param parent The parent container
-	 */
-	public ExceptionHandlerComposite(Pane<? extends Customization> parentPane,
-                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	private ClassChooserPane<Customization> initializeClassChooser(Composite container) {
-
-		return new ClassChooserPane<Customization>(this, container) {
-
-			@Override
-			protected WritablePropertyValueModel<String> buildTextHolder() {
-				return new PropertyAspectAdapter<Customization, String>(
-							this.getSubjectHolder(), Customization.EXCEPTION_HANDLER_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-						return this.subject.getExceptionHandler();
-					}
-
-					@Override
-					protected void setValue_(String value) {
-
-						if (value.length() == 0) {
-							value = null;
-						}
-						this.subject.setExceptionHandler(value);
-					}
-				};
-			}
-
-			@Override
-			protected String getClassName() {
-				return this.getSubject().getExceptionHandler();
-			}
-
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_exceptionHandlerLabel;
-			}
-			
-			@Override
-			protected JpaProject getJpaProject() {
-				return getSubject().getJpaProject();
-			}
-			
-			@Override
-			protected void setClassName(String className) {
-				this.getSubject().setExceptionHandler(className);
-			}
-			
-			@Override
-			protected String getSuperInterfaceName() {
-				return Customization.ECLIPSELINK_EXCEPTION_HANDLER_CLASS_NAME;
-			}
-		};
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.initializeClassChooser(container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/PersistenceXmlCustomizationTab.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/PersistenceXmlCustomizationTab.java
deleted file mode 100644
index f4cc9ba..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/PersistenceXmlCustomizationTab.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaPageComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  PersistenceXmlCustomizationTabItem
- */
-public class PersistenceXmlCustomizationTab 
-								extends Pane<Customization>
-								implements JpaPageComposite
-{
-	public PersistenceXmlCustomizationTab(
-			PropertyValueModel<Customization> subjectHolder,
-			Composite parent,
-            WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		
-		new EclipseLinkCustomizationComposite(this, container);
-	}
-
-	// ********** JpaPageComposite implementation **********
-
-	public String getHelpID() {
-		return EclipseLinkHelpContextIds.PERSISTENCE_CUSTOMIZATION;
-	}
-
-	public ImageDescriptor getPageImageDescriptor() {
-		return null;
-	}
-	
-	public String getPageText() {
-		return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_title;
-	}
-
-	// ********** Layout **********
-	
-	@Override
-	protected Composite addContainer(Composite parent) {
-		GridLayout layout = new GridLayout(1, true);
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		layout.marginTop = 0;
-		layout.marginLeft = 0;
-		layout.marginBottom = 0;
-		layout.marginRight = 0;
-		layout.verticalSpacing = 15;
-		
-		Composite container = addPane(parent, layout);
-		updateGridData(container);
-		
-		return container;
-	}
-
-	private void updateGridData(Composite container) {
-		GridData gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		container.setLayoutData(gridData);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ProfilerComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ProfilerComposite.java
deleted file mode 100644
index 1ee6f8e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ProfilerComposite.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import com.ibm.icu.text.Collator;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Iterator;
-
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Profiler;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.ClassChooserComboPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringConverter;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelAdapter;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  ProfilerComposite
- */
-public class ProfilerComposite extends ClassChooserComboPane<Customization>
-{
-
-	/**
-	 * Creates a new <code>ProfilerComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public ProfilerComposite(
-								Pane<? extends Customization> parentPane,
-	                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	@Override
-	protected String getClassName() {
-		return Profiler.getProfilerClassName(this.getSubject().getProfiler());
-	}
-
-    @Override
-    protected String getLabelText() {
-    	return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_profilerLabel;
-    }
-    
-    @Override
-    protected JpaProject getJpaProject() {
-    	return getSubject().getJpaProject();
-    }
-    
-    @Override
-	protected WritablePropertyValueModel<String> buildTextHolder() {
-		return new PropertyAspectAdapter<Customization, String>(this.getSubjectHolder(), Customization.PROFILER_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-
-				String name = this.subject.getProfiler();
-				if (name == null) {
-					name = ProfilerComposite.this.getDefaultValue(this.subject);
-				}
-				return name;
-			}
-
-			@Override
-			protected void setValue_(String value) {
-
-				if (getDefaultValue(this.subject).equals(value)) {
-					value = null;
-				}
-				this.subject.setProfiler(value);
-			}
-		};
-    }
-    
-	private PropertyValueModel<String> buildDefaultProfilerHolder() {
-		return new PropertyAspectAdapter<Customization, String>(this.getSubjectHolder(), Customization.DEFAULT_PROFILER) {
-			@Override
-			protected String buildValue_() {
-				return ProfilerComposite.this.getDefaultValue(this.subject);
-			}
-		};
-	}
-
-	private ListValueModel<String> buildDefaultProfilerListHolder() {
-		return new PropertyListValueModelAdapter<String>(
-			this.buildDefaultProfilerHolder()
-		);
-	}
-
-	private String buildDisplayString(String profilerName) {
-
-		switch (Profiler.valueOf(profilerName)) {
-			case no_profiler: {
-				return EclipseLinkUiMessages.ProfilerComposite_no_profiler;
-			}
-			case performance_profiler: {
-				return EclipseLinkUiMessages.ProfilerComposite_performance_profiler;
-			}
-			case query_monitor: {
-				return EclipseLinkUiMessages.ProfilerComposite_query_monitor;
-			}
-			default: {
-				return null;
-			}
-		}
-	}
-
-	private Comparator<String> buildProfilerComparator() {
-		return new Comparator<String>() {
-			public int compare(String profiler1, String profiler2) {
-				profiler1 = buildDisplayString(profiler1);
-				profiler2 = buildDisplayString(profiler2);
-				return Collator.getInstance().compare(profiler1, profiler2);
-			}
-		};
-	}
-
-	@Override
-	protected StringConverter<String> buildClassConverter() {
-		return new StringConverter<String>() {
-			public String convertToString(String value) {
-				try {
-					Profiler.valueOf(value);
-					value = buildDisplayString(value);
-				}
-				catch (Exception e) {
-					// Ignore since the value is not a Profiler
-				}
-				return value;
-			}
-		};
-	}
-
-
-	@Override
-	protected ListValueModel<String> buildClassListHolder() {
-		ArrayList<ListValueModel<String>> holders = new ArrayList<ListValueModel<String>>(2);
-		holders.add(this.buildDefaultProfilerListHolder());
-		holders.add(this.buildProfilersListHolder());
-		return new CompositeListValueModel<ListValueModel<String>, String>(holders);
-	}
-
-	private Iterator<String> buildProfilers() {
-		return new TransformationIterator<Profiler, String>(CollectionTools.iterator(Profiler.values())) {
-			@Override
-			protected String transform(Profiler next) {
-				return next.name();
-			}
-		};
-	}
-
-	private CollectionValueModel<String> buildProfilersCollectionHolder() {
-		return new SimpleCollectionValueModel<String>(
-			CollectionTools.collection(this.buildProfilers())
-		);
-	}
-
-	private ListValueModel<String> buildProfilersListHolder() {
-		return new SortedListValueModelAdapter<String>(
-			this.buildProfilersCollectionHolder(),
-			this.buildProfilerComparator()
-		);
-	}
-
-	private String getDefaultValue(Customization subject) {
-		String defaultValue = subject.getDefaultProfiler();
-
-		if (defaultValue != null) {
-			return NLS.bind(
-				EclipseLinkUiMessages.PersistenceXmlCustomizationTab_defaultWithOneParam,
-				defaultValue
-			);
-		}
-		return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_defaultEmpty;
-	}
-	
-	@Override
-	protected void setClassName(String className) {
-		this.getSubject().setProfiler(className);
-	}
-	
-	@Override
-	protected String getSuperInterfaceName() {
-		return Customization.ECLIPSELINK_SESSION_PROFILER_CLASS_NAME;
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/SessionCustomizersComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/SessionCustomizersComposite.java
deleted file mode 100644
index 0c31c29..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/SessionCustomizersComposite.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import java.util.ListIterator;
-
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.SearchEngine;
-import org.eclipse.jdt.ui.IJavaElementSearchConstants;
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.JptEclipseLinkUiPlugin;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.AddRemoveListPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.ui.internal.widgets.AddRemovePane.Adapter;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ObjectListSelectionModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.SelectionDialog;
-import org.eclipse.ui.progress.IProgressService;
-
-/**
- *  SessionCustomizersComposite
- */
-public class SessionCustomizersComposite extends Pane<Customization>
-{
-	/**
-	 * Creates a new <code>SessionCustomizerComposite</code>.
-	 *
-	 * @param parentPane The parent pane of this one
-	 * @param parent The parent container
-	 */
-	public SessionCustomizersComposite(Pane<? extends Customization> parentPane,
-                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-
-	private void addSessionCustomizerClass(ObjectListSelectionModel listSelectionModel) {
-
-		IType type = chooseType();
-
-		if (type != null) {
-			String className = type.getFullyQualifiedName('$');
-			if( ! this.getSubject().sessionCustomizerExists(className)) {
-				
-				String classRef = this.getSubject().addSessionCustomizer(className);
-				listSelectionModel.setSelectedValue(classRef);
-			}
-		}
-	}
-
-	private Adapter buildAdapter() {
-		return new AddRemoveListPane.AbstractAdapter() {
-			public void addNewItem(ObjectListSelectionModel listSelectionModel) {
-				addSessionCustomizerClass(listSelectionModel);
-			}
-
-			public void removeSelectedItems(ObjectListSelectionModel listSelectionModel) {
-				for (Object item : listSelectionModel.selectedValues()) {
-					getSubject().removeSessionCustomizer((String) item);
-				}
-			}
-		};
-	}
-
-	private ILabelProvider buildLabelProvider() {
-		return new LabelProvider() {
-
-			@Override
-			public String getText(Object element) {
-				String name = (String) element;
-
-				if (name == null) {
-					name = EclipseLinkUiMessages.PersistenceXmlCustomizationTab_noName;
-				}
-				return name;
-			}
-		};
-	}
-
-	private ListValueModel<String> buildListHolder() {
-		return new ListAspectAdapter<Customization, String>(getSubjectHolder(), Customization.SESSION_CUSTOMIZER_LIST) {
-			@Override
-			protected ListIterator<String> listIterator_() {
-				return subject.sessionCustomizers();
-			}
-
-			@Override
-			protected int size_() {
-				return subject.sessionCustomizersSize();
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<String> buildSelectedItemHolder() {
-		return new SimplePropertyValueModel<String>();
-	}
-
-	/**
-	 * Prompts the user the Open Type dialog.
-	 *
-	 * @return Either the selected type or <code>null</code> if the user
-	 * canceled the dialog
-	 */
-	private IType chooseType() {
-		IJavaProject javaProject = getJavaProject();
-		IJavaElement[] elements = new IJavaElement[] { javaProject };
-		IJavaSearchScope scope = SearchEngine.createJavaSearchScope(elements);
-		IProgressService service = PlatformUI.getWorkbench().getProgressService();
-		SelectionDialog typeSelectionDialog;
-
-		try {
-			typeSelectionDialog = JavaUI.createTypeDialog(
-				getShell(),
-				service,
-				scope,
-				IJavaElementSearchConstants.CONSIDER_CLASSES,
-				false,
-				""
-			);
-		}
-		catch (JavaModelException e) {
-			JptEclipseLinkUiPlugin.log(e);
-			return null;
-		}
-
-		typeSelectionDialog.setTitle(JptUiMessages.ClassChooserPane_dialogTitle);
-		typeSelectionDialog.setMessage(JptUiMessages.ClassChooserPane_dialogMessage);
-
-		if (typeSelectionDialog.open() == Window.OK) {
-			return (IType) typeSelectionDialog.getResult()[0];
-		}
-
-		return null;
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		// Description
-		container = addTitledGroup(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCustomizationTab_sessionCustomizerLabel
-		);
-
-		// List pane
-		new AddRemoveListPane<Customization>(
-			this,
-			container,
-			buildAdapter(),
-			buildListHolder(),
-			buildSelectedItemHolder(),
-			buildLabelProvider()
-		)
-		{
-			@Override
-			protected void initializeTable(Table table) {
-				super.initializeTable(table);
-
-				Composite container = table.getParent();
-				GridData gridData   = (GridData) container.getLayoutData();
-				gridData.heightHint = 75;
-			}
-		};
-	}
-
-	private IJavaProject getJavaProject() {
-		return getSubject().getJpaProject().getJavaProject();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ThrowExceptionsComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ThrowExceptionsComposite.java
deleted file mode 100644
index 0f0882f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ThrowExceptionsComposite.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * ThrowExceptionsComposite
- */
-public class ThrowExceptionsComposite extends Pane<Customization>
-{
-	/**
-	 * Creates a new <code>ThrowExceptionsComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public ThrowExceptionsComposite(
-					Pane<? extends Customization> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCustomizationTab_throwExceptionsLabel,
-			this.buildThrowExceptionsHolder(),
-			this.buildThrowExceptionsStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_CUSTOMIZATION
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildThrowExceptionsHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(getSubjectHolder(), Customization.THROW_EXCEPTIONS_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getThrowExceptions();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setThrowExceptions(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildThrowExceptionsStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultThrowExceptionsHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlCustomizationTab_throwExceptionsLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_throwExceptionsLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultThrowExceptionsHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(
-			getSubjectHolder(),
-			Customization.THROW_EXCEPTIONS_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getThrowExceptions() != null) {
-					return null;
-				}
-				return this.subject.getDefaultThrowExceptions();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ValidateSchemaComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ValidateSchemaComposite.java
deleted file mode 100644
index ff2ba6c..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ValidateSchemaComposite.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  ValidateSchemaComposite
- */
-public class ValidateSchemaComposite extends Pane<Customization>
-{
-	/**
-	 * Creates a new <code>ValidateSchemaComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public ValidateSchemaComposite(
-					Pane<? extends Customization> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCustomizationTab_validateSchemaLabel,
-			this.buildValidateSchemaHolder(),
-			this.buildValidateSchemaStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_CUSTOMIZATION
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildValidateSchemaHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(getSubjectHolder(), Customization.VALIDATE_SCHEMA_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getValidateSchema();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setValidateSchema(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildValidateSchemaStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultValidateSchemaHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlCustomizationTab_validateSchemaLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_validateSchemaLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultValidateSchemaHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(
-			getSubjectHolder(),
-			Customization.VALIDATE_SCHEMA_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getValidateSchema() != null) {
-					return null;
-				}
-				return this.subject.getDefaultValidateSchema();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ValidationOnlyComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ValidationOnlyComposite.java
deleted file mode 100644
index cd89625..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/ValidationOnlyComposite.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * ValidationOnlyComposite
- */
-public class ValidationOnlyComposite extends Pane<Customization>
-{
-	/**
-	 * Creates a new <code>ValidationOnlyComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public ValidationOnlyComposite(
-					Pane<? extends Customization> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCustomizationTab_validationOnlyLabel,
-			this.buildValidationOnlyHolder(),
-			this.buildValidationOnlyStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_CUSTOMIZATION
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildValidationOnlyHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(getSubjectHolder(), Customization.VALIDATION_ONLY_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getValidationOnly();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setValidationOnly(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildValidationOnlyStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultValidationOnlyHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlCustomizationTab_validationOnlyLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_validationOnlyLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultValidationOnlyHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(
-			getSubjectHolder(),
-			Customization.VALIDATION_ONLY_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getValidationOnly() != null) {
-					return null;
-				}
-				return this.subject.getDefaultValidationOnly();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingChangeTrackingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingChangeTrackingComposite.java
deleted file mode 100644
index 139ac43..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingChangeTrackingComposite.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * WeavingChangeTrackingComposite
- */
-public class WeavingChangeTrackingComposite extends Pane<Customization>
-{
-	/**
-	 * Creates a new <code>WeavingChangeTrackingComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public WeavingChangeTrackingComposite(
-					Pane<? extends Customization> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingChangeTrackingLabel,
-			this.buildWeavingChangeTrackingHolder(),
-			this.buildWeavingChangeTrackingStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_CUSTOMIZATION
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildWeavingChangeTrackingHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(getSubjectHolder(), Customization.WEAVING_CHANGE_TRACKING_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getWeavingChangeTracking();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setWeavingChangeTracking(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildWeavingChangeTrackingStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultWeavingChangeTrackingHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingChangeTrackingLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingChangeTrackingLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultWeavingChangeTrackingHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(
-			getSubjectHolder(),
-			Customization.WEAVING_CHANGE_TRACKING_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getWeavingChangeTracking() != null) {
-					return null;
-				}
-				return this.subject.getDefaultWeavingChangeTracking();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingComposite.java
deleted file mode 100644
index 3f1b0a9..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingComposite.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Weaving;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * WeavingComposite
- */
-public class WeavingComposite extends Pane<Customization>
-{
-	/**
-	 * Creates a new <code>WeavingComposite</code>.
-	 * 
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public WeavingComposite(
-					Pane<? extends Customization> parentComposite, 
-					Composite parent) {
-
-		super( parentComposite, parent);
-	}
-
-	private EnumFormComboViewer<Customization, Weaving> addWeavingCombo(Composite container) {
-		return new EnumFormComboViewer<Customization, Weaving>(this, container) {
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(Customization.WEAVING_PROPERTY);
-			}
-
-			@Override
-			protected Weaving[] getChoices() {
-				return Weaving.values();
-			}
-
-			@Override
-			protected Weaving getDefaultValue() {
-				return getSubject().getDefaultWeaving();
-			}
-
-			@Override
-			protected String displayString(Weaving value) {
-				return buildDisplayString(EclipseLinkUiMessages.class, WeavingComposite.this, value);
-			}
-
-			@Override
-			protected Weaving getValue() {
-				return getSubject().getWeaving();
-			}
-
-			@Override
-			protected void setValue(Weaving value) {
-				getSubject().setWeaving(value);
-			}
-		};
-	}
-	
-	@Override
-	protected void initializeLayout( Composite container) {
-
-		this.addLabeledComposite(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingLabel,
-			this.addWeavingCombo( container),
-			EclipseLinkHelpContextIds.PERSISTENCE_CUSTOMIZATION
-		);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingEagerComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingEagerComposite.java
deleted file mode 100644
index 3450e4f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingEagerComposite.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * WeavingEagerComposite
- */
-public class WeavingEagerComposite extends Pane<Customization>
-{
-	/**
-	 * Creates a new <code>WeavingEagerComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public WeavingEagerComposite(
-					Pane<? extends Customization> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingEagerLabel,
-			this.buildWeavingEagerHolder(),
-			this.buildWeavingEagerStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_CUSTOMIZATION
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildWeavingEagerHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(getSubjectHolder(), Customization.WEAVING_EAGER_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getWeavingEager();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setWeavingEager(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildWeavingEagerStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultWeavingEagerHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingEagerLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingEagerLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultWeavingEagerHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(
-			getSubjectHolder(),
-			Customization.WEAVING_EAGER_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getWeavingEager() != null) {
-					return null;
-				}
-				return this.subject.getDefaultWeavingEager();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingFetchGroupsComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingFetchGroupsComposite.java
deleted file mode 100644
index f88e695..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingFetchGroupsComposite.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * WeavingFetchGroupsComposite
- */
-public class WeavingFetchGroupsComposite extends Pane<Customization>
-{
-	/**
-	 * Creates a new <code>WeavingFetchGroupsComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public WeavingFetchGroupsComposite(
-					Pane<? extends Customization> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingFetchGroupsLabel,
-			this.buildWeavingFetchGroupsHolder(),
-			this.buildWeavingFetchGroupsStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_CUSTOMIZATION
-		);
-	}
-
-	private WritablePropertyValueModel<Boolean> buildWeavingFetchGroupsHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(getSubjectHolder(), Customization.WEAVING_FETCH_GROUPS_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getWeavingFetchGroups();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setWeavingFetchGroups(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildWeavingFetchGroupsStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultWeavingFetchGroupsHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingFetchGroupsLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingFetchGroupsLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultWeavingFetchGroupsHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(
-			getSubjectHolder(),
-			Customization.WEAVING_FETCH_GROUPS_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getWeavingFetchGroups() != null) {
-					return null;
-				}
-				return this.subject.getDefaultWeavingFetchGroups();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingInternalComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingInternalComposite.java
deleted file mode 100644
index 9bdd9a0..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingInternalComposite.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * WeavingInternalComposite
- */
-public class WeavingInternalComposite extends Pane<Customization>
-{
-	/**
-	 * Creates a new <code>WeavingInternalComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public WeavingInternalComposite(
-					Pane<? extends Customization> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingInternalLabel,
-			this.buildWeavingInternalHolder(),
-			this.buildWeavingInternalStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_CUSTOMIZATION
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildWeavingInternalHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(getSubjectHolder(), Customization.WEAVING_INTERNAL_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getWeavingInternal();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setWeavingInternal(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildWeavingInternalStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultWeavingInternalHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingInternalLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingInternalLabel;
-			}
-		};
-	}
-	
-	
-	private PropertyValueModel<Boolean> buildDefaultWeavingInternalHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(
-			getSubjectHolder(),
-			Customization.WEAVING_INTERNAL_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getWeavingInternal() != null) {
-					return null;
-				}
-				return this.subject.getDefaultWeavingInternal();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingLazyComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingLazyComposite.java
deleted file mode 100644
index b64d610..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingLazyComposite.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * WeavingLazyComposite
- */
-public class WeavingLazyComposite extends Pane<Customization>
-{
-	/**
-	 * Creates a new <code>WeavingLazyComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public WeavingLazyComposite(
-					Pane<? extends Customization> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingLazyLabel,
-			this.buildWeavingLazyHolder(),
-			this.buildWeavingLazyStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_CUSTOMIZATION
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildWeavingLazyHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(getSubjectHolder(), Customization.WEAVING_LAZY_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getWeavingLazy();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setWeavingLazy(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildWeavingLazyStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultWeavingLazyHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingLazyLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingLazyLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultWeavingLazyHolder() {
-		return new PropertyAspectAdapter<Customization, Boolean>(
-			getSubjectHolder(),
-			Customization.WEAVING_LAZY_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getWeavingLazy() != null) {
-					return null;
-				}
-				return this.subject.getDefaultWeavingLazy();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingPropertiesComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingPropertiesComposite.java
deleted file mode 100644
index f321960..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/customization/WeavingPropertiesComposite.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  WeavingPropertiesComposite
- */
-public class WeavingPropertiesComposite extends Pane<Customization>
-{
-	public WeavingPropertiesComposite(Pane<Customization> subjectHolder,
-	                                       Composite container) {
-
-		super(subjectHolder, container);
-	}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-
-		Composite weavingGroup = this.addTitledGroup(
-			this.addSubPane(parent, 10),
-			EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingPropertiesGroupBox
-		);
-
-		// Weaving
-		new WeavingComposite(this, weavingGroup);
-
-		// Weaving Lazy
-		new WeavingLazyComposite(this, weavingGroup);
-
-		// Weaving Fetch Groups
-		new WeavingFetchGroupsComposite(this, weavingGroup);
-
-		// Weaving Internal
-		new WeavingInternalComposite(this, weavingGroup);
-
-		// Weaving Eager
-		new WeavingEagerComposite(this, weavingGroup);
-
-		// Weaving Change Tracking
-		new WeavingChangeTrackingComposite(this, weavingGroup);
-
-	}
-	
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/general/EclipseLinkPersistenceUnitGeneralComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/general/EclipseLinkPersistenceUnitGeneralComposite.java
deleted file mode 100644
index ff8f363..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/general/EclipseLinkPersistenceUnitGeneralComposite.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.general;
-
-import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.persistence.JptUiPersistenceMessages;
-import org.eclipse.jpt.ui.internal.persistence.details.PersistenceUnitGeneralComposite;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * EclipseLinkPersistenceUnitGeneralComposite
- */
-public class EclipseLinkPersistenceUnitGeneralComposite
-	extends PersistenceUnitGeneralComposite
-{
-	// ********** constructors **********
-	public EclipseLinkPersistenceUnitGeneralComposite(
-		PropertyValueModel<PersistenceUnit> subjectHolder,
-					Composite container,
-					WidgetFactory widgetFactory) {
-		super(subjectHolder, container, widgetFactory);
-	}
-
-	// ********** initialization **********
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.initializeGeneralPane(container);
-		this.initializeMappedClassesPane(container);
-		this.initializeJPAMappingDescriptorsPane(container);
-		this.initializeJarFilesPane(container);
-	}
-	
-	protected void initializeJPAMappingDescriptorsPane(Composite container) {
-
-		container = addCollapsibleSection(
-			container,
-			JptUiPersistenceMessages.PersistenceUnitGeneralComposite_jpaMappingDescriptors,
-			JptUiPersistenceMessages.PersistenceUnitGeneralComposite_jpaMappingDescriptors_description
-		);
-
-		updateGridData(container);
-		updateGridData(container.getParent());
-
-		new EclipseLinkPersistenceUnitMappingFilesComposite(this, container);
-	}
-	
-	protected void initializeJarFilesPane(Composite container) {
-
-		container = addCollapsibleSection(
-			container,
-			JptUiPersistenceMessages.PersistenceUnitGeneralComposite_jarFiles
-		);
-		
-		updateGridData(container);
-		updateGridData(container.getParent());
-		
-		new EclipseLinkPersistenceUnitJarFilesComposite(this, container);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/general/EclipseLinkPersistenceUnitJarFilesComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/general/EclipseLinkPersistenceUnitJarFilesComposite.java
deleted file mode 100644
index 2449678..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/general/EclipseLinkPersistenceUnitJarFilesComposite.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2009  Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.general;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.jpt.core.JptCorePlugin;
-import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
-import org.eclipse.jpt.ui.internal.persistence.details.ArchiveFileSelectionDialog;
-import org.eclipse.jpt.ui.internal.persistence.details.PersistenceUnitJarFilesComposite;
-import org.eclipse.jpt.ui.internal.persistence.details.ArchiveFileSelectionDialog.DeploymentPathCalculator;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLinkPersistenceUnitJarFilesComposite
-	extends PersistenceUnitJarFilesComposite
-{
-	public EclipseLinkPersistenceUnitJarFilesComposite(
-			Pane<? extends PersistenceUnit> parentPane,
-			Composite parent) {
-
-		super(parentPane, parent);
-	}
-	
-	
-	@Override
-	protected DeploymentPathCalculator buildJarFileDeploymentPathCalculator() {
-		return new EclipseLinkDeploymentPathCalculator();
-	}
-	
-	
-	private static class EclipseLinkDeploymentPathCalculator
-		extends ArchiveFileSelectionDialog.ModuleDeploymentPathCalculator
-	{
-		@Override
-		public String calculateDeploymentPath(IFile file) {
-			String baseDeploymentPath = super.calculateDeploymentPath(file);
-			if (JptCorePlugin.projectHasWebFacet(file.getProject())) {
-				return "../" + baseDeploymentPath;
-			}
-			else {
-				return baseDeploymentPath;
-			}
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/general/EclipseLinkPersistenceUnitMappingFilesComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/general/EclipseLinkPersistenceUnitMappingFilesComposite.java
deleted file mode 100644
index 8b028d2..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/general/EclipseLinkPersistenceUnitMappingFilesComposite.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.general;
-
-import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
-import org.eclipse.jpt.eclipselink.core.context.persistence.general.GeneralProperties;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.EclipseLinkPersistenceUnit;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.persistence.details.PersistenceUnitMappingFilesComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | AddRemoveListPane                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see PersistenceUnit
- * @see PersistenceUnitGeneralComposite - The parent container
- * @see AddRemoveListPane
- *
- * @version 2.0
- * @since 2.0
- */
-public class EclipseLinkPersistenceUnitMappingFilesComposite extends PersistenceUnitMappingFilesComposite
-{
-	/**
-	 * Creates a new <code>PersistenceUnitMappingFilesComposite</code>.
-	 *
-	 * @param parentPane The parent pane of this one
-	 * @param parent The parent container
-	 */
-	public EclipseLinkPersistenceUnitMappingFilesComposite(Pane<? extends PersistenceUnit> parentPane,
-	                                            Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.addMappingFilesList(container);
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlGeneralTab_excludeEclipselinkOrm,
-			this.buildExcludeEclipselinkOrmHolder(),
-			this.buildExcludeEclipselinkOrmStringHolder(),
-			JpaHelpContextIds.PERSISTENCE_XML_GENERAL
-		);
-	}
-	
-	protected PropertyValueModel<GeneralProperties> buildGeneralPropertiesHolder() {
-		return new TransformationPropertyValueModel<PersistenceUnit, GeneralProperties>(getSubjectHolder()) {
-			@Override
-			protected GeneralProperties transform_(PersistenceUnit persistenceUnit) {
-				return ((EclipseLinkPersistenceUnit) persistenceUnit).getGeneralProperties();
-			}
-		};
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildExcludeEclipselinkOrmHolder() {
-		return new PropertyAspectAdapter<GeneralProperties, Boolean>(
-			buildGeneralPropertiesHolder(),
-			GeneralProperties.EXCLUDE_ECLIPSELINK_ORM_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getExcludeEclipselinkOrm();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setExcludeEclipselinkOrm(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildExcludeEclipselinkOrmStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultExcludeEclipselinkOrmHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlGeneralTab_excludeEclipselinkOrmWithDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlGeneralTab_excludeEclipselinkOrm;
-			}
-		};
-	}	
-	
-	private PropertyValueModel<Boolean> buildDefaultExcludeEclipselinkOrmHolder() {
-		return new PropertyAspectAdapter<GeneralProperties, Boolean>(
-			buildGeneralPropertiesHolder(),
-			GeneralProperties.EXCLUDE_ECLIPSELINK_ORM_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getExcludeEclipselinkOrm() != null) {
-					return null;
-				}
-				return this.subject.getDefaultExcludeEclipselinkOrm();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/EclipseLinkLoggingComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/EclipseLinkLoggingComposite.java
deleted file mode 100644
index e251099..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/EclipseLinkLoggingComposite.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.logging;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logging;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.Section;
-
-/**
- * EclipseLinkLoggingComposite
- */
-public class EclipseLinkLoggingComposite<T extends Logging>
-	extends Pane<T>
-{
-	public EclipseLinkLoggingComposite(
-					Pane<T> subjectHolder, 
-					Composite container) {
-		super(subjectHolder, container, false);
-	}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-		Section section = getWidgetFactory().createSection(parent, SWT.FLAT | ExpandableComposite.TITLE_BAR | Section.DESCRIPTION);
-		section.setText(EclipseLinkUiMessages.PersistenceXmlLoggingTab_sectionTitle);
-		section.setDescription(EclipseLinkUiMessages.PersistenceXmlLoggingTab_sectionDescription);
-		Composite composite = getWidgetFactory().createComposite(section);
-		composite.setLayout(new GridLayout(1, false));
-		section.setClient(composite);
-		this.updateGridData(composite);
-		this.updateGridData(composite.getParent());
-		
-		// LoggingLevel:
-		new LoggingLevelComposite(this, composite);
-
-		// Boolean properties group
-		this.logPropertiesComposite(composite);
-
-		// LoggingFile:
-		new LoggingFileLocationComposite(this, composite);
-		
-		// Logger:
-		new LoggerComposite(this, composite);
-		
-		return;
-	}
-	
-	protected void logPropertiesComposite(Composite parent) {
-
-		// Timestamp:
-		new TimestampComposite(this, parent);
-
-		// Thread:
-		new ThreadComposite(this, parent);
-
-		// Session:
-		new SessionComposite(this, parent);
-
-		// Exceptions:
-		new ExceptionsComposite(this, parent);
-	}
-
-	private void updateGridData(Composite container) {
-		GridData gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		container.setLayoutData(gridData);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/ExceptionsComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/ExceptionsComposite.java
deleted file mode 100644
index b10e499..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/ExceptionsComposite.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.logging;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logging;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * ExceptionsComposite
- */
-public class ExceptionsComposite extends Pane<Logging>
-{
-	/**
-	 * Creates a new <code>ExceptionsComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public ExceptionsComposite(
-					Pane<? extends Logging> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlLoggingTab_exceptionsLabel,
-			this.buildExceptionsHolder(),
-			this.buildExceptionsStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_LOGGING_EXCEPTIONS
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildExceptionsHolder() {
-		return new PropertyAspectAdapter<Logging, Boolean>(getSubjectHolder(), Logging.EXCEPTIONS_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getExceptions();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setExceptions(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildExceptionsStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultExceptionsHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlLoggingTab_exceptionsLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlLoggingTab_exceptionsLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultExceptionsHolder() {
-		return new PropertyAspectAdapter<Logging, Boolean>(
-			getSubjectHolder(),
-			Logging.EXCEPTIONS_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getExceptions() != null) {
-					return null;
-				}
-				return this.subject.getDefaultExceptions();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/LoggerComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/LoggerComposite.java
deleted file mode 100644
index c8e038f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/LoggerComposite.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.logging;
-
-import com.ibm.icu.text.Collator;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Iterator;
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logger;
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logging;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.ClassChooserComboPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringConverter;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelAdapter;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  LoggerComposite
- */
-public class LoggerComposite extends ClassChooserComboPane<Logging>
-{
-	/**
-	 * Creates a new <code>LoggerComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public LoggerComposite(
-								Pane<? extends Logging> parentPane,
-	                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-	
-	@Override
-	protected String getClassName() {
-		if (this.getSubject().getLogger() == null) {
-			return Logger.DEFAULT_LOGGER_CLASS_NAME;
-		}
-		return Logger.getLoggerClassName(this.getSubject().getLogger());
-	}
-
-    @Override
-    protected String getLabelText() {
-    	return EclipseLinkUiMessages.PersistenceXmlLoggingTab_loggerLabel;
-    }
-    
-    @Override
-    protected JpaProject getJpaProject() {
-    	return getSubject().getJpaProject();
-    }
-    
-    @Override
-    protected String getSuperInterfaceName() {
-    	return Logging.ECLIPSELINK_LOGGER_CLASS_NAME;
-    }
-    
-	@Override
-	protected WritablePropertyValueModel<String> buildTextHolder() {
-		return new PropertyAspectAdapter<Logging, String>(this.getSubjectHolder(), Logging.LOGGER_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-
-				String name = this.subject.getLogger();
-				if (name == null) {
-					name = LoggerComposite.this.getDefaultValue(this.subject);
-				}
-				return name;
-			}
-
-			@Override
-			protected void setValue_(String value) {
-
-				if (getDefaultValue(this.subject).equals(value)) {
-					value = null;
-				}
-				this.subject.setLogger(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildDefaultLoggerHolder() {
-		return new PropertyAspectAdapter<Logging, String>(this.getSubjectHolder(), Logging.DEFAULT_LOGGER) {
-			@Override
-			protected String buildValue_() {
-				return LoggerComposite.this.getDefaultValue(this.subject);
-			}
-		};
-	}
-
-	private ListValueModel<String> buildDefaultLoggerListHolder() {
-		return new PropertyListValueModelAdapter<String>(
-			this.buildDefaultLoggerHolder()
-		);
-	}
-
-	private String buildDisplayString(String loggerName) {
-
-		switch (Logger.valueOf(loggerName)) {
-			case default_logger: {
-				return EclipseLinkUiMessages.LoggerComposite_default_logger;
-			}
-			case java_logger: {
-				return EclipseLinkUiMessages.LoggerComposite_java_logger;
-			}
-			case server_logger: {
-				return EclipseLinkUiMessages.LoggerComposite_server_logger;
-			}
-			default: {
-				return null;
-			}
-		}
-	}
-
-	private Comparator<String> buildLoggerComparator() {
-		return new Comparator<String>() {
-			public int compare(String logger1, String logger2) {
-				logger1 = buildDisplayString(logger1);
-				logger2 = buildDisplayString(logger2);
-				return Collator.getInstance().compare(logger1, logger2);
-			}
-		};
-	}
-
-	@Override
-	protected StringConverter<String> buildClassConverter() {
-		return new StringConverter<String>() {
-			public String convertToString(String value) {
-				try {
-					Logger.valueOf(value);
-					value = buildDisplayString(value);
-				}
-				catch (Exception e) {
-					// Ignore since the value is not a Logger
-				}
-				return value;
-			}
-		};
-	}
-
-	@Override
-	protected ListValueModel<String> buildClassListHolder() {
-		ArrayList<ListValueModel<String>> holders = new ArrayList<ListValueModel<String>>(2);
-		holders.add(this.buildDefaultLoggerListHolder());
-		holders.add(this.buildLoggersListHolder());
-		return new CompositeListValueModel<ListValueModel<String>, String>(holders);
-	}
-
-	private Iterator<String> buildLoggers() {
-		return new TransformationIterator<Logger, String>(CollectionTools.iterator(Logger.values())) {
-			@Override
-			protected String transform(Logger next) {
-				return next.name();
-			}
-		};
-	}
-
-	private CollectionValueModel<String> buildLoggersCollectionHolder() {
-		return new SimpleCollectionValueModel<String>(
-			CollectionTools.collection(this.buildLoggers())
-		);
-	}
-
-	private ListValueModel<String> buildLoggersListHolder() {
-		return new SortedListValueModelAdapter<String>(
-			this.buildLoggersCollectionHolder(),
-			this.buildLoggerComparator()
-		);
-	}
-
-	private String getDefaultValue(Logging subject) {
-		String defaultValue = subject.getDefaultLogger();
-
-		if (defaultValue != null) {
-			return NLS.bind(
-				EclipseLinkUiMessages.PersistenceXmlLoggingTab_defaultWithOneParam,
-				defaultValue
-			);
-		}
-		return EclipseLinkUiMessages.PersistenceXmlLoggingTab_defaultEmpty;
-	}
-	
-	@Override
-	protected void setClassName(String className) {
-		this.getSubject().setLogger(className);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/LoggingFileLocationComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/LoggingFileLocationComposite.java
deleted file mode 100644
index 1a81193..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/LoggingFileLocationComposite.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.logging;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logging;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.FileChooserComboPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  LoggingFileLocationComposite 
- */
-public class LoggingFileLocationComposite extends Pane<Logging>
-{
-	public LoggingFileLocationComposite(Pane<? extends Logging> parentPane,
-	                                      Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		
-		new FileChooserComboPane<Logging>(this, container) {
-
-			@Override
-			protected WritablePropertyValueModel<String> buildTextHolder() {
-				return new PropertyAspectAdapter<Logging, String>(
-										getSubjectHolder(), Logging.LOG_FILE_LOCATION_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-
-						String name = subject.getLogFileLocation();
-						if (name == null) {
-							name = defaultValue(subject);
-						}
-						return name;
-					}
-
-					@Override
-					protected void setValue_(String value) {
-
-						if (defaultValue(subject).equals(value)) {
-							value = null;
-						}
-						subject.setLogFileLocation(value);
-					}
-				};
-			}
-
-			private String defaultValue(Logging subject) {
-				String defaultValue = subject.getDefaultLogFileLocation();
-
-				if (defaultValue != null) {
-					return NLS.bind(
-						EclipseLinkUiMessages.PersistenceXmlLoggingTab_defaultWithOneParam,
-						defaultValue
-					);
-				}
-				else {
-					return this.getDefaultString();
-				}
-			}
-
-			@Override
-			protected String getDefaultString() {
-				return EclipseLinkUiMessages.PersistenceXmlLoggingTab_defaultStdout;
-			}
-
-			@Override
-			protected String getDialogTitle() {
-				return EclipseLinkUiMessages.LoggingFileLocationComposite_dialogTitle;
-			}
-
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiMessages.PersistenceXmlLoggingTab_loggingFileLabel;
-			}
-
-			@Override
-			protected String getProjectPath() {
-				return this.getSubject().getJpaProject().getProject().getLocation().toString();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/LoggingLevelComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/LoggingLevelComposite.java
deleted file mode 100644
index 819b61b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/LoggingLevelComposite.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.logging;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logging;
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.LoggingLevel;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * LoggingLevelComposite
- */
-public class LoggingLevelComposite extends Pane<Logging>
-{
-	/**
-	 * Creates a new <code>LoggingLevelComposite</code>.
-	 * 
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public LoggingLevelComposite(
-				Pane<? extends Logging> parentComposite, 
-				Composite parent) {
-		
-		super(parentComposite, parent);
-	}
-
-	private EnumFormComboViewer<Logging, LoggingLevel> addLoggingLevelCombo(Composite container) {
-		return new EnumFormComboViewer<Logging, LoggingLevel>(this, container) {
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(Logging.LEVEL_PROPERTY);
-			}
-
-			@Override
-			protected LoggingLevel[] getChoices() {
-				return LoggingLevel.values();
-			}
-			
-			@Override
-			protected boolean sortChoices() {
-				return false;
-			}
-			
-			@Override
-			protected LoggingLevel getDefaultValue() {
-				return this.getSubject().getDefaultLevel();
-			}
-
-			@Override
-			protected String displayString(LoggingLevel value) {
-				return this.buildDisplayString(EclipseLinkUiMessages.class, LoggingLevelComposite.this, value);
-			}
-
-			@Override
-			protected LoggingLevel getValue() {
-				return this.getSubject().getLevel();
-			}
-
-			@Override
-			protected void setValue(LoggingLevel value) {
-				this.getSubject().setLevel(value);
-			}
-		};
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.addLabeledComposite(
-				container,
-				EclipseLinkUiMessages.PersistenceXmlLoggingTab_loggingLevelLabel,
-				this.addLoggingLevelCombo(container),
-				EclipseLinkHelpContextIds.PERSISTENCE_LOGGING_LEVEL
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/PersistenceXmlLoggingTab.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/PersistenceXmlLoggingTab.java
deleted file mode 100644
index 04a9213..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/PersistenceXmlLoggingTab.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.logging;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logging;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaPageComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * PersistenceXmlLoggingTab
- */
-public class PersistenceXmlLoggingTab<T extends Logging>
-	extends Pane<T>
-	implements JpaPageComposite
-{
-	// ********** constructors/initialization **********
-	public PersistenceXmlLoggingTab(
-				PropertyValueModel<T> subjectHolder, 
-				Composite parent, 
-				WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		new EclipseLinkLoggingComposite<T>(this, container);
-	}
-
-	// ********** JpaPageComposite implementation **********
-
-	public String getHelpID() {
-		return EclipseLinkHelpContextIds.PERSISTENCE_LOGGING;
-	}
-
-	public ImageDescriptor getPageImageDescriptor() {
-		return null;
-	}
-
-	public String getPageText() {
-		return EclipseLinkUiMessages.PersistenceXmlLoggingTab_title;
-	}
-
-	// ********** Layout **********
-	@Override
-	protected Composite addContainer(Composite parent) {
-		GridLayout layout = new GridLayout(1, true);
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		layout.marginTop = 0;
-		layout.marginLeft = 0;
-		layout.marginBottom = 0;
-		layout.marginRight = 0;
-		layout.verticalSpacing = 15;
-		Composite container = this.addPane(parent, layout);
-		this.updateGridData(container);
-		return container;
-	}
-
-	private void updateGridData(Composite container) {
-		GridData gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		container.setLayoutData(gridData);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/SessionComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/SessionComposite.java
deleted file mode 100644
index 6724eb0..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/SessionComposite.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.logging;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logging;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * SessionComposite
- */
-public class SessionComposite extends Pane<Logging>
-{
-	/**
-	 * Creates a new <code>SessionComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public SessionComposite(
-					Pane<? extends Logging> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlLoggingTab_sessionLabel,
-			this.buildSessionHolder(),
-			this.buildSessionStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_LOGGING_SESSION
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildSessionHolder() {
-		return new PropertyAspectAdapter<Logging, Boolean>(getSubjectHolder(), Logging.SESSION_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getSession();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setSession(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildSessionStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultSessionHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlLoggingTab_sessionLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlLoggingTab_sessionLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultSessionHolder() {
-		return new PropertyAspectAdapter<Logging, Boolean>(
-			getSubjectHolder(),
-			Logging.SESSION_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getSession() != null) {
-					return null;
-				}
-				return this.subject.getDefaultSession();
-			}
-		};
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/ThreadComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/ThreadComposite.java
deleted file mode 100644
index 3cf4dd3..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/ThreadComposite.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.logging;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logging;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * ThreadComposite
- */
-public class ThreadComposite extends Pane<Logging>
-{
-	/**
-	 * Creates a new <code>ThreadComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public ThreadComposite(
-					Pane<? extends Logging> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlLoggingTab_threadLabel,
-			this.buildThreadHolder(),
-			this.buildThreadStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_LOGGING_THREAD
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildThreadHolder() {
-		return new PropertyAspectAdapter<Logging, Boolean>(getSubjectHolder(), Logging.THREAD_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getThread();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setThread(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildThreadStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultThreadHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlLoggingTab_threadLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlLoggingTab_threadLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultThreadHolder() {
-		return new PropertyAspectAdapter<Logging, Boolean>(
-			getSubjectHolder(),
-			Logging.THREAD_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getThread() != null) {
-					return null;
-				}
-				return this.subject.getDefaultThread();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/TimestampComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/TimestampComposite.java
deleted file mode 100644
index ce3a89b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/logging/TimestampComposite.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.logging;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logging;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * TimestampComposite
- */
-public class TimestampComposite extends Pane<Logging>
-{
-	/**
-	 * Creates a new <code>TimestampComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public TimestampComposite(
-					Pane<? extends Logging> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlLoggingTab_timestampLabel,
-			this.buildTimestampHolder(),
-			this.buildTimestampStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_LOGGING_TIMESTAMP
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildTimestampHolder() {
-		return new PropertyAspectAdapter<Logging, Boolean>(getSubjectHolder(), Logging.TIMESTAMP_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getTimestamp();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setTimestamp(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildTimestampStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultTimestampHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlLoggingTab_timestampLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlLoggingTab_timestampLabel;
-			}
-		};
-	}
-	private PropertyValueModel<Boolean> buildDefaultTimestampHolder() {
-		return new PropertyAspectAdapter<Logging, Boolean>(
-			getSubjectHolder(),
-			Logging.TIMESTAMP_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getTimestamp() != null) {
-					return null;
-				}
-				return this.subject.getDefaultTimestamp();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/EclipseLinkOptionsComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/EclipseLinkOptionsComposite.java
deleted file mode 100644
index fbfa8fb..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/EclipseLinkOptionsComposite.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.options;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.options.Options;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * EclipseLinkOptionsComposite
- */
-public class EclipseLinkOptionsComposite<T extends Options> extends Pane<T>
-{
-	public EclipseLinkOptionsComposite(
-					Pane<T> subjectHolder, 
-					Composite container) {
-
-		super(subjectHolder, container, false);
-	}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-		this.initializeSessionOptionsPane(parent);
-		this.initializeMiscellaneousPane(parent);
-	}
-	
-	private void initializeSessionOptionsPane(Composite parent) {
-		Composite composite = this.addSection(parent, 
-				EclipseLinkUiMessages.PersistenceXmlOptionsTab_sessionSectionTitle,
-				EclipseLinkUiMessages.PersistenceXmlOptionsTab_sessionSectionDescription);
-		
-		this.updateGridData(composite);
-		this.updateGridData(composite.getParent());
-
-		new SessionNameComposite(this, composite);
-
-		new SessionsXmlComposite(this, composite);
-		
-		new TargetDatabaseComposite(this, composite);
-		
-		new TargetServerComposite(this, composite);
-		
-		new EventListenerComposite(this, composite);
-		
-		new IncludeDescriptorQueriesComposite(this, composite);
-		
-		return;
-	}
-	
-	protected Composite initializeMiscellaneousPane(Composite container) {	
-		
-		this.updateGridData(container);
-		this.updateGridData(container.getParent());
-		
-		Composite composite = this.addSection(container, 
-				EclipseLinkUiMessages.PersistenceXmlOptionsTab_miscellaneousSectionTitle,
-				EclipseLinkUiMessages.PersistenceXmlOptionsTab_miscellaneousSectionDescription);
-		
-		this.updateGridData(composite);
-		this.updateGridData(composite.getParent());
-
-		new TemporalMutableComposite(this, composite);
-		
-		return composite;
-	}
-
-	private void updateGridData(Composite container) {
-		GridData gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		container.setLayoutData(gridData);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/EventListenerComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/EventListenerComposite.java
deleted file mode 100644
index 7bba4ca..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/EventListenerComposite.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.options;
-
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.core.context.persistence.options.Options;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.ClassChooserPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  EventListenerComposite
- */
-public class EventListenerComposite extends Pane<Options>
-{
-	/**
-	 * Creates a new <code>EventListenerComposite</code>.
-	 *
-	 * @param parentPane The parent pane of this one
-	 * @param parent The parent container
-	 */
-	public EventListenerComposite(Pane<? extends Options> parentPane,
-                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	private ClassChooserPane<Options> initializeClassChooser(Composite container) {
-
-		return new ClassChooserPane<Options>(this, container) {
-
-			@Override
-			protected WritablePropertyValueModel<String> buildTextHolder() {
-				return new PropertyAspectAdapter<Options, String>(
-							this.getSubjectHolder(), Options.SESSION_EVENT_LISTENER_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-						return this.subject.getEventListener();
-					}
-
-					@Override
-					protected void setValue_(String value) {
-
-						if (value.length() == 0) {
-							value = null;
-						}
-						this.subject.setEventListener(value);
-					}
-				};
-			}
-
-			@Override
-			protected String getClassName() {
-				return this.getSubject().getEventListener();
-			}
-
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiMessages.PersistenceXmlOptionsTab_eventListenerLabel;
-			}
-			
-			@Override
-			protected JpaProject getJpaProject() {
-				return getSubject().getJpaProject();
-			}
-
-			@Override
-			protected void setClassName(String className) {
-				this.getSubject().setEventListener(className);
-			}
-			
-			@Override
-			protected String getSuperInterfaceName() {
-				return Options.ECLIPSELINK_EVENT_LISTENER_CLASS_NAME;
-			}
-		};
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.initializeClassChooser(container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/IncludeDescriptorQueriesComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/IncludeDescriptorQueriesComposite.java
deleted file mode 100644
index f0e0d78..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/IncludeDescriptorQueriesComposite.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.options;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.options.Options;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * IncludeDescriptorQueriesComposite
- */
-public class IncludeDescriptorQueriesComposite extends Pane<Options>
-{
-	/**
-	 * Creates a new <code>IncludeDescriptorQueriesComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public IncludeDescriptorQueriesComposite(
-					Pane<? extends Options> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlOptionsTab_includeDescriptorQueriesLabel,
-			this.buildIncludeDescriptorQueriesHolder(),
-			this.buildIncludeDescriptorQueriesStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_OPTIONS
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildIncludeDescriptorQueriesHolder() {
-		return new PropertyAspectAdapter<Options, Boolean>(getSubjectHolder(), Options.SESSION_INCLUDE_DESCRIPTOR_QUERIES_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getIncludeDescriptorQueries();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setIncludeDescriptorQueries(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildIncludeDescriptorQueriesStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultIncludeDescriptorQueriesHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlOptionsTab_includeDescriptorQueriesLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlOptionsTab_includeDescriptorQueriesLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultIncludeDescriptorQueriesHolder() {
-		return new PropertyAspectAdapter<Options, Boolean>(
-			getSubjectHolder(),
-			Options.SESSION_INCLUDE_DESCRIPTOR_QUERIES_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getIncludeDescriptorQueries() != null) {
-					return null;
-				}
-				return this.subject.getDefaultIncludeDescriptorQueries();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/PersistenceXmlOptionsTab.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/PersistenceXmlOptionsTab.java
deleted file mode 100644
index c1faece..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/PersistenceXmlOptionsTab.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.options;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jpt.eclipselink.core.context.persistence.options.Options;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaPageComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * PersistenceXmlOptionsTab
- */
-public class PersistenceXmlOptionsTab<T extends Options>
-	extends Pane<T>
-	implements JpaPageComposite
-{
-	// ********** constructors/initialization **********
-	public PersistenceXmlOptionsTab(
-				PropertyValueModel<T> subjectHolder, 
-				Composite parent, 
-				WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		new EclipseLinkOptionsComposite<T>(this, container);
-	}
-
-	// ********** JpaPageComposite implementation **********
-
-	public String getHelpID() {
-		return EclipseLinkHelpContextIds.PERSISTENCE_OPTIONS;
-	}
-
-	public ImageDescriptor getPageImageDescriptor() {
-		return null;
-	}
-
-	public String getPageText() {
-		return EclipseLinkUiMessages.PersistenceXmlOptionsTab_title;
-	}
-
-	// ********** Layout **********
-	@Override
-	protected Composite addContainer(Composite parent) {
-		GridLayout layout = new GridLayout(1, true);
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		layout.marginTop = 0;
-		layout.marginLeft = 0;
-		layout.marginBottom = 0;
-		layout.marginRight = 0;
-		layout.verticalSpacing = 15;
-		Composite container = this.addPane(parent, layout);
-		this.updateGridData(container);
-		return container;
-	}
-
-	private void updateGridData(Composite container) {
-		GridData gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		container.setLayoutData(gridData);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/SessionNameComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/SessionNameComposite.java
deleted file mode 100644
index c7abb3e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/SessionNameComposite.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.options;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.options.Options;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  SessionNameComposite
- */
-public class SessionNameComposite extends Pane<Options>
-{
-	/**
-	 * Creates a new <code>SessionNameComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public SessionNameComposite(
-								Pane<? extends Options> parentPane,
-	                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	private PropertyValueModel<String> buildDefaultSessionNameHolder() {
-		return new PropertyAspectAdapter<Options, String>(this.getSubjectHolder(), Options.DEFAULT_SESSION_NAME) {
-			@Override
-			protected String buildValue_() {
-				return SessionNameComposite.this.getDefaultValue(subject);
-			}
-		};
-	}
-
-	private ListValueModel<String> buildDefaultSessionNameListHolder() {
-		return new PropertyListValueModelAdapter<String>(
-			this.buildDefaultSessionNameHolder()
-		);
-	}
-
-	private WritablePropertyValueModel<String> buildSessionNameHolder() {
-		return new PropertyAspectAdapter<Options, String>(this.getSubjectHolder(), Options.SESSION_NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-
-				String name = subject.getSessionName();
-				if (name == null) {
-					name = SessionNameComposite.this.getDefaultValue(subject);
-				}
-				return name;
-			}
-
-			@Override
-			protected void setValue_(String value) {
-
-				if (getDefaultValue(subject).equals(value)) {
-					value = null;
-				}
-				subject.setSessionName(value);
-			}
-		};
-	}
-
-	private String getDefaultValue(Options subject) {
-		String defaultValue = subject.getDefaultSessionName();
-
-		if (defaultValue != null) {
-			return NLS.bind(
-				EclipseLinkUiMessages.PersistenceXmlOptionsTab_defaultWithOneParam,
-				defaultValue
-			);
-		}
-		return EclipseLinkUiMessages.PersistenceXmlOptionsTab_defaultEmpty;
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		Combo combo = addLabeledEditableCombo(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlOptionsTab_sessionName,
-			this.buildDefaultSessionNameListHolder(),
-			this.buildSessionNameHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_OPTIONS_SESSION_NAME
-		);
-		SWTUtil.attachDefaultValueHandler(combo);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/SessionsXmlComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/SessionsXmlComposite.java
deleted file mode 100644
index 6219d27..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/SessionsXmlComposite.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.options;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.options.Options;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  SessionsXmlComposite
- */
-public class SessionsXmlComposite extends Pane<Options>
-{
-	/**
-	 * Creates a new <code>SessionsXmlComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public SessionsXmlComposite(
-								Pane<? extends Options> parentPane,
-	                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	private PropertyValueModel<String> buildDefaultSessionsXmlFileNameHolder() {
-		return new PropertyAspectAdapter<Options, String>(this.getSubjectHolder(), Options.DEFAULT_SESSIONS_XML) {
-			@Override
-			protected String buildValue_() {
-				return SessionsXmlComposite.this.getDefaultValue(subject);
-			}
-		};
-	}
-
-	private ListValueModel<String> buildDefaultSessionsXmlFileNameListHolder() {
-		return new PropertyListValueModelAdapter<String>(
-			this.buildDefaultSessionsXmlFileNameHolder()
-		);
-	}
-
-	private WritablePropertyValueModel<String> buildSessionsXmlFileNameHolder() {
-		return new PropertyAspectAdapter<Options, String>(this.getSubjectHolder(), Options.SESSIONS_XML_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-
-				String name = subject.getSessionsXml();
-				if (name == null) {
-					name = SessionsXmlComposite.this.getDefaultValue(subject);
-				}
-				return name;
-			}
-
-			@Override
-			protected void setValue_(String value) {
-
-				if (getDefaultValue(subject).equals(value)) {
-					value = null;
-				}
-				subject.setSessionsXml(value);
-			}
-		};
-	}
-
-	private String getDefaultValue(Options subject) {
-		String defaultValue = subject.getDefaultSessionsXml();
-
-		if (defaultValue != null) {
-			return NLS.bind(
-				EclipseLinkUiMessages.PersistenceXmlOptionsTab_defaultWithOneParam,
-				defaultValue
-			);
-		}
-		return EclipseLinkUiMessages.PersistenceXmlOptionsTab_defaultEmpty;
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		Combo combo = addLabeledEditableCombo(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlOptionsTab_sessionsXml,
-			this.buildDefaultSessionsXmlFileNameListHolder(),
-			this.buildSessionsXmlFileNameHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_OPTIONS_SESSIONS_XML
-		);
-		SWTUtil.attachDefaultValueHandler(combo);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/TargetDatabaseComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/TargetDatabaseComposite.java
deleted file mode 100644
index 504aee5..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/TargetDatabaseComposite.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.options;
-
-import com.ibm.icu.text.Collator;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Iterator;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.options.Options;
-import org.eclipse.jpt.eclipselink.core.context.persistence.options.TargetDatabase;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringConverter;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelAdapter;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * TargetDatabaseComposite
- */
-public class TargetDatabaseComposite extends Pane<Options>
-{
-	/**
-	 * Creates a new <code>TargetDatabaseComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public TargetDatabaseComposite(
-								Pane<? extends Options> parentPane,
-	                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	private PropertyValueModel<String> buildDefaultTargetDatabaseHolder() {
-		return new PropertyAspectAdapter<Options, String>(this.getSubjectHolder(), Options.DEFAULT_TARGET_DATABASE) {
-			@Override
-			protected String buildValue_() {
-				return TargetDatabaseComposite.this.getDefaultValue(subject);
-			}
-		};
-	}
-
-	private ListValueModel<String> buildDefaultTargetDatabaseListHolder() {
-		return new PropertyListValueModelAdapter<String>(
-			this.buildDefaultTargetDatabaseHolder()
-		);
-	}
-
-	private String buildDisplayString(String targetDatabaseName) {
-		
-		return SWTUtil.buildDisplayString(
-			EclipseLinkUiMessages.class, 
-			this.getClass(), 
-			TargetDatabase.valueOf(targetDatabaseName));
-	}
-
-	private Comparator<String> buildTargetDatabaseComparator() {
-		return new Comparator<String>() {
-			public int compare(String targetDatabase1, String targetDatabase2) {
-				targetDatabase1 = buildDisplayString(targetDatabase1);
-				targetDatabase2 = buildDisplayString(targetDatabase2);
-				return Collator.getInstance().compare(targetDatabase1, targetDatabase2);
-			}
-		};
-	}
-
-	private StringConverter<String> buildTargetDatabaseConverter() {
-		return new StringConverter<String>() {
-			public String convertToString(String value) {
-				try {
-					TargetDatabase.valueOf(value);
-					value = buildDisplayString(value);
-				}
-				catch (Exception e) {
-					// Ignore since the value is not a TargetDatabase
-				}
-				return value;
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<String> buildTargetDatabaseHolder() {
-		return new PropertyAspectAdapter<Options, String>(this.getSubjectHolder(), Options.TARGET_DATABASE_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-
-				String name = subject.getTargetDatabase();
-				if (name == null) {
-					name = TargetDatabaseComposite.this.getDefaultValue(subject);
-				}
-				return name;
-			}
-
-			@Override
-			protected void setValue_(String value) {
-
-				if (getDefaultValue(subject).equals(value)) {
-					value = null;
-				}
-				subject.setTargetDatabase(value);
-			}
-		};
-	}
-
-	private ListValueModel<String> buildTargetDatabaseListHolder() {
-		ArrayList<ListValueModel<String>> holders = new ArrayList<ListValueModel<String>>(2);
-		holders.add(buildDefaultTargetDatabaseListHolder());
-		holders.add(buildTargetDatabasesListHolder());
-		return new CompositeListValueModel<ListValueModel<String>, String>(holders);
-	}
-
-	private Iterator<String> buildTargetDatabases() {
-		return new TransformationIterator<TargetDatabase, String>(CollectionTools.iterator(TargetDatabase.values())) {
-			@Override
-			protected String transform(TargetDatabase next) {
-				return next.name();
-			}
-		};
-	}
-
-	private CollectionValueModel<String> buildTargetDatabasesCollectionHolder() {
-		return new SimpleCollectionValueModel<String>(
-			CollectionTools.collection(buildTargetDatabases())
-		);
-	}
-
-	private ListValueModel<String> buildTargetDatabasesListHolder() {
-		return new SortedListValueModelAdapter<String>(
-			buildTargetDatabasesCollectionHolder(),
-			buildTargetDatabaseComparator()
-		);
-	}
-
-	private String getDefaultValue(Options subject) {
-		String defaultValue = subject.getDefaultTargetDatabase();
-
-		if (defaultValue != null) {
-			return NLS.bind(
-				EclipseLinkUiMessages.PersistenceXmlOptionsTab_defaultWithOneParam,
-				defaultValue
-			);
-		}
-		return EclipseLinkUiMessages.PersistenceXmlOptionsTab_defaultEmpty;
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		Combo combo = addLabeledEditableCombo(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlOptionsTab_targetDatabaseLabel,
-			this.buildTargetDatabaseListHolder(),
-			this.buildTargetDatabaseHolder(),
-			this.buildTargetDatabaseConverter(),
-			EclipseLinkHelpContextIds.PERSISTENCE_OPTIONS_TARGET_DATABASE
-		);
-
-		SWTUtil.attachDefaultValueHandler(combo);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/TargetServerComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/TargetServerComposite.java
deleted file mode 100644
index ec912c7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/TargetServerComposite.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.options;
-
-import com.ibm.icu.text.Collator;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Iterator;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.options.Options;
-import org.eclipse.jpt.eclipselink.core.context.persistence.options.TargetServer;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringConverter;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelAdapter;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  TargetServerComposite
- */
-public class TargetServerComposite extends Pane<Options>
-{
-	/**
-	 * Creates a new <code>TargetServerComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public TargetServerComposite(
-								Pane<? extends Options> parentPane,
-	                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	private PropertyValueModel<String> buildDefaultTargetServerHolder() {
-		return new PropertyAspectAdapter<Options, String>(this.getSubjectHolder(), Options.DEFAULT_TARGET_SERVER) {
-			@Override
-			protected String buildValue_() {
-				return TargetServerComposite.this.getDefaultValue(subject);
-			}
-		};
-	}
-
-	private ListValueModel<String> buildDefaultTargetServerListHolder() {
-		return new PropertyListValueModelAdapter<String>(
-			this.buildDefaultTargetServerHolder()
-		);
-	}
-
-	private String buildDisplayString(String targetServerName) {
-		
-		return SWTUtil.buildDisplayString(
-			EclipseLinkUiMessages.class, 
-			this.getClass(), 
-			TargetServer.valueOf(targetServerName));
-	}
-
-	private Comparator<String> buildTargetServerComparator() {
-		return new Comparator<String>() {
-			public int compare(String targetServer1, String targetServer2) {
-				targetServer1 = buildDisplayString(targetServer1);
-				targetServer2 = buildDisplayString(targetServer2);
-				return Collator.getInstance().compare(targetServer1, targetServer2);
-			}
-		};
-	}
-
-	private StringConverter<String> buildTargetServerConverter() {
-		return new StringConverter<String>() {
-			public String convertToString(String value) {
-				try {
-					TargetServer.valueOf(value);
-					value = buildDisplayString(value);
-				}
-				catch (Exception e) {
-					// Ignore since the value is not a TargetServer
-				}
-				return value;
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<String> buildTargetServerHolder() {
-		return new PropertyAspectAdapter<Options, String>(this.getSubjectHolder(), Options.TARGET_SERVER_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-
-				String name = subject.getTargetServer();
-				if (name == null) {
-					name = TargetServerComposite.this.getDefaultValue(subject);
-				}
-				return name;
-			}
-
-			@Override
-			protected void setValue_(String value) {
-
-				if (getDefaultValue(subject).equals(value)) {
-					value = null;
-				}
-				subject.setTargetServer(value);
-			}
-		};
-	}
-
-	private ListValueModel<String> buildTargetServerListHolder() {
-		ArrayList<ListValueModel<String>> holders = new ArrayList<ListValueModel<String>>(2);
-		holders.add(buildDefaultTargetServerListHolder());
-		holders.add(buildTargetServersListHolder());
-		return new CompositeListValueModel<ListValueModel<String>, String>(holders);
-	}
-
-	private Iterator<String> buildTargetServers() {
-		return new TransformationIterator<TargetServer, String>(CollectionTools.iterator(TargetServer.values())) {
-			@Override
-			protected String transform(TargetServer next) {
-				return next.name();
-			}
-		};
-	}
-
-	private CollectionValueModel<String> buildTargetServersCollectionHolder() {
-		return new SimpleCollectionValueModel<String>(
-			CollectionTools.collection(buildTargetServers())
-		);
-	}
-
-	private ListValueModel<String> buildTargetServersListHolder() {
-		return new SortedListValueModelAdapter<String>(
-			buildTargetServersCollectionHolder(),
-			buildTargetServerComparator()
-		);
-	}
-
-	private String getDefaultValue(Options subject) {
-		String defaultValue = subject.getDefaultTargetServer();
-
-		if (defaultValue != null) {
-			return NLS.bind(
-				EclipseLinkUiMessages.PersistenceXmlOptionsTab_defaultWithOneParam,
-				defaultValue
-			);
-		}
-		return EclipseLinkUiMessages.PersistenceXmlOptionsTab_defaultEmpty;
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		Combo combo = addLabeledEditableCombo(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlOptionsTab_targetServerLabel,
-			this.buildTargetServerListHolder(),
-			this.buildTargetServerHolder(),
-			this.buildTargetServerConverter(),
-			EclipseLinkHelpContextIds.PERSISTENCE_OPTIONS_TARGET_SERVER
-		);
-
-		SWTUtil.attachDefaultValueHandler(combo);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/TemporalMutableComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/TemporalMutableComposite.java
deleted file mode 100644
index bcaf1e5..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/options/TemporalMutableComposite.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.options;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.options.Options;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  TemporalMutableComposite
- */
-public class TemporalMutableComposite extends Pane<Options>
-{
-	/**
-	 * Creates a new <code>TemporalMutableComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public TemporalMutableComposite(
-					Pane<? extends Options> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlOptionsTab_temporalMutableLabel,
-			this.buildTemporalMutableHolder(),
-			this.buildTemporalMutableStringHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_OPTIONS
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildTemporalMutableHolder() {
-		return new PropertyAspectAdapter<Options, Boolean>(getSubjectHolder(), Options.TEMPORAL_MUTABLE_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getTemporalMutable();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setTemporalMutable(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildTemporalMutableStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultTemporalMutableHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlOptionsTab_temporalMutableLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlOptionsTab_temporalMutableLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultTemporalMutableHolder() {
-		return new PropertyAspectAdapter<Options, Boolean>(
-			getSubjectHolder(),
-			Options.TEMPORAL_MUTABLE_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getTemporalMutable() != null) {
-					return null;
-				}
-				return this.subject.getDefaultTemporalMutable();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/CreateDdlFileNameComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/CreateDdlFileNameComposite.java
deleted file mode 100644
index 5ec55e8..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/CreateDdlFileNameComposite.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.schema.generation;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.schema.generation.SchemaGeneration;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  CreateDdlFileNameComposite
- */
-public class CreateDdlFileNameComposite extends Pane<SchemaGeneration>
-{
-	/**
-	 * Creates a new <code>CreateDdlFileNameComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public CreateDdlFileNameComposite(
-								Pane<? extends SchemaGeneration> parentPane,
-	                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	private PropertyValueModel<String> buildDefaultCreateDdlFileNameHolder() {
-		return new PropertyAspectAdapter<SchemaGeneration, String>(this.getSubjectHolder(), SchemaGeneration.DEFAULT_SCHEMA_GENERATION_CREATE_FILE_NAME) {
-			@Override
-			protected String buildValue_() {
-				return CreateDdlFileNameComposite.this.getDefaultValue(subject);
-			}
-		};
-	}
-
-	private ListValueModel<String> buildDefaultCreateDdlFileNameListHolder() {
-		return new PropertyListValueModelAdapter<String>(
-			this.buildDefaultCreateDdlFileNameHolder()
-		);
-	}
-
-	private WritablePropertyValueModel<String> buildCreateDdlFileNameHolder() {
-		return new PropertyAspectAdapter<SchemaGeneration, String>(this.getSubjectHolder(), SchemaGeneration.CREATE_FILE_NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-
-				String name = subject.getCreateFileName();
-				if (name == null) {
-					name = CreateDdlFileNameComposite.this.getDefaultValue(subject);
-				}
-				return name;
-			}
-
-			@Override
-			protected void setValue_(String value) {
-
-				if (getDefaultValue(subject).equals(value)) {
-					value = null;
-				}
-				subject.setCreateFileName(value);
-			}
-		};
-	}
-
-	private String getDefaultValue(SchemaGeneration subject) {
-		String defaultValue = subject.getDefaultCreateFileName();
-
-		if (defaultValue != null) {
-			return NLS.bind(
-				EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_defaultWithOneParam,
-				defaultValue
-			);
-		}
-		return EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_defaultEmpty;
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		Combo combo = addLabeledEditableCombo(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_createDdlFileNameLabel,
-			this.buildDefaultCreateDdlFileNameListHolder(),
-			this.buildCreateDdlFileNameHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_SCHEMA_GENERATION
-		);
-		SWTUtil.attachDefaultValueHandler(combo);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/DdlGenerationLocationComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/DdlGenerationLocationComposite.java
deleted file mode 100644
index c021588..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/DdlGenerationLocationComposite.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.schema.generation;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.schema.generation.SchemaGeneration;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.FolderChooserComboPane;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  DdlGenerationLocationComposite
- */
-public class DdlGenerationLocationComposite extends Pane<SchemaGeneration>
-{
-	public DdlGenerationLocationComposite(Pane<? extends SchemaGeneration> parentPane,
-	                                      Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		
-		new FolderChooserComboPane<SchemaGeneration>(this, container) {
-
-			@Override
-			protected WritablePropertyValueModel<String> buildTextHolder() {
-				return new PropertyAspectAdapter<SchemaGeneration, String>(
-										getSubjectHolder(), SchemaGeneration.APPLICATION_LOCATION_PROPERTY) {
-					@Override
-					protected String buildValue_() {
-
-						String name = subject.getApplicationLocation();
-						if (name == null) {
-							name = defaultValue(subject);
-						}
-						return name;
-					}
-
-					@Override
-					protected void setValue_(String value) {
-
-						if (defaultValue(subject).equals(value)) {
-							value = null;
-						}
-						subject.setApplicationLocation(value);
-					}
-				};
-			}
-
-			private String defaultValue(SchemaGeneration subject) {
-				String defaultValue = subject.getDefaultApplicationLocation();
-
-				if (defaultValue != null) {
-					return NLS.bind(
-						EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_defaultWithOneParam,
-						defaultValue
-					);
-				}
-				else {
-					return this.getDefaultString();
-				}
-			}
-
-			@Override
-			protected String getDefaultString() {
-				return EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_defaultDot;
-			}
-
-			@Override
-			protected String getDialogMessage() {
-				return EclipseLinkUiMessages.DdlGenerationLocationComposite_dialogMessage;
-			}
-
-			@Override
-			protected String getDialogTitle() {
-				return EclipseLinkUiMessages.DdlGenerationLocationComposite_dialogTitle;
-			}
-
-			@Override
-			protected String getLabelText() {
-				return EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_ddlGenerationLocationLabel;
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/DdlGenerationTypeComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/DdlGenerationTypeComposite.java
deleted file mode 100644
index 9ec9ff1..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/DdlGenerationTypeComposite.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.schema.generation;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.schema.generation.DdlGenerationType;
-import org.eclipse.jpt.eclipselink.core.context.persistence.schema.generation.SchemaGeneration;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * DdlGenerationTypeComposite
- */
-public class DdlGenerationTypeComposite
-	extends Pane<SchemaGeneration>
-{
-	/**
-	 * Creates a new <code>DdlGenerationTypeComposite</code>.
-	 * 
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public DdlGenerationTypeComposite(
-					Pane<? extends SchemaGeneration> parentComposite, 
-					Composite parent) {
-		
-		super(parentComposite, parent);
-	}
-
-	private EnumFormComboViewer<SchemaGeneration, DdlGenerationType> addDdlGenerationTypeCombo(Composite container) {
-		return new EnumFormComboViewer<SchemaGeneration, DdlGenerationType>(this, container) {
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(SchemaGeneration.DDL_GENERATION_TYPE_PROPERTY);
-			}
-
-			@Override
-			protected DdlGenerationType[] getChoices() {
-				return DdlGenerationType.values();
-			}
-
-			@Override
-			protected DdlGenerationType getDefaultValue() {
-				return this.getSubject().getDefaultDdlGenerationType();
-			}
-
-			@Override
-			protected String displayString(DdlGenerationType value) {
-				return this.buildDisplayString(EclipseLinkUiMessages.class, DdlGenerationTypeComposite.this, value);
-			}
-
-			@Override
-			protected DdlGenerationType getValue() {
-				return this.getSubject().getDdlGenerationType();
-			}
-
-			@Override
-			protected void setValue(DdlGenerationType value) {
-				this.getSubject().setDdlGenerationType(value);
-			}
-		};
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addLabeledComposite(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_ddlGenerationTypeLabel,
-			addDdlGenerationTypeCombo( container),
-			EclipseLinkHelpContextIds.PERSISTENCE_SCHEMA_GENERATION
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/DropDdlFileNameComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/DropDdlFileNameComposite.java
deleted file mode 100644
index ae60940..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/DropDdlFileNameComposite.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2008, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.schema.generation;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.schema.generation.SchemaGeneration;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  DropDdlFileNameComposite
- */
-public class DropDdlFileNameComposite extends Pane<SchemaGeneration>
-{
-	/**
-	 * Creates a new <code>DropDdlFileNameComposite</code>.
-	 *
-	 * @param parentPane The parent container of this one
-	 * @param parent The parent container
-	 */
-	public DropDdlFileNameComposite(
-								Pane<? extends SchemaGeneration> parentPane,
-	                           Composite parent) {
-
-		super(parentPane, parent);
-	}
-
-	private PropertyValueModel<String> buildDefaultDropDdlFileNameHolder() {
-		return new PropertyAspectAdapter<SchemaGeneration, String>(this.getSubjectHolder(), SchemaGeneration.DEFAULT_SCHEMA_GENERATION_DROP_FILE_NAME) {
-			@Override
-			protected String buildValue_() {
-				return DropDdlFileNameComposite.this.getDefaultValue(subject);
-			}
-		};
-	}
-
-	private ListValueModel<String> buildDefaultDropDdlFileNameListHolder() {
-		return new PropertyListValueModelAdapter<String>(
-			this.buildDefaultDropDdlFileNameHolder()
-		);
-	}
-
-	private WritablePropertyValueModel<String> buildDropDdlFileNameHolder() {
-		return new PropertyAspectAdapter<SchemaGeneration, String>(this.getSubjectHolder(), SchemaGeneration.DROP_FILE_NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-
-				String name = subject.getDropFileName();
-				if (name == null) {
-					name = DropDdlFileNameComposite.this.getDefaultValue(subject);
-				}
-				return name;
-			}
-
-			@Override
-			protected void setValue_(String value) {
-
-				if (DropDdlFileNameComposite.this.getDefaultValue(subject).equals(value)) {
-					value = null;
-				}
-				subject.setDropFileName(value);
-			}
-		};
-	}
-
-	private String getDefaultValue(SchemaGeneration subject) {
-		String defaultValue = subject.getDefaultDropFileName();
-
-		if (defaultValue != null) {
-			return NLS.bind(
-				EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_defaultWithOneParam,
-				defaultValue
-			);
-		}
-		return EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_defaultEmpty;
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		Combo combo = addLabeledEditableCombo(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_dropDdlFileNameLabel,
-			this.buildDefaultDropDdlFileNameListHolder(),
-			this.buildDropDdlFileNameHolder(),
-			EclipseLinkHelpContextIds.PERSISTENCE_SCHEMA_GENERATION
-		);
-		SWTUtil.attachDefaultValueHandler(combo);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/EclipseLinkSchemaGenerationComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/EclipseLinkSchemaGenerationComposite.java
deleted file mode 100644
index 1a8121d..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/EclipseLinkSchemaGenerationComposite.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.schema.generation;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.schema.generation.SchemaGeneration;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * EclipseLinkSchemaGenerationComposite
- */
-public class EclipseLinkSchemaGenerationComposite
-	extends Pane<SchemaGeneration>
-{
-	public EclipseLinkSchemaGenerationComposite(
-					Pane<SchemaGeneration> subjectHolder,
-					Composite container) {
-		super(subjectHolder, container, false);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		container = addSection(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_sectionTitle,
-			EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_sectionDescription
-		);
-
-		// DDL Generation Type:
-		new DdlGenerationTypeComposite(this, container);
-		// Output Mode:
-		new OutputModeComposite(this, container);
-		// DDL Generation Location
-		new DdlGenerationLocationComposite(this, container);
-		// Create DDL File Name:
-		new CreateDdlFileNameComposite(this, container);
-		// Drop DDL File Name:
-		new DropDdlFileNameComposite(this, container);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/OutputModeComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/OutputModeComposite.java
deleted file mode 100644
index 89851aa..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/OutputModeComposite.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.schema.generation;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.schema.generation.OutputMode;
-import org.eclipse.jpt.eclipselink.core.context.persistence.schema.generation.SchemaGeneration;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * OutputModeComposite
- */
-public class OutputModeComposite extends Pane<SchemaGeneration>
-{
-	/**
-	 * Creates a new <code>OutputModeComposite</code>.
-	 * 
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public OutputModeComposite(
-				Pane<? extends SchemaGeneration> parentComposite, 
-				Composite parent) {
-		
-		super(parentComposite, parent);
-	}
-
-	private EnumFormComboViewer<SchemaGeneration, OutputMode> addBuildOutputModeCombo(Composite container) {
-		return new EnumFormComboViewer<SchemaGeneration, OutputMode>(this, container) {
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(SchemaGeneration.OUTPUT_MODE_PROPERTY);
-			}
-
-			@Override
-			protected OutputMode[] getChoices() {
-				return OutputMode.values();
-			}
-
-			@Override
-			protected OutputMode getDefaultValue() {
-				return this.getSubject().getDefaultOutputMode();
-			}
-
-			@Override
-			protected String displayString(OutputMode value) {
-				return this.buildDisplayString(EclipseLinkUiMessages.class, OutputModeComposite.this, value);
-			}
-
-			@Override
-			protected OutputMode getValue() {
-				return this.getSubject().getOutputMode();
-			}
-
-			@Override
-			protected void setValue(OutputMode value) {
-				this.getSubject().setOutputMode(value);
-			}
-		};
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.addLabeledComposite(
-				container,
-				EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_outputModeLabel,
-				this.addBuildOutputModeCombo(container),
-				EclipseLinkHelpContextIds.PERSISTENCE_SCHEMA_GENERATION
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/PersistenceXmlSchemaGenerationTab.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/PersistenceXmlSchemaGenerationTab.java
deleted file mode 100644
index 05384a6..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistence/schema/generation/PersistenceXmlSchemaGenerationTab.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistence.schema.generation;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jpt.eclipselink.core.context.persistence.schema.generation.SchemaGeneration;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkHelpContextIds;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaPageComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * PersistenceXmlSchemaGenerationTab
- */
-public class PersistenceXmlSchemaGenerationTab
-	extends Pane<SchemaGeneration>
-	implements JpaPageComposite
-{
-	// ********** constructors/initialization **********
-	public PersistenceXmlSchemaGenerationTab(
-				PropertyValueModel<SchemaGeneration> subjectHolder,
-				Composite parent,
-				WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		new EclipseLinkSchemaGenerationComposite(this, container);
-	}
-
-	// ********** JpaPageComposite implementation **********
-
-	public String getHelpID() {
-		return EclipseLinkHelpContextIds.PERSISTENCE_SCHEMA_GENERATION;
-	}
-
-	public ImageDescriptor getPageImageDescriptor() {
-		return null;
-	}
-
-	public String getPageText() {
-		return EclipseLinkUiMessages.PersistenceXmlSchemaGenerationTab_title;
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistencexml/details/EclipseLinkNavigatorItemContentProviderFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistencexml/details/EclipseLinkNavigatorItemContentProviderFactory.java
deleted file mode 100644
index f921d3b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistencexml/details/EclipseLinkNavigatorItemContentProviderFactory.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistencexml.details;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.eclipse.jpt.core.context.JpaContextNode;
-import org.eclipse.jpt.core.context.MappingFile;
-import org.eclipse.jpt.core.context.persistence.MappingFileRef;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.EclipseLinkPersistenceUnit;
-import org.eclipse.jpt.ui.internal.jface.DelegatingTreeContentAndLabelProvider;
-import org.eclipse.jpt.ui.internal.platform.generic.GenericNavigatorItemContentProviderFactory;
-import org.eclipse.jpt.ui.jface.DelegatingContentAndLabelProvider;
-import org.eclipse.jpt.ui.jface.TreeItemContentProvider;
-import org.eclipse.jpt.ui.jface.TreeItemContentProviderFactory;
-import org.eclipse.jpt.utility.internal.model.value.CompositeCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyCollectionValueModelAdapter;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-
-/**
- * EclipseLinkNavigatorItemContentProviderFactory
- */
-public class EclipseLinkNavigatorItemContentProviderFactory
-	extends GenericNavigatorItemContentProviderFactory
-	implements TreeItemContentProviderFactory
-{
-	@Override
-	public TreeItemContentProvider buildItemContentProvider(
-			Object item, DelegatingContentAndLabelProvider contentAndLabelProvider) {
-		DelegatingTreeContentAndLabelProvider treeContentAndLabelProvider = 
-			(DelegatingTreeContentAndLabelProvider) contentAndLabelProvider;
-		
-		if (item instanceof EclipseLinkPersistenceUnit) {
-			return new EclipseLinkPersistenceUnitItemContentProvider(
-				(EclipseLinkPersistenceUnit) item, treeContentAndLabelProvider);	
-		}
-		
-		return super.buildItemContentProvider(item, contentAndLabelProvider);
-	}
-	
-	
-	public static class EclipseLinkPersistenceUnitItemContentProvider 
-		extends PersistenceUnitItemContentProvider
-	{
-		public EclipseLinkPersistenceUnitItemContentProvider(
-				EclipseLinkPersistenceUnit persistenceUnit, DelegatingTreeContentAndLabelProvider contentProvider) {
-			super(persistenceUnit, contentProvider);
-		}
-		
-		@Override
-		public EclipseLinkPersistenceUnit getModel() {
-			return (EclipseLinkPersistenceUnit) super.getModel();
-		}
-		
-		@Override
-		protected CollectionValueModel<JpaContextNode> buildChildrenModel() {
-			List<CollectionValueModel<? extends JpaContextNode>> list = new ArrayList<CollectionValueModel<? extends JpaContextNode>>();
-			list.add(buildSpecifiedOrmXmlCvm());
-			list.add(buildImpliedMappingFileCvm());
-			list.add(buildImpliedEclipseLinkMappingFileCvm());
-			list.add(buildPersistentTypeCvm());
-			list.add(buildJarFileCvm());
-			return new CompositeCollectionValueModel<CollectionValueModel<? extends JpaContextNode>, JpaContextNode>(list);
-		}
-		
-		private CollectionValueModel<MappingFile> buildImpliedEclipseLinkMappingFileCvm() {
-			return new PropertyCollectionValueModelAdapter<MappingFile>(
-				new PropertyAspectAdapter<MappingFileRef, MappingFile>(
-						new PropertyAspectAdapter<EclipseLinkPersistenceUnit, MappingFileRef>(
-								EclipseLinkPersistenceUnit.IMPLIED_ECLIPSELINK_MAPPING_FILE_REF_PROPERTY,
-								getModel()) {
-							@Override
-							protected MappingFileRef buildValue_() {
-								return subject.getImpliedEclipseLinkMappingFileRef();
-							}
-						},
-						MappingFileRef.MAPPING_FILE_PROPERTY) {
-					@Override
-					protected MappingFile buildValue_() {
-						return subject.getMappingFile();
-					}
-				}
-			);
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistencexml/details/EclipseLinkNavigatorItemLabelProviderFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistencexml/details/EclipseLinkNavigatorItemLabelProviderFactory.java
deleted file mode 100644
index 6fa03d3..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/persistencexml/details/EclipseLinkNavigatorItemLabelProviderFactory.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.persistencexml.details;
-
-import org.eclipse.jpt.ui.internal.platform.generic.GenericNavigatorItemLabelProviderFactory;
-import org.eclipse.jpt.ui.jface.ItemLabelProviderFactory;
-
-/**
- * EclipseLinkNavigatorItemLabelProviderFactory
- */
-public class EclipseLinkNavigatorItemLabelProviderFactory
-	extends GenericNavigatorItemLabelProviderFactory
-	implements ItemLabelProviderFactory
-{
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/platform/EclipseLinkJpaPlatformUi.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/platform/EclipseLinkJpaPlatformUi.java
deleted file mode 100644
index c25757f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/platform/EclipseLinkJpaPlatformUi.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.platform;
-
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.ui.internal.ddlgen.EclipseLinkDDLGeneratorUi;
-import org.eclipse.jpt.ui.JpaPlatformUiProvider;
-import org.eclipse.jpt.ui.internal.platform.base.BaseJpaPlatformUi;
-import org.eclipse.jpt.ui.navigator.JpaNavigatorProvider;
-
-public class EclipseLinkJpaPlatformUi
-	extends BaseJpaPlatformUi
-{
-	public EclipseLinkJpaPlatformUi(
-		JpaNavigatorProvider navigatorProvider,
-		JpaPlatformUiProvider platformUiProvider) 
-	{
-		super(navigatorProvider, platformUiProvider);
-	}
-
-	// ********** DDL generation **********
-
-	public void generateDDL(JpaProject project, IStructuredSelection selection) {
-		EclipseLinkDDLGeneratorUi.generate(project);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/platform/EclipseLinkJpaPlatformUiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/platform/EclipseLinkJpaPlatformUiFactory.java
deleted file mode 100644
index bcbd6e9..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/platform/EclipseLinkJpaPlatformUiFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.platform;
-
-import org.eclipse.jpt.ui.JpaPlatformUi;
-import org.eclipse.jpt.ui.JpaPlatformUiFactory;
-
-public class EclipseLinkJpaPlatformUiFactory implements JpaPlatformUiFactory
-{
-
-	/**
-	 * Zero arg constructor for extension point
-	 */
-	public EclipseLinkJpaPlatformUiFactory() {
-		super();
-	}
-
-	public JpaPlatformUi buildJpaPlatformUi() {
-		return new EclipseLinkJpaPlatformUi(
-			new EclipseLinkNavigatorProvider(),
-			EclipseLinkJpaPlatformUiProvider.instance()
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/platform/EclipseLinkJpaPlatformUiProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/platform/EclipseLinkJpaPlatformUiProvider.java
deleted file mode 100644
index 00f1582..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/platform/EclipseLinkJpaPlatformUiProvider.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.platform;
-
-import java.util.List;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.EclipseLinkJavaResourceUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.EclipseLinkEntityMappingsDetailsProvider;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.EclipseLinkOrmXmlUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.EclipseLinkPersistenceXmlUiDefinition;
-import org.eclipse.jpt.ui.JpaPlatformUiProvider;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.JpaDetailsProvider;
-import org.eclipse.jpt.ui.internal.AbstractJpaPlatformUiProvider;
-import org.eclipse.jpt.ui.internal.details.java.JavaPersistentAttributeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.java.JavaPersistentTypeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.EntityMappingsDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPersistentAttributeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPersistentTypeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmXmlUiDefinition;
-
-public class EclipseLinkJpaPlatformUiProvider extends AbstractJpaPlatformUiProvider
-{
-
-	// singleton
-	private static final JpaPlatformUiProvider INSTANCE = new EclipseLinkJpaPlatformUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static JpaPlatformUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private EclipseLinkJpaPlatformUiProvider() {
-		super();
-	}
-
-
-	// ********** details providers **********
-	
-	@Override
-	protected void addDetailsProvidersTo(List<JpaDetailsProvider> providers) {
-		providers.add(JavaPersistentTypeDetailsProvider.instance());
-		providers.add(JavaPersistentAttributeDetailsProvider.instance());
-		providers.add(EntityMappingsDetailsProvider.instance());
-		providers.add(OrmPersistentTypeDetailsProvider.instance());
-		providers.add(OrmPersistentAttributeDetailsProvider.instance());
-		providers.add(EclipseLinkEntityMappingsDetailsProvider.instance());
-	}
-	
-	
-	// ********** resource ui definitions **********
-	
-	@Override
-	protected void addResourceUiDefinitionsTo(List<ResourceUiDefinition> definitions) {
-		definitions.add(EclipseLinkJavaResourceUiDefinition.instance());
-		definitions.add(OrmXmlUiDefinition.instance());
-		definitions.add(EclipseLinkOrmXmlUiDefinition.instance());
-		definitions.add(EclipseLinkPersistenceXmlUiDefinition.instance());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/platform/EclipseLinkNavigatorProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/platform/EclipseLinkNavigatorProvider.java
deleted file mode 100644
index f8e5c4b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/platform/EclipseLinkNavigatorProvider.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.platform;
-
-import org.eclipse.jpt.eclipselink.ui.internal.persistencexml.details.EclipseLinkNavigatorItemContentProviderFactory;
-import org.eclipse.jpt.eclipselink.ui.internal.persistencexml.details.EclipseLinkNavigatorItemLabelProviderFactory;
-import org.eclipse.jpt.ui.jface.ItemLabelProviderFactory;
-import org.eclipse.jpt.ui.jface.TreeItemContentProviderFactory;
-import org.eclipse.jpt.ui.navigator.JpaNavigatorProvider;
-
-/**
- * EclipseLinkNavigatorProvider
- */
-public class EclipseLinkNavigatorProvider implements JpaNavigatorProvider
-{
-	public ItemLabelProviderFactory getItemLabelProviderFactory() {
-		return new EclipseLinkNavigatorItemLabelProviderFactory();
-	}
-
-	public TreeItemContentProviderFactory getTreeItemContentProviderFactory() {
-		return new EclipseLinkNavigatorItemContentProviderFactory();
-	}
-
-	public void dispose() {
-	
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/structure/EclipseLinkOrmResourceModelStructureProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/structure/EclipseLinkOrmResourceModelStructureProvider.java
deleted file mode 100644
index 3d3e08d..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/structure/EclipseLinkOrmResourceModelStructureProvider.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.structure;
-
-import org.eclipse.jpt.ui.internal.structure.OrmItemContentProviderFactory;
-import org.eclipse.jpt.ui.internal.structure.OrmItemLabelProviderFactory;
-import org.eclipse.jpt.ui.jface.ItemLabelProviderFactory;
-import org.eclipse.jpt.ui.jface.TreeItemContentProviderFactory;
-import org.eclipse.jpt.ui.structure.JpaStructureProvider;
-
-public class EclipseLinkOrmResourceModelStructureProvider
-	implements JpaStructureProvider
-{
-	// singleton
-	private static final JpaStructureProvider INSTANCE = new EclipseLinkOrmResourceModelStructureProvider();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static JpaStructureProvider instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private EclipseLinkOrmResourceModelStructureProvider() {
-		super();
-	}
-	
-	
-	public TreeItemContentProviderFactory getTreeItemContentProviderFactory() {
-		return new OrmItemContentProviderFactory();
-	}
-	
-	public ItemLabelProviderFactory getItemLabelProviderFactory() {
-		return new OrmItemLabelProviderFactory();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/structure/EclipseLinkPersistenceItemContentProviderFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/structure/EclipseLinkPersistenceItemContentProviderFactory.java
deleted file mode 100644
index 2e89f7f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/structure/EclipseLinkPersistenceItemContentProviderFactory.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.structure;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.core.JpaStructureNode;
-import org.eclipse.jpt.core.context.persistence.ClassRef;
-import org.eclipse.jpt.core.context.persistence.MappingFileRef;
-import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.EclipseLinkPersistenceUnit;
-import org.eclipse.jpt.ui.internal.jface.DelegatingTreeContentAndLabelProvider;
-import org.eclipse.jpt.ui.internal.structure.PersistenceItemContentProviderFactory;
-import org.eclipse.jpt.ui.jface.DelegatingContentAndLabelProvider;
-import org.eclipse.jpt.ui.jface.TreeItemContentProvider;
-import org.eclipse.jpt.utility.internal.model.value.CollectionAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.CompositeCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.ListCollectionValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyCollectionValueModelAdapter;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-
-public class EclipseLinkPersistenceItemContentProviderFactory
-	extends PersistenceItemContentProviderFactory
-{
-	@Override
-	public TreeItemContentProvider buildItemContentProvider(
-			Object item, DelegatingContentAndLabelProvider contentAndLabelProvider) {
-		DelegatingTreeContentAndLabelProvider treeContentProvider = (DelegatingTreeContentAndLabelProvider) contentAndLabelProvider;
-		if (item instanceof EclipseLinkPersistenceUnit) {
-			return new EclipseLinkPersistenceUnitItemContentProvider((EclipseLinkPersistenceUnit) item, treeContentProvider);	
-		}
-		return super.buildItemContentProvider(item, contentAndLabelProvider);
-	}
-	
-	
-	public static class EclipseLinkPersistenceUnitItemContentProvider 
-		extends PersistenceUnitItemContentProvider
-	{
-		public EclipseLinkPersistenceUnitItemContentProvider(
-				EclipseLinkPersistenceUnit persistenceUnit, DelegatingTreeContentAndLabelProvider contentProvider) {
-			super(persistenceUnit, contentProvider);
-		}
-		
-		@Override
-		public EclipseLinkPersistenceUnit getModel() {
-			return (EclipseLinkPersistenceUnit) super.getModel();
-		}
-		
-		@Override
-		protected CollectionValueModel<JpaStructureNode> buildChildrenModel() {
-			CollectionValueModel<MappingFileRef> specifiedMappingFileCvm = 
-				new ListCollectionValueModelAdapter<MappingFileRef>(
-				new ListAspectAdapter<PersistenceUnit, MappingFileRef>(
-						PersistenceUnit.SPECIFIED_MAPPING_FILE_REFS_LIST,
-						getModel()) {
-					@Override
-					protected ListIterator<MappingFileRef> listIterator_() {
-						return subject.specifiedMappingFileRefs();
-					}
-					@Override
-					protected int size_() {
-						return subject.specifiedMappingFileRefsSize();
-					}
-				});
-			
-			CollectionValueModel<MappingFileRef> impliedMappingFileCvm = 
-				new PropertyCollectionValueModelAdapter<MappingFileRef>(
-					new PropertyAspectAdapter<PersistenceUnit, MappingFileRef>(
-							PersistenceUnit.IMPLIED_MAPPING_FILE_REF_PROPERTY,
-							getModel()) {
-						@Override
-						protected MappingFileRef buildValue_() {
-							return subject.getImpliedMappingFileRef();
-						}
-					}
-				);
-			CollectionValueModel<MappingFileRef> impliedEclipseLinkMappingFileCvm = 
-				new PropertyCollectionValueModelAdapter<MappingFileRef>(
-					new PropertyAspectAdapter<EclipseLinkPersistenceUnit, MappingFileRef>(
-							EclipseLinkPersistenceUnit.IMPLIED_ECLIPSELINK_MAPPING_FILE_REF_PROPERTY,
-							getModel()) {
-						@Override
-						protected MappingFileRef buildValue_() {
-							return subject.getImpliedEclipseLinkMappingFileRef();
-						}
-					}
-				);
-			CollectionValueModel<ClassRef> specifiedClassCvm = 
-				new ListCollectionValueModelAdapter<ClassRef>(
-				new ListAspectAdapter<PersistenceUnit, ClassRef>(
-						PersistenceUnit.SPECIFIED_CLASS_REFS_LIST,
-						getModel()) {
-					@Override
-					protected ListIterator<ClassRef> listIterator_() {
-						return subject.specifiedClassRefs();
-					}
-					@Override
-					protected int size_() {
-						return subject.specifiedClassRefsSize();
-					}
-				});
-			CollectionValueModel<ClassRef> impliedClassCvm = 
-				new CollectionAspectAdapter<PersistenceUnit, ClassRef>(
-						PersistenceUnit.IMPLIED_CLASS_REFS_COLLECTION,
-						getModel()) {
-					@Override
-					protected Iterator<ClassRef> iterator_() {
-						return subject.impliedClassRefs();
-					}
-					@Override
-					protected int size_() {
-						return subject.impliedClassRefsSize();
-					}
-				};
-			List<CollectionValueModel<? extends JpaStructureNode>> list = new ArrayList<CollectionValueModel<? extends JpaStructureNode>>(4);
-			list.add(specifiedMappingFileCvm);
-			list.add(impliedMappingFileCvm);
-			list.add(impliedEclipseLinkMappingFileCvm);
-			list.add(specifiedClassCvm);
-			list.add(impliedClassCvm);
-			
-			return new CompositeCollectionValueModel<CollectionValueModel<? extends JpaStructureNode>, JpaStructureNode>(list);
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/structure/EclipseLinkPersistenceResourceModelStructureProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/structure/EclipseLinkPersistenceResourceModelStructureProvider.java
deleted file mode 100644
index dc3b569..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/structure/EclipseLinkPersistenceResourceModelStructureProvider.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.structure;
-
-import org.eclipse.jpt.ui.internal.structure.PersistenceItemLabelProviderFactory;
-import org.eclipse.jpt.ui.jface.ItemLabelProviderFactory;
-import org.eclipse.jpt.ui.jface.TreeItemContentProviderFactory;
-import org.eclipse.jpt.ui.structure.JpaStructureProvider;
-
-public class EclipseLinkPersistenceResourceModelStructureProvider
-	implements JpaStructureProvider
-{
-	// singleton
-	private static final JpaStructureProvider INSTANCE = new EclipseLinkPersistenceResourceModelStructureProvider();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static JpaStructureProvider instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private EclipseLinkPersistenceResourceModelStructureProvider() {
-		super();
-	}
-	
-	
-	public TreeItemContentProviderFactory getTreeItemContentProviderFactory() {
-		return new EclipseLinkPersistenceItemContentProviderFactory();
-	}
-	
-	public ItemLabelProviderFactory getItemLabelProviderFactory() {
-		return new PersistenceItemLabelProviderFactory();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/EclipseLinkOrmXml1_1UiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/EclipseLinkOrmXml1_1UiDefinition.java
deleted file mode 100644
index 76093d2..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/EclipseLinkOrmXml1_1UiDefinition.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import java.util.List;
-import org.eclipse.jpt.core.JpaResourceType;
-import org.eclipse.jpt.core.context.AttributeMapping;
-import org.eclipse.jpt.core.context.TypeMapping;
-import org.eclipse.jpt.eclipselink.core.internal.JptEclipseLinkCorePlugin;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkBasicCollectionMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkBasicMapMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkTransformationMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkVariableOneToOneMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.structure.EclipseLinkOrmResourceModelStructureProvider;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmTypeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmXmlUiFactory;
-import org.eclipse.jpt.ui.internal.details.orm.AbstractOrmXmlResourceUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmBasicMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddableUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddedIdMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddedMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEntityUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmIdMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmManyToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmManyToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappedSuperclassUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmOneToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmOneToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmTransientMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmVersionMappingUiDefinition;
-import org.eclipse.jpt.ui.structure.JpaStructureProvider;
-
-public class EclipseLinkOrmXml1_1UiDefinition
-	extends AbstractOrmXmlResourceUiDefinition
-{
-	// singleton
-	private static final ResourceUiDefinition INSTANCE = new EclipseLinkOrmXml1_1UiDefinition();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static ResourceUiDefinition instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private EclipseLinkOrmXml1_1UiDefinition() {
-		super();
-	}
-	
-	
-	@Override
-	protected OrmXmlUiFactory buildOrmXmlUiFactory() {
-		return new EclipseLinkOrmXml1_1UiFactory();
-	}
-	
-	public boolean providesUi(JpaResourceType resourceType) {
-		return resourceType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_1_1_RESOURCE_TYPE);
-	}
-	
-	public JpaStructureProvider getStructureProvider() {
-		return EclipseLinkOrmResourceModelStructureProvider.instance();
-	}
-	
-	@Override
-	protected void addOrmAttributeMappingUiDefinitionsTo(
-			List<OrmAttributeMappingUiDefinition<? extends AttributeMapping>> definitions) {
-		
-		definitions.add(OrmIdMappingUiDefinition.instance());
-		definitions.add(OrmEmbeddedIdMappingUiDefinition.instance());
-		definitions.add(OrmBasicMappingUiDefinition.instance());
-		definitions.add(OrmVersionMappingUiDefinition.instance());
-		definitions.add(OrmManyToOneMappingUiDefinition.instance());
-		definitions.add(OrmOneToManyMappingUiDefinition.instance());
-		definitions.add(OrmOneToOneMappingUiDefinition.instance());
-		definitions.add(OrmManyToManyMappingUiDefinition.instance());
-		definitions.add(OrmEmbeddedMappingUiDefinition.instance());
-		definitions.add(OrmTransientMappingUiDefinition.instance());
-		
-		definitions.add(OrmEclipseLinkBasicCollectionMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkBasicMapMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkVariableOneToOneMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkTransformationMappingUiDefinition.instance());
-	}
-	
-	@Override
-	protected void addOrmTypeMappingUiDefinitionsTo(
-			List<OrmTypeMappingUiDefinition<? extends TypeMapping>> definitions) {
-		
-		definitions.add(OrmEntityUiDefinition.instance());
-		definitions.add(OrmMappedSuperclassUiDefinition.instance());
-		definitions.add(OrmEmbeddableUiDefinition.instance());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/EclipseLinkOrmXml1_1UiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/EclipseLinkOrmXml1_1UiFactory.java
deleted file mode 100644
index b4dee2b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/EclipseLinkOrmXml1_1UiFactory.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmBasicMapping;
-import org.eclipse.jpt.core.context.orm.OrmEmbeddedIdMapping;
-import org.eclipse.jpt.core.context.orm.OrmEmbeddedMapping;
-import org.eclipse.jpt.core.context.orm.OrmIdMapping;
-import org.eclipse.jpt.core.context.orm.OrmManyToManyMapping;
-import org.eclipse.jpt.core.context.orm.OrmManyToOneMapping;
-import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping;
-import org.eclipse.jpt.core.context.orm.OrmOneToOneMapping;
-import org.eclipse.jpt.core.context.orm.OrmVersionMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.BaseEclipseLinkOrmXmlUiFactory;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLinkOrmXml1_1UiFactory extends BaseEclipseLinkOrmXmlUiFactory
-{
-	// **************** orm attribute mapping composites ***********************
-	
-	@Override
-	public JpaComposite createOrmIdMappingComposite(
-			PropertyValueModel<OrmIdMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkIdMapping1_1Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmEmbeddedIdMappingComposite(
-			PropertyValueModel<OrmEmbeddedIdMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkEmbeddedIdMapping1_1Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmBasicMappingComposite(
-			PropertyValueModel<OrmBasicMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkBasicMapping1_1Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmVersionMappingComposite(
-			PropertyValueModel<OrmVersionMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkVersionMapping1_1Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmManyToOneMappingComposite(
-			PropertyValueModel<OrmManyToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkManyToOneMapping1_1Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public JpaComposite createOrmOneToManyMappingComposite(
-			PropertyValueModel<OrmOneToManyMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkOneToManyMapping1_1Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public JpaComposite createOrmOneToOneMappingComposite(
-			PropertyValueModel<OrmOneToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkOneToOneMapping1_1Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmManyToManyMappingComposite(
-			PropertyValueModel<OrmManyToManyMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkManyToManyMapping1_1Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmEmbeddedMappingComposite(
-			PropertyValueModel<OrmEmbeddedMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkEmbeddedMapping1_1Composite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkBasicCollectionMapping1_1Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkBasicCollectionMapping1_1Composite.java
deleted file mode 100644
index e9e3e7a..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkBasicCollectionMapping1_1Composite.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkBasicCollectionMapping;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *
- * @version 2.2
- * @since 2.2
- */
-public class OrmEclipseLinkBasicCollectionMapping1_1Composite extends Pane<EclipseLinkBasicCollectionMapping>
-                                       implements JpaComposite
-{
-	/**
-	 * Creates a new <code>EclipseLinkBasicCollectionMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IManyToOneMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkBasicCollectionMapping1_1Composite(PropertyValueModel<? extends EclipseLinkBasicCollectionMapping> subjectHolder,
-	                                 Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-	}	
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<EclipseLinkBasicCollectionMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkBasicMapMapping1_1Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkBasicMapMapping1_1Composite.java
deleted file mode 100644
index 9570262..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkBasicMapMapping1_1Composite.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkBasicMapMapping;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *
- * @version 2.2
- * @since 2.2
- */
-public class OrmEclipseLinkBasicMapMapping1_1Composite extends Pane<EclipseLinkBasicMapMapping>
-                                       implements JpaComposite
-{
-	/**
-	 * Creates a new <code>EclipseLinkBasicCollectionMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IManyToOneMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkBasicMapMapping1_1Composite(PropertyValueModel<? extends EclipseLinkBasicMapMapping> subjectHolder,
-	                                 Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-	}	
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<EclipseLinkBasicMapMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkBasicMapping1_1Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkBasicMapping1_1Composite.java
deleted file mode 100644
index cb1cc12..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkBasicMapping1_1Composite.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.BasicMapping;
-import org.eclipse.jpt.core.context.orm.OrmBasicMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkBasicMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkMutableComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.ColumnComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkBasicMapping1_1Composite extends EclipseLinkBasicMappingComposite<OrmBasicMapping>
-{
-	/**
-	 * Creates a new <code>EclipseLink1_1OrmBasicMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>BasicMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkBasicMapping1_1Composite(PropertyValueModel<? extends OrmBasicMapping> subjectHolder,
-	                               Composite parent,
-	                               WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeBasicSection(Composite container) {
-		new ColumnComposite(this, buildColumnHolder(), container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		new FetchTypeComposite(this, container);
-		new OptionalComposite(this, addSubPane(container, 4));
-		new EclipseLinkMutableComposite(this, buildMutableHolder(), container);
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<BasicMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkEmbeddedIdMapping1_1Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkEmbeddedIdMapping1_1Composite.java
deleted file mode 100644
index ac049a2..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkEmbeddedIdMapping1_1Composite.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.EmbeddedIdMapping;
-import org.eclipse.jpt.core.context.orm.OrmEmbeddedIdMapping;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AbstractEmbeddedIdMappingComposite;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.EmbeddedMappingOverridesComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkEmbeddedIdMapping1_1Composite
-	extends AbstractEmbeddedIdMappingComposite<OrmEmbeddedIdMapping>
-	implements JpaComposite
-{
-	public OrmEclipseLinkEmbeddedIdMapping1_1Composite(
-			PropertyValueModel<? extends OrmEmbeddedIdMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeEmbeddedIdSection(Composite container) {
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-
-		new EmbeddedMappingOverridesComposite(
-				this,
-				container);
-	}	
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<EmbeddedIdMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkEmbeddedMapping1_1Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkEmbeddedMapping1_1Composite.java
deleted file mode 100644
index 8be36c7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkEmbeddedMapping1_1Composite.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.EmbeddedMapping;
-import org.eclipse.jpt.core.context.orm.OrmEmbeddedMapping;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.AbstractEmbeddedMappingComposite;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.EmbeddedMappingOverridesComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | EmbeddedAttributeOverridesComposite                                   | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see EmbeddedMapping
- *
- * @version 2.3
- * @since 2.2
- */
-public class OrmEclipseLinkEmbeddedMapping1_1Composite extends AbstractEmbeddedMappingComposite<OrmEmbeddedMapping>
-                                      implements JpaComposite
-{
-	/**
-	 * Creates a new <code>EmbeddedMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>EmbeddedMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkEmbeddedMapping1_1Composite(PropertyValueModel<? extends OrmEmbeddedMapping> subjectHolder,
-	                                Composite parent,
-	                                WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeEmbeddedSection(Composite container) {
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-
-		new EmbeddedMappingOverridesComposite(
-			this,
-			container
-		);
-	}	
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<OrmEmbeddedMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkIdMapping1_1Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkIdMapping1_1Composite.java
deleted file mode 100644
index 3e75255..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkIdMapping1_1Composite.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.IdMapping;
-import org.eclipse.jpt.core.context.orm.OrmIdMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkIdMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkMutableComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.ColumnComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkIdMapping1_1Composite
-	extends EclipseLinkIdMappingComposite<OrmIdMapping>
-{
-	public OrmEclipseLinkIdMapping1_1Composite(
-			PropertyValueModel<? extends OrmIdMapping> subjectHolder,
-	        Composite parent,
-	        WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeIdSection(Composite container) {		
-		new ColumnComposite(this, buildColumnHolder(), container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		new EclipseLinkMutableComposite(this, buildMutableHolder(), container);
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<IdMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkManyToManyMapping1_1Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkManyToManyMapping1_1Composite.java
deleted file mode 100644
index 0b9a5bf..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkManyToManyMapping1_1Composite.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import org.eclipse.jpt.core.context.ManyToManyMapping;
-import org.eclipse.jpt.core.context.orm.OrmManyToManyMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkManyToManyMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.CascadeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.ManyToManyJoiningStrategyPane;
-import org.eclipse.jpt.ui.internal.details.OrderingComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | TargetEntityComposite                                                 | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | JoiningStrategyComposite                                              | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | FetchTypeComposite                                                    | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | CascadeComposite                                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OrderingComposite                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see {@link ManyToManyMapping}
- * @see {@link TargetEntityComposite}
- * @see {@link ManyToManyJoiningStrategyPane}
- * @see {@link FetchTypeComposite}
- * @see {@link CascadeComposite}
- * @see {@link OrderingComposite}
- *
- * @version 2.3
- * @since 2.2
- */
-public class OrmEclipseLinkManyToManyMapping1_1Composite
-	extends EclipseLinkManyToManyMappingComposite<OrmManyToManyMapping>
-{
-	/**
-	 * Creates a new <code>ManyToManyMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IManyToManyMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkManyToManyMapping1_1Composite(PropertyValueModel<? extends OrmManyToManyMapping> subjectHolder,
-	                                  Composite parent,
-	                                  WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeManyToManySection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkManyToOneMapping1_1Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkManyToOneMapping1_1Composite.java
deleted file mode 100644
index be9e313..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkManyToOneMapping1_1Composite.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.ManyToOneMapping;
-import org.eclipse.jpt.core.context.orm.OrmManyToOneMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkManyToOneMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.CascadeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.ManyToOneJoiningStrategyPane;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | TargetEntityComposite                                                 | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | JoiningStrategyComposite                                              | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | FetchTypeComposite                                                    | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OptionalComposite                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | CascadeComposite                                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see {@link ManyToOneMapping}
- * @see {@link TargetEntityComposite}
- * @see {@link ManyToOneJoiningStrategyPane}
- * @see {@link FetchTypeComposite}
- * @see {@link OptionalComposite}
- * @see {@link CascadeComposite}
- *
- * @version 2.3
- * @since 2.2
- */
-public class OrmEclipseLinkManyToOneMapping1_1Composite
-	extends EclipseLinkManyToOneMappingComposite<OrmManyToOneMapping>
-{
-	/**
-	 * Creates a new <code>EclipseLink1_1ManyToOneMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>ManyToOneMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkManyToOneMapping1_1Composite(PropertyValueModel<? extends OrmManyToOneMapping> subjectHolder,
-	                                 Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeManyToOneSection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		new FetchTypeComposite(this, container);		
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new OptionalComposite(this, container);
-		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<ManyToOneMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkOneToManyMapping1_1Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkOneToManyMapping1_1Composite.java
deleted file mode 100644
index f151f8e..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkOneToManyMapping1_1Composite.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkOneToManyMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkPrivateOwnedComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.CascadeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-
-public class OrmEclipseLinkOneToManyMapping1_1Composite<T extends OrmOneToManyMapping> 
-	extends EclipseLinkOneToManyMappingComposite<T>
-{
-	public OrmEclipseLinkOneToManyMapping1_1Composite(
-			PropertyValueModel<? extends T> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeOneToManySection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new EclipseLinkPrivateOwnedComposite(this, buildPrivateOwnableHolder(), container);
-		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<T, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkOneToOneMapping1_1Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkOneToOneMapping1_1Composite.java
deleted file mode 100644
index 6270a5b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkOneToOneMapping1_1Composite.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.OneToOneMapping;
-import org.eclipse.jpt.core.context.orm.OrmOneToOneMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkOneToOneMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkPrivateOwnedComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.CascadeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.OneToOneJoiningStrategyPane;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | TargetEntityComposite                                                 | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | AccessTypeComposite                                                   | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OneToOneJoiningStrategyPane                                           | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | FetchTypeComposite                                                    | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | EclipseLinkJoinFetchComposite                                         | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OptionalComposite                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | EclipseLinkPrivateOwnedComposite                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | CascadeComposite                                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see OneToOneMapping
- * @see AccessTypeComposite
- * @see CascadeComposite
- * @see EclipseLinkJoinFetchComposite
- * @see EclipseLinkPrivateOwnedComposite
- * @see FetchTypeComposite
- * @see MappedByPane
- * @see OneToOneJoiningStrategyPane
- * @see OptionalComposite
- * @see TargetEntityComposite
- *
- * @version 2.3
- * @since 2.2
- */
-public class OrmEclipseLinkOneToOneMapping1_1Composite
-extends EclipseLinkOneToOneMappingComposite<OrmOneToOneMapping>
-{
-	/**
-	 * Creates a new <code>Eclipselink1_1OneToOneMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>IOneToOneMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkOneToOneMapping1_1Composite(PropertyValueModel<? extends OrmOneToOneMapping> subjectHolder,
-	                                Composite parent,
-	                                WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeOneToOneSection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new OptionalComposite(this, container);
-		new EclipseLinkPrivateOwnedComposite(this, buildPrivateOwnableHolder(), container);
-		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-		
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<OneToOneMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkVersionMapping1_1Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkVersionMapping1_1Composite.java
deleted file mode 100644
index eee9199..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/details/orm/OrmEclipseLinkVersionMapping1_1Composite.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.VersionMapping;
-import org.eclipse.jpt.core.context.orm.OrmVersionMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkMutableComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkVersionMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.ColumnComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkVersionMapping1_1Composite extends EclipseLinkVersionMappingComposite<OrmVersionMapping>
-{
-	/**
-	 * Creates a new <code>EclipseLinkOrmVersionMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>VersionMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkVersionMapping1_1Composite(PropertyValueModel<? extends OrmVersionMapping> subjectHolder,
-	                               Composite parent,
-	                               WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeVersionSection(Composite container) {		
-		new ColumnComposite(this, buildColumnHolder(), container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		new EclipseLinkMutableComposite(this, buildMutableHolder(), container);
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<VersionMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/platform/EclipseLink1_1JpaPlatformUiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/platform/EclipseLink1_1JpaPlatformUiFactory.java
deleted file mode 100644
index b0b6dd0..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/platform/EclipseLink1_1JpaPlatformUiFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.platform;
-
-import org.eclipse.jpt.eclipselink.ui.internal.platform.EclipseLinkJpaPlatformUi;
-import org.eclipse.jpt.eclipselink.ui.internal.platform.EclipseLinkNavigatorProvider;
-import org.eclipse.jpt.ui.JpaPlatformUi;
-import org.eclipse.jpt.ui.JpaPlatformUiFactory;
-
-public class EclipseLink1_1JpaPlatformUiFactory implements JpaPlatformUiFactory
-{
-
-	/**
-	 * Zero arg constructor for extension point
-	 */
-	public EclipseLink1_1JpaPlatformUiFactory() {
-		super();
-	}
-
-	public JpaPlatformUi buildJpaPlatformUi() {
-		return new EclipseLinkJpaPlatformUi(
-			new EclipseLinkNavigatorProvider(),
-			EclipseLink1_1JpaPlatformUiProvider.instance()
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/platform/EclipseLink1_1JpaPlatformUiProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/platform/EclipseLink1_1JpaPlatformUiProvider.java
deleted file mode 100644
index 35d17bd..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_1/platform/EclipseLink1_1JpaPlatformUiProvider.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_1.platform;
-
-import java.util.List;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.EclipseLinkJavaResourceUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.EclipseLinkEntityMappingsDetailsProvider;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.EclipseLinkOrmXmlUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.EclipseLinkPersistenceXmlUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm.EclipseLinkOrmXml1_1UiDefinition;
-import org.eclipse.jpt.ui.JpaPlatformUiProvider;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.JpaDetailsProvider;
-import org.eclipse.jpt.ui.internal.AbstractJpaPlatformUiProvider;
-import org.eclipse.jpt.ui.internal.details.java.JavaPersistentAttributeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.java.JavaPersistentTypeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.EntityMappingsDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPersistentAttributeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPersistentTypeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmXmlUiDefinition;
-
-public class EclipseLink1_1JpaPlatformUiProvider
-	extends AbstractJpaPlatformUiProvider
-{
-	// singleton
-	private static final JpaPlatformUiProvider INSTANCE = new EclipseLink1_1JpaPlatformUiProvider();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static JpaPlatformUiProvider instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Ensure single instance.
-	 */
-	private EclipseLink1_1JpaPlatformUiProvider() {
-		super();
-	}
-	
-	
-	// ********** details providers **********
-	
-	@Override
-	protected void addDetailsProvidersTo(List<JpaDetailsProvider> providers) {
-		providers.add(JavaPersistentTypeDetailsProvider.instance());
-		providers.add(JavaPersistentAttributeDetailsProvider.instance());
-		providers.add(EntityMappingsDetailsProvider.instance());
-		providers.add(OrmPersistentTypeDetailsProvider.instance());
-		providers.add(OrmPersistentAttributeDetailsProvider.instance());
-		providers.add(EclipseLinkEntityMappingsDetailsProvider.instance());
-	}
-	
-	
-	// ********** resource ui definitions **********
-	
-	@Override
-	protected void addResourceUiDefinitionsTo(List<ResourceUiDefinition> definitions) {
-		definitions.add(EclipseLinkJavaResourceUiDefinition.instance());
-		definitions.add(OrmXmlUiDefinition.instance());
-		definitions.add(EclipseLinkOrmXmlUiDefinition.instance());
-		definitions.add(EclipseLinkOrmXml1_1UiDefinition.instance());
-		definitions.add(EclipseLinkPersistenceXmlUiDefinition.instance());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/EclipseLink1_2JavaResourceUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/EclipseLink1_2JavaResourceUiDefinition.java
deleted file mode 100644
index 37b0e1a..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/EclipseLink1_2JavaResourceUiDefinition.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.java;
-
-import java.util.List;
-import org.eclipse.jpt.core.context.AttributeMapping;
-import org.eclipse.jpt.core.context.TypeMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.DefaultJavaEclipseLinkOneToManyMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.DefaultJavaEclipseLinkOneToOneMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.JavaEclipseLinkBasicCollectionMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.JavaEclipseLinkBasicMapMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.JavaEclipseLinkTransformationMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.JavaEclipseLinkVariableOneToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.java.DefaultJavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaTypeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaUiFactory;
-import org.eclipse.jpt.ui.internal.details.java.AbstractJavaResourceUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.DefaultBasicMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.DefaultEmbeddedMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaBasicMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaEmbeddableUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaEmbeddedIdMappingUDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaEmbeddedMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaEntityUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaIdMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaManyToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaManyToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaMappedSuperclassUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaOneToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaOneToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaTransientMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaVersionMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.NullJavaAttributeMappingUiDefinition;
-
-public class EclipseLink1_2JavaResourceUiDefinition extends AbstractJavaResourceUiDefinition
-{
-	// singleton
-	private static final ResourceUiDefinition INSTANCE = new EclipseLink1_2JavaResourceUiDefinition();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static ResourceUiDefinition instance() {
-		return INSTANCE;
-	}
-
-
-	/**
-	 * zero-argument constructor
-	 */
-	protected EclipseLink1_2JavaResourceUiDefinition() {
-		super();
-	}
-
-	@Override
-	protected JavaUiFactory buildJavaUiFactory() {
-		return new EclipseLink1_2JavaUiFactory();
-	}
-
-	@Override
-	protected void addSpecifiedAttributeMappingUiDefinitionsTo(List<JavaAttributeMappingUiDefinition<? extends AttributeMapping>> definitions) {
-		definitions.add(JavaIdMappingUiDefinition.instance());
-		definitions.add(JavaEmbeddedIdMappingUDefinition.instance());
-		definitions.add(JavaBasicMappingUiDefinition.instance());
-		definitions.add(JavaVersionMappingUiDefinition.instance());
-		definitions.add(JavaManyToOneMappingUiDefinition.instance());
-		definitions.add(JavaOneToManyMappingUiDefinition.instance());
-		definitions.add(JavaOneToOneMappingUiDefinition.instance());
-		definitions.add(JavaManyToManyMappingUiDefinition.instance());
-		definitions.add(JavaEmbeddedMappingUiDefinition.instance());
-		definitions.add(JavaTransientMappingUiDefinition.instance());
-		definitions.add(JavaEclipseLinkBasicCollectionMappingUiDefinition.instance());
-		definitions.add(JavaEclipseLinkBasicMapMappingUiDefinition.instance());
-		definitions.add(JavaEclipseLinkVariableOneToOneMappingUiDefinition.instance());
-		definitions.add(JavaEclipseLinkTransformationMappingUiDefinition.instance());
-	}
-
-	@Override
-	protected void addDefaultAttributeMappingUiDefinitionsTo(List<DefaultJavaAttributeMappingUiDefinition<?>> definitions) {
-		definitions.add(DefaultBasicMappingUiDefinition.instance());
-		definitions.add(DefaultEmbeddedMappingUiDefinition.instance());
-		definitions.add(NullJavaAttributeMappingUiDefinition.instance());
-		definitions.add(DefaultJavaEclipseLinkOneToOneMappingUiDefinition.instance());
-		definitions.add(DefaultJavaEclipseLinkOneToManyMappingUiDefinition.instance());
-		definitions.add(DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition.instance());
-	}
-
-	@Override
-	protected void addSpecifiedTypeMappingUiDefinitionsTo(List<JavaTypeMappingUiDefinition<? extends TypeMapping>> definitions) {
-		definitions.add(JavaEntityUiDefinition.instance());
-		definitions.add(JavaMappedSuperclassUiDefinition.instance());
-		definitions.add(JavaEmbeddableUiDefinition.instance());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/EclipseLink1_2JavaUiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/EclipseLink1_2JavaUiFactory.java
deleted file mode 100644
index 77f2534..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/EclipseLink1_2JavaUiFactory.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaEmbeddable;
-import org.eclipse.jpt.core.context.java.JavaEntity;
-import org.eclipse.jpt.core.context.java.JavaMappedSuperclass;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.EclipseLinkJavaUiFactory;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.java.JavaEclipseLinkEmbeddable1_2Composite;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.java.JavaEclipseLinkEntity1_2Composite;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.java.JavaEclipseLinkMappedSuperclass1_2Composite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLink1_2JavaUiFactory extends EclipseLinkJavaUiFactory
-{
-	public EclipseLink1_2JavaUiFactory() {
-		super();
-	}
-
-
-	// **************** java type mapping composites ***************************
-
-	@Override
-	public JpaComposite createJavaMappedSuperclassComposite(
-			PropertyValueModel<JavaMappedSuperclass> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkMappedSuperclass1_2Composite(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	public JpaComposite createJavaEntityComposite(
-			PropertyValueModel<JavaEntity> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkEntity1_2Composite(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	public JpaComposite createJavaEmbeddableComposite(
-			PropertyValueModel<JavaEmbeddable> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkEmbeddable1_2Composite(subjectHolder, parent, widgetFactory);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/JavaEclipseLinkEmbeddable1_2Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/JavaEclipseLinkEmbeddable1_2Composite.java
deleted file mode 100644
index 26a4c0a..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/JavaEclipseLinkEmbeddable1_2Composite.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.java;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.java.JavaEmbeddable;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.AbstractJavaEclipseLinkEmbeddableComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This pane does not have any widgets.
- *
- * @see Embeddable
- * @see JavaUiFactory - The factory creating this pane
- * @see EmbeddableUiProvider
- *
- * @version 2.3
- * @since 2.1
- */
-public class JavaEclipseLinkEmbeddable1_2Composite extends AbstractJavaEclipseLinkEmbeddableComposite
-{
-	/**
-	 * Creates a new <code>EmbeddableComposite</code>.
-	 *
-	 * @param subjectHolder The holder of this pane's subject
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public JavaEclipseLinkEmbeddable1_2Composite(PropertyValueModel<? extends JavaEmbeddable> subjectHolder,
-	                           Composite parent,
-	                           WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.initializeEmbeddableCollapsibleSection(container);
-		this.initializeConvertersCollapsibleSection(container);
-		this.initializeAdvancedCollapsibleSection(container);
-	}
-
-	@Override
-	protected void initializeEmbeddableSection(Composite container) {
-		new AccessTypeComposite(this, buildAccessHolder(), container);	
-	}
-
-	protected PropertyValueModel<AccessHolder> buildAccessHolder() {
-		return new PropertyAspectAdapter<JavaEmbeddable, AccessHolder>(
-			getSubjectHolder())
-		{
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentType();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/JavaEclipseLinkEntity1_2Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/JavaEclipseLinkEntity1_2Composite.java
deleted file mode 100644
index 81d541a..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/JavaEclipseLinkEntity1_2Composite.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.java;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.java.JavaEntity;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkEntity;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.AbstractJavaEclipseLinkEntityComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.EntityNameComposite;
-import org.eclipse.jpt.ui.internal.details.IdClassComposite;
-import org.eclipse.jpt.ui.internal.details.TableComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * The pane used for an EclipseLink1.2 Java entity.
- *
- * @see JavaEclipseLinkEntity
- * @see EclipselinkJpaUiFactory - The factory creating this pane
- *
- * @version 2.3
- * @since 2.2
- */
-public class JavaEclipseLinkEntity1_2Composite
-	extends AbstractJavaEclipseLinkEntityComposite<JavaEntity>
-{
-	/**
-	 * Creates a new <code>EclipseLinkJavaEntityComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>JavaEntity</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public JavaEclipseLinkEntity1_2Composite(
-			PropertyValueModel<? extends JavaEntity> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeEntitySection(Composite container) {
-		new TableComposite(this, container);
-		new EntityNameComposite(this, container);	
-		new AccessTypeComposite(this, buildAccessHolder(), container);	
-		new IdClassComposite(this, buildIdClassReferenceHolder(), container);
-	}
-
-	protected PropertyValueModel<AccessHolder> buildAccessHolder() {
-		return new PropertyAspectAdapter<JavaEntity, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentType();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/JavaEclipseLinkMappedSuperclass1_2Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/JavaEclipseLinkMappedSuperclass1_2Composite.java
deleted file mode 100644
index 6f6737d..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/java/JavaEclipseLinkMappedSuperclass1_2Composite.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.java;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.java.JavaMappedSuperclass;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkMappedSuperclass;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.AbstractJavaEclipseLinkMappedSuperclassComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.IdClassComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * The pane used for an EclipseLink Java Mapped Superclass.
- *
- * @see EclipseLinkMappedSuperclass
- * @see EclipselinkJpaUiFactory - The factory creating this pane
- *
- * @version 2.3
- * @since 2.1
- */
-public class JavaEclipseLinkMappedSuperclass1_2Composite
-	extends AbstractJavaEclipseLinkMappedSuperclassComposite
-{
-	/**
-	 * Creates a new <code>MappedSuperclassComposite</code>.
-	 *
-	 * @param subjectHolder The holder of this pane's subject
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public JavaEclipseLinkMappedSuperclass1_2Composite(
-			PropertyValueModel<? extends JavaMappedSuperclass> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeMappedSuperclassSection(Composite container) {
-		new AccessTypeComposite(this, buildAccessHolder(), container);	
-		new IdClassComposite(this, buildIdClassReferenceHolder(), container);
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolder() {
-		return new PropertyAspectAdapter<JavaMappedSuperclass, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentType();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/orm/EclipseLinkOrmXml1_2UiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/orm/EclipseLinkOrmXml1_2UiDefinition.java
deleted file mode 100644
index 20f05d1..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/details/orm/EclipseLinkOrmXml1_2UiDefinition.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.orm;
-
-import java.util.List;
-import org.eclipse.jpt.core.JpaResourceType;
-import org.eclipse.jpt.core.context.AttributeMapping;
-import org.eclipse.jpt.core.context.TypeMapping;
-import org.eclipse.jpt.eclipselink.core.internal.JptEclipseLinkCorePlugin;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkBasicCollectionMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkBasicMapMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkTransformationMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkVariableOneToOneMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.structure.EclipseLinkOrmResourceModelStructureProvider;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm.EclipseLinkOrmXml1_1UiFactory;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmTypeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmXmlUiFactory;
-import org.eclipse.jpt.ui.internal.details.orm.AbstractOrmXmlResourceUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmBasicMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddableUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddedIdMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddedMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEntityUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmIdMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmManyToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmManyToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappedSuperclassUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmOneToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmOneToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmTransientMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmVersionMappingUiDefinition;
-import org.eclipse.jpt.ui.structure.JpaStructureProvider;
-
-public class EclipseLinkOrmXml1_2UiDefinition
-	extends AbstractOrmXmlResourceUiDefinition
-{
-	// singleton
-	private static final ResourceUiDefinition INSTANCE = new EclipseLinkOrmXml1_2UiDefinition();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static ResourceUiDefinition instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private EclipseLinkOrmXml1_2UiDefinition() {
-		super();
-	}
-	
-	
-	@Override
-	protected OrmXmlUiFactory buildOrmXmlUiFactory() {
-		return new EclipseLinkOrmXml1_1UiFactory();
-	}
-	
-	public boolean providesUi(JpaResourceType resourceType) {
-		return resourceType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_1_2_RESOURCE_TYPE);
-	}
-	
-	public JpaStructureProvider getStructureProvider() {
-		return EclipseLinkOrmResourceModelStructureProvider.instance();
-	}
-	
-	@Override
-	protected void addOrmAttributeMappingUiDefinitionsTo(
-			List<OrmAttributeMappingUiDefinition<? extends AttributeMapping>> definitions) {
-		
-		definitions.add(OrmIdMappingUiDefinition.instance());
-		definitions.add(OrmEmbeddedIdMappingUiDefinition.instance());
-		definitions.add(OrmBasicMappingUiDefinition.instance());
-		definitions.add(OrmVersionMappingUiDefinition.instance());
-		definitions.add(OrmManyToOneMappingUiDefinition.instance());
-		definitions.add(OrmOneToManyMappingUiDefinition.instance());
-		definitions.add(OrmOneToOneMappingUiDefinition.instance());
-		definitions.add(OrmManyToManyMappingUiDefinition.instance());
-		definitions.add(OrmEmbeddedMappingUiDefinition.instance());
-		definitions.add(OrmTransientMappingUiDefinition.instance());
-		
-		definitions.add(OrmEclipseLinkBasicCollectionMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkBasicMapMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkVariableOneToOneMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkTransformationMappingUiDefinition.instance());
-	}
-	
-	@Override
-	protected void addOrmTypeMappingUiDefinitionsTo(
-			List<OrmTypeMappingUiDefinition<? extends TypeMapping>> definitions) {
-		
-		definitions.add(OrmEntityUiDefinition.instance());
-		definitions.add(OrmMappedSuperclassUiDefinition.instance());
-		definitions.add(OrmEmbeddableUiDefinition.instance());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/platform/EclipseLink1_2JpaPlatformUiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/platform/EclipseLink1_2JpaPlatformUiFactory.java
deleted file mode 100644
index e2e8ce4..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/platform/EclipseLink1_2JpaPlatformUiFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_2.platform;
-
-import org.eclipse.jpt.eclipselink.ui.internal.platform.EclipseLinkJpaPlatformUi;
-import org.eclipse.jpt.eclipselink.ui.internal.platform.EclipseLinkNavigatorProvider;
-import org.eclipse.jpt.ui.JpaPlatformUi;
-import org.eclipse.jpt.ui.JpaPlatformUiFactory;
-
-public class EclipseLink1_2JpaPlatformUiFactory implements JpaPlatformUiFactory
-{
-
-	/**
-	 * Zero arg constructor for extension point
-	 */
-	public EclipseLink1_2JpaPlatformUiFactory() {
-		super();
-	}
-
-	public JpaPlatformUi buildJpaPlatformUi() {
-		return new EclipseLinkJpaPlatformUi(
-			new EclipseLinkNavigatorProvider(),
-			EclipseLink1_2JpaPlatformUiProvider.instance()
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/platform/EclipseLink1_2JpaPlatformUiProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/platform/EclipseLink1_2JpaPlatformUiProvider.java
deleted file mode 100644
index f7d80e8..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v1_2/platform/EclipseLink1_2JpaPlatformUiProvider.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v1_2.platform;
-
-import java.util.List;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.EclipseLinkEntityMappingsDetailsProvider;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.EclipseLinkOrmXmlUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.EclipseLinkPersistenceXmlUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm.EclipseLinkOrmXml1_1UiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.java.EclipseLink1_2JavaResourceUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.orm.EclipseLinkOrmXml1_2UiDefinition;
-import org.eclipse.jpt.ui.JpaPlatformUiProvider;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.JpaDetailsProvider;
-import org.eclipse.jpt.ui.internal.AbstractJpaPlatformUiProvider;
-import org.eclipse.jpt.ui.internal.details.java.JavaPersistentAttributeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.java.JavaPersistentTypeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.EntityMappingsDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPersistentAttributeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPersistentTypeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmXmlUiDefinition;
-
-public class EclipseLink1_2JpaPlatformUiProvider extends AbstractJpaPlatformUiProvider
-{
-
-	// singleton
-	private static final JpaPlatformUiProvider INSTANCE = new EclipseLink1_2JpaPlatformUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static JpaPlatformUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private EclipseLink1_2JpaPlatformUiProvider() {
-		super();
-	}
-
-
-	// ********** details providers **********
-	
-	@Override
-	protected void addDetailsProvidersTo(List<JpaDetailsProvider> providers) {
-		providers.add(JavaPersistentTypeDetailsProvider.instance());
-		providers.add(JavaPersistentAttributeDetailsProvider.instance());
-		providers.add(EntityMappingsDetailsProvider.instance());
-		providers.add(OrmPersistentTypeDetailsProvider.instance());
-		providers.add(OrmPersistentAttributeDetailsProvider.instance());
-		providers.add(EclipseLinkEntityMappingsDetailsProvider.instance());
-	}
-	
-	
-	// ********** resource ui definitions **********
-	
-	@Override
-	protected void addResourceUiDefinitionsTo(List<ResourceUiDefinition> definitions) {
-		definitions.add(EclipseLink1_2JavaResourceUiDefinition.instance());
-		definitions.add(OrmXmlUiDefinition.instance());
-		definitions.add(EclipseLinkOrmXmlUiDefinition.instance());
-		definitions.add(EclipseLinkOrmXml1_1UiDefinition.instance());
-		definitions.add(EclipseLinkOrmXml1_2UiDefinition.instance());
-		definitions.add(EclipseLinkPersistenceXmlUiDefinition.instance());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/ddlgen/wizards/EclipseLink2_0DDLGeneratorUi.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/ddlgen/wizards/EclipseLink2_0DDLGeneratorUi.java
deleted file mode 100644
index e433b00..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/ddlgen/wizards/EclipseLink2_0DDLGeneratorUi.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.ddlgen.wizards;
-
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.core.internal.v2_0.ddlgen.EclipseLink2_0DDLGenerator;
-import org.eclipse.jpt.eclipselink.ui.internal.ddlgen.EclipseLinkDDLGeneratorUi;
-
-/**
- *  EclipseLink2_0DDLGeneratorUi
- */
-public class EclipseLink2_0DDLGeneratorUi extends EclipseLinkDDLGeneratorUi
-{
-
-	// ********** static method **********
-
-	public static void generate(JpaProject project) {
-		new EclipseLink2_0DDLGeneratorUi(project).generate();
-	}
-
-	// ********** constructors **********
-	
-	private EclipseLink2_0DDLGeneratorUi(JpaProject project) {
-		super(project);
-	}
-
-	// ********** behavior **********
-
-	@Override
-	protected IWorkspaceRunnable buildGenerateDDLRunnable(String puName, JpaProject project) {
-		return new Generate2_0DDLRunnable(puName, project);
-	}
-
-	// ********** runnable **********
-
-	protected static class Generate2_0DDLRunnable extends EclipseLinkDDLGeneratorUi.GenerateDDLRunnable {
-
-		public Generate2_0DDLRunnable(String puName, JpaProject project) {
-			super(puName, project);
-		}
-
-		@Override
-		protected void ddlGeneratorGenerate(String puName, JpaProject project, String projectLocation, IProgressMonitor monitor) {
-			EclipseLink2_0DDLGenerator.generate(puName, project, projectLocation, monitor);
-		}
-	}
-}
-
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/EclipseLinkCaching2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/EclipseLinkCaching2_0Composite.java
deleted file mode 100644
index 85b5362..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/EclipseLinkCaching2_0Composite.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.eclipse.jpt.core.jpa2.context.Cacheable2_0;
-import org.eclipse.jpt.core.jpa2.context.CacheableHolder2_0;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkAlwaysRefreshComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkCacheCoordinationTypeComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkCacheSizeComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkCacheTypeComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkDisableHitsComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkExpiryComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkRefreshOnlyIfNewerComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
-import org.eclipse.jpt.ui.internal.jpa2.details.JptUiDetailsMessages2_0;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This pane shows the caching options.
- * <p>
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | x Shared                                                                  |
- * |    CacheTypeComposite                                                     |
- * |    CacheSizeComposite                                                     |
- * |    > Advanced   	                                                       |
- * |    	ExpiryComposite                                                    |
- * |    	AlwaysRefreshComposite                                             |
- * |   		RefreshOnlyIfNewerComposite                                        |
- * |    	DisableHitsComposite                                               |
- * |    	CacheCoordinationComposite                                         |
- * | ExistenceTypeComposite                                                    |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see Entity
- * @see EclipseLinkCaching
- * @see JavaEclipseLinkEntityComposite - The parent container
- * @see EclipseLinkCacheTypeComposite
- * @see EclipseLinkCacheSizeComposite
- * @see EclipseLinkAlwaysRefreshComposite
- * @see EclipseLinkRefreshOnlyIfNewerComposite
- * @see EclipseLinkDisableHitsComposite
- *
- * @version 3.0
- * @since 3.0
- */
-public abstract class EclipseLinkCaching2_0Composite<T extends EclipseLinkCaching> extends Pane<T>
-{
-	
-	protected EclipseLinkCaching2_0Composite(Pane<?> parentPane,
-        PropertyValueModel<T> subjectHolder,
-        Composite parent) {
-
-		super(parentPane, subjectHolder, parent, false);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		PropertyValueModel<Cacheable2_0> cacheableHolder = buildCacheableHolder();
-		
-		//Shared Check box, uncheck this and the rest of the panel is disabled
-		addTriStateCheckBoxWithDefault(
-			addSubPane(container, 8),
-			JptUiDetailsMessages2_0.Entity_cacheableLabel,
-			buildSpecifiedCacheableHolder(cacheableHolder),
-			buildCacheableStringHolder(cacheableHolder),
-			JpaHelpContextIds.ENTITY_CACHEABLE
-		);
-
-		Composite subPane = addSubPane(container, 0, 16);
-
-		Collection<Pane<?>> panes = new ArrayList<Pane<?>>();
-		
-		panes.add(new EclipseLinkCacheTypeComposite(this, subPane));
-		panes.add(new EclipseLinkCacheSizeComposite(this, subPane));
-		
-		// Advanced sub-pane
-		Composite advancedSection = addCollapsibleSubSection(
-			subPane,
-			EclipseLinkUiDetailsMessages.EclipseLinkCachingComposite_advanced,
-			new SimplePropertyValueModel<Boolean>(Boolean.FALSE)
-		);
-
-		initializeAdvancedPane(addSubPane(advancedSection, 0, 16), panes);
-			
-		new PaneEnabler(buildCacheableEnabler(cacheableHolder), panes);
-		
-		initializeExistenceCheckingComposite(addSubPane(container, 8));
-	}
-	
-	protected PropertyValueModel<Cacheable2_0> buildCacheableHolder() {
-		return new PropertyAspectAdapter<EclipseLinkCaching, Cacheable2_0>(getSubjectHolder()) {
-			@Override
-			protected Cacheable2_0 buildValue_() {
-				return ((CacheableHolder2_0) this.subject).getCacheable();
-			}
-		};
-	}
-
-	protected void initializeAdvancedPane(Composite container, Collection<Pane<?>> panes) {
-		panes.add(new EclipseLinkExpiryComposite(this, container));
-		panes.add(new EclipseLinkAlwaysRefreshComposite(this, container));
-		panes.add(new EclipseLinkRefreshOnlyIfNewerComposite(this, container));
-		panes.add(new EclipseLinkDisableHitsComposite(this, container));
-		panes.add(new EclipseLinkCacheCoordinationTypeComposite(this, container));
-	}
-	
-	protected abstract void initializeExistenceCheckingComposite(Composite parent);
-	
-	private PropertyValueModel<Boolean> buildCacheableEnabler(PropertyValueModel<Cacheable2_0> cacheableHolder) {
-		return new PropertyAspectAdapter<Cacheable2_0, Boolean>(
-				cacheableHolder,
-				Cacheable2_0.SPECIFIED_CACHEABLE_PROPERTY, 
-				Cacheable2_0.DEFAULT_CACHEABLE_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.isCacheable());
-			}
-		};
-	}	
-	
-	private WritablePropertyValueModel<Boolean> buildSpecifiedCacheableHolder(PropertyValueModel<Cacheable2_0> cacheableHolder) {
-		return new PropertyAspectAdapter<Cacheable2_0, Boolean>(cacheableHolder, Cacheable2_0.SPECIFIED_CACHEABLE_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getSpecifiedCacheable();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setSpecifiedCacheable(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildCacheableStringHolder(PropertyValueModel<Cacheable2_0> cacheableHolder) {
-		return new TransformationPropertyValueModel<Boolean, String>(buildDefaultCacheableHolder(cacheableHolder)) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? JptUiDetailsMessages.Boolean_True : JptUiDetailsMessages.Boolean_False;
-					return NLS.bind(JptUiDetailsMessages2_0.Entity_cacheableWithDefaultLabel, defaultStringValue);
-				}
-				return JptUiDetailsMessages2_0.Entity_cacheableLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultCacheableHolder(PropertyValueModel<Cacheable2_0> cacheableHolder) {
-		return new PropertyAspectAdapter<Cacheable2_0, Boolean>(
-			cacheableHolder,
-			Cacheable2_0.SPECIFIED_CACHEABLE_PROPERTY,
-			Cacheable2_0.DEFAULT_CACHEABLE_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getSpecifiedCacheable() != null) {
-					return null;
-				}
-				return Boolean.valueOf(this.subject.isDefaultCacheable());
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/EclipseLink2_0JavaResourceUiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/EclipseLink2_0JavaResourceUiDefinition.java
deleted file mode 100644
index 5094722..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/EclipseLink2_0JavaResourceUiDefinition.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
-
-import java.util.List;
-import org.eclipse.jpt.core.context.AttributeMapping;
-import org.eclipse.jpt.core.context.TypeMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.DefaultJavaEclipseLinkOneToManyMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.DefaultJavaEclipseLinkOneToOneMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.JavaEclipseLinkBasicCollectionMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.JavaEclipseLinkBasicMapMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.JavaEclipseLinkTransformationMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.JavaEclipseLinkVariableOneToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.java.DefaultJavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaTypeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.java.JavaUiFactory;
-import org.eclipse.jpt.ui.internal.details.java.AbstractJavaResourceUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.DefaultBasicMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.DefaultEmbeddedMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaBasicMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaEmbeddableUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaEmbeddedIdMappingUDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaEmbeddedMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaEntityUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaManyToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaManyToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaMappedSuperclassUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaOneToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaOneToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaTransientMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaVersionMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.NullJavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.jpa2.details.java.JavaElementCollectionMapping2_0UiDefinition;
-
-public class EclipseLink2_0JavaResourceUiDefinition
-	extends AbstractJavaResourceUiDefinition
-{
-	// singleton
-	private static final ResourceUiDefinition INSTANCE = new EclipseLink2_0JavaResourceUiDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static ResourceUiDefinition instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * zero-argument constructor
-	 */
-	protected EclipseLink2_0JavaResourceUiDefinition() {
-		super();
-	}
-	
-	
-	@Override
-	protected JavaUiFactory buildJavaUiFactory() {
-		return new EclipseLink2_0JavaUiFactory();
-	}
-	
-	@Override
-	protected void addSpecifiedAttributeMappingUiDefinitionsTo(
-			List<JavaAttributeMappingUiDefinition<? extends AttributeMapping>> definitions) {
-		
-		definitions.add(JavaEclipseLinkIdMapping2_0UiDefinition.instance());
-		definitions.add(JavaEmbeddedIdMappingUDefinition.instance());
-		definitions.add(JavaBasicMappingUiDefinition.instance());
-		definitions.add(JavaVersionMappingUiDefinition.instance());
-		definitions.add(JavaManyToOneMappingUiDefinition.instance());
-		definitions.add(JavaOneToManyMappingUiDefinition.instance());
-		definitions.add(JavaOneToOneMappingUiDefinition.instance());
-		definitions.add(JavaManyToManyMappingUiDefinition.instance());
-		definitions.add(JavaEmbeddedMappingUiDefinition.instance());
-		definitions.add(JavaTransientMappingUiDefinition.instance());
-
-		definitions.add(JavaEclipseLinkBasicCollectionMappingUiDefinition.instance());
-		definitions.add(JavaEclipseLinkBasicMapMappingUiDefinition.instance());
-		definitions.add(JavaEclipseLinkVariableOneToOneMappingUiDefinition.instance());
-		definitions.add(JavaEclipseLinkTransformationMappingUiDefinition.instance());
-
-		definitions.add(JavaElementCollectionMapping2_0UiDefinition.instance());
-	}
-	
-	@Override
-	protected void addDefaultAttributeMappingUiDefinitionsTo(
-			List<DefaultJavaAttributeMappingUiDefinition<?>> definitions) {
-		
-		definitions.add(DefaultBasicMappingUiDefinition.instance());
-		definitions.add(DefaultEmbeddedMappingUiDefinition.instance());
-		definitions.add(NullJavaAttributeMappingUiDefinition.instance());
-		definitions.add(DefaultJavaEclipseLinkOneToOneMappingUiDefinition.instance());
-		definitions.add(DefaultJavaEclipseLinkOneToManyMappingUiDefinition.instance());
-		definitions.add(DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition.instance());
-	}
-	
-	@Override
-	protected void addSpecifiedTypeMappingUiDefinitionsTo(
-			List<JavaTypeMappingUiDefinition<? extends TypeMapping>> definitions) {
-		
-		definitions.add(JavaEntityUiDefinition.instance());
-		definitions.add(JavaMappedSuperclassUiDefinition.instance());
-		definitions.add(JavaEmbeddableUiDefinition.instance());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/EclipseLink2_0JavaUiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/EclipseLink2_0JavaUiFactory.java
deleted file mode 100644
index 863c2fd..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/EclipseLink2_0JavaUiFactory.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaEmbeddedIdMapping;
-import org.eclipse.jpt.core.context.java.JavaEntity;
-import org.eclipse.jpt.core.context.java.JavaIdMapping;
-import org.eclipse.jpt.core.context.java.JavaManyToManyMapping;
-import org.eclipse.jpt.core.context.java.JavaManyToOneMapping;
-import org.eclipse.jpt.core.context.java.JavaMappedSuperclass;
-import org.eclipse.jpt.core.context.java.JavaOneToManyMapping;
-import org.eclipse.jpt.core.context.java.JavaOneToOneMapping;
-import org.eclipse.jpt.core.jpa2.context.java.JavaElementCollectionMapping2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.java.EclipseLink1_2JavaUiFactory;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.jpa2.details.EmbeddedIdMapping2_0Composite;
-import org.eclipse.jpt.ui.jpa2.details.java.JavaUiFactory2_0;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  EclipseLink2_0JpaUiFactory
- */
-public class EclipseLink2_0JavaUiFactory
-	extends EclipseLink1_2JavaUiFactory
-	implements JavaUiFactory2_0
-{
-	public EclipseLink2_0JavaUiFactory() {
-		super();
-	}
-	
-	
-	// **************** java type mapping composites ***************************
-	
-	@Override
-	public JpaComposite createJavaEntityComposite(
-			PropertyValueModel<JavaEntity> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkEntity2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaMappedSuperclassComposite(
-			PropertyValueModel<JavaMappedSuperclass> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkMappedSuperclass2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	// **************** java attribute mapping composites **********************
-	
-	@Override
-	public JpaComposite createJavaIdMappingComposite(
-			PropertyValueModel<JavaIdMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkIdMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaEmbeddedIdMappingComposite(
-			PropertyValueModel<JavaEmbeddedIdMapping> subjectHolder, 
-			Composite parent, 
-			WidgetFactory widgetFactory) {
-		return new EmbeddedIdMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	public JpaComposite createJavaElementCollectionMapping2_0Composite(
-			PropertyValueModel<JavaElementCollectionMapping2_0> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkElementCollectionMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaOneToManyMappingComposite(
-			PropertyValueModel<JavaOneToManyMapping> subjectHolder, 
-			Composite parent, 
-			WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkOneToManyMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaOneToOneMappingComposite(
-		PropertyValueModel<JavaOneToOneMapping> subjectHolder,
-		Composite parent,
-		WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkOneToOneMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaManyToOneMappingComposite(
-		PropertyValueModel<JavaManyToOneMapping> subjectHolder,
-		Composite parent,
-		WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkManyToOneMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createJavaManyToManyMappingComposite(
-			PropertyValueModel<JavaManyToManyMapping> subjectHolder, 
-			Composite parent, 
-			WidgetFactory widgetFactory) {
-		return new JavaEclipseLinkManyToManyMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkCaching2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkCaching2_0Composite.java
deleted file mode 100644
index b888f14..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkCaching2_0Composite.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
-
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.JavaEclipseLinkExistenceCheckingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.EclipseLinkCaching2_0Composite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This pane shows the caching options.
- * <p>
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | x Shared                                                                  |
- * |    CacheTypeComposite                                                     |
- * |    CacheSizeComposite                                                     |
- * |    > Advanced   	                                                       |
- * |    	ExpiryComposite                                                    |
- * |    	AlwaysRefreshComposite                                             |
- * |   		RefreshOnlyIfNewerComposite                                        |
- * |    	DisableHitsComposite                                               |
- * |    	CacheCoordinationComposite                                         |
- * | ExistenceTypeComposite                                                    |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see Entity
- * @see EclipseLinkCaching
- * @see JavaEclipseLinkEntityComposite - The parent container
- * @see EclipseLinkCacheTypeComposite
- * @see EclipseLinkCacheSizeComposite
- * @see EclipseLinkAlwaysRefreshComposite
- * @see EclipseLinkRefreshOnlyIfNewerComposite
- * @see EclipseLinkDisableHitsComposite
- *
- * @version 3.0
- * @since 3.0
- */
-public class JavaEclipseLinkCaching2_0Composite extends EclipseLinkCaching2_0Composite<JavaEclipseLinkCaching>
-{
-
-	public JavaEclipseLinkCaching2_0Composite(Pane<?> parentPane,
-        PropertyValueModel<JavaEclipseLinkCaching> subjectHolder,
-        Composite parent) {
-
-		super(parentPane, subjectHolder, parent);
-	}
-
-	@Override
-	protected void initializeExistenceCheckingComposite(Composite parent) {
-		new JavaEclipseLinkExistenceCheckingComposite(this, parent);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkElementCollectionMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkElementCollectionMapping2_0Composite.java
deleted file mode 100644
index 7e71436..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkElementCollectionMapping2_0Composite.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
-
-import org.eclipse.jpt.core.jpa2.context.java.JavaElementCollectionMapping2_0;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
-import org.eclipse.jpt.eclipselink.core.v2_0.context.EclipseLinkElementCollectionMapping2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.jpa2.details.AbstractElementCollectionMapping2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.CollectionTable2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.TargetClassComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class JavaEclipseLinkElementCollectionMapping2_0Composite extends AbstractElementCollectionMapping2_0Composite<JavaElementCollectionMapping2_0>
-{
-	/**
-	 * Creates a new <code>EclipseLink1_1OrmBasicMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>BasicMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public JavaEclipseLinkElementCollectionMapping2_0Composite(PropertyValueModel<? extends JavaElementCollectionMapping2_0> subjectHolder,
-	                               Composite parent,
-	                               WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeElementCollectionSection(Composite container) {
-		new TargetClassComposite(this, container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchHolder(), container);
-		new CollectionTable2_0Composite(this, buildCollectionTableHolder(), container);
-	}
-
-	protected PropertyValueModel<EclipseLinkJoinFetch> buildJoinFetchHolder() {
-		return new PropertyAspectAdapter<JavaElementCollectionMapping2_0, EclipseLinkJoinFetch>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkJoinFetch buildValue_() {
-				return ((EclipseLinkElementCollectionMapping2_0) this.subject).getJoinFetch();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkEntity2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkEntity2_0Composite.java
deleted file mode 100644
index a34fc9c..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkEntity2_0Composite.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.GeneratorContainer;
-import org.eclipse.jpt.core.context.QueryContainer;
-import org.eclipse.jpt.core.context.java.JavaEntity;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkEntity;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.AbstractJavaEclipseLinkEntityComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.EntityNameComposite;
-import org.eclipse.jpt.ui.internal.details.IdClassComposite;
-import org.eclipse.jpt.ui.internal.details.TableComposite;
-import org.eclipse.jpt.ui.internal.jpa2.details.Entity2_0OverridesComposite;
-import org.eclipse.jpt.ui.internal.jpa2.details.Generation2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.Queries2_0Composite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * The pane used for an EclipseLink1.1 Java entity.
- *
- * @see JavaEclipseLinkEntity
- * @see EclipselinkJpaUiFactory - The factory creating this pane
- *
- * @version 2.3
- * @since 2.2
- */
-public class JavaEclipseLinkEntity2_0Composite
-	extends AbstractJavaEclipseLinkEntityComposite<JavaEntity>
-{
-	/**
-	 * Creates a new <code>EclipseLinkJavaEntityComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>JavaEntity</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public JavaEclipseLinkEntity2_0Composite(
-			PropertyValueModel<? extends JavaEntity> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeEntitySection(Composite container) {
-		new TableComposite(this, container);
-		new EntityNameComposite(this, container);	
-		new AccessTypeComposite(this, buildAccessHolder(), container);	
-		new IdClassComposite(this, buildIdClassReferenceHolder(), container);
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolder() {
-		return new PropertyAspectAdapter<JavaEntity, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentType();
-			}
-		};
-	}
-
-	@Override
-	protected void initializeAttributeOverridesSection(Composite container) {
-		new Entity2_0OverridesComposite(this, container);
-	}
-
-	@Override
-	protected void initializeGeneratorsSection(Composite container, PropertyValueModel<GeneratorContainer> generatorContainerHolder) {
-		new Generation2_0Composite(this, generatorContainerHolder, container);
-	}
-
-	@Override
-	protected void initializeCachingSection(Composite container, PropertyValueModel<JavaEclipseLinkCaching> cachingHolder) {
-		new JavaEclipseLinkCaching2_0Composite(this, cachingHolder, container);
-	}
-
-	@Override
-	protected void initializeQueriesSection(Composite container, PropertyValueModel<QueryContainer> queryContainerHolder) {
-		new Queries2_0Composite(this, queryContainerHolder, container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkIdMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkIdMapping2_0Composite.java
deleted file mode 100644
index c340793..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkIdMapping2_0Composite.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaIdMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkIdMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkMutableComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.details.ColumnComposite;
-import org.eclipse.jpt.ui.internal.jpa2.details.IdMapping2_0MappedByRelationshipPane;
-import org.eclipse.jpt.ui.internal.jpa2.details.IdMappingGeneration2_0Composite;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class JavaEclipseLinkIdMapping2_0Composite
-	extends EclipseLinkIdMappingComposite<JavaIdMapping>
-	implements JpaComposite
-{
-	public JavaEclipseLinkIdMapping2_0Composite(
-			PropertyValueModel<? extends JavaIdMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeIdSection(Composite container) {
-		new IdMapping2_0MappedByRelationshipPane(this, getSubjectHolder(), container);
-		new ColumnComposite(this, buildColumnHolder(), container);
-		new EclipseLinkMutableComposite(this, buildMutableHolder(), container);
-	}	
-	
-	@Override
-	protected void initializeGenerationCollapsibleSection(Composite container) {
-		new IdMappingGeneration2_0Composite(this, container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkIdMapping2_0UiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkIdMapping2_0UiDefinition.java
deleted file mode 100644
index 273ba53..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkIdMapping2_0UiDefinition.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2010  Oracle. 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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
-
-import org.eclipse.jpt.core.MappingKeys;
-import org.eclipse.jpt.core.context.PersistentAttribute;
-import org.eclipse.jpt.core.context.java.JavaIdMapping;
-import org.eclipse.jpt.ui.details.java.JavaAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.java.JavaIdMappingUiDefinition;
-import org.eclipse.jpt.utility.internal.Tools;
-
-public class JavaEclipseLinkIdMapping2_0UiDefinition
-	extends JavaIdMappingUiDefinition
-{
-	// singleton
-	private static final JavaEclipseLinkIdMapping2_0UiDefinition INSTANCE = 
-			new JavaEclipseLinkIdMapping2_0UiDefinition();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static JavaAttributeMappingUiDefinition<JavaIdMapping> instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private JavaEclipseLinkIdMapping2_0UiDefinition() {
-		super();
-	}
-	
-	
-	@Override
-	public boolean isEnabledFor(PersistentAttribute mappableObject) {
-		// a default eclipselink 1-1 mapping can not be mapped as an id, as mapping it
-		// that way will actually result in a default 1-1 with an id derived identity
-		return Tools.valuesAreDifferent(
-				mappableObject.getDefaultMappingKey(), 
-				MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkManyToManyMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkManyToManyMapping2_0Composite.java
deleted file mode 100644
index 2c8b559..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkManyToManyMapping2_0Composite.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
-
-import org.eclipse.jpt.core.context.ManyToManyMapping;
-import org.eclipse.jpt.core.context.ManyToManyRelationshipReference;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkManyToManyMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.jpa2.details.CascadePane2_0;
-import org.eclipse.jpt.ui.internal.jpa2.details.Ordering2_0Composite;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class JavaEclipseLinkManyToManyMapping2_0Composite
-	extends EclipseLinkManyToManyMappingComposite<ManyToManyMapping>
-{
-	public JavaEclipseLinkManyToManyMapping2_0Composite(
-			PropertyValueModel<? extends ManyToManyMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeManyToManySection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, this.buildJoinFetchableHolder(), container);
-		new CascadePane2_0(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-
-	@Override
-	protected void initializeOrderingCollapsibleSection(Composite container) {
-		new Ordering2_0Composite(this, container);
-	}
-
-	protected PropertyValueModel<ManyToManyRelationshipReference> buildEclipseLinkJoiningHolder() {
-		return new TransformationPropertyValueModel<ManyToManyMapping, ManyToManyRelationshipReference>(this.getSubjectHolder()) {
-			@Override
-			protected ManyToManyRelationshipReference transform_(ManyToManyMapping value) {
-				return value.getRelationshipReference();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkManyToOneMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkManyToOneMapping2_0Composite.java
deleted file mode 100644
index 4fdab8c..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkManyToOneMapping2_0Composite.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaManyToOneMapping;
-import org.eclipse.jpt.core.jpa2.context.java.JavaManyToOneRelationshipReference2_0;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
-import org.eclipse.jpt.eclipselink.core.internal.v2_0.context.java.JavaEclipseLinkManyToOneMapping2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.jpa2.details.AbstractManyToOneMapping2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.CascadePane2_0;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class JavaEclipseLinkManyToOneMapping2_0Composite
-	extends AbstractManyToOneMapping2_0Composite<JavaManyToOneMapping, JavaManyToOneRelationshipReference2_0>
-{
-	public JavaEclipseLinkManyToOneMapping2_0Composite(
-			PropertyValueModel<? extends JavaManyToOneMapping> subjectHolder,
-			Composite parent,
-	        WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeManyToOneSection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new OptionalComposite(this, container);
-		new CascadePane2_0(this, buildCascadeHolder(),  addSubPane(container, 5));
-	}
-	
-	protected PropertyValueModel<EclipseLinkJoinFetch> buildJoinFetchableHolder() {
-		return new PropertyAspectAdapter<JavaManyToOneMapping, EclipseLinkJoinFetch>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkJoinFetch buildValue_() {
-				return ((JavaEclipseLinkManyToOneMapping2_0) this.subject).getJoinFetch();
-			}
-		};
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkMappedSuperclass2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkMappedSuperclass2_0Composite.java
deleted file mode 100644
index a223f56..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkMappedSuperclass2_0Composite.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.java.JavaMappedSuperclass;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkMappedSuperclass;
-import org.eclipse.jpt.eclipselink.core.context.java.JavaEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.details.java.AbstractJavaEclipseLinkMappedSuperclassComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.IdClassComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * The pane used for an EclipseLink Java Mapped Superclass.
- *
- * @see EclipseLinkMappedSuperclass
- * @see EclipselinkJpaUiFactory - The factory creating this pane
- *
- * @version 2.3
- * @since 2.3
- */
-public class JavaEclipseLinkMappedSuperclass2_0Composite
-	extends AbstractJavaEclipseLinkMappedSuperclassComposite
-{
-	/**
-	 * Creates a new <code>MappedSuperclassComposite</code>.
-	 *
-	 * @param subjectHolder The holder of this pane's subject
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public JavaEclipseLinkMappedSuperclass2_0Composite(
-			PropertyValueModel<? extends JavaMappedSuperclass> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeMappedSuperclassSection(Composite container) {
-		new AccessTypeComposite(this, buildAccessHolder(), container);	
-		new IdClassComposite(this, buildIdClassReferenceHolder(), container);
-	}
-
-	protected PropertyValueModel<AccessHolder> buildAccessHolder() {
-		return new PropertyAspectAdapter<JavaMappedSuperclass, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentType();
-			}
-		};
-	}
-
-	@Override
-	protected void initializeCachingSection(Composite container, PropertyValueModel<JavaEclipseLinkCaching> cachingHolder) {
-		new JavaEclipseLinkCaching2_0Composite(this, cachingHolder, container);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToManyMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToManyMapping2_0Composite.java
deleted file mode 100644
index 5270872..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToManyMapping2_0Composite.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaOneToManyMapping;
-import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
-import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkOneToManyMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkPrivateOwnedComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.jpa2.details.CascadePane2_0;
-import org.eclipse.jpt.ui.internal.jpa2.details.Ordering2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.OrphanRemoval2_0Composite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class JavaEclipseLinkOneToManyMapping2_0Composite
-	extends EclipseLinkOneToManyMappingComposite<JavaOneToManyMapping>
-{
-	public JavaEclipseLinkOneToManyMapping2_0Composite(
-			PropertyValueModel<? extends JavaOneToManyMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeOneToManySection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, this.buildJoinFetchableHolder(), container);
-		new EclipseLinkPrivateOwnedComposite(this, this.buildPrivateOwnableHolder(), container);
-		new OrphanRemoval2_0Composite(this, this.buildOrphanRemovableHolder(), container);
-		new CascadePane2_0(this, this.buildCascadeHolder(), this.addSubPane(container, 5));
-	}
-	
-	@Override
-	protected void initializeOrderingCollapsibleSection(Composite container) {
-		new Ordering2_0Composite(this, container);
-	}
-
-	protected PropertyValueModel<OrphanRemovable2_0> buildOrphanRemovableHolder() {
-		return new PropertyAspectAdapter<JavaOneToManyMapping, OrphanRemovable2_0>(this.getSubjectHolder()) {
-			@Override
-			protected OrphanRemovable2_0 buildValue_() {
-				return ((OrphanRemovalHolder2_0) this.subject).getOrphanRemoval();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToOneMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToOneMapping2_0Composite.java
deleted file mode 100644
index 5c0c324..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToOneMapping2_0Composite.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
-
-import org.eclipse.jpt.core.context.java.JavaOneToOneMapping;
-import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
-import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
-import org.eclipse.jpt.core.jpa2.context.java.JavaOneToOneRelationshipReference2_0;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkOneToOneMapping;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkPrivateOwned;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkPrivateOwnedComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.jpa2.details.AbstractOneToOneMapping2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.CascadePane2_0;
-import org.eclipse.jpt.ui.internal.jpa2.details.OneToOneJoiningStrategy2_0Pane;
-import org.eclipse.jpt.ui.internal.jpa2.details.OrphanRemoval2_0Composite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class JavaEclipseLinkOneToOneMapping2_0Composite
-	extends AbstractOneToOneMapping2_0Composite<JavaOneToOneMapping, JavaOneToOneRelationshipReference2_0>
-{
-	public JavaEclipseLinkOneToOneMapping2_0Composite(
-			PropertyValueModel<? extends JavaOneToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeOneToOneSection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new OptionalComposite(this, container);
-		new EclipseLinkPrivateOwnedComposite(this, buildPrivateOwnableHolder(), container);
-		new OrphanRemoval2_0Composite(this, buildOrphanRemovableHolder(), container);
-		new CascadePane2_0(this, buildCascadeHolder(),  addSubPane(container, 5));
-	}
-
-	@Override
-	protected void initializeJoiningStrategyCollapsibleSection(Composite container) {
-		new OneToOneJoiningStrategy2_0Pane(this, buildJoiningHolder(), container);
-	}	
-	
-	protected PropertyValueModel<EclipseLinkJoinFetch> buildJoinFetchableHolder() {
-		return new PropertyAspectAdapter<JavaOneToOneMapping, EclipseLinkJoinFetch>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkJoinFetch buildValue_() {
-				return ((EclipseLinkOneToOneMapping) this.subject).getJoinFetch();
-			}
-		};
-	}
-	
-	protected PropertyValueModel<EclipseLinkPrivateOwned> buildPrivateOwnableHolder() {
-		return new PropertyAspectAdapter<JavaOneToOneMapping, EclipseLinkPrivateOwned>(this.getSubjectHolder()) {
-			@Override
-			protected EclipseLinkPrivateOwned buildValue_() {
-				return ((EclipseLinkOneToOneMapping) this.subject).getPrivateOwned();
-			}
-		};
-	}
-	
-	protected PropertyValueModel<OrphanRemovable2_0> buildOrphanRemovableHolder() {
-		return new PropertyAspectAdapter<JavaOneToOneMapping, OrphanRemovable2_0>(this.getSubjectHolder()) {
-			@Override
-			protected OrphanRemovable2_0 buildValue_() {
-				return ((OrphanRemovalHolder2_0) this.subject).getOrphanRemoval();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/EclipseLinkEntityMappings2_0DetailsPage.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/EclipseLinkEntityMappings2_0DetailsPage.java
deleted file mode 100644
index a1c813b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/EclipseLinkEntityMappings2_0DetailsPage.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import org.eclipse.jpt.core.context.orm.EntityMappings;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.AbstractEclipseLinkEntityMappingsDetailsPage;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.db.CatalogCombo;
-import org.eclipse.jpt.ui.internal.details.db.SchemaCombo;
-import org.eclipse.jpt.ui.internal.details.orm.EntityMappingsGeneratorsComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPackageChooser;
-import org.eclipse.jpt.ui.internal.details.orm.OrmQueriesComposite;
-import org.eclipse.jpt.ui.internal.details.orm.PersistenceUnitMetadataComposite;
-import org.eclipse.jpt.ui.internal.jpa2.details.orm.EntityMappingsGenerators2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.orm.OrmQueries2_0Composite;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | XmlPackageChooser                                                     | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * |              ------------------------------------------------------------ |
- * | Schema:      | SchemaCombo                                              | |
- * |              ------------------------------------------------------------ |
- * |              ------------------------------------------------------------ |
- * | Catalog:     | CatalogCombo                                             | |
- * |              ------------------------------------------------------------ |
- * |              ------------------------------------------------------------ |
- * | Access Type: |                                                        |v| |
- * |              ------------------------------------------------------------ |
- * |                                                                           |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | PersistenceUnitMetadataComposite                                      | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OrmGeneratorsComposite                                                | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | OrmQueriesComposite                                                   | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * | ------------------------------------------------------------------------- |
- * | |                                                                       | |
- * | | ConvertersComposite                                                   | |
- * | |                                                                       | |
- * | ------------------------------------------------------------------------- |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see EntityMappings
- * @see EclipseLinkEntityMappings2_0DetailsPage - The parent container
- * @see CatalogCombo
- * @see EnumFormComboViewer
- * @see EntityMappingsGeneratorsComposite
- * @see OrmPackageChooser
- * @see OrmQueriesComposite
- * @see PersistenceUnitMetadataComposite
- * @see SchemaCombo
- *
- * @version 2.3
- * @since 2.1
- */
-public class EclipseLinkEntityMappings2_0DetailsPage extends AbstractEclipseLinkEntityMappingsDetailsPage
-{
-	/**
-	 * Creates a new <code>EclipseLinkEntityMappingsDetailsPage</code>.
-	 *
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public EclipseLinkEntityMappings2_0DetailsPage(Composite parent,
-	                                 WidgetFactory widgetFactory) {
-
-		super(parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeGeneratorsCollapsibleSection(Composite container) {
-		new EntityMappingsGenerators2_0Composite(this, container);
-	}
-
-	@Override
-	protected void initializeQueriesCollapsibleSection(Composite container) {
-		new OrmQueries2_0Composite(this, container);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/EclipseLinkEntityMappings2_0DetailsProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/EclipseLinkEntityMappings2_0DetailsProvider.java
deleted file mode 100644
index 3cb4efe..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/EclipseLinkEntityMappings2_0DetailsProvider.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import org.eclipse.jpt.core.JpaResourceType;
-import org.eclipse.jpt.core.JpaStructureNode;
-import org.eclipse.jpt.eclipselink.core.internal.JptEclipseLinkCorePlugin;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaDetailsPage;
-import org.eclipse.jpt.ui.details.JpaDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.AbstractEntityMappingsDetailsProvider;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This provider is responsible for creating the {@link JpaDetailsPage}
- * when the information comes from the XML file (either from the persistence
- * configuration or from the Mappings Descriptor).
- *
- * @version 2.2
- * @since 2.2
- */
-public class EclipseLinkEntityMappings2_0DetailsProvider
-	extends AbstractEntityMappingsDetailsProvider
-{
-	// singleton
-	private static final JpaDetailsProvider INSTANCE = new EclipseLinkEntityMappings2_0DetailsProvider();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static JpaDetailsProvider instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private EclipseLinkEntityMappings2_0DetailsProvider() {
-		super();
-	}
-	
-	
-	@Override
-	protected boolean providesDetails(JpaResourceType resourceType) {
-		return resourceType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_0_RESOURCE_TYPE) ||
-		resourceType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_1_RESOURCE_TYPE);
-	}
-	
-	public JpaDetailsPage<? extends JpaStructureNode> buildDetailsPage(
-		Composite parent,
-		WidgetFactory widgetFactory) {
-
-		return new EclipseLinkEntityMappings2_0DetailsPage(parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/EclipseLinkOrmXml2_0UiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/EclipseLinkOrmXml2_0UiDefinition.java
deleted file mode 100644
index c2d4f0b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/EclipseLinkOrmXml2_0UiDefinition.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import java.util.List;
-import org.eclipse.jpt.core.JpaResourceType;
-import org.eclipse.jpt.core.context.AttributeMapping;
-import org.eclipse.jpt.core.context.TypeMapping;
-import org.eclipse.jpt.eclipselink.core.internal.JptEclipseLinkCorePlugin;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkBasicCollectionMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkBasicMapMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkTransformationMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkVariableOneToOneMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.structure.EclipseLinkOrmResourceModelStructureProvider;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmTypeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmXmlUiFactory;
-import org.eclipse.jpt.ui.internal.details.orm.AbstractOrmXmlResourceUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmBasicMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddableUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddedIdMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddedMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEntityUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmIdMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmManyToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmManyToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappedSuperclassUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmOneToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmOneToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmTransientMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmVersionMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.jpa2.details.orm.OrmElementCollectionMapping2_0UiDefinition;
-import org.eclipse.jpt.ui.structure.JpaStructureProvider;
-
-public class EclipseLinkOrmXml2_0UiDefinition
-	extends AbstractOrmXmlResourceUiDefinition
-{
-	// singleton
-	private static final ResourceUiDefinition INSTANCE = new EclipseLinkOrmXml2_0UiDefinition();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static ResourceUiDefinition instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private EclipseLinkOrmXml2_0UiDefinition() {
-		super();
-	}
-	
-	
-	@Override
-	protected OrmXmlUiFactory buildOrmXmlUiFactory() {
-		return new EclipseLinkOrmXml2_0UiFactory();
-	}
-	
-	public boolean providesUi(JpaResourceType resourceType) {
-		return resourceType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_0_RESOURCE_TYPE);
-	}
-	
-	public JpaStructureProvider getStructureProvider() {
-		return EclipseLinkOrmResourceModelStructureProvider.instance();
-	}
-	
-	@Override
-	protected void addOrmAttributeMappingUiDefinitionsTo(
-			List<OrmAttributeMappingUiDefinition<? extends AttributeMapping>> definitions) {
-		
-		definitions.add(OrmIdMappingUiDefinition.instance());
-		definitions.add(OrmEmbeddedIdMappingUiDefinition.instance());
-		definitions.add(OrmBasicMappingUiDefinition.instance());
-		definitions.add(OrmVersionMappingUiDefinition.instance());
-		definitions.add(OrmManyToOneMappingUiDefinition.instance());
-		definitions.add(OrmOneToManyMappingUiDefinition.instance());
-		definitions.add(OrmOneToOneMappingUiDefinition.instance());
-		definitions.add(OrmManyToManyMappingUiDefinition.instance());
-		definitions.add(OrmEmbeddedMappingUiDefinition.instance());
-		definitions.add(OrmTransientMappingUiDefinition.instance());
-		
-		definitions.add(OrmEclipseLinkBasicCollectionMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkBasicMapMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkVariableOneToOneMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkTransformationMappingUiDefinition.instance());
-		
-		definitions.add(OrmElementCollectionMapping2_0UiDefinition.instance());
-	}
-	
-	@Override
-	protected void addOrmTypeMappingUiDefinitionsTo(
-			List<OrmTypeMappingUiDefinition<? extends TypeMapping>> definitions) {
-		
-		definitions.add(OrmEntityUiDefinition.instance());
-		definitions.add(OrmMappedSuperclassUiDefinition.instance());
-		definitions.add(OrmEmbeddableUiDefinition.instance());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/EclipseLinkOrmXml2_0UiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/EclipseLinkOrmXml2_0UiFactory.java
deleted file mode 100644
index 54101ec..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/EclipseLinkOrmXml2_0UiFactory.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmBasicMapping;
-import org.eclipse.jpt.core.context.orm.OrmEmbeddedIdMapping;
-import org.eclipse.jpt.core.context.orm.OrmEmbeddedMapping;
-import org.eclipse.jpt.core.context.orm.OrmEntity;
-import org.eclipse.jpt.core.context.orm.OrmIdMapping;
-import org.eclipse.jpt.core.context.orm.OrmManyToManyMapping;
-import org.eclipse.jpt.core.context.orm.OrmManyToOneMapping;
-import org.eclipse.jpt.core.context.orm.OrmMappedSuperclass;
-import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping;
-import org.eclipse.jpt.core.context.orm.OrmOneToOneMapping;
-import org.eclipse.jpt.core.context.orm.OrmVersionMapping;
-import org.eclipse.jpt.core.jpa2.context.orm.OrmElementCollectionMapping2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.BaseEclipseLinkOrmXmlUiFactory;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm.OrmEclipseLinkBasicMapping1_1Composite;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm.OrmEclipseLinkVersionMapping1_1Composite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.ui.internal.jpa2.details.orm.OrmElementCollectionMapping2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.orm.OrmEmbeddedMapping2_0Composite;
-import org.eclipse.jpt.ui.jpa2.details.orm.OrmXmlUiFactory2_0;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLinkOrmXml2_0UiFactory 
-	extends BaseEclipseLinkOrmXmlUiFactory
-	implements OrmXmlUiFactory2_0
-{
-	@Override
-	public JpaComposite createOrmEntityComposite(
-			PropertyValueModel<OrmEntity> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkEntity2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public JpaComposite createOrmMappedSuperclassComposite(
-			PropertyValueModel<OrmMappedSuperclass> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkMappedSuperclass2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	// **************** orm attribute mapping composites ***********************
-	
-	@Override
-	public JpaComposite createOrmIdMappingComposite(
-			PropertyValueModel<OrmIdMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkIdMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmEmbeddedMappingComposite(
-			PropertyValueModel<OrmEmbeddedMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEmbeddedMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmEmbeddedIdMappingComposite(
-			PropertyValueModel<OrmEmbeddedIdMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkEmbeddedIdMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmBasicMappingComposite(
-			PropertyValueModel<OrmBasicMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkBasicMapping1_1Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmVersionMappingComposite(
-			PropertyValueModel<OrmVersionMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkVersionMapping1_1Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmManyToOneMappingComposite(
-			PropertyValueModel<OrmManyToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkManyToOneMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public JpaComposite createOrmOneToManyMappingComposite(
-			PropertyValueModel<OrmOneToManyMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkOneToManyMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmOneToOneMappingComposite(
-			PropertyValueModel<OrmOneToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkOneToOneMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	public JpaComposite createOrmManyToManyMappingComposite(
-			PropertyValueModel<OrmManyToManyMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkManyToManyMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-	
-	public JpaComposite createOrmElementCollectionMapping2_0Composite(
-			PropertyValueModel<OrmElementCollectionMapping2_0> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmElementCollectionMapping2_0Composite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkCaching2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkCaching2_0Composite.java
deleted file mode 100644
index 711e5cb..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkCaching2_0Composite.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import org.eclipse.jpt.eclipselink.core.context.orm.OrmEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkExistenceCheckingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.EclipseLinkCaching2_0Composite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * This pane shows the caching options.
- * <p>
- * Here the layout of this pane:
- * <pre>
- * -----------------------------------------------------------------------------
- * | x Shared                                                                  |
- * |    CacheTypeComposite                                                     |
- * |    CacheSizeComposite                                                     |
- * |    > Advanced   	                                                       |
- * |    	ExpiryComposite                                                    |
- * |    	AlwaysRefreshComposite                                             |
- * |   		RefreshOnlyIfNewerComposite                                        |
- * |    	DisableHitsComposite                                               |
- * |    	CacheCoordinationComposite                                         |
- * | ExistenceTypeComposite                                                    |
- * -----------------------------------------------------------------------------</pre>
- *
- * @see Entity
- * @see EclipseLinkCaching
- * @see JavaEclipseLinkEntityComposite - The parent container
- * @see EclipseLinkCacheTypeComposite
- * @see EclipseLinkCacheSizeComposite
- * @see EclipseLinkAlwaysRefreshComposite
- * @see EclipseLinkRefreshOnlyIfNewerComposite
- * @see EclipseLinkDisableHitsComposite
- *
- * @version 3.0
- * @since 3.0
- */
-public class OrmEclipseLinkCaching2_0Composite extends EclipseLinkCaching2_0Composite<OrmEclipseLinkCaching>
-{
-
-	public OrmEclipseLinkCaching2_0Composite(Pane<?> parentPane,
-        PropertyValueModel<OrmEclipseLinkCaching> subjectHolder,
-        Composite parent) {
-
-		super(parentPane, subjectHolder, parent);
-	}
-
-	@Override
-	protected void initializeExistenceCheckingComposite(Composite parent) {
-		new OrmEclipseLinkExistenceCheckingComposite(this, parent);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkEmbeddedIdMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkEmbeddedIdMapping2_0Composite.java
deleted file mode 100644
index 372ed3b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkEmbeddedIdMapping2_0Composite.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2010  Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmEmbeddedIdMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm.OrmEclipseLinkEmbeddedIdMapping1_1Composite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.EmbeddedMappingOverridesComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.ui.internal.jpa2.details.EmbeddedIdMapping2_0MappedByRelationshipPane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkEmbeddedIdMapping2_0Composite
-	extends OrmEclipseLinkEmbeddedIdMapping1_1Composite
-{
-	public OrmEclipseLinkEmbeddedIdMapping2_0Composite(
-			PropertyValueModel<? extends OrmEmbeddedIdMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeEmbeddedIdSection(Composite container) {
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		
-		new EmbeddedIdMapping2_0MappedByRelationshipPane(this, getSubjectHolder(), container);
-		new EmbeddedMappingOverridesComposite(this, container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkEntity2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkEntity2_0Composite.java
deleted file mode 100644
index e744619..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkEntity2_0Composite.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2009, 2010 Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import org.eclipse.jpt.core.context.GeneratorContainer;
-import org.eclipse.jpt.core.context.QueryContainer;
-import org.eclipse.jpt.core.context.orm.OrmEntity;
-import org.eclipse.jpt.eclipselink.core.context.orm.OrmEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.AbstractOrmEclipseLinkEntityComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.jpa2.details.Entity2_0OverridesComposite;
-import org.eclipse.jpt.ui.internal.jpa2.details.Generation2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.Queries2_0Composite;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkEntity2_0Composite extends AbstractOrmEclipseLinkEntityComposite
-{
-	public OrmEclipseLinkEntity2_0Composite(
-			PropertyValueModel<? extends OrmEntity> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeAttributeOverridesSection(Composite container) {
-		new Entity2_0OverridesComposite(this, container);
-	}
-
-	@Override
-	protected void initializeGeneratorsSection(Composite container, PropertyValueModel<GeneratorContainer> generatorContainerHolder) {
-		new Generation2_0Composite(this, generatorContainerHolder, container);
-	}
-
-	@Override
-	protected void initializeCachingSection(Composite container, PropertyValueModel<OrmEclipseLinkCaching> cachingHolder) {
-		new OrmEclipseLinkCaching2_0Composite(this, cachingHolder, container);
-	}
-
-	@Override
-	protected void initializeQueriesSection(Composite container, PropertyValueModel<QueryContainer> queryContainerHolder) {
-		new Queries2_0Composite(this, queryContainerHolder, container);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkIdMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkIdMapping2_0Composite.java
deleted file mode 100644
index f3f0a30..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkIdMapping2_0Composite.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmIdMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkMutableComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm.OrmEclipseLinkIdMapping1_1Composite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.ColumnComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.ui.internal.jpa2.details.IdMapping2_0MappedByRelationshipPane;
-import org.eclipse.jpt.ui.internal.jpa2.details.IdMappingGeneration2_0Composite;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkIdMapping2_0Composite
-	extends OrmEclipseLinkIdMapping1_1Composite
-{
-	public OrmEclipseLinkIdMapping2_0Composite(
-			PropertyValueModel<? extends OrmIdMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeIdSection(Composite container) {		
-		new IdMapping2_0MappedByRelationshipPane(this, getSubjectHolder(), container);
-		new ColumnComposite(this, buildColumnHolder(), container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		new EclipseLinkMutableComposite(this, buildMutableHolder(), container);
-	}
-	
-	@Override
-	protected void initializeGenerationCollapsibleSection(Composite container) {
-		new IdMappingGeneration2_0Composite(this, container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkManyToManyMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkManyToManyMapping2_0Composite.java
deleted file mode 100644
index 1b2dd93..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkManyToManyMapping2_0Composite.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmManyToManyMapping;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkManyToManyMappingComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.ui.internal.jpa2.details.CascadePane2_0;
-import org.eclipse.jpt.ui.internal.jpa2.details.Ordering2_0Composite;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkManyToManyMapping2_0Composite 
-	extends EclipseLinkManyToManyMappingComposite<OrmManyToManyMapping>
-{
-	public OrmEclipseLinkManyToManyMapping2_0Composite(
-			PropertyValueModel<? extends OrmManyToManyMapping> subjectHolder,
-	        Composite parent,
-	        WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeManyToManySection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new CascadePane2_0(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-	
-	@Override
-	protected void initializeOrderingCollapsibleSection(Composite container) {
-		new Ordering2_0Composite(this, container);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkManyToOneMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkManyToOneMapping2_0Composite.java
deleted file mode 100644
index 70140c2..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkManyToOneMapping2_0Composite.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.orm.OrmManyToOneMapping;
-import org.eclipse.jpt.core.jpa2.context.orm.OrmManyToOneRelationshipReference2_0;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
-import org.eclipse.jpt.eclipselink.core.internal.v2_0.context.orm.OrmEclipseLinkManyToOneMapping2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.ui.internal.jpa2.details.AbstractManyToOneMapping2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.CascadePane2_0;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkManyToOneMapping2_0Composite
-	extends AbstractManyToOneMapping2_0Composite<OrmManyToOneMapping, OrmManyToOneRelationshipReference2_0>
-{
-	public OrmEclipseLinkManyToOneMapping2_0Composite(
-			PropertyValueModel<? extends OrmManyToOneMapping> subjectHolder,
-			Composite parent,
-	        WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeManyToOneSection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new OptionalComposite(this, container);
-		new CascadePane2_0(this, buildCascadeHolder(),  addSubPane(container, 5));
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<OrmManyToOneMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-	
-	protected PropertyValueModel<EclipseLinkJoinFetch> buildJoinFetchableHolder() {
-		return new PropertyAspectAdapter<OrmManyToOneMapping, EclipseLinkJoinFetch>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkJoinFetch buildValue_() {
-				return ((OrmEclipseLinkManyToOneMapping2_0) this.subject).getJoinFetch();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkMappedSuperclass2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkMappedSuperclass2_0Composite.java
deleted file mode 100644
index 4a8483f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkMappedSuperclass2_0Composite.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2009, 2010 Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import org.eclipse.jpt.eclipselink.core.context.orm.OrmEclipseLinkCaching;
-import org.eclipse.jpt.eclipselink.core.context.orm.OrmEclipseLinkMappedSuperclass;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.AbstractOrmEclipseLinkMappedSuperclassComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkMappedSuperclass2_0Composite<T extends OrmEclipseLinkMappedSuperclass >
-	extends AbstractOrmEclipseLinkMappedSuperclassComposite<T>
-{
-	public OrmEclipseLinkMappedSuperclass2_0Composite(
-			PropertyValueModel<? extends T> subjectHolder,
-			Composite parent, WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeCachingSection(Composite container, PropertyValueModel<OrmEclipseLinkCaching> cachingHolder) {
-		new OrmEclipseLinkCaching2_0Composite(this, cachingHolder, container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToManyMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToManyMapping2_0Composite.java
deleted file mode 100644
index 2a173af..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToManyMapping2_0Composite.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.OneToManyMapping;
-import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping;
-import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
-import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkOneToManyMappingComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkPrivateOwnedComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.ui.internal.jpa2.details.CascadePane2_0;
-import org.eclipse.jpt.ui.internal.jpa2.details.Ordering2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.OrphanRemoval2_0Composite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-
-public class OrmEclipseLinkOneToManyMapping2_0Composite
-	extends EclipseLinkOneToManyMappingComposite<OrmOneToManyMapping>
-{
-	public OrmEclipseLinkOneToManyMapping2_0Composite(
-			PropertyValueModel<? extends OrmOneToManyMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeOneToManySection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, this.buildAccessHolderHolder(), container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, this.buildJoinFetchableHolder(), container);
-		new EclipseLinkPrivateOwnedComposite(this, this.buildPrivateOwnableHolder(), container);
-		new OrphanRemoval2_0Composite(this, this.buildOrphanRemovableHolder(), container);
-		new CascadePane2_0(this, this.buildCascadeHolder(), this.addSubPane(container, 5));
-	}
-	
-	@Override
-	protected void initializeOrderingCollapsibleSection(Composite container) {
-		new Ordering2_0Composite(this, container);
-	}
-
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<OneToManyMapping, AccessHolder>(this.getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-	
-	protected PropertyValueModel<OrphanRemovable2_0> buildOrphanRemovableHolder() {
-		return new PropertyAspectAdapter<OrmOneToManyMapping, OrphanRemovable2_0>(this.getSubjectHolder()) {
-			@Override
-			protected OrphanRemovable2_0 buildValue_() {
-				return ((OrphanRemovalHolder2_0) this.subject).getOrphanRemoval();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToOneMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToOneMapping2_0Composite.java
deleted file mode 100644
index 3e799fc..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToOneMapping2_0Composite.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.context.orm.OrmOneToOneMapping;
-import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
-import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
-import org.eclipse.jpt.core.jpa2.context.orm.OrmOneToOneRelationshipReference2_0;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkOneToOneMapping;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkPrivateOwned;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkPrivateOwnedComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.OptionalComposite;
-import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.ui.internal.jpa2.details.AbstractOneToOneMapping2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.CascadePane2_0;
-import org.eclipse.jpt.ui.internal.jpa2.details.OneToOneJoiningStrategy2_0Pane;
-import org.eclipse.jpt.ui.internal.jpa2.details.OrphanRemoval2_0Composite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkOneToOneMapping2_0Composite
-	extends AbstractOneToOneMapping2_0Composite<OrmOneToOneMapping, OrmOneToOneRelationshipReference2_0>
-{
-	public OrmEclipseLinkOneToOneMapping2_0Composite(
-			PropertyValueModel<? extends OrmOneToOneMapping> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeOneToOneSection(Composite container) {
-		new TargetEntityComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), container);
-		new OptionalComposite(this, container);
-		new EclipseLinkPrivateOwnedComposite(this, buildPrivateOwnableHolder(), container);
-		new OrphanRemoval2_0Composite(this, buildOrphanRemovableHolder(), container);
-		new CascadePane2_0(this, buildCascadeHolder(), addSubPane(container, 5));
-	}
-	
-	@Override
-	protected void initializeJoiningStrategyCollapsibleSection(Composite container) {
-		new OneToOneJoiningStrategy2_0Pane(this, buildJoiningHolder(), container);
-	}
-
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<OrmOneToOneMapping, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-	
-	protected PropertyValueModel<EclipseLinkJoinFetch> buildJoinFetchableHolder() {
-		return new PropertyAspectAdapter<OrmOneToOneMapping, EclipseLinkJoinFetch>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkJoinFetch buildValue_() {
-				return ((EclipseLinkOneToOneMapping) this.subject).getJoinFetch();
-			}
-		};
-	}
-	
-	protected PropertyValueModel<EclipseLinkPrivateOwned> buildPrivateOwnableHolder() {
-		return new PropertyAspectAdapter<OrmOneToOneMapping, EclipseLinkPrivateOwned>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkPrivateOwned buildValue_() {
-				return ((EclipseLinkOneToOneMapping) this.subject).getPrivateOwned();
-			}
-		};
-	}
-	
-	protected PropertyValueModel<OrphanRemovable2_0> buildOrphanRemovableHolder() {
-		return new PropertyAspectAdapter<OrmOneToOneMapping, OrphanRemovable2_0>(getSubjectHolder()) {
-			@Override
-			protected OrphanRemovable2_0 buildValue_() {
-				return ((OrphanRemovalHolder2_0) this.subject).getOrphanRemoval();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/EclipseLink2_0PersistenceXmlUiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/EclipseLink2_0PersistenceXmlUiFactory.java
deleted file mode 100644
index 00aa7f9..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/EclipseLink2_0PersistenceXmlUiFactory.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence;
-
-import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
-import org.eclipse.jpt.core.jpa2.context.persistence.PersistenceUnit2_0;
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.core.internal.context.persistence.EclipseLinkPersistenceUnit;
-import org.eclipse.jpt.eclipselink.core.v2_0.context.persistence.logging.Logging2_0;
-import org.eclipse.jpt.eclipselink.core.v2_0.context.persistence.options.Options2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.EclipseLinkPersistenceXmlUiFactory;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.caching.PersistenceXmlCachingTab;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.logging.PersistenceXmlLoggingTab;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.options.PersistenceXmlOptionsTab;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.caching.PersistenceXmlCaching2_0Tab;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.logging.PersistenceXmlLogging2_0Tab;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.options.PersistenceXmlOptions2_0Tab;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLink2_0PersistenceXmlUiFactory extends EclipseLinkPersistenceXmlUiFactory
-{
-	// ********** constructors **********
-	
-	public EclipseLink2_0PersistenceXmlUiFactory() {
-		super();
-	}
-
-	// ********** persistence unit tabs **********
-
-	@Override
-	protected PersistenceXmlCachingTab<Caching> buildCachingTab(
-				PropertyValueModel<EclipseLinkPersistenceUnit> subjectHolder,
-				Composite parent,
-				WidgetFactory widgetFactory) {
-		PropertyValueModel<Caching> cachingHolder = this.buildCachingHolder(subjectHolder);
-
-		return new PersistenceXmlCaching2_0Tab(cachingHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected PersistenceXmlLoggingTab<? extends Logging2_0> buildLoggingTab(
-				PropertyValueModel<EclipseLinkPersistenceUnit> subjectHolder,
-				Composite parent,
-				WidgetFactory widgetFactory) {
-		PropertyValueModel<Logging2_0> logging2_0Holder = this.buildLogging2_0Holder(subjectHolder);
-
-		return new PersistenceXmlLogging2_0Tab(logging2_0Holder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected PersistenceXmlOptionsTab<Options2_0> buildOptionsTab(
-				PropertyValueModel<PersistenceUnit> subjectHolder,
-				Composite parent,
-				WidgetFactory widgetFactory) {
-		PropertyValueModel<Options2_0> options2_0Holder = this.buildOptions2_0Holder(subjectHolder);
-
-		return new PersistenceXmlOptions2_0Tab(options2_0Holder, parent, widgetFactory);
-	}
-
-	// ********** private methods **********
-
-	private PropertyValueModel<Logging2_0> buildLogging2_0Holder(
-				PropertyValueModel<EclipseLinkPersistenceUnit> subjectHolder) {
-		return new TransformationPropertyValueModel<EclipseLinkPersistenceUnit, Logging2_0>(subjectHolder) {
-			@Override
-			protected Logging2_0 transform_(EclipseLinkPersistenceUnit value) {
-
-				return (Logging2_0) value.getLogging();
-			}
-		};
-	}
-
-	private PropertyValueModel<Options2_0> buildOptions2_0Holder(
-				PropertyValueModel<PersistenceUnit> subjectHolder) {
-		return new TransformationPropertyValueModel<PersistenceUnit, Options2_0>(subjectHolder) {
-			@Override
-			protected Options2_0 transform_(PersistenceUnit value) {
-
-				return (Options2_0) ((PersistenceUnit2_0)value).getOptions();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/EclipseLinkPersistenceXml2_0UiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/EclipseLinkPersistenceXml2_0UiDefinition.java
deleted file mode 100644
index 6651bd1..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/EclipseLinkPersistenceXml2_0UiDefinition.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2009  Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence;
-
-import org.eclipse.jpt.core.JpaResourceType;
-import org.eclipse.jpt.core.JptCorePlugin;
-import org.eclipse.jpt.eclipselink.ui.internal.structure.EclipseLinkPersistenceResourceModelStructureProvider;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.internal.persistence.details.AbstractPersistenceXmlResourceUiDefinition;
-import org.eclipse.jpt.ui.internal.persistence.details.PersistenceXmlUiFactory;
-import org.eclipse.jpt.ui.structure.JpaStructureProvider;
-
-public class EclipseLinkPersistenceXml2_0UiDefinition extends AbstractPersistenceXmlResourceUiDefinition
-{
-	// singleton
-	private static final ResourceUiDefinition INSTANCE = new EclipseLinkPersistenceXml2_0UiDefinition();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static ResourceUiDefinition instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private EclipseLinkPersistenceXml2_0UiDefinition() {
-		super();
-	}
-	
-	
-	@Override
-	protected PersistenceXmlUiFactory buildPersistenceXmlUiFactory() {
-		return new EclipseLink2_0PersistenceXmlUiFactory();
-	}
-	
-	public boolean providesUi(JpaResourceType resourceType) {
-		return resourceType.equals(JptCorePlugin.PERSISTENCE_XML_2_0_RESOURCE_TYPE);
-	}
-	
-	public JpaStructureProvider getStructureProvider() {
-		return EclipseLinkPersistenceResourceModelStructureProvider.instance();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/caching/CacheDefaults2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/caching/CacheDefaults2_0Composite.java
deleted file mode 100644
index 07681da..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/caching/CacheDefaults2_0Composite.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.caching;
-
-import org.eclipse.jpt.core.jpa2.context.persistence.PersistenceUnit2_0;
-import org.eclipse.jpt.core.jpa2.context.persistence.options.SharedCacheMode;
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.caching.CacheDefaultsComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.caching.DefaultCacheSizeComposite;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.caching.DefaultCacheTypeComposite;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  CacheDefaults2_0Composite
- */
-public class CacheDefaults2_0Composite extends CacheDefaultsComposite<Caching>
-{
-	public CacheDefaults2_0Composite(Pane<Caching> subjectHolder,
-        Composite container) {
-
-		super(subjectHolder, container);
-	}
-		
-	@Override
-	protected void initializeLayout(Composite parent) {
-		this.initializeCacheDefaultsComposites(parent);
-		this.installPaneEnabler();
-	}
-
-	@Override
-	protected void initializeCacheDefaultsComposites(Composite parent) {
-
-		// Default Cache Type
-		new DefaultCacheTypeComposite(this, parent);
-
-		// Default Cache Size
-		new DefaultCacheSizeComposite<Caching>(this, parent);
-
-	}
-
-	// ********** private methods **********
-
-	private void installPaneEnabler() {
-		new PaneEnabler(this.buildPaneEnablerHolder(), this);
-	}
-	
-	private PropertyValueModel<Boolean> buildPaneEnablerHolder() {
-		return new TransformationPropertyValueModel<SharedCacheMode, Boolean>(this.buildSharedCacheModeHolder()) {
-			@Override
-			protected Boolean transform(SharedCacheMode value) {
-				return value != SharedCacheMode.NONE;
-			}
-		};
-	}
-
-	private PropertyValueModel<SharedCacheMode> buildSharedCacheModeHolder() {
-		return new PropertyAspectAdapter<PersistenceUnit2_0, SharedCacheMode>(
-								this.buildPersistenceUnit2_0Holder(), 
-								PersistenceUnit2_0.SPECIFIED_SHARED_CACHE_MODE_PROPERTY, 
-								PersistenceUnit2_0.DEFAULT_SHARED_CACHE_MODE_PROPERTY) {
-			@Override
-			protected SharedCacheMode buildValue_() {
-				return this.subject.getSharedCacheMode();
-			}
-		};
-	}
-
-	private PropertyValueModel<PersistenceUnit2_0> buildPersistenceUnit2_0Holder() {
-		return new PropertyAspectAdapter<Caching, PersistenceUnit2_0>(this.getSubjectHolder()) {
-			@Override
-			protected PersistenceUnit2_0 buildValue_() {
-				return (PersistenceUnit2_0) this.subject.getPersistenceUnit();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/caching/EclipseLinkCaching2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/caching/EclipseLinkCaching2_0Composite.java
deleted file mode 100644
index 48dc5bd..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/caching/EclipseLinkCaching2_0Composite.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.caching;
-
-import org.eclipse.jpt.core.jpa2.context.persistence.PersistenceUnit2_0;
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.caching.EclipseLinkCachingComposite;
-import org.eclipse.jpt.ui.internal.jpa2.persistence.options.SharedCacheModeComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.Section;
-
-/**
- *  EclipseLinkCaching2_0Composite
- */
-public class EclipseLinkCaching2_0Composite extends EclipseLinkCachingComposite<Caching>
-{
-	public EclipseLinkCaching2_0Composite(
-			Pane<Caching> subjectHolder, 
-			Composite container) {
-		super(subjectHolder, container);
-	}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-		Section section = getWidgetFactory().createSection(parent, SWT.FLAT | ExpandableComposite.TITLE_BAR | Section.DESCRIPTION);
-		section.setText(EclipseLinkUiMessages.PersistenceXmlCachingTab_sectionTitle);
-		section.setDescription(EclipseLinkUiMessages.PersistenceXmlCachingTab_sectionDescription);
-		Composite composite = getWidgetFactory().createComposite(section);
-		composite.setLayout(new GridLayout(1, false));
-		section.setClient(composite);
-		this.updateGridData(composite);
-		this.updateGridData(composite.getParent());
-
-		// SharedCacheMode
-		new SharedCacheModeComposite(this, this.buildPersistenceUnit2_0Holder(), composite);
-		// Defaults
-		new CacheDefaults2_0Composite(this, composite);
-		// Flush Clear Cache
-		new FlushClearCache2_0Composite(this, composite);
-	}
-
-	private PropertyValueModel<PersistenceUnit2_0> buildPersistenceUnit2_0Holder() {
-		return new PropertyAspectAdapter<Caching, PersistenceUnit2_0>(this.getSubjectHolder()) {
-			@Override
-			protected PersistenceUnit2_0 buildValue_() {
-				return (PersistenceUnit2_0) this.subject.getPersistenceUnit();
-			}
-		};
-	}
-
-	private void updateGridData(Composite container) {
-		GridData gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		container.setLayoutData(gridData);
-	}	
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/caching/FlushClearCache2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/caching/FlushClearCache2_0Composite.java
deleted file mode 100644
index b084141..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/caching/FlushClearCache2_0Composite.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.caching;
-
-import org.eclipse.jpt.core.jpa2.context.persistence.PersistenceUnit2_0;
-import org.eclipse.jpt.core.jpa2.context.persistence.options.SharedCacheMode;
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.caching.FlushClearCacheComposite;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  FlushClearCache2_0Composite
- */
-public class FlushClearCache2_0Composite extends FlushClearCacheComposite
-{
-	/**
-	 * Creates a new <code>FlushClearCache2_0Composite</code>.
-	 * 
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public FlushClearCache2_0Composite(
-				Pane<? extends Caching> parentComposite, 
-				Composite parent) {
-		
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-		super.initializeLayout(parent);
-
-		this.installPaneEnabler();
-	}
-
-	// ********** private methods **********
-
-	private void installPaneEnabler() {
-		new PaneEnabler(this.buildPaneEnablerHolder(), this);
-	}
-	
-	private PropertyValueModel<Boolean> buildPaneEnablerHolder() {
-		return new TransformationPropertyValueModel<SharedCacheMode, Boolean>(this.buildSharedCacheModeHolder()) {
-			@Override
-			protected Boolean transform(SharedCacheMode value) {
-				return value != SharedCacheMode.NONE;
-			}
-		};
-	}
-
-	private PropertyValueModel<SharedCacheMode> buildSharedCacheModeHolder() {
-		return new PropertyAspectAdapter<PersistenceUnit2_0, SharedCacheMode>(
-								this.buildPersistenceUnit2_0Holder(), 
-								PersistenceUnit2_0.SPECIFIED_SHARED_CACHE_MODE_PROPERTY, 
-								PersistenceUnit2_0.DEFAULT_SHARED_CACHE_MODE_PROPERTY) {
-			@Override
-			protected SharedCacheMode buildValue_() {
-				return this.subject.getSharedCacheMode();
-			}
-		};
-	}
-
-	private PropertyValueModel<PersistenceUnit2_0> buildPersistenceUnit2_0Holder() {
-		return new PropertyAspectAdapter<Caching, PersistenceUnit2_0>(this.getSubjectHolder()) {
-			@Override
-			protected PersistenceUnit2_0 buildValue_() {
-				return (PersistenceUnit2_0) this.subject.getPersistenceUnit();
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/caching/PersistenceXmlCaching2_0Tab.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/caching/PersistenceXmlCaching2_0Tab.java
deleted file mode 100644
index 6d2447b..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/caching/PersistenceXmlCaching2_0Tab.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.caching;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.caching.Caching;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.caching.PersistenceXmlCachingTab;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  PersistenceXmlCaching2_0Tab
- */
-public class PersistenceXmlCaching2_0Tab extends PersistenceXmlCachingTab<Caching>
-{
-	public PersistenceXmlCaching2_0Tab(
-			PropertyValueModel<Caching> subjectHolder,
-			Composite parent,
-            WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite container) {
-		
-		new EclipseLinkCaching2_0Composite(this, container);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/logging/ConnectionComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/logging/ConnectionComposite.java
deleted file mode 100644
index 7466682..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/logging/ConnectionComposite.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.logging;
-
-import org.eclipse.jpt.eclipselink.core.v2_0.context.persistence.logging.Logging2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  ConnectionComposite
- */
-public class ConnectionComposite extends Pane<Logging2_0>
-{
-	/**
-	 * Creates a new <code>ConnectionComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public ConnectionComposite(
-					Pane<? extends Logging2_0> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-
-		this.addTriStateCheckBoxWithDefault(
-			container,
-			EclipseLinkUiMessages.PersistenceXmlLoggingTab_connectionLabel,
-			this.buildConnectionHolder(),
-			this.buildConnectionStringHolder(),
-			null
-//			EclipseLinkHelpContextIds.PERSISTENCE_LOGGING_CONNECTION	// TODO
-		);
-	}
-	
-	private WritablePropertyValueModel<Boolean> buildConnectionHolder() {
-		return new PropertyAspectAdapter<Logging2_0, Boolean>(getSubjectHolder(), Logging2_0.CONNECTION_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.getConnection();
-			}
-
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setConnection(value);
-			}
-		};
-	}
-
-	private PropertyValueModel<String> buildConnectionStringHolder() {
-		return new TransformationPropertyValueModel<Boolean, String>(this.buildDefaultConnectionHolder()) {
-			@Override
-			protected String transform(Boolean value) {
-				if (value != null) {
-					String defaultStringValue = value.booleanValue() ? EclipseLinkUiMessages.Boolean_True : EclipseLinkUiMessages.Boolean_False;
-					return NLS.bind(EclipseLinkUiMessages.PersistenceXmlLoggingTab_connectionLabelDefault, defaultStringValue);
-				}
-				return EclipseLinkUiMessages.PersistenceXmlLoggingTab_connectionLabel;
-			}
-		};
-	}
-	
-	private PropertyValueModel<Boolean> buildDefaultConnectionHolder() {
-		return new PropertyAspectAdapter<Logging2_0, Boolean>(
-			getSubjectHolder(),
-			Logging2_0.CONNECTION_PROPERTY)
-		{
-			@Override
-			protected Boolean buildValue_() {
-				if (this.subject.getConnection() != null) {
-					return null;
-				}
-				return this.subject.getDefaultConnection();
-			}
-		};
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/logging/EclipseLinkCategoryLoggingLevelComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/logging/EclipseLinkCategoryLoggingLevelComposite.java
deleted file mode 100644
index 78b034d..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/logging/EclipseLinkCategoryLoggingLevelComposite.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.logging;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.eclipselink.core.context.persistence.logging.LoggingLevel;
-import org.eclipse.jpt.eclipselink.core.v2_0.context.persistence.logging.Logging2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  EclipseLinkCategoryLoggingLevelComposite
- */
-public class EclipseLinkCategoryLoggingLevelComposite extends Pane<Logging2_0>
-{
-	private String property;
-	
-	/**
-	 * Creates a new <code>EclipseLinkCategoryLoggingLevelComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public EclipseLinkCategoryLoggingLevelComposite(
-					Pane<Logging2_0> parentComposite, 
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-		
-		this.property = Logging2_0.SQL_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.TRANSACTION_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.EVENT_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.CONNECTION_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.QUERY_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.CACHE_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.PROPAGATION_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.SEQUENCING_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.EJB_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.DMS_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.EJB_OR_METADATA_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.METAMODEL_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-
-		this.property = Logging2_0.WEAVER_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.PROPERTIES_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-		
-		this.property = Logging2_0.SERVER_CATEGORY_LOGGING_PROPERTY;
-		new CategoryLoggingLevelComboViewer(this, parent);
-	}
-	
-
-
-	private class CategoryLoggingLevelComboViewer extends Pane<Logging2_0>
-	{
-		private static final String DEFAULT_PROPERTY = Logging2_0.CATEGORIES_DEFAULT_LOGGING_PROPERTY;
-		final private String category;
-		
-		/**
-		 * Creates a new <code>CategoryLoggingLevelComposite</code>.
-		 * 
-		 * @param parentController
-		 *            The parent container of this one
-		 * @param parent
-		 *            The parent container
-		 */
-		public CategoryLoggingLevelComboViewer(
-					Pane<? extends Logging2_0> parentComposite, 
-					Composite parent
-					) {
-			super(parentComposite, parent);
-			
-			this.category = EclipseLinkCategoryLoggingLevelComposite.this.property;
-		}
-
-		private EnumFormComboViewer<Logging2_0, LoggingLevel> addLoggingLevelCombo(Composite container) {
-			return new EnumFormComboViewer<Logging2_0, LoggingLevel>(this, container) {
-				@Override
-				protected void addPropertyNames(Collection<String> propertyNames) {
-					super.addPropertyNames(propertyNames);
-					propertyNames.add(DEFAULT_PROPERTY);
-					propertyNames.add(Logging2_0.SQL_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.TRANSACTION_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.EVENT_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.CONNECTION_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.QUERY_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.CACHE_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.PROPAGATION_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.SEQUENCING_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.EJB_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.DMS_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.EJB_OR_METADATA_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.METAMODEL_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.WEAVER_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.PROPERTIES_CATEGORY_LOGGING_PROPERTY);
-					propertyNames.add(Logging2_0.SERVER_CATEGORY_LOGGING_PROPERTY);
-				}
-				
-				@Override
-				protected LoggingLevel[] getChoices() {
-					return LoggingLevel.values();
-				}
-				
-				@Override
-				protected boolean sortChoices() {
-					return false;
-				}
-				
-				@Override
-				protected LoggingLevel getDefaultValue() {
-					return this.getSubject().getCategoriesDefaultLevel();
-				}
-
-				@Override
-				protected String displayString(LoggingLevel value) {
-					return this.buildDisplayString(EclipseLinkUiMessages.class, EclipseLinkCategoryLoggingLevelComposite.class, value);
-				}
-
-				@Override
-				protected LoggingLevel getValue() {
-					return this.getSubject().getLevel(category);
-				}
-
-				@Override
-				protected void setValue(LoggingLevel value) {
-					this.getSubject().setLevel(category, value);
-				}
-
-				@Override
-				protected void propertyChanged(String propertyName) {
-					if( propertyName != category && propertyName != DEFAULT_PROPERTY) return;
-					super.propertyChanged(propertyName);
-				}
-			};
-		}
-
-		@Override
-		protected void initializeLayout(Composite parent) {
-			this.addLabeledComposite(
-					parent,
-					this.buildLabelString(),
-					this.addLoggingLevelCombo(parent),
-					null	// TODO
-			);
-		}
-		
-		private String buildLabelString() {
-
-			StringBuilder sb = new StringBuilder();
-			sb.append("PersistenceXmlLoggingTab_");	 //$NON-NLS-1$
-			sb.append(EclipseLinkCategoryLoggingLevelComposite.this.property);
-			sb.append("Label");	 //$NON-NLS-1$
-			
-			return (String) ReflectionTools.getStaticFieldValue(EclipseLinkUiMessages.class, sb.toString());
-		}
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/logging/EclipseLinkLogging2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/logging/EclipseLinkLogging2_0Composite.java
deleted file mode 100644
index 19f21b0..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/logging/EclipseLinkLogging2_0Composite.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.logging;
-
-import org.eclipse.jpt.eclipselink.core.v2_0.context.persistence.logging.Logging2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.logging.EclipseLinkLoggingComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  EclipseLinkLogging2_0Composite
- */
-public class EclipseLinkLogging2_0Composite extends EclipseLinkLoggingComposite<Logging2_0>
-{
-
-	public EclipseLinkLogging2_0Composite(
-									Pane<Logging2_0> subjectHolder, 
-									Composite container) {
-		super(subjectHolder, container);
-	}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-		super.initializeLayout(parent);
-
-		Composite categoryLoggingSection = this.addCollapsibleSubSection(
-			this.addSubPane(parent, 0, 16),
-			EclipseLinkUiMessages.PersistenceXmlLoggingTab_categoryLoggingLevelSectionTitle,
-			new SimplePropertyValueModel<Boolean>(Boolean.FALSE)
-		);
-
-		this.addCategoryLoggingLevelComposite(categoryLoggingSection);
-	}
-	
-	protected void addCategoryLoggingLevelComposite(Composite parent) {
-		new EclipseLinkCategoryLoggingLevelComposite(this, parent);
-	}
-
-	@Override
-	protected void logPropertiesComposite(Composite parent) {
-		super.logPropertiesComposite(parent);
-		
-		// Connection:
-		new ConnectionComposite(this, parent);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/logging/PersistenceXmlLogging2_0Tab.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/logging/PersistenceXmlLogging2_0Tab.java
deleted file mode 100644
index 3f6ec58..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/logging/PersistenceXmlLogging2_0Tab.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.logging;
-
-import org.eclipse.jpt.eclipselink.core.v2_0.context.persistence.logging.Logging2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.logging.PersistenceXmlLoggingTab;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  PersistenceXmlLogging2_0Tab
- */
-public class PersistenceXmlLogging2_0Tab extends PersistenceXmlLoggingTab<Logging2_0>
-{
-	// ********** constructors/initialization **********
-	public PersistenceXmlLogging2_0Tab(
-				PropertyValueModel<Logging2_0> subjectHolder, 
-				Composite parent, 
-				WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		new EclipseLinkLogging2_0Composite(this, container);
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/EclipseLinkOptions2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/EclipseLinkOptions2_0Composite.java
deleted file mode 100644
index bd75384..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/EclipseLinkOptions2_0Composite.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009, 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.options;
-
-import org.eclipse.jpt.eclipselink.core.v2_0.context.persistence.options.Options2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.options.EclipseLinkOptionsComposite;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  EclipseLinkOptions2_0Composite
- */
-public class EclipseLinkOptions2_0Composite extends EclipseLinkOptionsComposite<Options2_0>
-{
-	public EclipseLinkOptions2_0Composite(
-			Pane<Options2_0> subjectHolder, 
-			Composite container) {
-		super(subjectHolder, container);
-	}
-
-	@Override
-	protected Composite initializeMiscellaneousPane(Composite container) {	
-		Composite composite = super.initializeMiscellaneousPane(container);
-
-		new LockingConfigurationComposite(this, composite);
-		new QueryConfigurationComposite(this, composite);
-		new ValidationConfigurationComposite(this, composite);
-		return composite;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/LockingConfigurationComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/LockingConfigurationComposite.java
deleted file mode 100644
index 7beaaaf..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/LockingConfigurationComposite.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.options;
-
-import org.eclipse.jpt.eclipselink.core.v2_0.context.persistence.options.Options2_0;
-import org.eclipse.jpt.ui.internal.jpa2.persistence.JptUiPersistence2_0Messages;
-import org.eclipse.jpt.ui.internal.widgets.IntegerCombo;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  LockingConfigurationComposite
- */
-public class LockingConfigurationComposite extends Pane<Options2_0>
-{
-	/**
-	 * Creates a new <code>LockingConfigurationComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public LockingConfigurationComposite(
-					Pane<Options2_0> parentComposite, 
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		addLockTimeoutCombo(container);
-	}
-	
-	private void addLockTimeoutCombo(Composite container) {
-		new IntegerCombo<Options2_0>(this, container) {
-			
-			@Override
-			protected String getLabelText() {
-				return JptUiPersistence2_0Messages.LockingConfigurationComposite_lockTimeoutLabel;
-			}
-		
-			@Override
-			protected String getHelpId() {
-				return null;		// TODO
-			}
-			
-			@Override
-			protected PropertyValueModel<Integer> buildDefaultHolder() {
-				return new PropertyAspectAdapter<Options2_0, Integer>(this.getSubjectHolder()) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getDefaultLockTimeout();
-					}
-				};
-			}
-			
-			@Override
-			protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
-				return new PropertyAspectAdapter<Options2_0, Integer>(this.getSubjectHolder(), Options2_0.LOCK_TIMEOUT_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getLockTimeout();
-					}
-
-					@Override
-					protected void setValue_(Integer value) {
-						this.subject.setLockTimeout(value);
-					}
-				};
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/PersistenceXmlOptions2_0Tab.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/PersistenceXmlOptions2_0Tab.java
deleted file mode 100644
index f6637b8..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/PersistenceXmlOptions2_0Tab.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.options;
-
-import org.eclipse.jpt.eclipselink.core.v2_0.context.persistence.options.Options2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.options.PersistenceXmlOptionsTab;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  PersistenceXmlOptions2_0Tab
- */
-public class PersistenceXmlOptions2_0Tab extends PersistenceXmlOptionsTab<Options2_0>
-{
-	// ********** constructors/initialization **********
-	public PersistenceXmlOptions2_0Tab(
-				PropertyValueModel<Options2_0> subjectHolder, 
-				Composite parent, 
-				WidgetFactory widgetFactory) {
-		
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		new EclipseLinkOptions2_0Composite(this, container);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/QueryConfigurationComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/QueryConfigurationComposite.java
deleted file mode 100644
index 5f4c710..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/QueryConfigurationComposite.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.options;
-
-import org.eclipse.jpt.eclipselink.core.v2_0.context.persistence.options.Options2_0;
-import org.eclipse.jpt.ui.internal.jpa2.persistence.JptUiPersistence2_0Messages;
-import org.eclipse.jpt.ui.internal.widgets.IntegerCombo;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  QueryConfigurationComposite
- */
-public class QueryConfigurationComposite extends Pane<Options2_0>
-{
-	/**
-	 * Creates a new <code>QueryConfigurationComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public QueryConfigurationComposite(
-					Pane<Options2_0> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite container) {
-		this.addQueryTimeoutCombo(container);
-	}
-	
-	private void addQueryTimeoutCombo(Composite container) {
-		new IntegerCombo<Options2_0>(this, container) {
-			
-			@Override
-			protected String getLabelText() {
-				return JptUiPersistence2_0Messages.QueryConfigurationComposite_queryTimeoutLabel;
-			}
-		
-			@Override
-			protected String getHelpId() {
-				return null;		// TODO
-			}
-			
-			@Override
-			protected PropertyValueModel<Integer> buildDefaultHolder() {
-				return new PropertyAspectAdapter<Options2_0, Integer>(this.getSubjectHolder()) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getDefaultQueryTimeout();
-					}
-				};
-			}
-			
-			@Override
-			protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
-				return new PropertyAspectAdapter<Options2_0, Integer>(this.getSubjectHolder(), Options2_0.QUERY_TIMEOUT_PROPERTY) {
-					@Override
-					protected Integer buildValue_() {
-						return this.subject.getQueryTimeout();
-					}
-
-					@Override
-					protected void setValue_(Integer value) {
-						this.subject.setQueryTimeout(value);
-					}
-				};
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/ValidationConfigurationComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/ValidationConfigurationComposite.java
deleted file mode 100644
index 2ec7553..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/ValidationConfigurationComposite.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.options;
-
-import org.eclipse.jpt.core.jpa2.context.persistence.PersistenceUnit2_0;
-import org.eclipse.jpt.eclipselink.core.v2_0.context.persistence.options.Options2_0;
-import org.eclipse.jpt.ui.internal.jpa2.persistence.JptUiPersistence2_0Messages;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  ValidationConfigurationComposite
- */
-public class ValidationConfigurationComposite extends Pane<Options2_0>
-{
-	/**
-	 * Creates a new <code>ValidationGroupComposite</code>.
-	 *
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public ValidationConfigurationComposite(
-					Pane<Options2_0> parentComposite,
-					Composite parent) {
-
-		super(parentComposite, parent);
-	}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-
-		// ValidationMode
-		new ValidationModeComposite(this, this.buildPersistenceUnit2_0Holder(), parent);
-
-		// GroupPrePersist
-		this.addLabeledText(
-			parent,
-			JptUiPersistence2_0Messages.ValidationConfigurationComposite_groupPrePersistLabel,
-			this.buildValidationGroupPrePersistHolder()
-		);
-
-		// ValidationGroupPreUpdate
-		this.addLabeledText(
-			parent,
-			JptUiPersistence2_0Messages.ValidationConfigurationComposite_groupPreUpdateLabel,
-			this.buildValidationGroupPreUpdateHolder()
-		);
-
-		// ValidationGroupPreRemove
-		this.addLabeledText(
-			parent,
-			JptUiPersistence2_0Messages.ValidationConfigurationComposite_groupPreRemoveLabel,
-			this.buildValidationGroupPreRemoveHolder()
-		);
-	}
-	
-	private PropertyValueModel<PersistenceUnit2_0> buildPersistenceUnit2_0Holder() {
-		return new TransformationPropertyValueModel<Options2_0, PersistenceUnit2_0>(this.getSubjectHolder()) {
-			@Override
-			protected PersistenceUnit2_0 transform_(Options2_0 value) {
-				return (PersistenceUnit2_0) value.getPersistenceUnit();
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<String> buildValidationGroupPrePersistHolder() {
-		return new PropertyAspectAdapter<Options2_0, String>(this.getSubjectHolder(), Options2_0.VALIDATION_GROUP_PRE_PERSIST_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getValidationGroupPrePersist();
-			}
-
-			@Override
-			protected void setValue_(String value) {
-				if (value.length() == 0) {
-					value = null;
-				}
-				this.subject.setValidationGroupPrePersist(value);
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<String> buildValidationGroupPreUpdateHolder() {
-		return new PropertyAspectAdapter<Options2_0, String>(this.getSubjectHolder(), Options2_0.VALIDATION_GROUP_PRE_UPDATE_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getValidationGroupPreUpdate();
-			}
-
-			@Override
-			protected void setValue_(String value) {
-				if (value.length() == 0) {
-					value = null;
-				}
-				this.subject.setValidationGroupPreUpdate(value);
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<String> buildValidationGroupPreRemoveHolder() {
-		return new PropertyAspectAdapter<Options2_0, String>(this.getSubjectHolder(), Options2_0.VALIDATION_GROUP_PRE_REMOVE_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getValidationGroupPreRemove();
-			}
-
-			@Override
-			protected void setValue_(String value) {
-				if (value.length() == 0) {
-					value = null;
-				}
-				this.subject.setValidationGroupPreRemove(value);
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/ValidationModeComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/ValidationModeComposite.java
deleted file mode 100644
index 3f5855f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/persistence/options/ValidationModeComposite.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.options;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.core.jpa2.context.persistence.PersistenceUnit2_0;
-import org.eclipse.jpt.core.jpa2.context.persistence.options.ValidationMode;
-import org.eclipse.jpt.ui.internal.jpa2.persistence.JptUiPersistence2_0Messages;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
-import org.eclipse.jpt.ui.internal.widgets.Pane;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- *  ValidationModeComposite
- */
-public class ValidationModeComposite extends Pane<PersistenceUnit2_0>
-{
-	/**
-	 * Creates a new <code>ValidationModeComposite</code>.
-	 * 
-	 * @param parentController
-	 *            The parent container of this one
-	 * @param parent
-	 *            The parent container
-	 */
-	public ValidationModeComposite(
-				Pane<?> parentPane,
-		        PropertyValueModel<? extends PersistenceUnit2_0> subjectHolder,
-		        Composite parent) {
-
-		super(parentPane, subjectHolder, parent);
-		}
-
-	@Override
-	protected void initializeLayout(Composite parent) {
-		this.addLabeledComposite(
-			parent,
-				JptUiPersistence2_0Messages.ValidationModeComposite_validationModeLabel,
-				this.addValidationModeCombo(parent),
-				null			// TODO
-		);
-	}
-
-	private EnumFormComboViewer<PersistenceUnit2_0, ValidationMode> addValidationModeCombo(Composite parent) {
-		
-		return new EnumFormComboViewer<PersistenceUnit2_0, ValidationMode>(this, this.getSubjectHolder(), parent) {
-			@Override
-			protected void addPropertyNames(Collection<String> propertyNames) {
-				super.addPropertyNames(propertyNames);
-				propertyNames.add(PersistenceUnit2_0.SPECIFIED_VALIDATION_MODE_PROPERTY);
-			}
-
-			@Override
-			protected ValidationMode[] getChoices() {
-				return ValidationMode.values();
-			}
-			
-			@Override
-			protected boolean sortChoices() {
-				return false;
-			}
-			
-			@Override
-			protected ValidationMode getDefaultValue() {
-				return this.getSubject().getDefaultValidationMode();
-			}
-
-			@Override
-			protected String displayString(ValidationMode value) {
-				return this.buildDisplayString(JptUiPersistence2_0Messages.class, ValidationModeComposite.this, value);
-			}
-
-			@Override
-			protected ValidationMode getValue() {
-				return this.getSubject().getSpecifiedValidationMode();
-			}
-
-			@Override
-			protected void setValue(ValidationMode value) {
-				this.getSubject().setSpecifiedValidationMode(value);
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/platform/EclipseLink2_0JpaPlatformUi.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/platform/EclipseLink2_0JpaPlatformUi.java
deleted file mode 100644
index 3a5a50d..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/platform/EclipseLink2_0JpaPlatformUi.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.platform;
-
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.ddlgen.wizards.EclipseLink2_0DDLGeneratorUi;
-import org.eclipse.jpt.ui.JpaPlatformUiProvider;
-import org.eclipse.jpt.ui.internal.platform.base.BaseJpaPlatformUi;
-import org.eclipse.jpt.ui.navigator.JpaNavigatorProvider;
-
-public class EclipseLink2_0JpaPlatformUi extends BaseJpaPlatformUi
-{
-	public EclipseLink2_0JpaPlatformUi(
-					JpaNavigatorProvider navigatorProvider,
-					JpaPlatformUiProvider platformUiProvider) {
-
-		super(navigatorProvider, platformUiProvider);
-	}
-
-	// ********** DDL generation **********
-
-	public void generateDDL(JpaProject project, IStructuredSelection selection) {
-		EclipseLink2_0DDLGeneratorUi.generate(project);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/platform/EclipseLink2_0JpaPlatformUiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/platform/EclipseLink2_0JpaPlatformUiFactory.java
deleted file mode 100644
index e6563fa..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/platform/EclipseLink2_0JpaPlatformUiFactory.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.platform;
-
-import org.eclipse.jpt.eclipselink.ui.internal.platform.EclipseLinkNavigatorProvider;
-import org.eclipse.jpt.ui.JpaPlatformUi;
-import org.eclipse.jpt.ui.JpaPlatformUiFactory;
-
-/**
- *  EclipseLink2_0JpaPlatformUiFactory
- */
-public class EclipseLink2_0JpaPlatformUiFactory implements JpaPlatformUiFactory
-{
-
-	/**
-	 * Zero arg constructor for extension point
-	 */
-	public EclipseLink2_0JpaPlatformUiFactory() {
-		super();
-	}
-
-	public JpaPlatformUi buildJpaPlatformUi() {
-		return new EclipseLink2_0JpaPlatformUi(
-			new EclipseLinkNavigatorProvider(),
-			EclipseLink2_0JpaPlatformUiProvider.instance()
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/platform/EclipseLink2_0JpaPlatformUiProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/platform/EclipseLink2_0JpaPlatformUiProvider.java
deleted file mode 100644
index a0af4c0..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/platform/EclipseLink2_0JpaPlatformUiProvider.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_0.platform;
-
-import java.util.List;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.EclipseLinkEntityMappingsDetailsProvider;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.EclipseLinkOrmXmlUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.EclipseLinkPersistenceXmlUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm.EclipseLinkOrmXml1_1UiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.orm.EclipseLinkOrmXml1_2UiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java.EclipseLink2_0JavaResourceUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm.EclipseLinkEntityMappings2_0DetailsProvider;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm.EclipseLinkOrmXml2_0UiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.EclipseLinkPersistenceXml2_0UiDefinition;
-import org.eclipse.jpt.ui.JpaPlatformUiProvider;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.JpaDetailsProvider;
-import org.eclipse.jpt.ui.internal.AbstractJpaPlatformUiProvider;
-import org.eclipse.jpt.ui.internal.details.java.JavaPersistentAttributeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.java.JavaPersistentTypeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.EntityMappingsDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPersistentAttributeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPersistentTypeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmXmlUiDefinition;
-import org.eclipse.jpt.ui.internal.jpa2.details.orm.EntityMappings2_0DetailsProvider;
-import org.eclipse.jpt.ui.internal.jpa2.details.orm.OrmXml2_0UiDefinition;
-
-/**
- *  EclipseLink2_0JpaPlatformUiProvider
- */
-public class EclipseLink2_0JpaPlatformUiProvider extends AbstractJpaPlatformUiProvider
-{
-
-	// singleton
-	private static final JpaPlatformUiProvider INSTANCE = new EclipseLink2_0JpaPlatformUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static JpaPlatformUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private EclipseLink2_0JpaPlatformUiProvider() {
-		super();
-	}
-
-
-	// ********** details providers **********
-	
-	@Override
-	protected void addDetailsProvidersTo(List<JpaDetailsProvider> providers) {
-		providers.add(JavaPersistentTypeDetailsProvider.instance());
-		providers.add(JavaPersistentAttributeDetailsProvider.instance());
-		providers.add(EntityMappingsDetailsProvider.instance());
-		providers.add(OrmPersistentTypeDetailsProvider.instance());
-		providers.add(OrmPersistentAttributeDetailsProvider.instance());
-		providers.add(EntityMappings2_0DetailsProvider.instance());
-		providers.add(EclipseLinkEntityMappingsDetailsProvider.instance());
-		providers.add(EclipseLinkEntityMappings2_0DetailsProvider.instance());
-	}
-	
-	// ********** resource ui definitions **********
-	
-	@Override
-	protected void addResourceUiDefinitionsTo(List<ResourceUiDefinition> definitions) {
-		definitions.add(EclipseLink2_0JavaResourceUiDefinition.instance());
-		definitions.add(OrmXmlUiDefinition.instance());
-		definitions.add(OrmXml2_0UiDefinition.instance());
-		definitions.add(EclipseLinkOrmXmlUiDefinition.instance());
-		definitions.add(EclipseLinkOrmXml1_1UiDefinition.instance());
-		definitions.add(EclipseLinkOrmXml1_2UiDefinition.instance());
-		definitions.add(EclipseLinkOrmXml2_0UiDefinition.instance());
-		definitions.add(EclipseLinkPersistenceXmlUiDefinition.instance());
-		definitions.add(EclipseLinkPersistenceXml2_0UiDefinition.instance());
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/details/orm/EclipseLinkOrmXml2_1UiDefinition.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/details/orm/EclipseLinkOrmXml2_1UiDefinition.java
deleted file mode 100644
index 92fde5f..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/details/orm/EclipseLinkOrmXml2_1UiDefinition.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_1.details.orm;
-
-import java.util.List;
-import org.eclipse.jpt.core.JpaResourceType;
-import org.eclipse.jpt.core.context.AttributeMapping;
-import org.eclipse.jpt.core.context.TypeMapping;
-import org.eclipse.jpt.eclipselink.core.internal.JptEclipseLinkCorePlugin;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkBasicCollectionMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkBasicMapMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkTransformationMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.OrmEclipseLinkVariableOneToOneMappingUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.structure.EclipseLinkOrmResourceModelStructureProvider;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmAttributeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmTypeMappingUiDefinition;
-import org.eclipse.jpt.ui.details.orm.OrmXmlUiFactory;
-import org.eclipse.jpt.ui.internal.details.orm.AbstractOrmXmlResourceUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmBasicMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddableUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddedIdMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEmbeddedMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmEntityUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmIdMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmManyToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmManyToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappedSuperclassUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmOneToManyMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmOneToOneMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmTransientMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.details.orm.OrmVersionMappingUiDefinition;
-import org.eclipse.jpt.ui.internal.jpa2.details.orm.OrmElementCollectionMapping2_0UiDefinition;
-import org.eclipse.jpt.ui.structure.JpaStructureProvider;
-
-public class EclipseLinkOrmXml2_1UiDefinition extends AbstractOrmXmlResourceUiDefinition
-{
-	// singleton
-	private static final ResourceUiDefinition INSTANCE = new EclipseLinkOrmXml2_1UiDefinition();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static ResourceUiDefinition instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private EclipseLinkOrmXml2_1UiDefinition() {
-		super();
-	}
-	
-	
-	@Override
-	protected OrmXmlUiFactory buildOrmXmlUiFactory() {
-		return new EclipseLinkOrmXml2_1UiFactory();
-	}
-	
-	public boolean providesUi(JpaResourceType resourceType) {
-		return resourceType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_1_RESOURCE_TYPE);
-	}
-	
-	public JpaStructureProvider getStructureProvider() {
-		return EclipseLinkOrmResourceModelStructureProvider.instance();
-	}
-	
-	@Override
-	protected void addOrmAttributeMappingUiDefinitionsTo(List<OrmAttributeMappingUiDefinition<? extends AttributeMapping>> definitions) {
-		definitions.add(OrmIdMappingUiDefinition.instance());
-		definitions.add(OrmEmbeddedIdMappingUiDefinition.instance());
-		definitions.add(OrmBasicMappingUiDefinition.instance());
-		definitions.add(OrmVersionMappingUiDefinition.instance());
-		definitions.add(OrmManyToOneMappingUiDefinition.instance());
-		definitions.add(OrmOneToManyMappingUiDefinition.instance());
-		definitions.add(OrmOneToOneMappingUiDefinition.instance());
-		definitions.add(OrmManyToManyMappingUiDefinition.instance());
-		definitions.add(OrmEmbeddedMappingUiDefinition.instance());
-		definitions.add(OrmTransientMappingUiDefinition.instance());
-		
-		definitions.add(OrmEclipseLinkBasicCollectionMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkBasicMapMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkVariableOneToOneMappingUiDefinition.instance());
-		definitions.add(OrmEclipseLinkTransformationMappingUiDefinition.instance());
-		
-		definitions.add(OrmElementCollectionMapping2_0UiDefinition.instance());
-	}
-	
-	@Override
-	protected void addOrmTypeMappingUiDefinitionsTo(List<OrmTypeMappingUiDefinition<? extends TypeMapping>> definitions) {
-		definitions.add(OrmEntityUiDefinition.instance());
-		definitions.add(OrmMappedSuperclassUiDefinition.instance());
-		definitions.add(OrmEmbeddableUiDefinition.instance());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/details/orm/EclipseLinkOrmXml2_1UiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/details/orm/EclipseLinkOrmXml2_1UiFactory.java
deleted file mode 100644
index 19b1eac..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/details/orm/EclipseLinkOrmXml2_1UiFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_1.details.orm;
-
-import org.eclipse.jpt.core.jpa2.context.orm.OrmElementCollectionMapping2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm.EclipseLinkOrmXml2_0UiFactory;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.details.JpaComposite;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class EclipseLinkOrmXml2_1UiFactory 
-	extends EclipseLinkOrmXml2_0UiFactory
-{
-
-	
-	@Override
-	public JpaComposite createOrmElementCollectionMapping2_0Composite(
-			PropertyValueModel<OrmElementCollectionMapping2_0> subjectHolder,
-			Composite parent,
-			WidgetFactory widgetFactory) {
-		return new OrmEclipseLinkElementCollectionMapping2_1Composite(subjectHolder, parent, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/details/orm/OrmEclipseLinkElementCollectionMapping2_1Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/details/orm/OrmEclipseLinkElementCollectionMapping2_1Composite.java
deleted file mode 100644
index 4a4c63a..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/details/orm/OrmEclipseLinkElementCollectionMapping2_1Composite.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_1.details.orm;
-
-import org.eclipse.jpt.core.context.AccessHolder;
-import org.eclipse.jpt.core.jpa2.context.orm.OrmElementCollectionMapping2_0;
-import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
-import org.eclipse.jpt.eclipselink.core.v2_0.context.EclipseLinkElementCollectionMapping2_0;
-import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
-import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
-import org.eclipse.jpt.ui.internal.details.FetchTypeComposite;
-import org.eclipse.jpt.ui.internal.details.orm.OrmMappingNameChooser;
-import org.eclipse.jpt.ui.internal.jpa2.details.AbstractElementCollectionMapping2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.CollectionTable2_0Composite;
-import org.eclipse.jpt.ui.internal.jpa2.details.TargetClassComposite;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.swt.widgets.Composite;
-
-public class OrmEclipseLinkElementCollectionMapping2_1Composite extends AbstractElementCollectionMapping2_0Composite<OrmElementCollectionMapping2_0>
-{
-	/**
-	 * Creates a new <code>EclipseLink1_1OrmBasicMappingComposite</code>.
-	 *
-	 * @param subjectHolder The holder of the subject <code>BasicMapping</code>
-	 * @param parent The parent container
-	 * @param widgetFactory The factory used to create various common widgets
-	 */
-	public OrmEclipseLinkElementCollectionMapping2_1Composite(PropertyValueModel<? extends OrmElementCollectionMapping2_0> subjectHolder,
-	                               Composite parent,
-	                               WidgetFactory widgetFactory) {
-
-		super(subjectHolder, parent, widgetFactory);
-	}
-
-	@Override
-	protected void initializeElementCollectionSection(Composite container) {
-		new TargetClassComposite(this, container);
-		new OrmMappingNameChooser(this, getSubjectHolder(), container);
-		new AccessTypeComposite(this, buildAccessHolderHolder(), container);
-		new FetchTypeComposite(this, container);
-		new EclipseLinkJoinFetchComposite(this, buildJoinFetchHolder(), container);
-		new CollectionTable2_0Composite(this, buildCollectionTableHolder(), container);
-	}
-	
-	protected PropertyValueModel<AccessHolder> buildAccessHolderHolder() {
-		return new PropertyAspectAdapter<OrmElementCollectionMapping2_0, AccessHolder>(getSubjectHolder()) {
-			@Override
-			protected AccessHolder buildValue_() {
-				return this.subject.getPersistentAttribute();
-			}
-		};
-	}
-
-	protected PropertyValueModel<EclipseLinkJoinFetch> buildJoinFetchHolder() {
-		return new PropertyAspectAdapter<OrmElementCollectionMapping2_0, EclipseLinkJoinFetch>(getSubjectHolder()) {
-			@Override
-			protected EclipseLinkJoinFetch buildValue_() {
-				return ((EclipseLinkElementCollectionMapping2_0) this.subject).getJoinFetch();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/platform/EclipseLink2_1JpaPlatformUiFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/platform/EclipseLink2_1JpaPlatformUiFactory.java
deleted file mode 100644
index 6e3ebfc..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/platform/EclipseLink2_1JpaPlatformUiFactory.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2010  Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_1.platform;
-
-import org.eclipse.jpt.eclipselink.ui.internal.platform.EclipseLinkNavigatorProvider;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.platform.EclipseLink2_0JpaPlatformUi;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.platform.EclipseLink2_0JpaPlatformUiFactory;
-import org.eclipse.jpt.ui.JpaPlatformUi;
-
-public class EclipseLink2_1JpaPlatformUiFactory
-	extends EclipseLink2_0JpaPlatformUiFactory
-{
-	/**
-	 * Zero arg constructor for extension point
-	 */
-	public EclipseLink2_1JpaPlatformUiFactory() {
-		super();
-	}
-	@Override
-	public JpaPlatformUi buildJpaPlatformUi() {
-		return new EclipseLink2_0JpaPlatformUi(
-			new EclipseLinkNavigatorProvider(),
-			EclipseLink2_1JpaPlatformUiProvider.instance()
-		);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/platform/EclipseLink2_1JpaPlatformUiProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/platform/EclipseLink2_1JpaPlatformUiProvider.java
deleted file mode 100644
index 74646a0..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_1/platform/EclipseLink2_1JpaPlatformUiProvider.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2010 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.v2_1.platform;
-
-import java.util.List;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.EclipseLinkEntityMappingsDetailsProvider;
-import org.eclipse.jpt.eclipselink.ui.internal.details.orm.EclipseLinkOrmXmlUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.persistence.EclipseLinkPersistenceXmlUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_1.details.orm.EclipseLinkOrmXml1_1UiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v1_2.details.orm.EclipseLinkOrmXml1_2UiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java.EclipseLink2_0JavaResourceUiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm.EclipseLinkEntityMappings2_0DetailsProvider;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.orm.EclipseLinkOrmXml2_0UiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_0.persistence.EclipseLinkPersistenceXml2_0UiDefinition;
-import org.eclipse.jpt.eclipselink.ui.internal.v2_1.details.orm.EclipseLinkOrmXml2_1UiDefinition;
-import org.eclipse.jpt.ui.JpaPlatformUiProvider;
-import org.eclipse.jpt.ui.ResourceUiDefinition;
-import org.eclipse.jpt.ui.details.JpaDetailsProvider;
-import org.eclipse.jpt.ui.internal.AbstractJpaPlatformUiProvider;
-import org.eclipse.jpt.ui.internal.details.java.JavaPersistentAttributeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.java.JavaPersistentTypeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.EntityMappingsDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPersistentAttributeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmPersistentTypeDetailsProvider;
-import org.eclipse.jpt.ui.internal.details.orm.OrmXmlUiDefinition;
-import org.eclipse.jpt.ui.internal.jpa2.details.orm.EntityMappings2_0DetailsProvider;
-import org.eclipse.jpt.ui.internal.jpa2.details.orm.OrmXml2_0UiDefinition;
-
-/**
- *  EclipseLink2_1JpaPlatformUiProvider
- */
-public class EclipseLink2_1JpaPlatformUiProvider extends AbstractJpaPlatformUiProvider
-{
-
-	// singleton
-	private static final JpaPlatformUiProvider INSTANCE = new EclipseLink2_1JpaPlatformUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static JpaPlatformUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private EclipseLink2_1JpaPlatformUiProvider() {
-		super();
-	}
-
-
-	// ********** details providers **********
-	
-	@Override
-	protected void addDetailsProvidersTo(List<JpaDetailsProvider> providers) {
-		providers.add(JavaPersistentTypeDetailsProvider.instance());
-		providers.add(JavaPersistentAttributeDetailsProvider.instance());
-		providers.add(EntityMappingsDetailsProvider.instance());
-		providers.add(OrmPersistentTypeDetailsProvider.instance());
-		providers.add(OrmPersistentAttributeDetailsProvider.instance());
-		providers.add(EntityMappings2_0DetailsProvider.instance());
-		providers.add(EclipseLinkEntityMappingsDetailsProvider.instance());
-		providers.add(EclipseLinkEntityMappings2_0DetailsProvider.instance());
-	}
-	
-	// ********** resource ui definitions **********
-	
-	@Override
-	protected void addResourceUiDefinitionsTo(List<ResourceUiDefinition> definitions) {
-		definitions.add(EclipseLink2_0JavaResourceUiDefinition.instance());
-		definitions.add(OrmXmlUiDefinition.instance());
-		definitions.add(OrmXml2_0UiDefinition.instance());
-		definitions.add(EclipseLinkOrmXmlUiDefinition.instance());
-		definitions.add(EclipseLinkOrmXml1_1UiDefinition.instance());
-		definitions.add(EclipseLinkOrmXml1_2UiDefinition.instance());
-		definitions.add(EclipseLinkOrmXml2_0UiDefinition.instance());
-		definitions.add(EclipseLinkOrmXml2_1UiDefinition.instance());
-		definitions.add(EclipseLinkPersistenceXmlUiDefinition.instance());
-		definitions.add(EclipseLinkPersistenceXml2_0UiDefinition.instance());
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/wizards/EclipseLinkMappingFileWizard.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/wizards/EclipseLinkMappingFileWizard.java
deleted file mode 100644
index 7ffab89..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/wizards/EclipseLinkMappingFileWizard.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2008, 2009  Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.wizards;
-
-import org.eclipse.jpt.eclipselink.core.internal.operations.EclipseLinkOrmFileCreationDataModelProvider;
-import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.wizards.orm.MappingFileWizard;
-import org.eclipse.jpt.ui.internal.wizards.orm.MappingFileWizardPage;
-import org.eclipse.ui.INewWizard;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider;
-
-/**
- * This is referenced in the plugin.xml as an org.eclipse.ui.newWizards extension
- */
-public class EclipseLinkMappingFileWizard extends MappingFileWizard 
-	implements INewWizard 
-{
-	public EclipseLinkMappingFileWizard() {
-		this(null);
-	}
-	
-	public EclipseLinkMappingFileWizard(IDataModel dataModel) {
-		super(dataModel);
-		setWindowTitle(EclipseLinkUiMessages.MappingFileWizard_title);
-	}
-	
-	
-	@Override
-	protected MappingFileWizardPage buildMappingFileWizardPage() {
-		return new EclipseLinkMappingFileWizardPage(getDataModel(), "Page_1", EclipseLinkUiMessages.MappingFileWizardPage_title, EclipseLinkUiMessages.MappingFileWizardPage_desc);
-	}
-	
-	@Override
-	protected IDataModelProvider getDefaultProvider() {
-		return new EclipseLinkOrmFileCreationDataModelProvider();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/wizards/EclipseLinkMappingFileWizardPage.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/wizards/EclipseLinkMappingFileWizardPage.java
deleted file mode 100644
index 98bc512..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/wizards/EclipseLinkMappingFileWizardPage.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2008, 2009  Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.eclipselink.ui.internal.wizards;
-
-import org.eclipse.jpt.ui.internal.wizards.orm.MappingFileWizardPage;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-
-public class EclipseLinkMappingFileWizardPage extends MappingFileWizardPage
-{
-	public EclipseLinkMappingFileWizardPage(IDataModel dataModel, String pageName, String title, String desc) {
-		super(dataModel, pageName);
-		setTitle(title);
-		setDescription(desc);
-		setPageComplete(false);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/.classpath b/jpa/plugins/org.eclipse.jpt.gen/.classpath
deleted file mode 100644
index 8f25741..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="property_files"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/plugins/org.eclipse.jpt.gen/.cvsignore b/jpa/plugins/org.eclipse.jpt.gen/.cvsignore
deleted file mode 100644
index a196dd7..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-bin
-@dot
-temp.folder
-build.xml
-javaCompiler...args
-javaCompiler...args.*
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.gen/.project b/jpa/plugins/org.eclipse.jpt.gen/.project
deleted file mode 100644
index ef2d508..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.gen</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.core.resources.prefs b/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 1f15ff2..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue Jan 15 11:12:07 EST 2008
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.jdt.core.prefs b/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 3e1d50a..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun May 27 14:28:54 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jpa/plugins/org.eclipse.jpt.gen/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.gen/META-INF/MANIFEST.MF
deleted file mode 100644
index 998af2b..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,25 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.gen
-Bundle-Version: 1.3.100.qualifier
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.jpt.gen.internal;x-friends:="org.eclipse.jpt.ui",
- org.eclipse.jpt.gen.internal.util;x-friends:="org.eclipse.jpt.ui"
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jdt.core;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jpt.utility;bundle-version="[1.2.0,2.0.0)",
- org.eclipse.jpt.db;bundle-version="[1.2.0,2.0.0)",
- org.eclipse.jpt.core;bundle-version="[2.2.0,2.4.0)",
- org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jface.text;bundle-version="[3.4.0,4.0.0)",
- org.apache.commons.collections;bundle-version="3.2.0",
- org.apache.commons.lang;bundle-version="2.1.0",
- org.apache.oro;bundle-version="2.0.8",
- org.apache.velocity;bundle-version="1.5.0",
- org.jdom;bundle-version="1.0.0",
- org.eclipse.wst.common.emf;bundle-version="[1.2.0,2.0.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.5.0,3.0.0)"
-Import-Package: com.ibm.icu.text;version="4.0.1"
diff --git a/jpa/plugins/org.eclipse.jpt.gen/about.html b/jpa/plugins/org.eclipse.jpt.gen/about.html
deleted file mode 100644
index be534ba..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 02, 2008</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/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</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>
-
-</BODY>
-</HTML>
diff --git a/jpa/plugins/org.eclipse.jpt.gen/build.properties b/jpa/plugins/org.eclipse.jpt.gen/build.properties
deleted file mode 100644
index 4fe875d..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/build.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2009 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-source.. = src/,\
-               property_files/
-output.. = bin/
-bin.includes = .,\
-               META-INF/,\
-               about.html,\
-               plugin.properties,\
-               templates/
-jars.compile.order = .
diff --git a/jpa/plugins/org.eclipse.jpt.gen/component.xml b/jpa/plugins/org.eclipse.jpt.gen/component.xml
deleted file mode 100644
index 8803444..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/component.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2007, 2010 Oracle. 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:
-    Oracle - initial API and implementation
- -->
-
-<component  xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.jpt.gen"><description url=""></description><component-depends unrestricted="true"></component-depends><plugin id="org.eclipse.jpt.gen" fragment="false"/></component>
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.gen/plugin.properties b/jpa/plugins/org.eclipse.jpt.gen/plugin.properties
deleted file mode 100644
index 9537a25..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/plugin.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-################################################################################
-# Copyright (c) 2007, 2009 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-# ====================================================================
-# To code developer:
-#   Do NOT change the properties between this line and the
-#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
-#   Make a new property name, append to the end of the file and change
-#   the code to use the new property.
-# ====================================================================
-
-# ====================================================================
-# %%% END OF TRANSLATED PROPERTIES %%%
-# ====================================================================
-
-pluginName = Dali Java Persistence Tools - Entity Gen
-providerName = Eclipse Web Tools Platform
diff --git a/jpa/plugins/org.eclipse.jpt.gen/property_files/jpt_gen.properties b/jpa/plugins/org.eclipse.jpt.gen/property_files/jpt_gen.properties
deleted file mode 100644
index db907a2..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/property_files/jpt_gen.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-################################################################################
-# Copyright (c) 2008, 2009 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-
-PackageGenerator_taskName=Generate Entities
-GenScope_taskName=Build Database Model
-EntityGenerator_taskName=Generate Entity: {0}
-Error_Generating_Entities = Error Generating Entities
-
-Delete_Folder_Error = "The directory {0} could not be deleted."
-Delete_File_Error = "The file {0} could not be deleted."
-File_Read_Only_Error= "The file {0} could not be modified because write access is denied.\nPlease make sure that the file is not marked as readonly in the file system."
-
-Templates_notFound = Unable to find JPA entities generation templates in plugin
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/Association.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/Association.java
deleted file mode 100644
index 535a5a6..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/Association.java
+++ /dev/null
@@ -1,388 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import java.util.List;
-
-import org.eclipse.jpt.db.ForeignKey;
-import org.eclipse.jpt.gen.internal.util.StringUtil;
-
-/**
- * Represents an ORM association.
- * There are two types of associations:
- * <ul><li>simple association: An association between two database tables.
- * The <em>referrer</code> table is the one containing the foreign key
- * , the <em>referenced</code> table is the other party.<br>
- * 
- * <li>many to many association: An association between two tables joined by 
- * a <em>join table</em>.
- * In the example AUTHOR, BOOK, AUTHOR_BOOK, The referrer and referenced are 
- * AUTHOR and  BOOK, and the join table is AUTHOR_BOOK.
- * </ul>
- * 
- */
-public class Association implements java.io.Serializable
-{
-	private final static long serialVersionUID = 2;
-
-	public static final String MANY_TO_ONE = "many-to-one";
-	public static final String MANY_TO_MANY = "many-to-many";
-	public static final String ONE_TO_ONE = "one-to-one";
-	public static final String ONE_TO_MANY = "one-to-many";
-	
-	public static final String BI_DI = "bi-di";
-	public static final String NORMAL_DI = "normal-di"; //referrer->referenced
-	public static final String OPPOSITE_DI = "opposite-di"; //referenced->referrer
-	
-	private transient ORMGenCustomizer mCustomizer;
-	private String mReferrerTableName;
-	private String mReferencedTableName;
-	private String mJoinTableName;
-
-	private List<String> mReferrerColNames; /*String objects*/
-	private List<String> mReferencedColNames; /*String objects*/
-	private List<String> mReferrerJoinColNames; /*String objects*/
-	private List<String> mReferencedJoinColNames; /*String objects*/
-
-	private transient List<ORMGenColumn> mReferrerCols; /*ORMGenColumn objects*/
-	private transient List<ORMGenColumn> mReferencedCols; /*ORMGenColumn objects*/
-	private transient List<ORMGenColumn> mReferrerJoinCols; /*ORMGenColumn objects*/
-	private transient List<ORMGenColumn> mReferencedJoinCols; /*ORMGenColumn objects*/
-	
-	private String mCardinality;
-	private String mDirectionality;
-	private byte mFlags = GENERATED;
-	
-	private AssociationRole mReferrerRole;
-	private AssociationRole mReferencedRole;
-
-	private transient ForeignKey mForeignKey;	
-	
-	/*constants for mFlags*/
-	/*whether the association should be generated*/
-	private static final byte GENERATED = 1 << 0;
-	/*whether the association is custom (i.e is not auto computed from foreign keys relationships).*/
-	private static final byte CUSTOM = 1 << 1;
-	
-	/**
-	 * The simple association constructor.
-	 * The 2 tables are joined when the values of each column in
-	 * referrerColNames match its corresponding column in referencedColNames.
-	 * 
-	 * @param referrerTableName The "foreign key" table.
-	 * @param referrerColNames The column names in the referrer table.
-	 * @param referencedTableName The "primary key" table.
-	 * @param referencedColNames The column names in the referenced table.
-	 */
-	public Association(ORMGenCustomizer customizer, String referrerTableName, List<String> referrerColNames
-			, String referencedTableName, List<String> referencedColNames)  {
-		super();
-		
-		mCustomizer = customizer;
-		mReferrerTableName = referrerTableName;
-		mReferencedTableName = referencedTableName;
-		mReferrerColNames = referrerColNames;
-		mReferencedColNames = referencedColNames;
-		
-		mCardinality = MANY_TO_ONE;
-		mDirectionality = BI_DI;
-		
-		setCustom(true);
-	}
-	/**
-	 * The many to many constructor.
-	 * The 2 tables are joined when the values of each column in
-	 * referrerColNames match its corresponding column in referrerJoinColNames
-	 * , and each column in referencedColNames match its corresponding column in referencedJoinColNames.
-	 *
-	 */
-	public Association(ORMGenCustomizer customizer, String referrerTableName, List<String> referrerColNames
-			, String referencedTableName, List<String> referencedColNames
-			, String joinTableName, List<String> referrerJoinColNames, List<String> referencedJoinColNames) {
-		super();
-		
-		mCustomizer = customizer;
-		mReferrerTableName = referrerTableName;
-		mReferencedTableName = referencedTableName;
-		mReferrerColNames = referrerColNames;
-		mReferencedColNames = referencedColNames;
-		mJoinTableName = joinTableName;
-		mReferrerJoinColNames = referrerJoinColNames;
-		mReferencedJoinColNames = referencedJoinColNames;
-		
-		mCardinality = MANY_TO_MANY;	
-		mDirectionality = BI_DI;
-		
-		setCustom(true);
-	}
-	/**
-	 * Empty constructor needed by the deserialization (should not be used otherwise).
-	 */
-	public Association() {
-	}
-	/**
-	 * Computes the cardinality basedon the forign key definitions.
-	 */
-	public void computeCardinality()  {
-		/*by default the association is many-to-one unless the foreign key 
-		 * is also the primary key, in which case it is a one-to-one.*/
-		mCardinality = MANY_TO_ONE;
-		
-		List<ORMGenColumn> referrerCols = getReferrerColumns();
-		List<ORMGenColumn> pkCols = getReferrerTable().getPrimaryKeyColumns();
-		if (pkCols.size() == referrerCols.size()) {
-			boolean isFkPk = true;
-			for (int i = 0, n = pkCols.size(); i < n; ++i) {
-				if (!((ORMGenColumn)pkCols.get(i)).getName().equals(((ORMGenColumn)referrerCols.get(i)).getName())) {
-					isFkPk = false;
-					break;
-				}
-			}
-			if (isFkPk) {
-				mCardinality = ONE_TO_ONE;
-			}
-		}
-		
-		setCustom(false);
-	}
-	/**
-	 * Called after the asscociations are deserialized to attach 
-	 * the customizer object.
-	 */
-	protected void restore(ORMGenCustomizer customizer) {
-		mCustomizer = customizer;
-		
-		if (mReferrerRole != null) {
-			mReferrerRole.restore(this);
-		}
-		if (mReferencedRole != null) {
-			mReferencedRole.restore(this);
-		}
-	}
-	public ORMGenTable getReferrerTable()  {
-		return mCustomizer.getTable(mReferrerTableName);
-	}
-	public String getReferrerTableName() {
-		return mReferrerTableName;
-	}
-	public ORMGenTable getReferencedTable()  {
-		return mCustomizer.getTable(mReferencedTableName);
-	}
-	public String getReferencedTableName() {
-		return mReferencedTableName;
-	}
-	public ORMGenTable getJoinTable()  {
-		return mCustomizer.getTable(mJoinTableName);
-	}
-	public String getJoinTableName() {
-		return mJoinTableName;
-	}
-	/**
-	 * Returns the <code>ORMGenColumn</code> objects for the referrer
-	 * columns.
-	 */
-	public List<ORMGenColumn> getReferrerColumns() {
-		if (mReferrerCols == null) {
-			ORMGenTable referrerTable = getReferrerTable();
-			mReferrerCols = referrerTable.getColumnsByNames(mReferrerColNames);
-		}
-		return mReferrerCols;
-	}
-	public List<String> getReferrerColumnNames() {
-		return mReferrerColNames;
-	}
-	/**
-	 * Returns the <code>ORMGenColumn</code> objects for the referenced
-	 * columns.
-	 */
-	public List<ORMGenColumn> getReferencedColumns() {
-		if (mReferencedCols == null) {
-			mReferencedCols = getReferencedTable().getColumnsByNames(mReferencedColNames);
-		}
-		return mReferencedCols;
-	}
-	public List<String> getReferencedColumnNames() {
-		return mReferencedColNames;
-	}
-	public List<ORMGenColumn> getReferrerJoinColumns() {
-		if (mReferrerJoinCols == null) {
-			mReferrerJoinCols = getJoinTable().getColumnsByNames(mReferrerJoinColNames);
-		}
-		return mReferrerJoinCols;
-	}
-	public List<String> getReferrerJoinColumnNames() {
-		return mReferrerJoinColNames;
-	}
-	public List<ORMGenColumn> getReferencedJoinColumns()  {
-		if (mReferencedJoinCols == null) {
-			mReferencedJoinCols = getJoinTable().getColumnsByNames(mReferencedJoinColNames);
-		}
-		return mReferencedJoinCols;
-	}
-	public List<String> getReferencedJoinColumnNames() {
-		return mReferencedJoinColNames;
-	}
-	/**
-	 * Returns the association cardinality, one of {@link #MANY_TO_ONE}|{@link #MANY_TO_MANY}
-	 * |{@link #ONE_TO_ONE}|{@link #ONE_TO_MANY}
-	 */
-	public String getCardinality() {
-		return mCardinality;
-	}
-	public void setCardinality(String cardinality) {
-		assert(cardinality.equals(MANY_TO_ONE) || cardinality.equals(MANY_TO_MANY) || cardinality.equals(ONE_TO_ONE) || cardinality.equals(ONE_TO_MANY));
-		mCardinality = cardinality;
-	}
-	/**
-	 * Returns the association directionality, one of {@link #BI_DI}|{@link #NORMAL_DI}
-	 * |{@link #OPPOSITE_DI}
-	 */
-	public String getDirectionality() {
-		return mDirectionality;
-	}
-	public void setDirectionality(String dir) {
-		assert(dir.equals(BI_DI) || dir.equals(NORMAL_DI) || dir.equals(OPPOSITE_DI));
-		if (!dir.equals(mDirectionality)) {
-			mDirectionality = dir;
-			
-			if (dir.equals(NORMAL_DI)) {
-				mReferencedRole = null;
-			} else if (dir.equals(OPPOSITE_DI)) {
-				mReferrerRole = null;
-			}
-		}
-	}
-	
-	/**
-	 * Tests whether this association is bidirectional.
-	 * This is a shortcut for <code>getDirectionality().equals(BI_DI)</code>.
-	 */
-	public boolean isBidirectional() {
-		return mDirectionality.equals(BI_DI);
-	}
-	/**
-	 * Returns true of this association should be generated. 
-	 */
-	public boolean isGenerated() {
-		return (mFlags & GENERATED) != 0;
-	}
-	public void setGenerated(boolean generated) {
-		if (generated != isGenerated()) {
-			if (generated) {
-				mFlags |= GENERATED;
-			} else {
-				mFlags &= ~GENERATED;
-			}
-			mReferrerRole = mReferencedRole = null;
-		}
-	}
-	/**
-	 * Returns true of this association is custom (i.e is not auto computed from foreign keys relationships). 
-	 */
-	public boolean isCustom() {
-		return (mFlags & CUSTOM) != 0;
-	}
-	public void setCustom(boolean custom) {
-		if (custom) {
-			mFlags |= CUSTOM;
-		} else {
-			mFlags &= ~CUSTOM;
-		}
-	}
-	/**
-	 * Returns the association role for the referrer side, or null 
-	 * if none (i.e if the directionality does not include it).
-	 */
-	public AssociationRole getReferrerRole() {
-		if (mReferrerRole == null && isGenerated()) {
-			if (!getDirectionality().equals(OPPOSITE_DI)) { //BI_DI or NORMAL_DI
-				mReferrerRole = new AssociationRole(this, true/*isReferrerEnd*/);
-			}
-		}
-		return mReferrerRole;
-	}
-	/**
-	 * Returns the association role for the referenced side, or null 
-	 * if none (i.e if the directionality does not include it).
-	 */
-	public AssociationRole getReferencedRole() {
-		if (mReferencedRole == null && isGenerated()) {
-			if (!getDirectionality().equals(Association.NORMAL_DI)) { //BI_DI or OPPOSITE_DI
-				mReferencedRole = new AssociationRole(this, false/*isReferrerEnd*/);
-			}
-		}
-		return mReferencedRole;
-	}
-	/**
-	 * Tests whether this association is valid (valid table and column names).
-	 */
-	protected boolean isValid(){
-		if (!isValidTableAndColumns(mReferrerTableName, mReferrerColNames)
-				|| !isValidTableAndColumns(mReferencedTableName, mReferencedColNames)) {
-			return false;
-		}
-		if (mJoinTableName != null) {
-			if (!isValidTableAndColumns(mJoinTableName, mReferrerJoinColNames)
-					|| !isValidTableAndColumns(mJoinTableName, mReferencedJoinColNames)) {
-				return false;
-			}			
-		}
-		return true;
-	}
-	private boolean isValidTableAndColumns(String tableName, List<String> columnNames) {
-		ORMGenTable table = mCustomizer.getTable(tableName);
-		if (table == null) {
-			return false;
-		}
-		for (int i = 0, n = columnNames.size(); i < n; ++i) {
-			String colName = (String)columnNames.get(i);
-			if (table.getColumnByName(colName) == null) {
-				return false;
-			}
-		}
-		return true;
-	}
-	
-	public void setForeignKey(ForeignKey foreignKey) {
-		this.mForeignKey = foreignKey;
-		
-	}
-	public ForeignKey getForeignKey(){
-		return this.mForeignKey;
-	};	
-	public boolean equals(Object obj) {
-		if( this == obj )
-			return true;
-		if( obj instanceof Association ){
-			Association association2 = (Association)obj;
-			if (!this.getReferrerTableName().equals(association2.getReferrerTableName())
-					|| !this.getReferencedTableName().equals(association2.getReferencedTableName())
-					|| !StringUtil.equalObjects(this.getJoinTableName(), association2.getJoinTableName())
-					|| !this.getReferrerColumnNames().equals(association2.getReferrerColumnNames())
-					|| !this.getReferencedColumnNames().equals(association2.getReferencedColumnNames())
-					) {
-				return false;
-			}					
-			/*the 2 association have the same referrer, referenced and join table*/
-			//If MTO or OTM association
-			if (this.getJoinTableName() == null) {
-				return true;
-			}
-			if (this.getReferrerJoinColumnNames().equals(association2.getReferrerJoinColumnNames())
-					&& this.getReferencedJoinColumnNames().equals(association2.getReferencedJoinColumnNames())) {
-				return true;
-			}
-		}
-		return false;
-	}	
-	public String toString(){
-		return mReferrerTableName + " " + mCardinality + " " + mReferencedTableName ;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/AssociationRole.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/AssociationRole.java
deleted file mode 100644
index f6654fb..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/AssociationRole.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Represents an association role (the referrer or referenced role).
- * 
- */
-public class AssociationRole implements java.io.Serializable
-{
-	private transient Association mAssociation; //transient: see restore
-	private boolean mIsReferrerRole;
-	private String mPropertyName;
-	private String mCascade;
-	
-	private final static long serialVersionUID = 1;
-		
-	AssociationRole(Association association, boolean isReferrerRole) {
-		super();
-		
-		mAssociation = association;
-		mIsReferrerRole = isReferrerRole;
-	}
-	
-	/**
-	 * Empty constructor needed by the deserialization (should not be used otherwise).
-	 */
-	public AssociationRole() {
-	}
-	
-	/**
-	 * Called after the asscociations are deserialized to attach 
-	 * the customizer object.
-	 */
-	protected void restore(Association association) {
-		mAssociation = association;
-	}
-	
-	public Association getAssociation() {
-		return mAssociation;
-	}
-	
-	public boolean isReferrerRole() {
-		return mIsReferrerRole;
-	}
-	
-	/**
-	 * Returns the opposite role or null if the association 
-	 * is not bi directional.
-	 */
-	public AssociationRole getOppositeRole() {
-		Association association = getAssociation();
-		if (!association.getDirectionality().equals(Association.BI_DI)) {
-			return null;
-		}
-		if (isReferrerRole()) {
-			return association.getReferencedRole();
-		} else {
-			return association.getReferrerRole();
-		}
-	}
-	
-	/**
-	 * Returns the association cardinality, one of {@link #MANY_TO_ONE}|{@link #MANY_TO_MANY}
-	 * |{@link #ONE_TO_ONE}|{@link #ONE_TO_MANY}
-	 */
-	public String getCardinality() {
-		String type = mAssociation.getCardinality();
-		if (!mIsReferrerRole) {
-			if (type.equals(Association.ONE_TO_MANY)) {
-				type = Association.MANY_TO_ONE;
-			} else if (type.equals(Association.MANY_TO_ONE)) {
-				type = Association.ONE_TO_MANY;
-			}
-		}
-		return type;
-	}
-	
-	public ORMGenTable getReferrerTable() {
-		if (mIsReferrerRole) {
-			return mAssociation.getReferrerTable();
-		} else {
-			return mAssociation.getReferencedTable();
-		}
-	}
-	
-	public List<ORMGenColumn> getReferrerColumns(){
-		if (mIsReferrerRole) {
-			return mAssociation.getReferrerColumns();
-		} else {
-			return mAssociation.getReferencedColumns();
-		}
-	}
-	
-	/**
-	 * Returns the referenced column corresponding to a referrer column.
-	 */
-	public ORMGenColumn getReferencedColumn(String referrerColumn)  {
-		boolean hasJoinTable = mAssociation.getJoinTable() != null;
-		List<ORMGenColumn> referrerColumns = getReferrerColumns();
-		for (int i = 0, n = referrerColumns.size(); i < n; ++i) {
-			ORMGenColumn column = referrerColumns.get(i);
-			if (column.getName().equals(referrerColumn)) {
-				if (hasJoinTable) {
-					return getReferrerJoinColumns().get(i);
-				} else {
-					return getReferencedColumns().get(i);
-				}
-			}
-		}
-		assert(false);
-		return null;
-	}
-	
-	/**
-	 * Returns the referrer column corresponding to a referenced column.
-	 */
-	public ORMGenColumn getReferrerColumn(String referencedColumn)  {
-		boolean hasJoinTable = mAssociation.getJoinTable() != null;
-		List<ORMGenColumn> referencedColumns = getReferencedColumns();
-		for (int i = 0, n = referencedColumns.size(); i < n; ++i) {
-			ORMGenColumn column = referencedColumns.get(i);
-			if (column.getName().equals(referencedColumn)) {
-				if (hasJoinTable) {
-					return getReferencedJoinColumns().get(i);
-				} else {
-					return getReferrerColumns().get(i);
-				}
-			}
-		}
-		assert(false);
-		return null;
-	}
-	
-	public ORMGenTable getReferencedTable()  {
-		if (mIsReferrerRole) {
-			return mAssociation.getReferencedTable();
-		} else {
-			return mAssociation.getReferrerTable();
-		}
-	}
-	
-	public List<ORMGenColumn> getReferencedColumns()  {
-		if (mIsReferrerRole) {
-			return mAssociation.getReferencedColumns();
-		} else {
-			return mAssociation.getReferrerColumns();
-		}
-	}
-	
-	public List<ORMGenColumn> getReferrerJoinColumns()  {
-		if (mIsReferrerRole) {
-			return mAssociation.getReferrerJoinColumns();
-		} else {
-			return mAssociation.getReferencedJoinColumns();
-		}
-	}
-	public List<ORMGenColumn> getReferencedJoinColumns()  {
-		if (mIsReferrerRole) {
-			return mAssociation.getReferencedJoinColumns();
-		} else {
-			return mAssociation.getReferrerJoinColumns();
-		}
-	}
-	
-	/**
-	 * Returns the name that should be used by the generator for 
-	 * the property corresponding to this role.
-	 */
-	public String getPropertyName()   {
-		if (mPropertyName != null) { //if the user explicitly set it then don't be too smart
-			return mPropertyName;
-		}
-		return getDefaultPropertyName();
-	}
-		
-	private String getDefaultPropertyName() {
-		String propName = "";
-		ORMGenTable referrerTable = getReferrerTable();
-		ORMGenTable referencedTable = getReferencedTable();
-
-		boolean isSingular = isSingular();
-		propName = referencedTable.getVarName(isSingular);
-		
-		List<AssociationRole> clashingRoles = new java.util.ArrayList<AssociationRole>(); //roles with our same referrer and referenced tables (i.e would yield the same property name in the same bean)
-		/*make sure there is no role with the same name.*/
-		for (Iterator<AssociationRole> iter = referrerTable.getAssociationRoles().iterator(); iter.hasNext(); ) {
-			AssociationRole role = iter.next();
-			if (role.getReferrerTable().getName().equals(referrerTable.getName())
-					&& role.getReferencedTable().getName().equals(referencedTable.getName())
-					&& role.isSingular() == isSingular) {
-				clashingRoles.add(role);
-			}
-		}
-		if (clashingRoles.size() > 1) {
-			int index = clashingRoles.indexOf(this);
-			assert(index >= 0);
-			propName += index+1;
-		}
-		
-		/*make sure there is no column with the same name.*/
-		for (Iterator<ORMGenColumn> iter = referrerTable.getColumns().iterator(); iter.hasNext(); ) {
-			ORMGenColumn column = iter.next();
-			if (column.getPropertyName().equals(propName)) {
-				String prefix = isSingular ? "Bean" : "Set";
-				propName += prefix;
-				break;
-			}
-		}
-		
-		return propName;
-	}
-	
-	private boolean isSingular() {
-		String cardinality = getCardinality();
-		return cardinality.equals(Association.ONE_TO_ONE) || cardinality.equals(Association.MANY_TO_ONE);
-	}
-	
-	/**
-	 * Changes the name that should be used by the generator for 
-	 * the property corresponding to this role.
-	 * If the argument name is null or empty string then the 
-	 * default computed name is used.
-	 */
-	public void setPropertyName(String name)  {
-		if (name != null && name.length() == 0) {
-			name = null;
-		}
-		if (name != null && name.equals(getDefaultPropertyName())) {
-			name = null;
-		}
-		mPropertyName = name;
-	}
-	
-	/**
-	 * Returns the cascade value for this role, or null if none.
-	 */
-	public String getCascade() {
-		return mCascade;
-	}
-	
-	public void setCascade(String cascade) {
-		if (cascade != null && cascade.length() == 0) {
-			cascade = null;
-		}
-		mCascade = cascade;
-	}
-	
-	/**
-	 * Returns a descriptive string used in a comment in the generated 
-	 * file (from the Velocity template).
-	 */
-	public String getDescription()  {
-		//<!-- $directionality $cardinality association to $referencedClassName -->
-		String directionality;
-		if (getAssociation().getDirectionality().equals(Association.BI_DI)) {
-			directionality = "bi-directional";
-		} else {
-			directionality = "uni-directional";
-		}
-		return directionality + " " + getAssociation().getCardinality() + " association to " + getReferencedTable().getClassName();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/BaseEntityGenCustomizer.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/BaseEntityGenCustomizer.java
deleted file mode 100644
index a1931ec..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/BaseEntityGenCustomizer.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import java.io.File;
-import java.util.List;
-import java.util.Set;
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.Schema;
-import org.eclipse.jpt.gen.internal.util.DTPUtil;
-import org.eclipse.jpt.gen.internal.util.StringUtil;
-
-/**
- * Default implementation of ORMGenCustomizer according to JPA specification for
- * entity generation.
- * 
- * This is used to retrieve/change the properties from the wizard and is also
- * passed as a context object to Velocity.
- */
-public class BaseEntityGenCustomizer extends ORMGenCustomizer
-	implements java.io.Serializable
-{
-	private final static long serialVersionUID = 1;
-
-	/* mapping kinds */
-	private static final String BASIC_MAPPING_KIND = "basic"; //$NON-NLS-1$
-	private static final String ID_MAPPING_KIND = "id"; //$NON-NLS-1$
-	private static final String VERSION_MAPPING_KIND = "version"; //$NON-NLS-1$
-
-	/*
-	 * the strings for generator names. These appear in a combo box and used by
-	 * the Velocity template processing.
-	 */
-	private static final String AUTO_GENERATOR = "auto"; //$NON-NLS-1$
-	private static final String NONE_GENERATOR = "none"; //$NON-NLS-1$
-	private static final String IDENTITY_GENERATOR = "identity"; //$NON-NLS-1$
-	private static final String SEQUENCE_GENERATOR = "sequence"; //$NON-NLS-1$
-	private static final String TABLE_GENERATOR = "table"; //$NON-NLS-1$
-
-	public BaseEntityGenCustomizer() {
-		super();
-	}
-
-	@Override
-	public void init(File file, Schema schema) {
-		super.init(file, schema);
-	}
-
-	// -----------------------------------------
-	// ------ ORMGenCustomizer methods
-	// -----------------------------------------
-	@Override
-	public List<String> getAllIdGenerators() {
-		List<String> result = new java.util.ArrayList<String>(5);
-		/* add in the order in which they would appear in the combo */
-		result.add(AUTO_GENERATOR);
-		result.add(IDENTITY_GENERATOR);
-		result.add(SEQUENCE_GENERATOR);
-		result.add(TABLE_GENERATOR);
-		result.add(NONE_GENERATOR);
-		return result;
-	}
-
-	@Override
-	public String getNoIdGenerator() {
-		return NONE_GENERATOR;
-	}
-
-	@Override
-	public String getIdentityIdGenerator() {
-		return IDENTITY_GENERATOR;
-	}
-
-	@Override
-	public Set<String> getSequenceIdGenerators() {
-		Set<String> result = new java.util.HashSet<String>(3);
-		result.add(SEQUENCE_GENERATOR);
-		return result;
-	}
-
-	@Override
-	public String getPropertyTypeFromColumn(Column column) {
-		return DTPUtil.getJavaType(column);
-	}
-
-	@Override
-	@SuppressWarnings("nls")
-	public String[] getAllPropertyTypes() {
-		/*
-		 * Java primitive types, wrapper of the primitive types ,
-		 * java.lang.String, java.math.BigInteger, java.math.BigDecimal,
-		 * java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time,
-		 * java.sql.Timestamp, byte[], Byte[], char[], Character[], enums, and
-		 * any other type that implements Serializable.
-		 */
-		// return in the order that will be used in the combo
-		return new String[] {
-			"boolean",
-			"Boolean",
-			"byte",
-			"Byte",
-			"byte[]",
-			"char",
-			"char[]",
-			"Character",
-			"Character[]",
-			"double",
-			"Double",
-			"float",
-			"Float",
-			"int",
-			"Integer",
-			"long",
-			"Long",
-			"Object",
-			"short",
-			"Short",
-			"String",
-			java.math.BigDecimal.class.getName(),
-			java.math.BigInteger.class.getName(),
-			java.util.Calendar.class.getName(),
-			java.util.Date.class.getName(),
-			java.sql.Date.class.getName(),
-			java.sql.Time.class.getName(),
-			java.sql.Timestamp.class.getName()
-		};
-	}
-
-	@Override
-	public String[] getAllMappingKinds() {
-		return new String[] {
-			BASIC_MAPPING_KIND, ID_MAPPING_KIND, VERSION_MAPPING_KIND
-		};
-	}
-
-	/*
-	 * (non-Javadoc)
-	 */
-	@Override
-	public String getBasicMappingKind() {
-		return BASIC_MAPPING_KIND;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 */
-	@Override
-	public String getIdMappingKind() {
-		return ID_MAPPING_KIND;
-	}
-
-	@Override
-	public boolean editCascade(AssociationRole role) {
-		return false;
-	}
-
-	@Override
-	protected boolean manySideIsAssociationOwner() {
-		return true;
-	}
-
-	// -----------------------------------------
-	// ---- Velocity templates methods
-	// -----------------------------------------
-	/**
-	 * Returns the cascades annotation member value, or empty string if none.
-	 * Empty string is returned instead of null because Velocity does not like
-	 * null when used in #set.
-	 */
-	public String genCascades(AssociationRole role) {
-		List<String> cascades = StringUtil.strToList(role.getCascade(), ',', true/* trim */);
-		if (cascades == null) {
-			return ""; //$NON-NLS-1$
-		}
-		StringBuffer buffer = new StringBuffer();
-		buffer.append( '{' );
-		for (int i = 0, n = cascades.size(); i < n; ++i) {
-			String cascade = cascades.get(i);
-			String enumStr;
-			if (cascade.equals(TagNames.ALL_CASCADE)) {
-				enumStr = "CascadeType.ALL"; //$NON-NLS-1$
-			}
-			else if (cascade.equals(TagNames.PERSIST_CASCADE)) {
-				enumStr = "CascadeType.PERSIST"; //$NON-NLS-1$
-			}
-			else if (cascade.equals(TagNames.MERGE_CASCADE)) {
-				enumStr = "CascadeType.MERGE"; //$NON-NLS-1$
-			}
-			else if (cascade.equals(TagNames.REMOVE_CASCADE)) {
-				enumStr = "CascadeType.REMOVE"; //$NON-NLS-1$
-			}
-			else {
-				assert (cascade.equals(TagNames.REFRESH_CASCADE));
-				enumStr = "CascadeType.REFRESH"; //$NON-NLS-1$
-			}
-			if (i != 0) {
-				buffer.append(", "); //$NON-NLS-1$
-			}
-			buffer.append(enumStr);
-		}
-		buffer.append('}');
-		return buffer.toString();
-	}
-
-	/**
-	 * Returns the fetch type annotation member value, or empty string if none.
-	 * Empty string is returned instead of null because Velocity does not like
-	 * null when used in #set.
-	 */
-	@Override
-	public String genFetch(ORMGenTable table) {
-		String fetch = table.getDefaultFetch();
-		if (fetch == null || ORMGenTable.DEFAULT_FETCH.equals(fetch)) {
-			return ""; //$NON-NLS-1$
-		}
-		else if (fetch.equals(ORMGenTable.LAZY_FETCH)) {
-			return "FetchType.LAZY"; //$NON-NLS-1$
-		}
-		else {
-			return "FetchType.EAGER"; //$NON-NLS-1$
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/DatabaseAnnotationNameBuilder.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/DatabaseAnnotationNameBuilder.java
deleted file mode 100644
index 2794256..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/DatabaseAnnotationNameBuilder.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.ForeignKey;
-import org.eclipse.jpt.db.Table;
-
-
-/**
- * Provide a pluggable way to determine whether and how the entity generator
- * prints the names of various database objects.
- */
-public interface DatabaseAnnotationNameBuilder {
-
-	/**
-	 * Given the name of an entity and the table to which it is mapped,
-	 * build and return a string to be used as the value for the entity's
-	 * Table annotation's 'name' element. Return null if the entity
-	 * maps to the table by default.
-	 */
-	String buildTableAnnotationName(String entityName, Table table);
-
-	/**
-	 * Given the name of an attribute (field or property) and the column
-	 * to which it is mapped,
-	 * build and return a string to be used as the value for the attribute's
-	 * Column annotation's 'name' element. Return null if the attribute
-	 * maps to the column by default.
-	 */
-	String buildColumnAnnotationName(String attributeName, Column column);
-
-	/**
-	 * Given the name of an attribute (field or property) and the
-	 * many-to-one or many-to-many foreign key to which it is mapped,
-	 * build and return a string to be used as the value for the attribute's
-	 * JoinColumn annotation's 'name' element. Return null if the attribute
-	 * maps to the join column by default.
-	 * The specified foreign key consists of a single column pair whose
-	 * referenced column is the single-column primary key of the foreign
-	 * key's referenced table.
-	 */
-	String buildJoinColumnAnnotationName(String attributeName, ForeignKey foreignKey);
-
-	/**
-	 * Build and return a string to be used as the value for a JoinColumn
-	 * annotation's 'name' or 'referencedColumnName' element.
-	 * This is called for many-to-one and many-to-many mappings when
-	 * the default join column name and/or referenced column name are/is
-	 * not applicable.
-	 * @see buildJoinColumnAnnotationName(String, ForeignKey)
-	 */
-	String buildJoinColumnAnnotationName(Column column);
-
-	/**
-	 * Build and return a string to be used as the value for a JoinTable
-	 * annotation's 'name' element.
-	 * This is called for many-to-many mappings when the default
-	 * join table name is not applicable.
-	 */
-	String buildJoinTableAnnotationName(Table table);
-
-
-	/**
-	 * The default implementation simple returns the database object's name,
-	 * unaltered.
-	 */
-	final class Default implements DatabaseAnnotationNameBuilder {
-		public static final DatabaseAnnotationNameBuilder INSTANCE = new Default();
-		public static DatabaseAnnotationNameBuilder instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Default() {
-			super();
-		}
-		public String buildTableAnnotationName(String entityName, Table table) {
-			return table.getName();
-		}
-		public String buildColumnAnnotationName(String attributeName, Column column) {
-			return column.getName();
-		}
-		public String buildJoinColumnAnnotationName(String attributeName, ForeignKey foreignKey) {
-			return foreignKey.getColumnPair().getBaseColumn().getName();
-		}
-		public String buildJoinColumnAnnotationName(Column column) {
-			return column.getName();
-		}
-		public String buildJoinTableAnnotationName(Table table) {
-			return table.getName();
-		}
-		@Override
-		public String toString() {
-			return "DatabaseAnnotationNameBuilder.Default";  //$NON-NLS-1$
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/JptGenMessages.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/JptGenMessages.java
deleted file mode 100644
index d505f8d..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/JptGenMessages.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Localized messages used by Dali entity generation.
- */
-public class JptGenMessages {
-
-	public static String PackageGenerator_taskName;
-	public static String GenScope_taskName;
-	public static String EntityGenerator_taskName;
-	public static String Templates_notFound;
-	public static String Error_Generating_Entities;
-	public static String Delete_Folder_Error;
-	public static String Delete_File_Error;
-	public static String File_Read_Only_Error;
-
-	private static final String BUNDLE_NAME = "jpt_gen"; //$NON-NLS-1$
-	private static final Class<?> BUNDLE_CLASS = JptGenMessages.class;
-	static {
-		NLS.initializeMessages(BUNDLE_NAME, BUNDLE_CLASS);
-	}
-	
-	private JptGenMessages() {
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/JptGenPlugin.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/JptGenPlugin.java
deleted file mode 100644
index 3540c20..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/JptGenPlugin.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.ILog;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.osgi.framework.Bundle;
-
-public class JptGenPlugin {
-	public static final String PLUGIN_ID = "org.eclipse.jpt.gen";
-	public static void logException ( String msg, Throwable e ) {
-		Bundle bundle = Platform.getBundle(PLUGIN_ID);
-		ILog log = Platform.getLog(bundle);
-		log.log(new Status(IStatus.ERROR, PLUGIN_ID, msg, e ));		
-	}
-	
-	public static void logException( CoreException ce ) {
-		IStatus status = ce.getStatus();
-		Bundle bundle = Platform.getBundle(PLUGIN_ID);
-		ILog log = Platform.getLog(bundle);
-		log.log(new Status(IStatus.ERROR, PLUGIN_ID, status.getMessage(), ce));		
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenColumn.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenColumn.java
deleted file mode 100644
index 336c9eb..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenColumn.java
+++ /dev/null
@@ -1,415 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import java.util.Collections;
-import java.util.Iterator;
-
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.ForeignKey;
-import org.eclipse.jpt.db.Table;
-import org.eclipse.jpt.gen.internal.util.EntityGenTools;
-import org.eclipse.jpt.gen.internal.util.StringUtil;
-
-
-/**
- * Represents the ORM generation properties for a database 
- * column.
- * 
- * <p>This is designed to be created/changed by the generation wizard,
- * and generated using Velocity templates.
- * The modified properties (if any) are persisted/retrieved using 
- * <code>ORMGenCustomizer</code>.
- * 
- */
-public class ORMGenColumn
-{
-	private Table mTable;
-	private Column mDbColumn;
-	private ORMGenCustomizer mCustomizer;
-	private ORMGenTable mGenTable;
-	private static String JAVA_LANG_PACKAGE = "java.lang."; //$NON-NLS-1$
-	
-	public ORMGenColumn(Column dbColumn, ORMGenCustomizer customizer) {
-		super();
-		
-		mDbColumn = dbColumn;
-		mCustomizer = customizer;
-		mTable = dbColumn.getTable();
-	}
-	
-	public ORMGenCustomizer getCustomizer() {
-		return mCustomizer;
-	}
-	
-	public void setGenTable(ORMGenTable ormGenTable) {
-		mGenTable = ormGenTable;
-	}
-	
-	protected String customized(String propName) {
-		return getCustomizer().getProperty(propName, mTable.getName(), getName());
-	}
-	
-	protected boolean customizedBoolean(String propName) {
-		return getCustomizer().getBooleanProperty(propName, mTable.getName(), getName());
-	}
-	
-	protected void setCustomized(String propName, String value) {
-		if (value != null && value.length() == 0) {
-			value = null;
-		}
-		getCustomizer().setProperty(propName, value, mTable.getName(), getName());
-	}
-	
-	protected void setCustomizedBoolean(String propName, boolean value, boolean defaultValue) {
-		if (defaultValue == value) {
-			setCustomized(propName, null); //remove the property
-		} else {
-			getCustomizer().setBooleanProperty(propName, value, mTable.getName(), getName());
-		}
-	}
-	
-	/**
-	 * Returns the column name.
-	 */
-	public String getName() {
-		String annotationName = this.mCustomizer.getDatabaseAnnotationNameBuilder().
-			buildColumnAnnotationName(mDbColumn.getName(), mDbColumn);
-		return annotationName != null ? annotationName : mDbColumn.getName();
-	}
-
-	public String getJoinColumnName(){
-		String annotationName = this.mCustomizer.getDatabaseAnnotationNameBuilder().
-			buildJoinColumnAnnotationName(mDbColumn);
-		return annotationName != null ? annotationName : mDbColumn.getName();
-	}
-	
-	public Column getDbColumn() {
-		return this.mDbColumn;
-	}
-	
-	/**
-	 * Returns the generated bean property name for the given column.
-	 * Does not return null.
-	 */
-	public String getPropertyName() {
-		String name = customized(PROPERTY_NAME);
-		if (name == null) {
-			//name = StringUtil.columnNameToVarName(getName());
-			name = EntityGenTools.convertToUniqueJavaStyleAttributeName(getName(), Collections.<String>emptySet());
-		}
-		return name;
-	}
-	
-	public void setPropertyName(String name) {
-		if (!StringUtil.equalObjects(name, getPropertyName())) {
-			setCustomized(PROPERTY_NAME, name);
-		}
-	}
-	
-	/**
-	 * Return true if the values of name element in the @Column is default
-	 * so we can skip generating the annotation
-	 * 
-	 * @return true
-	 */
-	public boolean isDefault(){
-		return isDefaultname() && isUpdateable() && isInsertable();
-	}
-	
-	/**
-	 * Return true if the values of name element in the @Column is default
-	 * so we can skip generating the annotation
-	 * 
-	 * @return true
-	 */
-	public boolean isDefaultname(){
-		String propName = getPropertyName();
-//		String dbColumnName = getName();
-//		return propName.equalsIgnoreCase( dbColumnName );
-		String annotationName = this.mCustomizer.getDatabaseAnnotationNameBuilder().
-			buildColumnAnnotationName(propName, this.mDbColumn );
-		return annotationName==null;
-	}
-
-	/**
-	 * Return true if the values of name element in the @Column is default
-	 * so we can skip generating the annotation
-	 * 
-	 * @return true
-	 */
-	public boolean isDefaultJoinColumnName(String associationRolePropName){
-		if( !this.mDbColumn.isPartOfForeignKey()){
-			return false;
-		}
-
-		Iterable<ForeignKey> it = mDbColumn.getTable().getForeignKeys();
-		Iterator<ForeignKey> i = it.iterator();
-		while( i.hasNext() ){
-			ForeignKey fk = i.next();
-			Column c = fk.getBaseColumns().iterator().next();
-			if( c.equals( this.mDbColumn ) ){
-				try{
-					String annotationName = this.mCustomizer.getDatabaseAnnotationNameBuilder().
-						buildJoinColumnAnnotationName(associationRolePropName, fk );
-					return annotationName==null;
-				}catch(Exception e){
-					//catch the case that referenced table has multiple primary key columns
-					return false;
-				}
-			}
-		}
-		return false;
-	}
-	
-	
-	/**
-	 * Returns the column type.
-	 * Does not return null.
-	 */
-	public String getPropertyType()  {
-		String type = customized(PROPERTY_TYPE);
-		if (type == null) {
-			type = getCustomizer().getPropertyTypeFromColumn( this.mDbColumn );
-		}
-		if( type.startsWith(JAVA_LANG_PACKAGE) ) {
-			type = type.substring( JAVA_LANG_PACKAGE.length() );
-		}
-		if( type.equals("java.sql.Date")){ //$NON-NLS-1$
-			type = "java.util.Date"; //$NON-NLS-1$
-		}
-			
-		return type;
-	}
-	
-	public String getSimplePropertyType()  {
-		return mGenTable.getSimplifiedColType( getPropertyType() );
-	}	
-	
-	public void setPropertyType(String type)  {
-		if (!StringUtil.equalObjects(type, getPropertyType())) {
-			setCustomized(PROPERTY_TYPE, type);
-		}
-	}
-	/**
-	 * Returns true if the column type is numeric.
-	 */
-	public boolean isNumeric() {
-		boolean ret = this.mDbColumn.isNumeric();
-		return ret;
-	}
-	
-	/**
-	 * Returns the mapping kind, one of {@link #PROPERTY_MAPPING_KIND}|{@link #ID_MAPPING_KIND}
-	 * |{@link #VERSION_MAPPING_KIND}|{@link #TIMESTAMP_MAPPING_KIND}.
-	 * 
-	 * This method does not return null (defaults to basic property type).
-	 */
-	public String getMappingKind() {
-		String kind = customized(MAPPING_KIND);
-		if (kind == null) {
-			kind = getCustomizer().getBasicMappingKind();
-			
-			if ( this.mDbColumn.isPartOfPrimaryKey() 
-				 && this.mDbColumn.getTable().getPrimaryKeyColumnsSize() == 1) {
-				kind = getCustomizer().getIdMappingKind();
-			}
-		}
-		return kind;
-	}
-	
-	public void setMappingKind(String mappingKind)  {
-		if (!StringUtil.equalObjects(mappingKind, getMappingKind())) {
-			setCustomized(MAPPING_KIND, mappingKind);
-		}
-	}
-	
-	public boolean isNullable() {
-		return this.mDbColumn.isNullable();
-	}
-
-	public int getSize() {
-		if ( this.mDbColumn.isNumeric()){
-			return mDbColumn.getPrecision();
-		}
-		return mDbColumn.getLength();
-	}
-
-	public int getDecimalDigits() {
-		if ( this.mDbColumn.isNumeric() ){
-			return mDbColumn.getScale();
-		}
-		return -1;
-	}
-	
-	public boolean isPrimaryKey() {
-		return this.mDbColumn.isPartOfPrimaryKey();
-	}
-	
-	public boolean isPartOfCompositePrimaryKey() {
-		return this.mDbColumn.isPartOfPrimaryKey() &&
-				this.mTable.getPrimaryKeyColumnsSize() > 1;
-	}
-	
-	public boolean isForeignKey() {
-		return this.mDbColumn.isPartOfForeignKey();
-	}
-	
-	public boolean isUnique() {
-		return this.mDbColumn.isPartOfUniqueConstraint();
-	}
-	
-	public String getPropertyDescription() {
-		return customized(PROPERTY_DESC);
-	}
-	
-	public boolean isDataTypeLOB() {
-		return this.mDbColumn.isLOB();
-	}	
-
-	public boolean isNeedMapTemporalType() {
-		String propertyType = this.getPropertyType();
-		return ( propertyType.equals("java.util.Date") || propertyType.equals("java.util.Calendar") );  //$NON-NLS-1$ //$NON-NLS-2$
-	}	
-	
-	public String getTemporalType() {
-		String defaultType = getCustomizer().getPropertyTypeFromColumn( this.mDbColumn );
-		if( defaultType.equals("java.sql.Date")){ //$NON-NLS-1$
-			return "DATE"; //$NON-NLS-1$
-		}else if( defaultType.equals("java.sql.Time")){ //$NON-NLS-1$
-			return "TIME"; //$NON-NLS-1$
-		}else {
-			return "TIMESTAMP"; //$NON-NLS-1$
-		}
-	}	
-	
-	/**
-	 * Returns the generated property getter scope, one of {@link #PUBLIC_SCOPE}|{@link #PROTECTED_SCOPE}
-	 * |{@link #PRIVATE_SCOPE}.
-	 * This method never returns null (defaults to public).
-	 */
-	public String getPropertyGetScope() {
-		String scope = customized(PROPERTY_GET_SCOPE);
-		if (scope == null) {
-			scope = PUBLIC_SCOPE;
-		}
-		return scope;
-	}
-	
-	public void setPropertyGetScope(String scope) {
-		if (!StringUtil.equalObjects(scope, getPropertyGetScope())) {
-			setCustomized(PROPERTY_GET_SCOPE, scope);
-		}
-	}
-	
-	/**
-	 * Returns the generated property setter scope, one of {@link #PUBLIC_SCOPE}|{@link #PROTECTED_SCOPE}
-	 * |{@link #PRIVATE_SCOPE}.
-	 * This method never returns null (defaults to public).
-	 */
-	public String getPropertySetScope() {
-		String scope = customized(PROPERTY_SET_SCOPE);
-		if (scope == null) {
-			scope = PUBLIC_SCOPE;
-		}
-		return scope;
-	}
-	
-	public void setPropertySetScope(String scope) {
-		if (!StringUtil.equalObjects(scope, getPropertySetScope())) {
-			setCustomized(PROPERTY_SET_SCOPE, scope);
-		}
-	}
-	
-	/**
-	 * Returns the generated field member scope, one of {@link #PUBLIC_SCOPE}|{@link #PROTECTED_SCOPE}
-	 * |{@link #PRIVATE_SCOPE}.
-	 * This method never returns null (defaults to private).
-	 */
-	public String getFieldScope() {
-		String scope = customized(FIELD_SCOPE);
-		if (scope == null) {
-			scope = PRIVATE_SCOPE;
-		}
-		return scope;
-	}
-	
-	/**
-	 * Returns true if this column should be used in the 
-	 * <code>equals</code> method implementation.
-	 */
-	public boolean isUseInEquals()  {
-		return customizedBoolean(USE_IN_EQUALS) || isPrimaryKey();
-	}
-	
-	public void setUseInEquals(boolean value) {
-		setCustomizedBoolean(USE_IN_EQUALS, value, false);
-	}
-	
-	/**
-	 * Returns true if this column should be used in the 
-	 * <code>toString</code> method implementation.
-	 */
-	public boolean isUseInToString()  {
-		return customizedBoolean(USE_IN_TO_STRING) || isPrimaryKey();
-	}
-	
-	public void setUseInToString(boolean value) {
-		setCustomizedBoolean(USE_IN_TO_STRING, value, false);
-	}
-	
-	public boolean isUpdateable() {
-		return !"false".equals(customized(UPDATEABLE)); //defaults to true //$NON-NLS-1$
-	}
-	
-	public void setUpdateable(boolean value) {
-		setCustomizedBoolean(UPDATEABLE, value, true);
-	}
-	
-	public boolean isInsertable() {
-		return !"false".equals(customized(INSERTABLE)); //defaults to true //$NON-NLS-1$
-	}
-	
-	public void setInsertable(boolean value) {
-		setCustomizedBoolean(INSERTABLE, value, true);
-	}
-	
-	public boolean isGenerated() {
-		return !"false".equals(customized(GENERATED)); //defaults to true //$NON-NLS-1$
-	}
-	
-	public void setGenerated(boolean value) {
-		setCustomizedBoolean(GENERATED, value, true);
-	}
-	
-	@Override
-	public String toString() {
-		return "name=" + getName() + "; type=" + getPropertyType() ; //$NON-NLS-1$ //$NON-NLS-2$ 
-	}
-
-	/*get/set and field scopes*/
-	public static final String PUBLIC_SCOPE = "public"; //$NON-NLS-1$
-	public static final String PROTECTED_SCOPE = "protected"; //$NON-NLS-1$
-	public static final String PRIVATE_SCOPE = "private"; //$NON-NLS-1$
-
-	/*customization properties*/
-	private static final String PROPERTY_NAME = "propertyName"; //$NON-NLS-1$
-	protected static final String PROPERTY_TYPE = "propertyType"; //$NON-NLS-1$
-	protected static final String MAPPING_KIND = "mappingKind"; //$NON-NLS-1$
-	private static final String PROPERTY_DESC = "propertyDesc"; //$NON-NLS-1$
-	private static final String PROPERTY_GET_SCOPE = "propertyGetScope"; //$NON-NLS-1$
-	private static final String PROPERTY_SET_SCOPE = "propertySetScope"; //$NON-NLS-1$
-	private static final String FIELD_SCOPE = "fieldScope"; //$NON-NLS-1$
-	private static final String USE_IN_EQUALS = "useInEquals"; //$NON-NLS-1$
-	private static final String USE_IN_TO_STRING = "useInToString"; //$NON-NLS-1$
-	private static final String UPDATEABLE = "updateable"; //$NON-NLS-1$
-	private static final String INSERTABLE = "insertable"; //$NON-NLS-1$
-	private static final String GENERATED = "genProperty"; //$NON-NLS-1$
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenCustomizer.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenCustomizer.java
deleted file mode 100644
index 907acb5..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenCustomizer.java
+++ /dev/null
@@ -1,820 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.Schema;
-import org.eclipse.jpt.db.Table;
-import org.eclipse.jpt.gen.internal.util.DTPUtil;
-import org.eclipse.jpt.gen.internal.util.FileUtil;
-import org.eclipse.jpt.gen.internal.util.ForeignKeyInfo;
-import org.eclipse.jpt.gen.internal.util.StringUtil;
-
-/**
- * Contains the information used to customize the database schema to ORM entity 
- * generation.
- * 
- * <p>The customization settings are mainly exposed in the form of 
- * properties. There are no assumptions in this class about the meaning of the 
- * property names. Properties can be associated to specific tables and table 
- * columns, or globally for any table and/or column.
- * 
- * <p>Subclass can implement the sets of abstract methods to provide ORM vendor
- * specific properties.
- * 
- */
-public abstract class ORMGenCustomizer implements java.io.Serializable
-{
-	private final static long serialVersionUID = 1;
-
-	/**
-	 * A value passed for the table name argument to get/setProperty 
-	 * indicating that the value applies to any table.
-	 */
-	public static final String ANY_TABLE = "__anyTable__";
-	public static final String GENERATE_DDL_ANNOTATION = "generateDDLAnnotations";
-	/*the string used in the property name in mProps to indicate 
-	 * a null table value.*/
-	private static final String NULL_TABLE = "";
-	/*the string used in the property name in mProps to indicate 
-	 * a null column value.*/
-	private static final String NULL_COLUMN = "";
-	
-	/*This version number is written in the header of the customization stream
-	 * and read at de-serialization time, if it is different then the file is invalidated.
-	 */
-	private static final int FILE_VERSION = 2;
-	
-	private static final String UPDATE_CONFIG_FILE = "updateConfigFile";
-
-	private transient Schema mSchema;
-	private transient File mFile;
-	
-	private List<String> mTableNames;
-	/*key: table name, value: ORMGenTable object.*/
-	private transient Map<String , ORMGenTable> mTables;
-	/*the <code>Association</code> objects sorted by their "from" 
-	 * table name. Includes all association derived from foreign keys 
-	 * in user selected tables. Since some of the foreign keys may point to table
-	 * user does not select, this list may be different from  mValidAssociations
-	 */
-	private List<Association> mAssociations;
-	/*
-	 * List of valid associations within the user selected tables  
-	 */
-	private transient List<Association> mValidAssociations;
-	private transient boolean mInvalidForeignAssociations;
-	
-	/*the property name is in the form $tableName.$columnName.$propertyName.
-	 * Where tableName could be NULL_TABLE or ANY_TABLE
-	 * and columnName could be NULL_COLUMN*/
-	private Map<String, String> mProps = new java.util.HashMap<String, String>();
-
-	private transient DatabaseAnnotationNameBuilder databaseAnnotationNameBuilder = DatabaseAnnotationNameBuilder.Default.INSTANCE;
-
-	private boolean mUpdatePersistenceXml = true;
-	
-	//-----------------------------------------
-	//---- abstract methods
-	//-----------------------------------------
-	/**
-	 * Returns all the primary key generator schemes.
-	 * This can return any strings as far as the Velocity template 
-	 * processor understand them.
-	 */
-	public abstract List<String> getAllIdGenerators();
-	/**
-	 * Returns the string representing the developer-assigned id generator.
-	 * This can return any strings as far as the Velocity template 
-	 * processor understand them.
-	 */
-	public abstract String getNoIdGenerator();
-	/**
-	 * Returns the string representing the identity id generator.
-	 * This can return any strings as far as the Velocity template 
-	 * processor understand them.
-	 */
-	public abstract String getIdentityIdGenerator();
-	/**
-	 * Returns the strings representing the sequence generators.
-	 * This can return any strings as far as the Velocity template 
-	 * processor understand them.
-	 */
-	public abstract Set<String> getSequenceIdGenerators();
-	/**
-	 * Returns a property type from the given database column.
-	 * This can return any strings as far as the Velocity template 
-	 * processor understand them.
-	 */
-	public abstract String getPropertyTypeFromColumn(Column column) ;
-	/**
-	 * Returns all the strings representing property types.
-	 * This can return any strings as far as the Velocity template 
-	 * processor understand them.
-	 */
-	public abstract String[] getAllPropertyTypes();
-	/**
-	 * Returns all the strings representing property mapping kinds.
-	 * This can return any strings as far as the Velocity template 
-	 * processor understand them.
-	 */
-	public abstract String[] getAllMappingKinds();
-	/**
-	 * Returns the basic (default) property mapping kind.
-	 * This can return any strings as far as the Velocity template 
-	 * processor understand them.
-	 */
-	public abstract String getBasicMappingKind();
-	/**
-	 * Returns the id (primary key) property mapping kind.
-	 * This can return any strings as far as the Velocity template 
-	 * processor understand them.
-	 */
-	public abstract String getIdMappingKind();
-	/**
-	 * Interacts with the user to edit the cascade of the given 
-	 * role.
-	 * This method should also call <code>AssociationRole.setCascade</code>.
-	 * 
-	 * @return false if the user interaction is cancelled.
-	 */
-	public abstract boolean editCascade(AssociationRole role);
-	
-	//-----------------------------------------
-	//-----------------------------------------
-
-	/**
-	 * @param file The file that contains the customization settings.
-	 * The file is created if necessary when the <code>save</code> 
-	 * method is called.
-	 */
-	public void init( File file, Schema schema) {
-		this.mSchema = schema;
-		mFile = file;
-		
-		if (!file.exists()) {
-			setProperty(ORMGenTable.DEFAULT_FETCH, ORMGenTable.DEFAULT_FETCH, ORMGenCustomizer.ANY_TABLE, null);
-			return;
-		}
-		InputStream istream = null;
-		ObjectInputStream ois = null;
-		try 
-		{
-			//read it in a file first to speedup deserialization
-			byte[] bytes = FileUtil.readFile(file);
-			istream = new ByteArrayInputStream(bytes);
-			ois = new ObjectInputStream(istream);
-			
-			FileHeader header = (FileHeader)ois.readObject();
-			if (header.mVersion == FILE_VERSION) {
-				ORMGenCustomizer customizer = (ORMGenCustomizer)ois.readObject();
-				restore(customizer);
-			}
-		} catch (Exception ex) {
-			JptGenPlugin.logException("***ORMGenCustomizer.load failed "+file, ex);				
-		}
-		finally 
-		{
-			if (ois != null)
-			{
-				try 
-				{
-					ois.close();
-				} catch (IOException e) {
-				}
-			}
-			
-			if (istream != null)
-			{
-				try 
-				{
-					istream.close();
-				} catch (IOException e) {
-				}
-			}
-		}
-	}
-	
-	public File getFile(){
-		return this.mFile;
-	}
-	
-	public void setSchema(Schema schema){
-		this.mSchema = schema;
-	}
-
-	public Schema getSchema(){
-		return mSchema;
-	}
-	
-	/**
-	 * Empty constructor needed by the deserialization.
-	 */
-	public ORMGenCustomizer() {
-		super();
-	}
-
-	/**
-	 * Saves the customization file.
-	 * The file is created if necessary.
-	 */
-	public void save() throws IOException {
-		//System.out.println("---ORMGenCustomizer.save: " + mFile);
-		if (!mFile.exists() && !mFile.createNewFile()) {
-			return;
-		}
-		java.io.FileOutputStream fos = null;
-		java.io.ObjectOutputStream oos = null;
-		boolean deleteIt = true;
-		try {
-			fos = new java.io.FileOutputStream(mFile);
-			oos = new java.io.ObjectOutputStream(fos);
-			FileHeader header = new FileHeader();
-			oos.writeObject(header);
-			oos.writeObject(this);
-			deleteIt = false;
-		} catch (Exception ex) {
-			//deleteIt is true, so the cache is not saved.
-			CoreException ce = new CoreException(new Status(IStatus.ERROR, JptGenPlugin.PLUGIN_ID,
-					"Unable to save the ORMGenCustomizer file: "+mFile,ex));
-			JptGenPlugin.logException( ce );
-		} finally {
-			try {
-				if (oos!=null) oos.close();
-				if (fos!=null) fos.close();
-				if (deleteIt) {
-					mFile.delete();
-				}
-			} catch (java.io.IOException ex2) {}	
-		}
-	}
-	
-	public DatabaseAnnotationNameBuilder getDatabaseAnnotationNameBuilder() {
-		return this.databaseAnnotationNameBuilder;
-	}
-	public void setDatabaseAnnotationNameBuilder(DatabaseAnnotationNameBuilder databaseAnnotationNameBuilder) {
-		if (databaseAnnotationNameBuilder == null) {
-			throw new NullPointerException("database annotation name builder is required");  //$NON-NLS-1$
-		}
-		this.databaseAnnotationNameBuilder = databaseAnnotationNameBuilder;
-	}	
-
-	/**
-	 * Returns {@link #GENERATE_DDL_ANNOTATION}  indicating whether
-	 * the optional DDL parameters like length, nullable, unqiue, etc should be generated 
-	 * in @Column annotation.
-	 * defaults to false.
-	 */
-	public boolean isGenerateDDLAnnotations() {
-		return "true".equals(getProperty(GENERATE_DDL_ANNOTATION, ANY_TABLE, null)); //defaults to false
-	}
-
-	/**
-	 * Returns a property value.
-	 */
-	public String getProperty(String propertyName, String tableName, String colName) {
-		String key = getPropKey(propertyName, tableName, colName);
-		String value = mProps.get(key);
-		/*if the key does not exist and it is a table property then 
-		 * get the default table property.*/
-		if (value == null && tableName != null && colName == null && !tableName.equals(ANY_TABLE)) {
-			value = getProperty(propertyName, ANY_TABLE, colName);
-		}
-		return value;
-	}
-	/**
-	 * Changes a property value.
-	 * 
-	 * @param value The new value, could be null.
-	 */
-	public void setProperty(String propertyName, String value, String tableName, String colName) {
-		String key = getPropKey(propertyName, tableName, colName);
-		if (value != null) {
-			mProps.put(key, value);
-		} else {
-			mProps.remove(key);
-		}
-	}
-	/**
-	 * Same as {@link #getProperty(String, String, String)} but 
-	 * converts the value to boolean.
-	 */
-	public boolean getBooleanProperty(String propertyName, String tableName, String colName) {
-		String value = getProperty(propertyName, tableName, colName);
-		return "true".equals(value);
-	}
-	/**
-	 * Changes a table boolean property value.
-	 */
-	public void setBooleanProperty(String propertyName, boolean value, String tableName, String colName) {
-		setProperty(propertyName, value ? "true" : "false", tableName, colName);
-	}
-	/**
-	 * Returns the names of the tables to generate.
-	 */
-	@SuppressWarnings("unchecked")
-	public List<String> getTableNames() {
-		return mTableNames != null ? mTableNames : java.util.Collections.EMPTY_LIST;
-	}
-	
-	/**
-	 * Returns the fetch type annotation member value, or empty string 
-	 * if none.
-	 * Empty string is returned instead of null because Velocity does not like null 
-	 * when used in #set.
-	 */
-	public String genFetch(ORMGenTable table) {
-		return "";
-	}	
-	/**
-	 * Called when the table user selection is changed in the 
-	 * generation wizard.
-	 */
-	public void setTableNames(List<String> tableNames) {
-		mTableNames = tableNames;
-		mTables = null;
-		mValidAssociations = null; //recompute
-		mInvalidForeignAssociations = true; //make sure foreign associations from newly added tables are computed.
-	}
-	/**
-	 * Returns the table names to be generated.
-	 * This might be different from <code>getTableNames</code> if there 
-	 * are many-to-many join tables and are not contributing 
-	 * in any other associations.
-	 */
-	public List<String> getGenTableNames()  {
-		List<String> names = getTableNames();
-		List<String> result = new java.util.ArrayList<String>(names.size());
-		
-		/*filter out join tables*/
-		List<Association> associations = getAssociations();
-		for (Iterator<String> tableNamesIter = names.iterator(); tableNamesIter.hasNext(); ) {
-			String tableName = tableNamesIter.next();
-			boolean isValid = true;
-			
-			for (Iterator<Association> assocIter = associations.iterator(); assocIter.hasNext(); ) {
-				Association association = assocIter.next();
-				if (!association.isGenerated()) {
-					continue;
-				}
-				if (tableName.equals(association.getReferrerTableName())
-						|| tableName.equals(association.getReferencedTableName())) {
-					isValid = true;
-					break;
-				}
-				if (tableName.equals(association.getJoinTableName())) {
-					isValid = false;
-				}
-			}
-			if (isValid) {
-				result.add(tableName);
-			}
-		}
-		return result;
-	}
-	/**
-	 * Returns an <code>ORMGenTable</code> object given its name, or 
-	 * null if none.
-	 */
-	public ORMGenTable getTable(String tableName)  {
-		if (mTables == null) {
-			mTables = new java.util.HashMap<String, ORMGenTable>(mTableNames.size());
-		}
-		
-		if(mTableNames!=null && mSchema!=null){
-			for (Iterator<String> iter = mTableNames.iterator(); iter.hasNext(); ) {
-				String name = iter.next();
-				Table dbTable = mSchema.getTableNamed( name );
-				if (dbTable != null) {
-					mTables.put(name, createGenTable(dbTable));
-				}
-			}
-		}
-		return mTables.get(tableName);
-	}
-	/**
-	 * Returns the <code>Association</code> objects sorted by their "from" 
-	 * table name.
-	 */
-	public List<Association> getAssociations(){
-		return getAssociations(true/*validOnly*/);
-	}
-	/**
-	 * Adds the given association.
-	 */
-	public void addAssociation(Association association)  {
-		getAssociations(false/*validOnly*/).add(association);
-		if (mValidAssociations != null) {
-			mValidAssociations.add(association);
-		}
-		
-	}
-	/**
-	 * Deletes the given association.
-	 */
-	public void deleteAssociation(Association association)  {
-		boolean removed = getAssociations(false/*validOnly*/).remove(association);
-		assert(removed);
-		
-		if (mValidAssociations != null) {
-			removed = mValidAssociations.remove(association);
-			assert(removed);
-		}
-	}
-	/**
-	 * Returns true if an association similar to the given association 
-	 * already exists.
-	 * This is decided based only on the association tables and columns.
-	 */
-	public boolean similarAssociationExists(Association association) {
-		try {
-			for (Iterator<Association> iter = getAssociations(false/*validOnly*/).iterator(); iter.hasNext(); ) {
-				Association association2 = iter.next();
-				if (!association.getReferrerTableName().equals(association2.getReferrerTableName())
-						|| !association.getReferencedTableName().equals(association2.getReferencedTableName())
-						|| !StringUtil.equalObjects(association.getJoinTableName(), association2.getJoinTableName())
-						|| !association.getReferrerColumnNames().equals(association2.getReferrerColumnNames())
-						|| !association.getReferencedColumnNames().equals(association2.getReferencedColumnNames())
-						) {
-					continue;
-				}					
-				/*the 2 association have the same referrer, referenced and join table*/
-				if (association.getJoinTableName() == null) {
-					return true;
-				}
-				if (association.getReferrerJoinColumnNames().equals(association2.getReferrerJoinColumnNames())
-						&& association.getReferencedJoinColumnNames().equals(association2.getReferencedJoinColumnNames())) {
-					return true;
-				}
-			}
-		} catch (Exception e) {
-			return false;
-		}
-		return false;
-	}
-	/**
-	 * Creates the <code>ORMGenTable</code> instance. 
-	 */
-	public ORMGenTable createGenTable(Table dbTable) {
-		return new ORMGenTable(dbTable, this);
-	}
-	/**
-	 * Creates the <code>ORMGenColumn</code> instance.
-	 */
-	protected ORMGenColumn createGenColumn(Column dbCol) {
-		return new ORMGenColumn(dbCol, this);
-	}
-	/**
-	 * Returns true of the underlying persistence specs require the "many" side 
-	 * of an association to be the owner (like EJB3).
-	 */
-	protected boolean manySideIsAssociationOwner() {
-		return false;
-	}
-	public boolean isUpdateConfigFile() {
-		return !"false".equals(getProperty(UPDATE_CONFIG_FILE, null, null)); //defaults to true
-	}
-	public void setUpdateConfigFile(boolean value) {
-		if (value) { //default is true
-			setProperty(UPDATE_CONFIG_FILE, null, null, null); //remove it
-		} else {
-			setBooleanProperty(UPDATE_CONFIG_FILE, value, null, null);
-		}
-	}
-
-	//-----------------------------------------
-	//---- Velocity templates methods
-	//-----------------------------------------
-	/**
-	 * Returns a getter method name given a property name.
-	 */
-	public String propertyGetter(String propertyName) {
-		return "get"+StringUtil.initUpper(propertyName);
-	}
-	/**
-	 * Returns a setter method name given a property name.
-	 */
-	public String propertySetter(String propertyName) {
-		return "set"+StringUtil.initUpper(propertyName);
-	}
-	public String quote(String s) {
-		return StringUtil.quote(s, '"');
-	}
-	public String quote(boolean b) {
-		return quote(String.valueOf(b));
-	}
-	public String quote(int i) {
-		return quote(String.valueOf(i));
-	}
-	/**
-	 * Appends an annotation member name and value to an existing annotation.
-	 * 
-	 * @param s The annotation members string.
-	 *
-	 * @param memberValue The member value, if null or empty strings then 
-	 * nothing is appened.
-	 * 
-	 * @param whether to double quote the member value.
-	 */
-	public String appendAnnotation(String s, String memberName, String memberValue, boolean quote) {
-		if (memberValue == null || memberValue.length() == 0) {
-			return s;
-		}
-		StringBuffer buffer = new StringBuffer(s);
-		if (buffer.length() != 0) {
-			buffer.append(", ");
-		}
-		buffer.append(memberName);
-		buffer.append('=');
-		if (quote) {
-			buffer.append('"');
-		}
-		buffer.append(memberValue);
-		if (quote) {
-			buffer.append('"');
-		}
-		return buffer.toString();
-	}
-	public boolean isJDK1_5() {
-		return true;
-	}
-	
-	//-----------------------------------------
-	//---- private methods
-	//-----------------------------------------
-	/**
-	 * Restores the customization settings from the given 
-	 * (persisted) customizer.
-	 */
-	private void restore(ORMGenCustomizer customizer)  {
-		mTableNames = customizer.mTableNames;
-		mAssociations = customizer.mAssociations;
-		mProps = customizer.mProps;
-		mUpdatePersistenceXml = customizer.mUpdatePersistenceXml;
-		if( mSchema == null )
-			return;
-		
-		/*remove invalid table names*/
-		for (int i = mTableNames.size()-1; i >= 0; --i) {
-			String tableName = mTableNames.get(i);
-			if (mSchema.getTableNamed( tableName) == null) {
-				mTableNames.remove(i);
-			}
-		}
-		if( mAssociations!=null ){
-			/*restore the associations*/
-			for (Iterator<Association> iter = mAssociations.iterator(); iter.hasNext(); ) {
-				Association association = iter.next();
-				association.restore(this);
-			}
-			/*add the foreign keys associations just in case the tables changed since 
-			 * the last time the state was persisted. Pass checkExisting true so that the 
-			 * associations restored above are not overwritten.*/
-			addForeignKeyAssociations(true/*checkExisting*/);
-			// sort on restore
-			sortAssociations( mAssociations );
-		}
-	}
-	/**
-	 * Returns the key in mProps corresponding to the specified 
-	 * propertyName, table and column.
-	 */
-	private String getPropKey(String propertyName, String tableName, String colName) {
-		if (tableName == null) {
-			tableName = NULL_TABLE;
-		}
-		if (colName == null) {
-			colName = NULL_COLUMN;
-		}
-		return tableName + '.' + colName + '.' + propertyName;
-	}
-	/**
-	 * Returns the associations that are valid for the 
-	 * current tables.
-	 */
-	private List<Association> getAssociations(boolean validOnly){
-		if (mAssociations == null) {
-			mAssociations = new java.util.ArrayList<Association>();
-			
-			addForeignKeyAssociations(false/*checkExisting*/);
-		} else if (mInvalidForeignAssociations) {
-			mInvalidForeignAssociations = false;
-			
-			addForeignKeyAssociations(true/*checkExisting*/);
-		}
-		List<Association> associations;
-		if (validOnly) {
-			if (mValidAssociations == null) {
-				/*filter out the invalid associations*/
-				mValidAssociations = new ArrayList<Association>(mAssociations.size());
-				for (int i = 0, n = mAssociations.size(); i < n; ++i) {
-					Association association = mAssociations.get(i);
-					if (association.isValid()) {
-						mValidAssociations.add(association);
-					}
-				}
-			}
-			associations = mValidAssociations;
-		} else {
-			associations = mAssociations;
-		}
-		return associations;
-	}
-	private void addForeignKeyAssociations(boolean checkExisting) {
-		List<String> tableNames = getTableNames();
-		for (Iterator<String> iter = tableNames.iterator(); iter.hasNext(); ) {
-			ORMGenTable table = getTable(iter.next());
-			addForeignKeyAssociations(table, checkExisting);
-		}
-	}
-	private void addForeignKeyAssociations(ORMGenTable table, boolean checkExisting) {
-		if(table==null)
-			return;
-		
-		
-		List<ForeignKeyInfo> fKeys = null;
-		
-		try{
-			fKeys = DTPUtil.getForeignKeys(table.getDbTable());
-		}catch(Exception ise){
-			//workaround Dali bug for now
-			return;
-		}
-		
-		if( fKeys.size()==0 )
-			return;
-		
-		List<Association> addedAssociations = new java.util.ArrayList<Association>();
-		for (Iterator<ForeignKeyInfo> iter = fKeys.iterator(); iter.hasNext(); ) {
-			ForeignKeyInfo fki = iter.next();
-			ORMGenTable referencedTable = getTable(fki.getReferencedTableName());
-			if (referencedTable == null) {
-				continue;
-			}
-			Association association = new Association(this, table.getName(), fki.getReferrerColumnNames()
-						, referencedTable.getName(), fki.getReferencedColumnNames());
-			association.computeCardinality();
-			//Defer the check of similarAssociationExists after computeManyToMany()
-			//otherwise the MTM association will not computed correctly in some cases.
-			//if (checkExisting && similarAssociationExists(association)) {
-			//	continue;
-			//}
-			addedAssociations.add(association);
-		}
-		
-		Association m2m = computeManyToMany(table, addedAssociations);
-		if (m2m != null) {
-			/*do not generate the 2 many-to-one*/
-			addedAssociations.clear();
-			addedAssociations.add(0, m2m);
-		}
-		//remove the association if already existing
-		Iterator<Association> it =  addedAssociations.iterator(); 
-		while( it.hasNext() ){
-			Association newAssociation = it.next();
-			for( Association association : mAssociations ){
-				if( newAssociation.equals( association )){
-					it.remove();
-					break;
-				}
-			}
-		}
-		mAssociations.addAll(addedAssociations);
-	}
-	private Association computeManyToMany(ORMGenTable table, List<Association> addedAssociations) {
-		/** many-to-many associations if:
-		 * - addedAssociations contains 2 many-to-one associations
-		 * - tables t1 and t2 does NOT have to be different( for self-MTM-self situation)
-		 * - <code>table</code> contains only the foreign key columns.
-		 * 
-		 * Note: following restrictions have been removed:
-		 * -table has only two columns
-		 * -t1 and t2 must be different
-		 * -the primary key of <code>table</code> is the concatenation of its foreign 
-		 * 	keys to t1 and t2.*/
-		
-		if (addedAssociations.size() != 2) {
-			return null;
-		}
-		
-		//MTM table should have two MTO relations to orginal tables
-		Association assoc1 = addedAssociations.get(0);
-		Association assoc2 = addedAssociations.get(1);
-		if (assoc1.getCardinality() != Association.MANY_TO_ONE
-				|| assoc2.getCardinality() != Association.MANY_TO_ONE) {
-			return null;
-		}
-
-		//MTM table should only include foreign key columns
-		for( ORMGenColumn col : table.getColumns()){
-			if( !col.isForeignKey())
-				return null;
-		}
-		
-
-		ORMGenTable t1 = assoc1.getReferencedTable();
-		ORMGenTable t2 = assoc2.getReferencedTable();
-
-		if( t1.getName().equals(table.getName()) || t2.getName().equals(table.getName()) ) {
-			return null;
-		}
-
-		//Make a guess which table is the owning side of the MTM relation
-		//See https://bugs.eclipse.org/bugs/show_bug.cgi?id=268445
-		//Logic borrowed from DTPTableWrapper.getJoinTableOwningForeignKey()
-		if( !table.getName().equals(t1.getName() + "_" + t2.getName() ) ) {
-			//swap t1 and t2  
-			ORMGenTable t3 = t1;
-			t1=t2;
-			t2=t3;
-			//swap assoc1 and assoc2
-			Association assoc3=assoc1;
-			assoc1=assoc2;
-			assoc2=assoc3;
-		}
-		
-//Commented out because the assumption is too restrictive: 
-//this check will prevent generating MTM mapping table not having 
-//primary key defined 		
-//		List pkNames = DTPUtil.getPrimaryKeyColumnNames(table.getDbTable());
-//		if (pkNames.size() != table.getColumnNames().size()) {
-//			return null;
-//		}
-//		List fkNames = new java.util.ArrayList(assoc1.getReferrerColumnNames()); //clone because we modify by addAll below
-//		fkNames.addAll(assoc2.getReferrerColumnNames());
-//		if (!CollectionUtil.equalsIgnoreOrder(pkNames, fkNames)) {
-//			return null;
-//		}
-		Association m2m = new Association(this, t1.getName()/*referrerTableName*/, assoc1.getReferencedColumnNames()/*referrerColNames*/
-				, t2.getName()/*referencedTableName*/, assoc2.getReferencedColumnNames()/*referencedColNames*/
-				, table.getName(), assoc1.getReferrerColumnNames()/*referrerJoinColNames*/, assoc2.getReferrerColumnNames()/*referencedJoinColNames*/);
-		m2m.setCustom(false);
-		return m2m;
-	}
-
-	//---------------------------------------------------
-	//---- FileHeader class -----------------------------
-	//---------------------------------------------------
-	/**
-	 * The header of the customization file.
-	 */
-	private static class FileHeader implements java.io.Serializable
-	{
-		private static final long serialVersionUID = 1L;
-		/**
-		 * Should be argument-less because it is used in 
-		 * the de-serialization process.
-		 */
-		public FileHeader() {
-			mVersion = FILE_VERSION;
-		}
-		int mVersion;
-	}
-	
-	private void sortAssociations( List< Association > list ) {
-	   Collections.sort( list, new Comparator< Association >() {
-	      public int compare( Association lhs, Association rhs ) {
-	         // sort by referrer table name first...
-	         int test = lhs.getReferrerTableName().compareTo( rhs.getReferrerTableName() );
-            if( test != 0 )
-               return test;
-            // then by referenced table name...
-            test = lhs.getReferencedTableName().compareTo( rhs.getReferencedTableName() );
-            if( test != 0 )
-               return test;
-            // if referrer and referenced tables are the same, they should
-            // appear next to each other
-            return 0;
-	      }
-	   } );
-	}
-	public boolean shouldUpdatePersistenceXml() {
-		return mUpdatePersistenceXml;
-	}
-	public void setShouldUpdatePersistenceXml(boolean updatePersistenceXml) {
-		this.mUpdatePersistenceXml = updatePersistenceXml;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenTable.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenTable.java
deleted file mode 100644
index aebdda5..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenTable.java
+++ /dev/null
@@ -1,1031 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.Table;
-import org.eclipse.jpt.gen.internal.util.DTPUtil;
-import org.eclipse.jpt.gen.internal.util.EntityGenTools;
-import org.eclipse.jpt.gen.internal.util.StringUtil;
-import org.eclipse.jpt.utility.JavaType;
-
-/**
- * Represents the ORM generation properties for a database table.
- * 
- * <p>
- * This is designed to be created/changed by the generation wizard, and
- * generated using Velocity templates. The modified properties (if any) are
- * persisted/retrieved using <code>ORMGenCustomizer</code>.
- * 
- */
-public class ORMGenTable
-{
-	private ORMGenCustomizer mCustomizer;
-	private List<ORMGenColumn> mColumns;
-	private Table mDbTable;
-	private HashMap<String, String> columnTypesMap =  null;
-	/**
-	 * @param table
-	 *            The database table or null if this table is used to get/set
-	 *            the default table properties (properties that apply to all
-	 *            tables unless overriden).
-	 */
-	public ORMGenTable(Table table, ORMGenCustomizer customizer) {
-		super();
-		mDbTable = table;
-		mCustomizer = customizer;
-	}
-
-	public ORMGenCustomizer getCustomizer() {
-		return mCustomizer;
-	}
-
-	/**
-	 * Returns true if this table is is used to get/set the default table
-	 * properties.
-	 */
-	public boolean isDefaultsTable() {
-		return mDbTable == null;
-	}
-
-	protected String customized(String propName) {
-		return getCustomizer().getProperty(propName, getName(), null);
-	}
-
-	protected boolean customizedBoolean(String propName) {
-		return getCustomizer().getBooleanProperty(propName, getName(), null);
-	}
-
-	protected void setCustomized(String propName, String value) {
-		if (value != null && value.length() == 0) {
-			value = null;
-		}
-		getCustomizer().setProperty(propName, value, getName(), null);
-	}
-
-	protected void setCustomizedBoolean(String propName, boolean value, boolean defaultValue) {
-		if (defaultValue == value) {
-			setCustomized(propName, null); // remove the property
-		}
-		else {
-			getCustomizer().setBooleanProperty(propName, value, getName(), null);
-		}
-	}
-
-	public Table getDbTable() {
-		return mDbTable;
-	}
-
-	/**
-	 * Returns the table name.
-	 */
-	public String getName() {
-		if (mDbTable == null)
-			return ORMGenCustomizer.ANY_TABLE;
-		return mDbTable.getName();
-	}
-
-	public String getJoinTableAnnotationName() {
-		if (mDbTable == null)
-			return ORMGenCustomizer.ANY_TABLE;
-		String annotationName = this.mCustomizer.getDatabaseAnnotationNameBuilder().buildJoinTableAnnotationName(mDbTable);
-		return annotationName != null ? annotationName : mDbTable.getName();
-	}
-
-	/**
-	 * Returns the database schema containing the table.
-	 */
-	public String getSchema() {
-		if (DTPUtil.isDefaultSchema(mDbTable) || mDbTable.getSchema()==null)
-			return ""; //$NON-NLS-1$
-		String schemaName = mDbTable.getSchema().getName();
-		return schemaName;
-	}
-
-	public void setSourceFolder(String srcFolder){
-		setCustomized(SRC_FOLDER, srcFolder);
-	}
-	
-	public String getSourceFolder(){
-		String srcFolder = customized(SRC_FOLDER);
-		return srcFolder == null ? "" : srcFolder;
-	}
-	
-	public String getImportStatements(){
-		buildColumnTypesMap();
-		Collection<String> packages = columnTypesMap.keySet();
-		StringBuilder ret = new StringBuilder();
-		for ( String s : packages ) {
-			ret.append( "import " + s + ";\n"); //$NON-NLS-1$
-		}
-
-		List<AssociationRole> associationRoles = getAssociationRoles();
-		for ( AssociationRole role :  associationRoles ) {
-			if ( role.getCardinality().equals( Association.ONE_TO_MANY )
-					|| role.getCardinality().equals( Association.MANY_TO_MANY ) ) {
-				ret.append( "import " + getDefaultCollectionType() + ";\n"); //$NON-NLS-1$
-				break;
-			}
-		}
-		
-		return ret.toString();
-	}
-	
-	/**
-	 * Construct import statements for types from javax.persistence package
-	 * @return
-	 */
-	private String getJavaxPersistenceImportStatements() {
-		StringBuilder ret = new StringBuilder();
-		ret.append( "import javax.persistence.Entity;\n"); //$NON-NLS-1$
-		//TODO: only if @Columns is needed
-		ret.append( "import javax.persistence.Column;\n");//$NON-NLS-1$
-		//TODO: only if there is @Id
-		ret.append( "import javax.persistence.Id;\n");//$NON-NLS-1$
-		if( !this.isDefaultname() )
-			ret.append( "import javax.persistence.Table;\n");//$NON-NLS-1$
-		if( this.isCompositeKey() )
-			ret.append( "import javax.persistence.EmbeddedId;\n"); //$NON-NLS-1$
-		// append javax.persistence package imports
-		HashSet<String> jpaImports = new HashSet<String>(); 
-		List<AssociationRole> associationRoles = getAssociationRoles();
-		for( AssociationRole role :  associationRoles ){
-			if( role.getCardinality().equals( Association.ONE_TO_ONE ) ){
-				jpaImports.add( "import javax.persistence.OneToOne;" );//$NON-NLS-1$
-			}else{
-				if( role.getCardinality().equals( Association.ONE_TO_MANY ) ){
-					jpaImports.add( "import javax.persistence.OneToMany;\n" );//$NON-NLS-1$
-				}else if( role.getCardinality().equals( Association.MANY_TO_ONE ) ){
-					jpaImports.add( "import javax.persistence.ManyToOne;\n" );//$NON-NLS-1$
-					jpaImports.add( "import javax.persistence.JoinColumn;\n" ); //$NON-NLS-1$
-				}else if( role.getCardinality().equals( Association.MANY_TO_MANY ) ){
-					jpaImports.add( "import javax.persistence.ManyToMany;\n" );//$NON-NLS-1$
-					jpaImports.add( "import javax.persistence.JoinTable;\n" );//$NON-NLS-1$
-					jpaImports.add( "import javax.persistence.JoinColumns;\n");//$NON-NLS-1$
-					jpaImports.add( "import javax.persistence.JoinColumn;\n" );//$NON-NLS-1$
-				}
-			}
-		}
-		for( String s: jpaImports){
-			ret.append(s);
-		}
-		return ret.toString();
-	}
-
-	public HashMap<String, String> buildColumnTypesMap(){
-		if ( columnTypesMap != null) {
-			return columnTypesMap;
-		}
-		columnTypesMap = new HashMap<String, String>();
-		for ( ORMGenColumn col : this.getColumns() ) {
-			String type = col.getPropertyType();
-			if ( !col.isPartOfCompositePrimaryKey()
-					&& !col.isForeignKey()
-					&& !type.startsWith("java.lang") && type.indexOf('.')>0 ) {
-				String simpleType= type.substring( type.lastIndexOf('.')+1 );
-				columnTypesMap.put(type, simpleType);
-			}
-		}
-		return columnTypesMap;
-	}
-	
-	public String getSimplifiedColType(String fqtn ) {
-		HashMap<String, String> map = buildColumnTypesMap();
-		String typeName = map.get(fqtn);
-		if (  typeName != null ) {
-			return typeName;
-		}
-		return fqtn;
-	}
-	
-	/**
-	 * Sets the package for the generated class (empty string for the default
-	 * package)
-	 */
-	public void setPackage(String pkg) {
-		getCustomizer().setProperty(PACKAGE, pkg, getName(), null); 
-		// not calling setCustomized so that empty strings do not get nulled out.
-	}
-
-	/**
-	 * Returns the Java package (empty string for the default package).
-	 */
-	public String getPackage() {
-		String packageName = customized(PACKAGE);
-		return packageName == null ? "" : packageName; //$NON-NLS-1$
-	}
-
-	/**
-	 * Returns the generated Java class name (not qualified).
-	 */
-	public String getClassName() {
-		String name = customized(CLASS_NAME);
-		if (name == null) {
-			// name = StringUtil.tableNameToVarName(getName());
-			// name = StringUtil.initUpper(name);
-			name = EntityGenTools.convertToUniqueJavaStyleClassName(getName(), new ArrayList<String>());
-			name = StringUtil.singularise(name);
-		}
-		return name;
-	}
-
-	public void setClassName(String className) {
-		/*
-		 * if the class name is the same as the (possibly computed) class name
-		 * then nothing to do
-		 */
-		if (!StringUtil.equalObjects(className, getClassName())) {
-			setCustomized(CLASS_NAME, className);
-		}
-	}
-
-	/**
-	 * Returns a name suitable to be used as a variable or class name. This is
-	 * computed based on the table name.
-	 * 
-	 * @param singular
-	 *            Whether the name should be singular or plural.
-	 */
-	public String getVarName(boolean singular) {
-		String name = StringUtil.tableNameToVarName(getName());
-		if (singular) {
-			name = StringUtil.singularise(name);
-		}
-		else {
-			name = StringUtil.pluralise(name);
-		}
-		return name;
-	}
-
-	/**
-	 * Returns the fully qualified generated Java class name.
-	 */
-	public String getQualifiedClassName() {
-		return qualify(getClassName());
-	}
-
-	/**
-	 * Returns the composite key Java class name (not qualified).
-	 */
-	public String getCompositeKeyClassName() {
-		String name = customized(COMPOSITE_KEY_CLASS_NAME);
-		if (name == null) {
-			name = getClassName() + "PK"; //$NON-NLS-1$
-		}
-		return name;
-	}
-
-	/**
-	 * Returns the fully qualified composite key Java class name.
-	 */
-	public String getQualifiedCompositeKeyClassName() {
-		return qualify(getCompositeKeyClassName());
-	}
-
-	/**
-	 * Returns the composite key property name.
-	 */
-	public String getCompositeKeyPropertyName() {
-		return "id"; //$NON-NLS-1$
-	}
-
-	/**
-	 * Returns the <code>ORMGenColumn</code> objects to be generated for this
-	 * table.
-	 */
-	public List<ORMGenColumn> getColumns() {
-		if (mColumns == null) {
-			mColumns = new ArrayList<ORMGenColumn>();
-			for (Column c : mDbTable.getColumns()) {
-				ORMGenColumn genColumn = getCustomizer().createGenColumn(c);
-				genColumn.setGenTable(this);
-				mColumns.add(genColumn);
-			}
-		}
-		return mColumns;
-	}
-
-	public List<String> getColumnNames() {
-		List<String> ret = new ArrayList<String>();
-		for (Column c : mDbTable.getColumns()) {
-			ret.add(c.getName());
-		}
-		return ret;
-	}
-
-	/**
-	 * Returns the <code>ORMGenColumn</code> objects representing the table's
-	 * primary key.
-	 */
-	public List<ORMGenColumn> getPrimaryKeyColumns() {
-		List<ORMGenColumn> ret = new ArrayList<ORMGenColumn>();
-		for (Column column : mDbTable.getPrimaryKeyColumns()) {
-			ret.add(new ORMGenColumn(column, this.mCustomizer));
-		}
-		return ret;
-	}
-
-	/**
-	 * Returns the primary key column or null if there is no or many primary key
-	 * columns.
-	 */
-	public ORMGenColumn getPrimaryKeyColumn() {
-		ORMGenColumn pkCol = null;
-		List<ORMGenColumn> pkColumns = getPrimaryKeyColumns();
-		if (pkColumns.size() == 1) {
-			// Column dbCol = (Column)pkColumns.get(0);
-			pkCol = pkColumns.get(0); // (ORMGenColumn)
-										// mCustomizer.createGenColumn(dbCol);
-		}
-		else {
-			/*
-			 * if no pk column then look for the first column with id mapping
-			 * kind. This is so that the wizard can be used with tables not
-			 * having primary keys.
-			 */
-			List<ORMGenColumn> columns = getColumns();
-			for (int i = 0, n = columns.size(); i < n; ++i) {
-				ORMGenColumn column = columns.get(i);
-				if (column.getMappingKind().equals(mCustomizer.getIdMappingKind())) {
-					pkCol = column;
-					break;
-				}
-			}
-		}
-		return pkCol;
-	}
-
-	/**
-	 * Returns true if there is more than 1 pk column.
-	 */
-	public boolean isCompositeKey() {
-		return mDbTable.getPrimaryKeyColumnsSize() > 1;
-	}
-
-	/**
-	 * Returns the <code>ORMGenColumn</code> objects for the the columns that
-	 * are not part of any association.
-	 * 
-	 * @param genOnly
-	 *            Whether to include only the columns marked for generation.
-	 * 
-	 * @param includePk
-	 *            Whether to include the primary kley column(s).
-	 * 
-	 * @param includeInherited
-	 *            Whether to include the columns associated with Java properties
-	 *            that exist in the super class (if any).
-	 */
-	public List<ORMGenColumn> getSimpleColumns(boolean genOnly, boolean includePk, boolean includeInherited) {
-		List<ORMGenColumn> result = new java.util.ArrayList<ORMGenColumn>();
-		List<ORMGenColumn> columns = getColumns();
-		List<AssociationRole> roles = getAssociationRoles();
-		for (int i = 0, n = columns.size(); i < n; ++i) {
-			ORMGenColumn column = columns.get(i);
-			if (genOnly && !column.isGenerated()) {
-				continue;
-			}
-			if (column.isPrimaryKey()) {
-				if (!includePk || isCompositeKey()) {
-					continue;
-				} else {
-					result.add(0, column);
-					continue;
-				}
-			}
-			else if (isColumnInAsscociation(column, roles)) {
-				continue;
-			}
-			result.add(column);
-		}
-		return result;
-	}
-
-	public List<ORMGenColumn> getSimpleColumns() {
-		return getSimpleColumns(true/* genOnly */, true/* includePk */, true/* includeInherited */);
-	}
-
-	/**
-	 * Returns false if the given column should be generated with false
-	 * updatable/insertable. This is the case when the column is mapped more
-	 * than once, this usually happen with columns in composite keys and
-	 * many-to-one associations.
-	 * 
-	 * <br>
-	 * Note that for Hibernate the column param is null because the
-	 * insert/update attributes are specified for the many-to-one tag itself
-	 * instead of the nested column tags (bogus obviously).
-	 */
-	public boolean isColumnUpdateInsert(AssociationRole role, ORMGenColumn column) {
-		if (column == null) {
-			for (Iterator<ORMGenColumn> iter = role.getReferrerColumns().iterator(); iter.hasNext();) {
-				ORMGenColumn c = iter.next();
-				if (!isColumnUpdateInsert(role, c)) {
-					return false;
-				}
-			}
-			return true;
-		}
-		if (column.isPrimaryKey()) {
-			return false;
-		}
-		/*
-		 * should look if there are multiple associations using the same column
-		 * and return false, but this is probably an unusual case.
-		 */
-		return true;
-	}
-
-	/**
-	 * Returns the <code>ORMGenColumn</code> objects corresponding to the given
-	 * column names.
-	 */
-	public List<ORMGenColumn> getColumnsByNames(List<String> names) {
-		List<ORMGenColumn> result = new java.util.ArrayList<ORMGenColumn>();
-		for (String name : names) {
-			ORMGenColumn column = getColumnByName(name);
-			assert (column != null);
-			if (column != null) {
-				result.add(column);
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * Returns the columns having the given name, or null if none.
-	 */
-	public ORMGenColumn getColumnByName(String name) {
-		List<ORMGenColumn> columns = getColumns();
-		for (int i = 0, n = columns.size(); i < n; ++i) {
-			ORMGenColumn column = columns.get(i);
-			if (column.getName().equals(name)) {
-				return column;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Returns the <code>AssociationRole</code> objects for this table. Only the
-	 * association marked for generation are returned.
-	 */
-	public List<AssociationRole> getAssociationRoles() {
-		/*
-		 * this is not cached intentionally because invalidating the cache with
-		 * wizard changes is kinda tricky.
-		 */
-		List<AssociationRole> associationRoles = new ArrayList<AssociationRole>();
-		String name = getName();
-		List<Association> associations = mCustomizer.getAssociations();
-		for (Iterator<Association> iter = associations.iterator(); iter.hasNext();) {
-			Association association = iter.next();
-			if (!association.isGenerated()) {
-				continue;
-			}
-			/*
-			 * check both referrerand referenced because an association could be
-			 * from-to the same table (employee/manager)
-			 */
-			if (association.getReferrerTable().getName().equals(name)) {
-				AssociationRole role = association.getReferrerRole();
-				if (role != null) {
-					associationRoles.add(role);
-				}
-			}
-			if (association.getReferencedTable().getName().equals(name)) {
-				AssociationRole role = association.getReferencedRole();
-				if (role != null) {
-					associationRoles.add(role);
-				}
-			}
-		}
-		return associationRoles;
-	}
-
-	public String getClassDescription() {
-		return customized(CLASS_DESC);
-	}
-
-	/**
-	 * Returns the generated class scope, one of {@link #PUBLIC_SCOPE}|
-	 * {@link #PROTECTED_SCOPE} |{@link #PRIVATE_SCOPE}. This method never
-	 * returns null (defaults to public).
-	 */
-	public String getClassScope() {
-		String scope = customized(CLASS_SCOPE);
-		if (scope == null) {
-			scope = PUBLIC_SCOPE;
-		}
-		return scope;
-	}
-
-	public String getExtends() {
-		return customized(EXTENDS);
-	}
-
-	public void setExtends(String baseClass) {
-		setCustomized(EXTENDS, baseClass);
-	}
-
-	public List<String> getImplements() {
-		String str = customized(IMPLEMENTS);
-		List<String> result = StringUtil.strToList(str, ',', true/* trim */);
-		if (result == null) {
-			result = Collections.emptyList();
-		}
-		return result;
-	}
-
-	public void setImplements(List<String> interfaces) {
-		setCustomized(IMPLEMENTS, StringUtil.listToStr(interfaces, ','));
-	}
-
-	/**
-	 * Returns the string that should be generated in the Java class for extends
-	 * and implements.
-	 */
-	public String generateExtendsImplements() {
-		StringBuffer buffer = new StringBuffer();
-		String extendsClass = getExtends();
-		if (extendsClass != null && !extendsClass.equals("java.lang.Object") && !extendsClass.equals("Object")) {
-			buffer.append("extends " + simplifyClassName(extendsClass) + " "); //fix for bug 278626
-		}
-		buffer.append("implements Serializable"); // assuming that the Java
-													// file template imports the
-													// java.io.Serializable
-		for (Iterator<String> iter = getImplements().iterator(); iter.hasNext();) {
-			buffer.append(", " + simplifyClassName(iter.next()));
-		}
-		return buffer.toString();
-	}
-
-	private String simplifyClassName(String fullClassName) {
-		final String JAVA_LANG = "java.lang.";
-		if (fullClassName.startsWith(JAVA_LANG)) {
-			return fullClassName.substring(JAVA_LANG.length());
-		}
-		String pkg = StringUtil.getPackageName(fullClassName);
-		if (pkg != null && StringUtil.equalObjects(pkg, getPackage())) {
-			return StringUtil.getClassName(fullClassName);
-		}
-		return fullClassName;
-	}
-
-	/**
-	 * Returns the id generator scheme (assigned, sequence, etc). Does not
-	 * return null, defaults to "assigned" or "identity" depending on whether
-	 * the table has an identity column.
-	 */
-	public String getIdGenerator() {
-		String generator = customized(ID_GENERATOR);
-		String noneGenerator = getCustomizer().getNoIdGenerator();
-		if (!isDefaultsTable()) {
-			/*
-			 * This is done mainly because there might be cases where some
-			 * tables have autoinctement pk and others are assigned. In this
-			 * case this makes it so that it is possible to have a "none"
-			 * default value that is interpreted depending on the case.
-			 */
-			if (generator == null || generator.equals(noneGenerator)) {
-				ORMGenColumn pkColumn = getPrimaryKeyColumn();
-				if (pkColumn != null && DTPUtil.isAutoIncrement(pkColumn.getDbColumn())) {
-					generator = getCustomizer().getIdentityIdGenerator();
-				}
-			}
-		}
-		if (generator == null) {
-			generator = noneGenerator;
-		}
-		return generator;
-	}
-
-	/**
-	 * Changes the id generator scheme (assigned, sequence, etc).
-	 */
-	public void setIdGenerator(String scheme) {
-		setCustomized(ID_GENERATOR, scheme);
-	}
-
-	/**
-	 * Returns the sequence name for the given table, or null if none (makes
-	 * sense only when the scheme is native, sequence, ..).
-	 */
-	public String getSequence() {
-		return customized(SEQUENCE);
-	}
-
-	public void setSequence(String name) {
-		setCustomized(SEQUENCE, name);
-	}
-
-	/**
-	 * Returns the sequence name after replacing the ${table} and ${pk} by their
-	 * values, or null if none.
-	 */
-	public String getFormattedSequence() {
-		String sequence = getSequence();
-		if (sequence != null) {
-			/* resolve the ${table} and ${pk} patterns */
-			sequence = StringUtil.strReplace(sequence, TABLE_SEQ_PATTERN, getName());
-			if (sequence.indexOf(PK_SEQ_PATTERN) >= 0) {
-				Iterator<Column> pkCols = getDbTable().getPrimaryKeyColumns().iterator();
-				String pkName = pkCols.hasNext() ? pkCols.next().getName() : null;
-				sequence = StringUtil.strReplace(sequence, PK_SEQ_PATTERN, pkName);
-			}
-		}
-		return sequence != null ? sequence.toUpperCase() : "";
-	}
-
-	public boolean isImplementEquals() {
-		return !"true".equals(customized(IMPLEMENT_EQUALS)); // defaults to
-																// false
-	}
-
-	public void setImplementEquals(boolean value) {
-		setCustomizedBoolean(IMPLEMENT_EQUALS, value, true);
-	}
-
-	/**
-	 * Returns true if there is any column participating in equals/hashcode.
-	 */
-	public boolean hasColumnsInEquals() {
-		List<ORMGenColumn> columns = getSimpleColumns();
-		for (int i = 0, n = columns.size(); i < n; ++i) {
-			ORMGenColumn column = columns.get(i);
-			if (column.isUseInEquals()) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Returns {@link #GENERATE_DDL_ANNOTATION} indicating whether the optional
-	 * DDL parameters like length, nullable, unqiue, etc should be generated in @Column
-	 * annotation. defaults to false.
-	 */
-	public boolean isGenerateDDLAnnotations() {
-		return "true".equals(customized(ORMGenCustomizer.GENERATE_DDL_ANNOTATION)); // defaults
-																					// to
-																					// false
-	}
-
-	public void setGenerateDDLAnnotations(boolean generate) {
-		setCustomizedBoolean(ORMGenCustomizer.GENERATE_DDL_ANNOTATION, generate, false);
-	}
-
-	/**
-	 * Returns one of {@link #PROPERTY_ACCESS}|{@link #FIELD_ACCESS} indicating
-	 * how the entity properties are mapped. Does not return null (defaults to
-	 * {@link #FIELD_ACCESS}).
-	 */
-	public String getAccess() {
-		String name = customized(ACCESS);
-		if (name == null) {
-			name = FIELD_ACCESS;
-		}
-		return name;
-	}
-
-	public void setAccess(String access) {
-		assert (access == null || access.equals(PROPERTY_ACCESS) || access.equals(FIELD_ACCESS));
-		if (!StringUtil.equalObjects(access, getAccess())) {
-			setCustomized(ACCESS, access);
-		}
-	}
-
-	/**
-	 * Returns one of {@link #LAZY_FETCH}|{@link #EAGER_FETCH} indicating how
-	 * the table associations are feched. Returns null if the provider defaults
-	 * should be used.
-	 */
-	public String getDefaultFetch() {
-		return customized(DEFAULT_FETCH);
-	}
-
-	public void setDefaultFetch(String fetch) {
-		assert (fetch == null || fetch.equals(LAZY_FETCH) || fetch.equals(EAGER_FETCH));
-		setCustomized(DEFAULT_FETCH, fetch);
-	}
-
-	public String[] getSupportedCollectionTypes() {
-		return new String[] {
-			SET_COLLECTION_TYPE, LIST_COLLECTION_TYPE
-		};
-	}
-
-	/**
-	 * Returns one of {@link #LIST_COLLECTION_TYPE}|{@link #SET_COLLECTION_TYPE}
-	 * indicating the Java type (full class name) used for properties of
-	 * collection types. This does not return null (defaults to list).
-	 */
-	public String getDefaultCollectionType() {
-		String cType = customized(DEFAULT_COLLECTION_TYPE);
-		if (cType == null) {
-			cType = SET_COLLECTION_TYPE;
-		}
-		return cType;
-	}
-	
-	public String getSimpleCollectionType(){
-		 String type = getDefaultCollectionType();
-		return type.substring( type.lastIndexOf('.') +1 );
-	}
-
-	public void setDefaultCollectionType(String cType) {
-		assert (cType.equals(LIST_COLLECTION_TYPE) || cType.equals(SET_COLLECTION_TYPE));
-		setCustomized(DEFAULT_COLLECTION_TYPE, cType);
-	}
-
-	/**
-	 * Returns true if the primary key is compound and any of its columns should
-	 * be included in the <code>equals</code> method implementation.
-	 */
-	public boolean isCompoundKeyUseInEquals() {
-		if (isCompositeKey()) {
-			for (Iterator<ORMGenColumn> iter = getPrimaryKeyColumns().iterator(); iter.hasNext();) {
-				ORMGenColumn column = iter.next();
-				if (column.isUseInEquals()) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-
-	public boolean isRoleUseInEquals(AssociationRole role) {
-		for (Iterator<ORMGenColumn> iter = role.getReferrerColumns().iterator(); iter.hasNext();) {
-			ORMGenColumn column = iter.next();
-			if (column.isUseInEquals()) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return true if the values of name element in the @Table is default so we
-	 * can skip generating the annotation
-	 * 
-	 * @return true
-	 */
-	public boolean isDefaultname() {
-		String entityName = getClassName();
-		String annotationName = this.mCustomizer.getDatabaseAnnotationNameBuilder().buildTableAnnotationName(entityName, mDbTable);
-		return annotationName == null;
-	}
-
-	/**
-	 * Qualifies a class name if there is a package.
-	 */
-	private String qualify(String className) {
-		String pkg = getPackage();
-		if (pkg != null && pkg.length() != 0) {
-			className = pkg + '.' + className;
-		}
-		return className;
-	}
-
-	/**
-	 * Returns true if the given column is part of any association.
-	 */
-	private boolean isColumnInAsscociation(ORMGenColumn column, List<AssociationRole> roles) {
-		for (int i = 0, n = roles.size(); i < n; ++i) {
-			AssociationRole role = roles.get(i);
-			List<ORMGenColumn> cols = role.getReferrerColumns();
-			for (ORMGenColumn col : cols) {
-				if (col.getName().equals(column.getName())) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Print the clause to be used in the generated equals() method
-	 * 
-	 * @return String
-	 */
-	public String getPrimaryKeyEqualsClause() {
-		StringBuilder buf = new StringBuilder();
-		Iterator<ORMGenColumn> columns = this.getPrimaryKeyColumns().iterator();
-		while (columns.hasNext()) {
-			this.printPrimaryKeyEqualsClauseOn(columns.next(), buf);
-			if (columns.hasNext()) {
-				buf.append("\n");
-				buf.append("\t\t\t");
-				buf.append("&& ");
-			}
-		}
-		buf.append(";");
-		return buf.toString();
-	}
-
-	private void printPrimaryKeyEqualsClauseOn(ORMGenColumn column, StringBuilder buf) {
-		String fieldName = column.getPropertyName();
-		JavaType javaType = column.getDbColumn().getPrimaryKeyJavaType();
-		if (javaType.isPrimitive()) {
-			this.printPrimitiveEqualsClauseOn(fieldName, buf);
-		}
-		else {
-			this.printReferenceEqualsClauseOn(fieldName, buf);
-		}
-	}
-
-	private void printPrimitiveEqualsClauseOn(String fieldName, StringBuilder buf) {
-		buf.append("(this.");
-		buf.append(fieldName);
-		buf.append(" == castOther.");
-		buf.append(fieldName);
-		buf.append(')');
-	}
-
-	private void printReferenceEqualsClauseOn(String fieldName, StringBuilder buf) {
-		buf.append("this.");
-		buf.append(fieldName);
-		buf.append(".equals(castOther.");
-		buf.append(fieldName);
-		buf.append(')');
-	}
-
-	/**
-	 * Print the clause to be used in the generated hasCode() method
-	 * 
-	 * @return String
-	 */
-	public String getPrimaryKeyHashCodeClause() {
-		StringBuilder buf = new StringBuilder();
-		Iterator<ORMGenColumn> columns = this.getPrimaryKeyColumns().iterator();
-		while (columns.hasNext()) {
-			buf.append("hash = hash * prime + ");
-			this.printPrimaryKeyHashCodeClauseOn(columns.next(), buf);
-			buf.append(';');
-			buf.append('\n');
-			buf.append("\t\t");
-		}
-		return buf.toString();
-	}
-
-	private void printPrimaryKeyHashCodeClauseOn(ORMGenColumn column, StringBuilder buf) {
-		String fieldName = column.getPropertyName();
-		JavaType javaType = column.getDbColumn().getPrimaryKeyJavaType();
-		if (javaType.isPrimitive()) {
-			this.printPrimitiveHashCodeClauseOn(javaType.getElementTypeName(), fieldName, buf);
-		}
-		else {
-			this.printReferenceHashCodeClauseOn(fieldName, buf);
-		}
-	}
-
-	private void printPrimitiveHashCodeClauseOn(String primitiveName, String fieldName, StringBuilder buf) {
-		if (primitiveName.equals("int")) {
-			// this.value
-			buf.append("this.");
-			buf.append(fieldName);
-		}
-		else if (primitiveName.equals("short") || primitiveName.equals("byte") || primitiveName.equals("char")) { // explicit
-																													// cast
-			// ((int) this.value)
-			buf.append("((int) this.");
-			buf.append(fieldName);
-			buf.append(')');
-		}
-		else if (primitiveName.equals("long")) { // cribbed from Long#hashCode()
-			// ((int) (this.value ^ (this.value >>> 32)))
-			buf.append("((int) (this.");
-			buf.append(fieldName);
-			buf.append(" ^ (this.");
-			buf.append(fieldName);
-			buf.append(" >>> 32)))");
-		}
-		else if (primitiveName.equals("float")) { // cribbed from
-													// Float#hashCode()
-			// java.lang.Float.floatToIntBits(this.value)
-			buf.append("java.lang.Float");
-			buf.append(".floatToIntBits(this.");
-			buf.append(fieldName);
-			buf.append(')');
-		}
-		else if (primitiveName.equals("double")) { // cribbed from
-													// Double#hashCode()
-			// ((int) (java.lang.Double.doubleToLongBits(this.value) ^
-			// (java.lang.Double.doubleToLongBits(this.value) >>> 32)))
-			buf.append("((int) (");
-			buf.append("java.lang.Double");
-			buf.append(".doubleToLongBits(this.");
-			buf.append(fieldName);
-			buf.append(") ^ (");
-			buf.append("java.lang.Double");
-			buf.append(".doubleToLongBits(this.");
-			buf.append(fieldName);
-			buf.append(") >>> 32)))");
-		}
-		else if (primitiveName.equals("boolean")) {
-			// (this.value ? 1 : 0)
-			buf.append("(this.");
-			buf.append(fieldName);
-			buf.append(" ? 1 : 0)");
-		}
-		else {
-			throw new IllegalArgumentException(primitiveName);
-		}
-	}
-
-	private void printReferenceHashCodeClauseOn(String fieldName, StringBuilder buf) {
-		buf.append("this.");
-		buf.append(fieldName);
-		buf.append(".hashCode()");
-	}
-
-	@Override
-	public String toString() {
-		return "name=" + this.getName() + "; columns=" + Arrays.toString(this.getColumnNames().toArray());
-	}
-
-	/* class scopes */
-	public static final String PUBLIC_SCOPE = "public";
-
-	public static final String PROTECTED_SCOPE = "protected";
-
-	public static final String PRIVATE_SCOPE = "private";
-
-	/* access constants. Note that these strings are used in the ui */
-	public static final String PROPERTY_ACCESS = "property";
-
-	public static final String FIELD_ACCESS = "field";
-
-	/*
-	 * default fech constants. Note that these strings are used in the gen
-	 * velocity templates.
-	 */
-	public static final String DEFAULT_FETCH = "defaultFetch";
-
-	public static final String LAZY_FETCH = "lazy";
-
-	public static final String EAGER_FETCH = "eager";
-
-	/*
-	 * default collection type constants. Note that these strings are used in
-	 * the gen velocity templates.
-	 */
-	public static final String LIST_COLLECTION_TYPE = "java.util.List";
-
-	public static final String SET_COLLECTION_TYPE = "java.util.Set";
-
-	/**
-	 * The pattern replaced by the table name in the id generator sequence name
-	 * param.
-	 */
-	public static final String TABLE_SEQ_PATTERN = "$table";
-
-	/**
-	 * The pattern replaced by the primary key in the id generator sequence name
-	 * param.
-	 */
-	public static final String PK_SEQ_PATTERN = "$pk";
-
-	/* customization properties */
-	private static final String PACKAGE = "package";
-
-	private static final String SRC_FOLDER = "srcFolder";
-
-	private static final String CLASS_NAME = "className";
-
-	private static final String CLASS_DESC = "classDesc";
-
-	private static final String CLASS_SCOPE = "classScope";
-
-	private static final String EXTENDS = "extends";
-
-	private static final String IMPLEMENTS = "implements";
-
-	private static final String ID_GENERATOR = "idGenerator";
-
-	private static final String SEQUENCE = "sequence";
-
-	private static final String COMPOSITE_KEY_CLASS_NAME = "compositeKeyClassName";
-
-	private static final String IMPLEMENT_EQUALS = "implementEquals";
-
-	private static final String ACCESS = "access";
-
-	private static final String DEFAULT_COLLECTION_TYPE = "defaultCollectionType";
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/OverwriteConfirmer.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/OverwriteConfirmer.java
deleted file mode 100644
index 86bf27d..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/OverwriteConfirmer.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-public interface OverwriteConfirmer {
-	/**
-	 * Return whether the entity generator should overwrite the specified
-	 * file.
-	 */
-	boolean overwrite(String className);
-
-
-	final class Always implements OverwriteConfirmer {
-		public static final OverwriteConfirmer INSTANCE = new Always();
-		public static OverwriteConfirmer instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Always() {
-			super();
-		}
-		// everything will be overwritten
-		public boolean overwrite(String arg0) {
-			return true;
-		}
-		@Override
-		public String toString() {
-			return "OverwriteConfirmer.Always";  //$NON-NLS-1$
-		}
-	}
-
-
-	final class Never implements OverwriteConfirmer {
-		public static final OverwriteConfirmer INSTANCE = new Never();
-		public static OverwriteConfirmer instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Never() {
-			super();
-		}
-		// nothing will be overwritten
-		public boolean overwrite(String arg0) {
-			return false;
-		}
-		@Override
-		public String toString() {
-			return "OverwriteConfirmer.Never";  //$NON-NLS-1$
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/PackageGenerator.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/PackageGenerator.java
deleted file mode 100644
index 90489ab..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/PackageGenerator.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-
-package org.eclipse.jpt.gen.internal;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.runtime.log.JdkLogChute;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.SubMonitor;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.core.context.persistence.ClassRef;
-import org.eclipse.jpt.core.context.persistence.Persistence;
-import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
-import org.eclipse.jpt.core.resource.xml.JpaXmlResource;
-import org.eclipse.jpt.gen.internal.util.CompilationUnitModifier;
-import org.eclipse.jpt.gen.internal.util.FileUtil;
-import org.eclipse.jpt.gen.internal.util.UrlUtil;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.Bundle;
-
-/**
- * This generator will generate a package of entities for a set of tables.
- */
-public class PackageGenerator { 
-
-	private static final String LOGGER_NAME = "org.eclipse.jpt.entities.gen.log"; //$NON-NLS-1$
-	private JpaProject jpaProject;
-	private ORMGenCustomizer customizer;
-	private static OverwriteConfirmer overwriteConfirmer = null;
-
-	static public void setOverwriteConfirmer(OverwriteConfirmer confirmer){
-		overwriteConfirmer = confirmer;
-	}
-	/**
-	 * @param customizer
-	 * @param synchronizePersistenceXml
-	 * @param copyJdbcDrive
-	 * @throws Exception 
-	 */
-	static public void generate(JpaProject jpaProject, ORMGenCustomizer customizer, IProgressMonitor monitor ) throws CoreException {
-		PackageGenerator generator = new PackageGenerator();
-		generator.setProject(jpaProject);
-		generator.setCustomizer(customizer);
-		
-		try {
-			generator.doGenerate(monitor);
-		} catch (Exception e) {
-			throw new CoreException(new Status(IStatus.ERROR, JptGenPlugin.PLUGIN_ID, JptGenMessages.Error_Generating_Entities, e));
-		}
-	}
-	
-	private Object getCustomizer() {
-		return this.customizer;
-	}
-
-	private void setCustomizer(ORMGenCustomizer customizer2) {
-		this.customizer = customizer2;
-	}
-	
-	private void setProject(JpaProject proj ){
-		this.jpaProject = proj;
-	}
-	
-	protected void doGenerate(IProgressMonitor monitor ) throws Exception {
-		generateInternal( monitor );
-	}
-
-	protected void generateInternal(IProgressMonitor progress) throws Exception {
-		File templDir = prepareTemplatesFolder();
-
-		List<String> genClasses = new java.util.ArrayList<String>();
-		List<String> tableNames = this.customizer.getGenTableNames();
-
-		/* .java per table, persistence.xml, refresh package folder */
-		String taskName = NLS.bind(JptGenMessages.EntityGenerator_taskName, "Total "+ tableNames.size() + 2);//$NON-NLS-1$
-		progress.beginTask(taskName, tableNames.size() + 2);
-
-
-		for (Iterator<String> iter = tableNames.iterator(); iter.hasNext();) {
-			String tableName = iter.next();
-			ORMGenTable table = customizer.getTable(tableName);
-
-			String className = table.getQualifiedClassName();
-
-			generateClass(table, templDir.getAbsolutePath(), progress);
-			progress.worked(1);
-
-			genClasses.add( className );
-			/*
-			 * add the composite key class to persistence.xml because some 
-			 * JPA provider(e.g. Kodo) requires it. Hibernate doesn't seem to care). 
-			 */
-			if (table.isCompositeKey()) {
-				genClasses.add(table.getQualifiedCompositeKeyClassName());
-			}
-		}
-		
-		//update persistence.xml
-		if (this.customizer.shouldUpdatePersistenceXml()) {
-			updatePersistenceXml(genClasses);
-		}
-		progress.done();
-	}
-	
-	private void updatePersistenceXml(final List<String> genClasses) {
-		JpaXmlResource resource = jpaProject.getPersistenceXmlResource();
-		if (resource == null) {
-			//the resource would only be null if the persistence.xml file had an invalid content type,
-			//do not attempt to update
-			return;
-		}
-
-		resource.modify(new Runnable() {
-			public void run() {
-				Persistence persistence = jpaProject.getRootContextNode().getPersistenceXml().getPersistence();
-				if (persistence == null) {
-					// invalid content, do not attempt to update
-					return;
-				}
-				PersistenceUnit persistenceUnit;
-				// create a persistence unit if one doesn't already exist
-				if (persistence.persistenceUnitsSize() == 0) {
-					persistenceUnit = persistence.addPersistenceUnit();
-					persistenceUnit.setName(jpaProject.getName());
-				} else {
-					// we only support one persistence unit - take the first one
-					persistenceUnit = persistence.persistenceUnits().next();
-				}
-				for (Iterator<String> stream = genClasses.iterator(); stream.hasNext();) {
-					String className = stream.next();
-					if (!persistenceUnit.mappingFileRefsContaining(className).hasNext() && !persistenceUnit.specifiesPersistentType(className)) {
-						ClassRef classRef = persistenceUnit.addSpecifiedClassRef();
-						classRef.setClassName(className);
-					}
-				}
-			}
-		});
-	}
-
-	private File prepareTemplatesFolder() throws IOException, Exception,
-			CoreException {
-		//Prepare the Velocity template folder:
-		//If the plug-in is packaged as a JAR, we need extract the template 
-		//folder into the plug-in state location. This is required by Velocity
-		//since we use included templates.
-		Bundle bundle = Platform.getBundle(JptGenPlugin.PLUGIN_ID);
-		String templatesPath = "templates/entities/";  //$NON-NLS-1$
-		Path path = new Path( templatesPath);
-		URL url = FileLocator.find(bundle, path, null);
-		if ( url ==null  ) {
-			throw new CoreException(new Status(IStatus.ERROR, JptGenPlugin.PLUGIN_ID,  JptGenMessages.Templates_notFound + " "+  JptGenPlugin.PLUGIN_ID + "/" + templatesPath) );//$NON-NLS-1$
-		}		
-		URL templUrl = FileLocator.resolve(url);
-		
-		//Have this check so that the code would work in both PDE and JARed plug-in at runtime
-		File templDir = null;
-		if( UrlUtil.isJarUrl(templUrl) ){
-			templDir = FileUtil.extractFilesFromBundle( templUrl, bundle, templatesPath );
-		}else{
-			templDir = UrlUtil.getUrlFile(templUrl);
-		}
-		
-
-		if (templDir==null || !templDir.exists()) {
-			throw new CoreException(new Status(IStatus.ERROR, JptGenPlugin.PLUGIN_ID,  JptGenMessages.Templates_notFound + " "+  JptGenPlugin.PLUGIN_ID ) );//$NON-NLS-1$
-		}
-		return templDir;
-	}
-	
-	/**
-	 * Saves/Creates the .java file corresponding to a database table 
-	 * with the given content.
-	 * 
-	 * @param templDir The velocity template file directory. It is assumed 
-	 * that this directory contains the 2 files <em>main.java.vm</em> 
-	 * and <em>pk.java.vm</em> 
-	 * @param progress 
-	 */
-	protected void generateClass(ORMGenTable table, String templateDirPath, IProgressMonitor monitor) throws Exception {
-
-		String subTaskName = NLS.bind(JptGenMessages.EntityGenerator_taskName, table.getName());
-		SubMonitor sm = SubMonitor.convert(monitor, subTaskName, 100);
-
-		try{
-			IFolder javaPackageFolder = getJavaPackageFolder(table, monitor);
-			IFile javaFile = javaPackageFolder.getFile( table.getClassName() + ".java"); //$NON-NLS-1$
-			
-			if( javaFile.exists() ){
-				if( overwriteConfirmer!=null && !overwriteConfirmer.overwrite(javaFile.getName()) )
-					return;
-			}
-			//JdkLogChute in this version of Velocity not allow to set log level
-			//Workaround by preset the log level before Velocity is initialized
-			Logger logger = Logger.getLogger( LOGGER_NAME );
-			logger.setLevel( Level.SEVERE );
-			
-			Properties vep = new Properties();
-			vep.setProperty("file.resource.loader.path", templateDirPath); //$NON-NLS-1$
-			vep.setProperty( JdkLogChute.RUNTIME_LOG_JDK_LOGGER, LOGGER_NAME );
-			VelocityEngine ve = new VelocityEngine();
-		    ve.init(vep);
-		    sm.worked(20);
-		    
-		    generateJavaFile(table, javaFile, ve, "main.java.vm", true/*isDomainClass*/, monitor); //$NON-NLS-1$
-		    sm.worked(80);
-		    
-		    if (table.isCompositeKey()) {
-		    	IFile compositeKeyFile = javaPackageFolder.getFile( table.getCompositeKeyClassName()+".java"); //$NON-NLS-1$
-		    	generateJavaFile(table, compositeKeyFile, ve, "pk.java.vm", false/*isDomainClass*/, monitor ); //$NON-NLS-1$
-		    }
-		    
-			javaFile.refreshLocal(1, new NullProgressMonitor());
-			
-		} catch(Throwable e){
-			CoreException ce = new CoreException(new Status(IStatus.ERROR, JptGenPlugin.PLUGIN_ID, JptGenMessages.Templates_notFound + "" + JptGenPlugin.PLUGIN_ID , e) );//$NON-NLS-1$
-			JptGenPlugin.logException( ce );
-		}
-		sm.setWorkRemaining(0);
-	}
-	
-	private void generateJavaFile(ORMGenTable table, IFile javaFile, VelocityEngine ve
-			, String templateName, boolean isDomainClass, IProgressMonitor monitor) throws Exception {
-		VelocityContext context = new VelocityContext();
-        context.put("table", table); //$NON-NLS-1$
-        context.put("customizer", getCustomizer()); //$NON-NLS-1$
-        
-		StringWriter w = new StringWriter();
-		ve.mergeTemplate(templateName, context, w);
-		
-		String fileContent = w.toString();
-		if (javaFile.exists()) {
-			if (isDomainClass) {
-				updateExistingDomainClass(table.getQualifiedClassName(), javaFile, fileContent);
-			} else {
-				javaFile.setContents(new ByteArrayInputStream(fileContent.getBytes()), true, true, monitor );
-			}
-		} else {
-			createFile(javaFile, new ByteArrayInputStream(fileContent.getBytes()));
-		}		
-	}
-	
-	
-	/**
-	 * Updates the (existing) Java file corresponding to the given class.
-	 * 
-	 * @param className The qualified class name.
-	 * 
-	 * @param javaFile The existing Java file of the class to update.
-	 * 
-	 * @param fileContent The new file content.
-	 */
-	protected void updateExistingDomainClass(String className, IFile javaFile, String fileContent) throws Exception {
-		/*use CompilationUnitModifier instead of calling WideEnv.getEnv().setFileContent 
-		 * so that if the unit is up to date if it is used before file change 
-		 * notifications are delivered (see EJB3ImportSchemaWizard.updateExistingDomainClass for example)*/
-		IJavaProject project = jpaProject.getJavaProject();
-		CompilationUnitModifier modifier = new CompilationUnitModifier(project, className);
-		modifier.setJavaSource(fileContent);
-		modifier.save();
-	}
-	
-	public void createFile(IFile file, java.io.InputStream contents) throws CoreException {		
-		file.create(contents, false, null/*monitor*/);
-	}
-	
-	public IFolder getJavaPackageFolder(ORMGenTable table, IProgressMonitor monitor) throws CoreException {
-		IPackageFragmentRoot root = getDefaultJavaSourceLocation(getJavaProject(), table.getSourceFolder());
-		String packageName = table.getPackage();
-		if( packageName==null ) packageName ="";
-		IPackageFragment packageFragment = root.getPackageFragment(packageName);
-		if( !packageFragment.exists()){
-			root.createPackageFragment(packageName, true, monitor);
-		}		
-		return (IFolder)packageFragment.getResource();
-	}
-
-	private IJavaProject getJavaProject(){
-		return this.jpaProject.getJavaProject();
-	}
-
-	private IPackageFragmentRoot getDefaultJavaSourceLocation(IJavaProject jproject, String sourceFolder){
-		IPackageFragmentRoot defaultSrcPath = null;
-		if (jproject != null && jproject.exists()) {
-			try {
-				IPackageFragmentRoot[] roots = jproject.getPackageFragmentRoots();
-				for (int i = 0; i < roots.length; i++) {
-					if (roots[i].getKind() == IPackageFragmentRoot.K_SOURCE ){
-						if (defaultSrcPath == null) {
-							defaultSrcPath = roots[i];
-						}
-						String path = roots[i].getPath().toString(); 
-						if (path.equals('/' + sourceFolder)) {
-							return roots[i] ; 
-						}
-					}
-				}
-			} catch (JavaModelException e) {
-				JptGenPlugin.logException(e);
-			}
-		}
-		return defaultSrcPath;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/TagNames.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/TagNames.java
deleted file mode 100644
index 2b6533a..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/TagNames.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-/**
- * TODO: merge with JPA class ?
- * The JPA mapping tag and attribute names.
- * 
- */
-public class TagNames
-{
-	public static final String BASIC_TAG = "basic";
-	public static final String CASCADE_TAG = "cascade";
-	public static final String COLUMN_TAG = "column";
-	public static final String EMBEDDED_TAG = "embedded";
-	public static final String EMBEDDED_ID_TAG = "embedded-id";
-	public static final String GENERATED_VALUE_TAG = "generated-value";
-	public static final String ID_TAG = "id";
-	public static final String ID_CLASS_TAG = "id";
-	public static final String JOIN_COLUMN_TAG = "join-column";
-	public static final String INVERSE_JOIN_COLUMN_TAG = "inverse-join-column";
-	public static final String LOB_TAG = "lob";
-	public static final String MANY_TO_MANY_TAG = "many-to-many";
-	public static final String MANY_TO_ONE_TAG = "many-to-one";
-	public static final String MAPPED_BY_TAG = "mapped-by";
-	public static final String ONE_TO_MANY_TAG = "one-to-many";
-	public static final String ONE_TO_ONE_TAG = "one-to-one";
-	public static final String PK_JOIN_COLUMN_TAG = "primary-key-join-column";
-	public static final String TABLE_TAG = "table";
-	public static final String VERSION_TAG = "version";
-	public static final String JOIN_TABLE_TAG = "join-table";
-
-	/*cascade tags*/
-	public static final String ALL_CASCADE = "all";
-	public static final String PERSIST_CASCADE = "persist";
-	public static final String MERGE_CASCADE = "merge";
-	public static final String REMOVE_CASCADE = "remove";
-	public static final String REFRESH_CASCADE = "refresh";
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/CompilationUnitModifier.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/CompilationUnitModifier.java
deleted file mode 100644
index 586f01b..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/CompilationUnitModifier.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal.util;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.ASTParser;
-import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jface.text.Document;
-import org.eclipse.text.edits.TextEdit;
-
-
-/**
- * Performs the grunt work needed for modifying a compilation 
- * unit and performs the modified compilation unit save.
- * 
- * The typical usage is as follows:
- * <ol><li>Create an instance.
- * 
- * <li>Modify the compilation unit using AST operations performed 
- * 	on the node returned by {@link #getCompilationUnitNode()}.
- *  Alternatively you can call <code>setJavaSource</code> to change the entire source code. 
- * 
- * <li>Call the {@link #save()} method.
- * 
- */
-public class CompilationUnitModifier
-{
-	private IJavaProject mProject;
-	private ICompilationUnit mCompilationUnit;
-	private CompilationUnit mCompilationUnitNode;
-	private Document mDocument;
-	
-	public CompilationUnitModifier(IJavaProject project, String className) throws Exception {
-		super();
-		
-		mProject = project;
-		
-		IType type = project.findType(className);
-		if (type == null) {
-			throw new Exception("The class " + className + " does not exist.");
-		}
-		mCompilationUnit = type.getCompilationUnit();
-		if (mCompilationUnit == null) {
-			throw new Exception("The source code for " + className + " does not exist.");
-		}
-	}
-	public CompilationUnitModifier(IJavaProject project, ICompilationUnit cu) throws Exception {
-		super();
-		
-		mProject = project;
-		mCompilationUnit = cu;
-	}
-	public CompilationUnitModifier(IJavaProject project, ICompilationUnit cu, CompilationUnit cuNode) throws Exception {
-		super();
-		
-		mProject = project;
-		mCompilationUnit = cu;
-		mCompilationUnitNode = cuNode;
-		
-		getCompilationUnitNode(); //to create mDocument (the caller in this case does not have to call getCompilationUnitNode)
-	}
-	public ICompilationUnit getCompilationUnit() {
-		return mCompilationUnit;
-	}
-	/**
-	 * Returns the compilation unit node that should be used for 
-	 * tyhe modification AST operations.
-	 */
-	public CompilationUnit getCompilationUnitNode() {
-		if (mCompilationUnitNode == null) {
-			ASTParser c = ASTParser.newParser(AST.JLS3);
-			c.setSource(mCompilationUnit);
-			c.setResolveBindings(true);
-			mCompilationUnitNode = (CompilationUnit)c.createAST(null);
-		}
-		if (mDocument == null) {
-			try {
-				mDocument = new Document(mCompilationUnit.getBuffer().getContents());
-			} catch (JavaModelException e) {
-				e.printStackTrace();
-			}
-			
-			mCompilationUnitNode.recordModifications();
-		}
-		
-		return mCompilationUnitNode;
-	}
-	/**
-	 * Changes the entire Java source code of the compilation unit.
-	 */
-	public void setJavaSource(String newSource) {
-		try {
-			mCompilationUnit.getBuffer().setContents(newSource);
-		} catch (JavaModelException e) {
-			e.printStackTrace();
-		}
-	}
-	/**
-	 * Saves the compilation unit modifications.
-	 */
-	public void save() throws Exception {
-		if (mCompilationUnitNode != null) {
-			assert(mDocument != null); //see getCompilationUnitNode
-			
-			//computation of the text edits
-			TextEdit edits = mCompilationUnitNode.rewrite(mDocument, mProject.getOptions(true));
-			//computation of the new source code
-			edits.apply(mDocument);
-			String newSource = mDocument.get();
-			// update of the compilation unit
-			mCompilationUnit.getBuffer().setContents(newSource);
-		}
-		
-		if (mCompilationUnit.isWorkingCopy()) {
-			mCompilationUnit.commitWorkingCopy(true/*force*/, null/*monitor*/);
-		} else {
-			mCompilationUnit.save(null/*monitor*/, true/*force*/);
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/DTPUtil.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/DTPUtil.java
deleted file mode 100644
index b4a71f9..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/DTPUtil.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal.util;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.ForeignKey;
-import org.eclipse.jpt.db.Schema;
-import org.eclipse.jpt.db.Table;
-import org.eclipse.jpt.db.ForeignKey.ColumnPair;
-
-/**
- * Collection of utility methods to access DTP and other jpt.db APIs 
- *
- */
-public class DTPUtil {
-
-	public static boolean isAutoIncrement(Column c){
-		//@ TODO
-		//Blocked by DTP bug
-		//https://bugs.eclipse.org/bugs/show_bug.cgi?id=250023
-		//The Dali bug is
-		//https://bugs.eclipse.org/bugs/show_bug.cgi?id=249658
-		//
-		return false;
-	}
-
-	/**
-	 * Return list of fk
-	 * @param dbTable
-	 * @return
-	 */
-	public static List<ForeignKeyInfo> getForeignKeys(Table dbTable) {
-		List<ForeignKeyInfo> ret = new ArrayList<ForeignKeyInfo>();
-		if(dbTable!=null){
-			for (ForeignKey fk : dbTable.getForeignKeys()) {
-				Iterator<ColumnPair> columnPaires = fk.getColumnPairs().iterator();
-				ForeignKeyInfo fkInfo = null;
-				while( columnPaires.hasNext() ){
-					ColumnPair columnPair = columnPaires.next();
-					if( fkInfo == null){
-						String tableName = dbTable.getName();
-						String referencedTableName = "";
-						Table referencedTable = fk.getReferencedTable();
-						referencedTableName = referencedTable.getName();
-						fkInfo = new ForeignKeyInfo(fk, tableName, referencedTableName );
-					}
-					String baseColName = columnPair.getBaseColumn().getName();
-					String referencedColName = columnPair.getReferencedColumn().getName();
-					fkInfo.addColumnMapping( baseColName,  referencedColName );
-				} 
-				if( fkInfo !=null )
-					ret.add( fkInfo );
-			}
-		}
-		return ret;
-	}
-
-	public static String getJavaType(Column dbColumn) {
-		return dbColumn.isPartOfPrimaryKey() ?
-				dbColumn.getPrimaryKeyJavaTypeDeclaration() :
-				dbColumn.getJavaTypeDeclaration();
-	}
-
-	public static boolean isDefaultSchema(Table dbTable){
-		String schemaName = dbTable.getSchema().getName();
-		Schema defaultSchema = dbTable.getSchema().getConnectionProfile().getDatabase().getDefaultSchema();
-		return defaultSchema.getName() == schemaName;
-	}	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/EntityGenTools.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/EntityGenTools.java
deleted file mode 100644
index 81e2563..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/EntityGenTools.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal.util;
-
-import java.util.Collection;
-import org.eclipse.jpt.utility.internal.NameTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * Utility methods for entity generation.
- */
-public class EntityGenTools {
-
-	/**
-	 * Convert the specified (database) identifier to a unique "Java style"
-	 * class name.
-	 * @see #convertToUniqueJavaStyleIdentifier(String, boolean, Collection)
-	 */
-	public static String convertToUniqueJavaStyleClassName(String identifier, Collection<String> classNames) {
-		return convertToUniqueJavaStyleIdentifier(identifier, true, classNames);
-	}
-
-	/**
-	 * Convert the specified (database) identifier to a unique "Java style"
-	 * attribute (field/property) name.
-	 * @see #convertToUniqueJavaStyleIdentifier(String, boolean, Collection)
-	 */
-	public static String convertToUniqueJavaStyleAttributeName(String identifier, Collection<String> attributeNames) {
-		return convertToUniqueJavaStyleIdentifier(identifier, false, attributeNames);
-	}
-
-	/**
-	 * Convert the specified (database) identifier to a unique "Java style"
-	 * identifier:
-	 *     - if the identifier is all-caps, convert underscores to "camel case"
-	 *     - if the identifier is not all-caps, leave it unchanged (except, possibly, for the first letter)
-	 *     - convert to a legal Java identifier
-	 *         - eliminate illegal characters
-	 *         - if the result is a reserved word, modify it slightly
-	 * If the result is already one of the specified existing identifiers
-	 * (ignoring case so we don't have filename collisions on Windows),
-	 * modify it slightly again.
-	 *     "FOO" => "Foo" or "foo"
-	 *     "FOO_BAR" => "FooBar" or "fooBar"
-	 *     "PACKAGE" => "Package" or "package_"
-	 */
-	public static String convertToUniqueJavaStyleIdentifier(String identifier, boolean capitalizeFirstLetter, Collection<String> identifiers) {
-		String result = identifier;
-		if (StringTools.stringIsUppercase(result) || StringTools.stringIsLowercase(result)) {
-			// leave mixed case identifiers alone?
-			result = StringTools.convertUnderscoresToCamelCase(result, capitalizeFirstLetter);
-		} else {
-			result = capitalizeFirstLetter ? StringTools.capitalize(result) : StringTools.uncapitalize(result);
-		}
-		result = NameTools.convertToJavaIdentifier(result);
-		// assume that converting to a unique name will not result in a Java reserved word
-		// (since no Java reserved words end with a number)
-		result = NameTools.uniqueNameForIgnoreCase(result, identifiers);
-		return result;
-	}
-
-
-	// ********** constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private EntityGenTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/FileUtil.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/FileUtil.java
deleted file mode 100644
index 890b846..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/FileUtil.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal.util;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.jar.JarInputStream;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-
-import org.eclipse.jpt.gen.internal.JptGenMessages;
-
-import org.eclipse.osgi.service.datalocation.Location;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.Bundle;
-
-/**
- * Collections of utility methods handling files.
- * 
- */
-public class FileUtil
-{
-	
-	public static void deleteFolder(File folder)
-		throws IOException
-	{
-		File[] files = folder.listFiles();
-		//empty the folder first (java.io.file.delete requires it empty)
-		if (files != null) {
-			for (int i = 0; i < files.length; ++i) {
-				File f = files[i];
-				if (f.isDirectory())
-					deleteFolder(f);
-				else
-					deletePath(f);
-			}
-		}
-		deletePath(folder);
-	}
-
-	public static void deletePath(File f)
-		throws IOException
-	{
-		if (!f.delete()) {
-			String msgId = f.isDirectory() ?  JptGenMessages.Delete_Folder_Error :  JptGenMessages.Delete_File_Error;
-			throw new IOException( NLS.bind(msgId,f.getPath()));
-		}
-	}
-	
-	public static byte[] readFile(File src)
-		throws IOException
-	{
-		java.io.FileInputStream fin = new java.io.FileInputStream(src);
-		try {
-			long fileLen = src.length();
-			if (fileLen > Integer.MAX_VALUE)
-				throw new IOException("file length too big to be read by FileUtil.readFile: " + fileLen);
-		
-			byte[] bytes = new byte[(int)fileLen];
-			fin.read(bytes);
-			return bytes;
-		}
-		finally {
-			fin.close();
-		}
-	}
-
-	public static void writeFile(File dest, byte[] bytes)
-		throws IOException
-	{
-		if (dest.exists() && !dest.canWrite())
-			throw new IOException( NLS.bind(JptGenMessages.File_Read_Only_Error, dest.getPath()));  //throw with a clear error because otherwise FileOutputStream throws FileNotFoundException!
-		java.io.FileOutputStream fout = new java.io.FileOutputStream(dest.getPath(), false/*append*/);
-		try {
-			fout.write(bytes);
-		}
-		finally {
-			fout.flush();
-			fout.close();
-		}
-	}
-
-	/**
-	 * Returns the url for a file.
-	 * This basically the same as file.toUrl() but without the non-sense exception.
-	 */
-	public static URL getFileUrl(File file) {
-		try {
-			return file.toURI().toURL();
-		} catch (MalformedURLException e) {
-			return null; //should not happen as file.toURL() does not really throw an exception
-		}
-	}
-
-	public static void setFileContent(File file, java.io.InputStream contents) throws java.io.IOException {
-		Path path = new Path(file.getAbsolutePath());
-		try {
-			IFile iFile = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(path);
-			if (iFile == null) {
-				throw new IOException("The path " + file + " does not seem to be a valid file path.");
-			}
-			iFile.setContents(contents, true/*force*/, true/*keepHistory*/, null/*monitor*/);
-		} catch (CoreException ex) {
-			throw new IOException(ex.getMessage());
-		}
-	}	
-	
-    /**
-     * Extract the contents of a Jar archive to the specified destination.
-     */
-    public static void unjar(InputStream in, File dest) throws IOException {
-        if (!dest.exists()) {
-            dest.mkdirs();
-        }
-        if (!dest.isDirectory()) {
-            throw new IOException("Destination must be a directory.");//$NON-NLS-1$
-        }
-        JarInputStream jin = new JarInputStream(in);
-        byte[] buffer = new byte[1024];
-
-        ZipEntry entry = jin.getNextEntry();
-        while (entry != null) {
-            String fileName = entry.getName();
-            if (fileName.charAt(fileName.length() - 1) == '/') {
-                fileName = fileName.substring(0, fileName.length() - 1);
-            }
-            if (fileName.charAt(0) == '/') {
-                fileName = fileName.substring(1);
-            }
-            if (File.separatorChar != '/') {
-                fileName = fileName.replace('/', File.separatorChar);
-            }
-            File file = new File(dest, fileName);
-            if (entry.isDirectory()) {
-                // make sure the directory exists
-                file.mkdirs();
-                jin.closeEntry();
-            } else {
-                // make sure the directory exists
-                File parent = file.getParentFile();
-                if (parent != null && !parent.exists()) {
-                    parent.mkdirs();
-                }
-
-                // dump the file
-                OutputStream out = new FileOutputStream(file);
-                int len = 0;
-                while ((len = jin.read(buffer, 0, buffer.length)) != -1) {
-                    out.write(buffer, 0, len);
-                }
-                out.flush();
-                out.close();
-                jin.closeEntry();
-                file.setLastModified(entry.getTime());
-            }
-            entry = jin.getNextEntry();
-        }
-        /* Explicitly write out the META-INF/MANIFEST.MF so that any headers such
-         as the Class-Path are seen for the unpackaged jar
-         */
-        Manifest mf = jin.getManifest();
-        if (mf != null) {
-            File file = new File(dest, "META-INF/MANIFEST.MF");//$NON-NLS-1$
-            File parent = file.getParentFile();
-            if (parent.exists() == false) {
-                parent.mkdirs();
-            }
-            OutputStream out = new FileOutputStream(file);
-            mf.write(out);
-            out.flush();
-            out.close();
-        }
-        jin.close();
-    }
-    
-	//Used to Unzip the a specific folder packed inside a plug-in bundle to the plug-in state location
-	public static File extractFilesFromBundle( URL url, Bundle bundle, String path ) throws Exception {
-		URL jarUrl = UrlUtil.getJarFileUrl(url);
-		File jarFile = new File(jarUrl.getFile() );
-		Location configLocation = Platform.getConfigurationLocation();
-		String pluginId = bundle.getSymbolicName();
-		File configFolder = new File( configLocation.getURL().getFile(), pluginId);
-		File templDir = new File( configFolder, path );
-		if( !templDir.exists() ){
-			FileUtil.unjar( new FileInputStream( jarFile ), configFolder );
-			//Delete un-related files and folders
-			File[] files = configFolder.listFiles();
-			for( File f : files ){
-				if( f.isFile() )
-					f.delete();
-				else if(  templDir.getPath().indexOf( f.getPath() ) !=0  ){
-					FileUtil.deleteFolder(f);
-				}
-			}
-		}
-		return templDir ;
-	}	
-}
-
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/ForeignKeyInfo.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/ForeignKeyInfo.java
deleted file mode 100644
index 75e91e9..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/ForeignKeyInfo.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal.util;
-
-import java.util.List;
-
-import org.eclipse.jpt.db.ForeignKey;
-
-/**
- * Represents the metadata for a particular foreign key relationship 
- * in a relational database schema.
- * <p/>
- * The referrer column is one which actually contains a foreign 
- * key constraint, and is equivalent to the "foreign key" column.
- * <p/>
- * The referenced column is one which a referrer or foreign key 
- * column references, and is equivalent to the "primary key" column.
- * 
- */
-public class ForeignKeyInfo
-{
-	private transient ForeignKey mForeignKey ;
-    private String mName;
-    private String mReferrerTableName;
-    private String mReferencedTableName;
-    private List<String> mReferrerColNames = new java.util.ArrayList<String>();
-    private List<String> mReferencedColNames = new java.util.ArrayList<String>();
-    
-    /**
-     * @param fk The name of the constraint backing 
-     * this foreign key metadata instance.
-     */
-    public ForeignKeyInfo(ForeignKey fk, String referrerTableName, String referencedTableName) {
-    	mForeignKey = fk;
-    	mName = fk.getName();
-    	mReferrerTableName = referrerTableName;
-    	mReferencedTableName = referencedTableName;
-	}
-    /**
-     * Obtain the constraint name for this foreign key specification.
-     * The name for a Foreign Key may, as per the JDBC specification,
-     * be <code>null</code> where the constraint is not named.
-     * In addition, it may be hardly recognizable to the user,
-     * particularly for DB/2 constraints.
-     * 
-     * @return The name of the constraint backing
-     *         this foreign key metadata instance.
-     */
-    public String getName()
-    {
-        return mName;
-    }
-    
-    public ForeignKey getForeignKey(){
-    	return mForeignKey;
-    }
-    /**
-     * Add another pair of foreign key mappings for this foreign key
-     * definition.
-     * 
-     * @param referrerColumn The referrer column name for this mapping.
-     * 
-     * @param referencedColumn The referenced column name for this mapping.
-     */
-    public void addColumnMapping(String referrerColName, String referencedColName) {
-    	mReferrerColNames.add(referrerColName);
-    	mReferencedColNames.add(referencedColName);
-    }
-    /**
-     * Returns the referrer table name of this foreign key
-     * relationship.
-     */
-    public String getReferrerTableName() {
-        return mReferrerTableName;
-    }
-    /**
-     * Returns the referrer column names for this
-     * foreign key.
-     * The size of this list is always the same as the size of 
-     * the list retured from <code>getReferencedColumnNames</code>
-     */
-    public List<String> getReferrerColumnNames() {
-        return mReferrerColNames;
-    }
-    /**
-     * Returns the referenced table name of this foreign key
-     * relationship.
-     */
-    public String getReferencedTableName() {
-    	 return mReferencedTableName;
-    }
-    /**
-     * Returns the referenced column names for this
-     * foreign key.
-     * The size of this list is always the same as the size of 
-     * the list retured from <code>getReferrerColumnNames</code>
-     */
-    public List<String> getReferencedColumnNames() {
-        return mReferencedColNames;
-    }
-    /* (non-Javadoc)
-     * @see java.lang.Object#toString()
-     */
-    public String toString() {
-    	return "name=" + mName
-		+ ", referrerTable=" + mReferrerTableName
-		+ ", referencedTable=" + mReferencedTableName
-		+ ", referrerColumns=" + mReferrerColNames
-		+ ", referencedColumns=" + mReferencedColNames
-			;
-    }
-}
-
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/StringUtil.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/StringUtil.java
deleted file mode 100644
index ee45e06..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/StringUtil.java
+++ /dev/null
@@ -1,648 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal.util;
-
-import java.beans.Introspector;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-public class StringUtil
-{
-	/**
-	 * Pads a string by adding a sequence of an arbitrary character at the beginning.
-	 * @param padChar The character to be used for padding.
-	 * @param len The desired length after padding.
-	 * @return The padded string. For example if <code>str</code> is "f4e" and <code>padChar</code> is '0' 
-	 * and <code>len</code> is 6 then this method returns "000f4e"
-	 */
-	public static String padLeft(String str, char padChar, int len) {
-		if(str == null) {
-			return null;
-		}
-		int strLen = str.length();
-		if (strLen < len) {
-			StringBuffer buffer = new StringBuffer(len);
-			int count = len-strLen;
-			for (int i = 0; i < count; ++i)
-				buffer.append(padChar);
-			buffer.append(str);
-			str = buffer.toString();
-		}
-		return str;
-	}
-	/**
-	 * Inserts a given character at the beginning and at the end of the specified string.
-	 * For example if the string is <tt>extreme</tt> and the char is <tt>'</tt> then 
-	 * the returned string is <tt>'exterme'</tt>.
-	 */
-	public static String quote(String str, char c) {
-		assert(str != null);
-		StringBuffer buffer = new StringBuffer(str.length()+2);
-		buffer.append(c);
-		buffer.append(str);
-		buffer.append(c);
-		return buffer.toString();
-	}
-	public static String doubleQuote(String str) {
-		return quote(str, '"');
-	}
-	/**
-	 * Removes the first and last single or double quotes (if they exist).
-	 */
-	public static String unquote(String quoted) {
-		if (quoted != null && quoted.length() >= 2){
-			int len = quoted.length();
-			char firstChar = quoted.charAt(0);
-			char lastChar = quoted.charAt(len-1);
-			if (firstChar == lastChar && (firstChar == '\'' || firstChar == '"')) {
-				return quoted.substring(1, len-1);
-			}
-		}
-		return quoted;
-	}
-	/**
-	 * Truncates a string and adds "..." in the result string.
-	 * If the string length is less or equal to the max len then 
-	 * the original string is returned.
-	 */
-	public static String truncate(String s, int maxLen) {
-		if (s == null) {
-			return null;
-		}
-		int len = s.length();
-		if (len > maxLen) {
-			int segmentLen = maxLen/2;
-			s = s.substring(0, segmentLen) + "..." + s.substring(len-segmentLen);
-		}
-		return s;
-	}
-	/**
-	 * Returns a string containing the same character repeated.
-	 */
-	public static String repeat(char c, int count) {
-		StringBuffer buffer = new StringBuffer(count);
-		for (int i = 0; i < count; ++i) {
-			buffer.append(c);
-		}
-		return buffer.toString();
-	}
-	/**
-	 * Returns the given string unless it is emtpty where it returns null.
-	 */
-	public static String nullIfEmpty(String s) {
-		if (s != null && s.length() == 0) {
-			s = null;
-		}
-		return s;
-	}
-	/**
-     * Returns a string containing the same characters as the argument string 
-	 * except that the control characters are replaced by the their hex code.
-	 * For example if the string is "ab\nc" the returned string is "ab{0xA}c".
-	 */
-	public static String getVisibleString(String s) {
-		if (s == null)
-			return null;
-		int len = s.length();
-		StringBuffer buffer = new StringBuffer();
-		for (int i = 0; i < len; ++i) {
-			char c = s.charAt(i);
-			if (c <= 0x1F || (c == 0x20 && (i == 0 || i == len-1))) {
-				buffer.append("(0x" + Integer.toHexString((int)c).toUpperCase() + ")");
-			}
-			else buffer.append(c);
-		}
-		return buffer.toString();
-	}
-	/**
-	 * Replaces a portion of string.
-	 * @param str The original string.
-	 * @param offset The offset in the original string where the replace starts
-	 * @param len The replace length the original string
-	 * @param replaceStr The replacement string
-	 */
-	public static String strReplace(String str, int offset, int len, String replaceStr) {
-		StringBuffer buffer = new StringBuffer(str.length()-len+replaceStr.length());
-		buffer.append(str.substring(0, offset));
-		buffer.append(replaceStr);
-		buffer.append(str.substring(offset+len));
-		
-		return buffer.toString();
-	}
-	public static String strReplace(String str, String pattern, String replaceStr)
-	{
-		if(str == null) {
-			return null;
-		}
-		if(pattern == null || pattern.equals("")) {
-			return str;
-		}
-		int index = str.indexOf(pattern);
-		if (index < 0)
-			return str;
-		
-		if (replaceStr == null)
-			replaceStr = "";
-		return str.substring(0, index) + replaceStr + str.substring(index + pattern.length());
-	}
-	public static String strReplaceAll(String str, String pattern, String replaceStr)
-	{
-		if(str == null) {
-			return null;
-		}
-		if (replaceStr == null)
-			replaceStr = "";
-		if(pattern == null || pattern.equals("")) {
-			return str;
-		}
-		int index = str.indexOf(pattern);
-		while (index >= 0) {
-			str = str.substring(0, index) + replaceStr + str.substring(index + pattern.length());
-			index = str.indexOf(pattern, index+replaceStr.length());
-		}
-		return str;
-	}
-	public static String strInsert(String str, int index, String insertStr)
-	{
-		return str.substring(0, index)
-				+ insertStr
-				+ str.substring(index);
-	}
-    /**
-     * Tokenize the specified string into a <code>List</code> of
-     * words.
-     * If the string specified is <code>null</code> or empty, this
-     * method will return <code>null</code>.
-     * 
-     * @param s      The string to tokenize into a <code>List</code>.
-     * @param sep    The separator character to use to split
-     *               the string.
-     * @param trim   If <code>true</code>, run <code>trim</code> on
-     *               each element in the result <code>List</code>.
-     * 
-     * @return A <code>List</code> containing all tokenized words
-     *         in the parameter string.
-     *         Each element is of type <code>String</code>.
-     */
-	public static List<String> strToList(String s, char sep, boolean trim)
-	{
-	//ex: if sep is ';' then s should be someting like "Red;Black"
-		if (s == null || s.length() == 0)
-			return null;
-			
-		ArrayList<String> result = new ArrayList<String>();
-		
-		char delimiters[] = {sep};
-		java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(s, new String(delimiters), true/*returnDelimiters*/);
-		String lastTok=null;
-		while (tokenizer.hasMoreTokens()) {
-			String tok = tokenizer.nextToken();
-			if (tok.length()==1 && tok.charAt(0)==sep){//delimiter
-			    if (tok.equals(lastTok)||lastTok==null/*first element is empty*/)
-			        result.add("");
-			}
-			else{
-			    if (trim)
-			        tok = tok.trim();
-			    result.add(tok);
-			}
-			lastTok=tok;
-		}
-		if(lastTok.length()==1 && lastTok.charAt(0)==sep)//last element is empty
-		    result.add("");
-		result.trimToSize();
-		return result;
-	}
-	public static List<String> strToList(String s, char sep)
-	{
-		return strToList(s, sep, false/*trim*/);
-	}
-	
-	@SuppressWarnings("unchecked")
-	public static String listToStr(Collection a, char sep)
-	{
-		return listToStr(a, String.valueOf(sep));
-	}
-	
-	public static String listToStr(Collection<Object> a, String sep) {
-		//reverse of strToList
-		if (a == null)
-			return null;
-		int count = a.size();
-		if (count == 0)
-			return null;
-		
-		StringBuffer buffer = null;
-		for (Iterator<Object> iter = a.iterator(); iter.hasNext(); )
-		{
-			Object obj = iter.next();
-			if (obj == null)
-				continue;
-			
-			if (buffer == null)
-				buffer = new StringBuffer();
-			else
-				buffer.append(sep);
-			if (obj instanceof String)
-				buffer.append((String)obj);
-			else
-				buffer.append(obj);
-		}
-		return (buffer != null) ? buffer.toString() : null;
-	}
-	/**
-	 * Convert the text of a String into a Map of Strings, where each
-	 * key and value in the Map is of type String.
-	 * 
-	 * @param s      The string to be converted to a Map.
-	 * @param sep1   The separator between keys and their
-	 *               values.
-	 * @param sep2   The separator between key-value pairs.
-	 * 
-	 * @return The string converted to a Map.
-	 */
-	public static java.util.Map<String, String> strToMap(String s, char sep1, char sep2)
-	{
-		return strToMap(s, sep1, sep2, false/*lowercaseKeys*/);
-	}
-	/**
-	 * Convert the text of a String into a Map of Strings, where each
-	 * key and value in the Map is of type String.
-	 * This form also allows you to specify that all keys will be
-	 * converted to lower-case before adding to the Map.
-	 * 
-	 * @param s      The string to be converted to a Map.
-	 * @param sep1   The separator between keys and their
-	 *               values.
-	 * @param sep2   The separator between key-value pairs.
-	 * @param lowercaseKeys
-	 *               Whether to convert keys to lower case
-	 *               before adding to the Map.
-	 * 
-	 * @return The string converted to a Map.
-	 */
-	public static java.util.Map<String, String> strToMap(String s, char sep1, char sep2, boolean lowercaseKeys)
-	{
-		//ex: if sep1 is ':' and sep2 is ',' then s should be something like "color:Red,size:XL"
-		
-		if (s == null || s.length() == 0) {
-			return Collections.emptyMap();
-		}
-			
-		java.util.List<String> a = strToList(s, sep2);
-		if (a == null) {
-			return Collections.emptyMap();
-		}
-		
-		java.util.HashMap<String, String> hm = new java.util.HashMap<String, String>();
-		int count = a.size();
-		for (int i = 0; i < count; ++i)
-		{
-			String s2 = (String)a.get(i); //ex: color:Red
-			int pos = s2.indexOf(sep1);
-			if (pos >= 0)
-			{
-				String name = s2.substring(0, pos);
-				String val = s2.substring(pos+1);
-				if (lowercaseKeys)
-					name = name.toLowerCase();
-				hm.put(name, val);
-			}
-		}
-		return hm;
-	}
-	
-	@SuppressWarnings("unchecked")
-	public static String mapToStr(java.util.Map hm, char sep1, char sep2)
-	//reverse of strToMap
-	{
-		if (hm == null || hm.isEmpty())
-			return null;
-		
-		StringBuffer buffer = new StringBuffer();
-		java.util.Iterator<java.util.Map.Entry> iter = hm.entrySet().iterator();
-		while (iter.hasNext()) {
-			java.util.Map.Entry entry = (java.util.Map.Entry)iter.next();
-			buffer.append(entry.getKey());
-			buffer.append(sep1);
-			buffer.append(entry.getValue());
-			if (iter.hasNext()) {
-				buffer.append(sep2);
-			}
-		}
-		return buffer.toString();
-	}
-    /**
-     * Perform a <em>case insensitive</em> comparison between
-     * the string representations of two objects.
-     * 
-     * @param obj1   The first object to compare.
-     * @param obj2   The second object to compare.
-     * 
-     * @return <code>true</code> if both objects have the
-     *         same case-insensitive string representation.
-     */
-	public static boolean compareAsStrings(Object obj1, Object obj2)
-	{	
-		if (obj1 == null || obj2 == null)
-			return obj1 == obj2;
-		
-		String s1, s2;
-		if (obj1 instanceof String) {
-			s1 = (String)obj1;
-        } else {
-			s1 = obj1.toString();
-        }
-		if (obj2 instanceof String) {
-			s2 = (String)obj2;
-        }
-        else {
-			s2 = obj2.toString();
-        }
-		
-		return s1.equalsIgnoreCase(s2);
-	}
-	/**
-	 * Tests whether a string starts with any of a list of strings.
-	 */
-	public static boolean startsWithAny(String s, List<String> prefixes) {
-		int count = prefixes.size();
-		for (int i = 0; i < count; ++i) {
-			if (s.startsWith((String)prefixes.get(i))) {
-				return true;
-			}
-		}
-		return false;
-	}
-	/**
-	 * Returns the argument string with the first char upper-case.
-	 */
-	public static String initUpper(String str) {
-		if (str == null || str.length() == 0) {
-			return str;
-		}
-		return Character.toUpperCase(str.charAt(0)) + str.substring(1);
-	}
-	/**
-	 * Returns the argument string with the first char lower-case.
-	 */
-	public static String initLower(String str) {
-		if (str == null || str.length() == 0) {
-			return str;
-		}
-		return Character.toLowerCase(str.charAt(0)) + str.substring(1);
-	}
-	/**
-	 * Tests whether all characters in the given string are upper
-	 * case.
-	 */
-	public static boolean isUpperCase(String s) {
-		return s.toUpperCase().equals(s);
-	}
-	/**
-	 * Returns the first non-white char index starting from the 
-	 * specified index.
-	 */
-	public static int skipWhiteSpaces(String str, int index) {
-		int len = str.length();
-		while (index < len) {
-			if (!Character.isWhitespace(str.charAt(index))) {
-				break;
-			}
-			++index;
-		}
-		return index;
-	}
-	/**
-	 * Collapses consecutive white spaces into one space.
-	 */
-	public static String collapseWhiteSpaces(String str){
-	    String result=null;
-	    if (str!=null){
-	        StringBuffer buffer=new StringBuffer();
-	        boolean isInWhiteSpace=false;
-	        for (int i=0;i<str.length();i++){
-	            char c=str.charAt(i);
-	            if (Character.isWhitespace(c)){
-	                isInWhiteSpace=true;
-	            }
-	            else {
-	                if (isInWhiteSpace)
-	                    buffer.append(" ");
-	                isInWhiteSpace=false;   
-	                buffer.append(c);
-	            }
-	        }
-	        result=buffer.toString();
-	    }
-	    return result;
-	}
-	
-	/**
-	 * Utility methods used to convert DB object names to  
-	 * appropriate Java type and field name 
-	 */
-	public static String pluralise(String name) {
-		String result = name;
-		if (name.length() == 1) {
-			result += 's';
-		} else if (!seemsPluralised(name)) {
-			String lower = name.toLowerCase();
-			if (!lower.endsWith("data")) { //orderData --> orderDatas is dumb
-				char secondLast = lower.charAt(name.length() - 2);
-				if (!isVowel(secondLast) && lower.endsWith("y")) {
-					// city, body etc --> cities, bodies
-					result = name.substring(0, name.length() - 1) + "ies";
-				} else if (lower.endsWith("ch") || lower.endsWith("s")) {
-					// switch --> switches  or bus --> buses
-					result = name + "es";
-				} else {
-					result = name + "s";
-				}
-			}
-		}
-		return result;
-	}
-
-	public static String singularise(String name) {
-		String result = name;
-		if (seemsPluralised(name)) {
-			String lower = name.toLowerCase();
-			if (lower.endsWith("ies")) {
-				// cities --> city
-				result = name.substring(0, name.length() - 3) + "y";
-			} else if (lower.endsWith("ches") || lower.endsWith("ses")) {
-				// switches --> switch or buses --> bus
-				result = name.substring(0, name.length() - 2);
-			} else if (lower.endsWith("s")) {
-				// customers --> customer
-				result = name.substring(0, name.length() - 1);
-			}
-		}
-		return result;
-	}
-	private final static boolean isVowel(char c) {
-		boolean vowel = false;
-		vowel |= c == 'a';
-		vowel |= c == 'e';
-		vowel |= c == 'i';
-		vowel |= c == 'o';
-		vowel |= c == 'u';
-		vowel |= c == 'y';
-		return vowel;
-	}
-	private static boolean seemsPluralised(String name) {
-		name = name.toLowerCase();
-		boolean pluralised = false;
-		pluralised |= name.endsWith("es");
-		pluralised |= name.endsWith("s");
-		pluralised &= !(name.endsWith("ss") || name.endsWith("us"));
-		return pluralised;
-	}
-	
-	/**
-	 * Returns the package name of a class name.
-	 * For example if given <code>oracle.util.ObjectUtil</code> it would return 
-	 * <code>oracle.util</code>. If the class is not in a package then null is returned.
-	 */
-	public static String getPackageName(String className) {
-		if(className == null) {
-			return null;
-		}
-		int lastDotIndex = className.lastIndexOf('.');
-		if (lastDotIndex < 0)
-			return null;
-		return className.substring(0, lastDotIndex);
-	}
-	/**
-	 * Returns the class name given a full class name.
-	 * For example if given <code>oracle.util.ObjectUtil</code> it would return 
-	 * <code>ObjectUtil</code>
-	 */
-	public static String getClassName(String fullClassName) {
-		if(fullClassName == null) {
-			return null;
-		}
-		int lastDotIndex = fullClassName.lastIndexOf('.');
-		if (lastDotIndex < 0)
-			return fullClassName;
-		return fullClassName.substring(lastDotIndex+1);
-	}
-
-	
-	/**
-	 * Converts a database column name to a Java variable name (<em>first letter
-	 * not capitalized</em>).
-	 */
-	public static String columnNameToVarName(String columnName) {
-		return dbNameToVarName(columnName);
-	}
-	/**
-	 * Converts a database table name to a Java variable name (<em>first letter
-	 * not capitalized</em>).
-	 */
-	public static String tableNameToVarName(String tableName) {
-		return dbNameToVarName(tableName);
-	}
-	/**
-	 * Converts a database name (table or column) to a java name (<em>first letter
-	 * not capitalized</em>). employee_name or employee-name -> employeeName
-	 */
-	private static String dbNameToVarName(String s) {
-		if ("".equals(s)) {
-			return s;
-		}
-		StringBuffer result = new StringBuffer();
-
-		boolean capitalize = true;
-		boolean lastCapital = false;
-		boolean lastDecapitalized = false;
-		String p = null;
-		for (int i = 0; i < s.length(); i++) {
-			String c = s.substring(i, i + 1);
-			if ("_".equals(c) || " ".equals(c)) {
-				capitalize = true;
-				continue;
-			}
-
-			if (c.toUpperCase().equals(c)) {
-				if (lastDecapitalized && !lastCapital) {
-					capitalize = true;
-				}
-				lastCapital = true;
-			} else {
-				lastCapital = false;
-			}
-
-			if (capitalize) {
-				if (p == null || !p.equals("_")) {
-					result.append(c.toUpperCase());
-					capitalize = false;
-					p = c;
-				} else {
-					result.append(c.toLowerCase());
-					capitalize = false;
-					p = c;
-				}
-			} else {
-				result.append(c.toLowerCase());
-				lastDecapitalized = true;
-				p = c;
-			}
-
-		}
-		/*this was using StringUtil.initLower. Changed to Introspector.decapitalize so that 
-		 * it returns the correct bean property name when called from columnNameToVarName.
-		 * This is necessary because otherwise URL would be uRL which would cause 
-		 * an "The property uRL is undefined for the type xx" error because 
-		 * Introspector.getBeanInfo (used by JavaTypeIntrospector) returns 
-		 * the property name as URL.*/
-		String resultStr = Introspector.decapitalize(result.toString());
-		if (resultStr.equals("class")) {
-			// "class" is illegal becauseOf Object.getClass() clash
-			resultStr = "clazz";
-		}
-		return resultStr;
-	}
-	
-	/**
-	 * Compare two objects. If both String, ignore case
-	 * @param o1
-	 * @param o2
-	 * @param ignoreCaseIfStr
-	 * @return
-	 */
-	public static boolean equalObjects(Object o1, Object o2, boolean ignoreCaseIfStr)
-	{
-		if (o1 == o2) {
-			return true;
-		}
-	    boolean result;
-	    if (o1 == null || o2 == null) {
-	    	return false; //we already checked o1 == o2 above
-	    }
-	    if (ignoreCaseIfStr && o1 instanceof String && o2 instanceof String)
-	        result = ((String)o1).equalsIgnoreCase((String)o2);
-	    else
-	        result = o1.equals(o2);
-	
-	    return result;
-	}
-
-	public static boolean equalObjects(Object o1, Object o2)
-	{
-	    return equalObjects(o1, o2, false/*ignoreCaseIfStr*/);
-	}
-	
-}
-
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/UrlUtil.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/UrlUtil.java
deleted file mode 100644
index c2ef8f8..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/util/UrlUtil.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-
-package org.eclipse.jpt.gen.internal.util;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.osgi.framework.Bundle;
-
-/**
- * Collections of utility methods handling URLs.
- * 
- */
-public class UrlUtil
-{
-	/**
-	 * The <code>file</code> string indicating a url file protocol.
-	 */
-	public static final String FILE_PROTOCOL = "file";
-	/**
-	 * The <code>file</code> string indicating a url http protocol.
-	 */
-	public static final String HTTP_PROTOCOL = "http";
-	/**
-	 * The <code>file</code> string indicating a url http protocol.
-	 */
-	public static final String HTTPS_PROTOCOL = "https";
-	/**
-	 * The <code>file</code> string indicating a url file protocol.
-	 */
-	public static final String JAR_PROTOCOL = "jar";
-
-	
-	/**
-	 * Returns true if the specified url is to a file, i.e its protocol is <code>file</code>.
-	 */
-	public static boolean isFileUrl(URL url) {
-		return url != null && FILE_PROTOCOL.equals(url.getProtocol());
-	}
-	/**
-	 * Returns true if the specified url is to a jar, i.e its protocol is <code>jar</code>.
-	 * For example <code>jar:file:/C:/testapps/example/WEB-INF/lib/struts.jar!/META-INF/tlds/struts-bean.tld</code>.
-	 */
-	public static boolean isJarUrl(URL url) {
-		return url != null && JAR_PROTOCOL.equals(url.getProtocol());
-	}
-	/**
-	 * Returns true if the specified url protocol is http.
-	 */
-	public static boolean isHttpUrl(URL url) {
-		String protocol =  url.getProtocol();
-		return url != null && (HTTP_PROTOCOL.equals(protocol) || HTTPS_PROTOCOL.equals(protocol));
-	}
-	/**
-	 * Returns the <code>File</code> corresponding to a url, or null if the url 
-	 * protocol is not file.
-	 */
-	public static java.io.File getUrlFile(URL url) {
-		if (isFileUrl(url) && !isJarUrl( url ) ){
-			File ret = new java.io.File(url.getFile());
-			return ret ;
-		}
-		return null;
- 	}
-
-	
-	/**
-	 * Returns the url to a jar file given a url to a file inside 
-	 * the jar.
-	 * For example if given 
-	 * <code>jar:file:/C:/testapps/example/WEB-INF/lib/struts.jar!/META-INF/tlds/struts-bean.tld</code>
-	 * this method returns <code>file:/C:/testapps/example/WEB-INF/lib/struts.jar</code>.
-	 * 
-	 * <p>Returns null if the given url is not recognized as a url to a file 
-	 * inside a jar.
-	 */
-	public static URL getJarFileUrl(URL url) {
-		if (!isJarUrl(url)) {
-			return null;
-		}
-		String file = url.getFile(); //file:/C:/testapps/example/WEB-INF/lib/struts.jar!/META-INF/tlds/struts-bean.tld
-		int index = file.indexOf('!');
-		if (index < 0) {
-			return null;
-		}
-		String jarFileUrlStr = file.substring(0, index);
-		try {
-			return new URL(jarFileUrlStr);
-		} catch (MalformedURLException e) {
-			return null;
-		}
-	}
-	
-	public static boolean isRemote(String url){
-		return url.startsWith("http:")||url.startsWith("https:")||url.startsWith("www.");
-	}
-	
-	public static File getTemplateFolder(String plugId , String strPath ){
-		Bundle bundle = Platform.getBundle( plugId );
-		Path path = new Path( strPath );
-		URL url = FileLocator.find(bundle, path, null);
-		try {
-			URL templUrl;
-			templUrl = FileLocator.resolve(url);
-			File templDir = UrlUtil.getUrlFile(templUrl);
-			return templDir ;
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/column.vm b/jpa/plugins/org.eclipse.jpt.gen/templates/entities/column.vm
deleted file mode 100644
index 5d1f13c..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/column.vm
+++ /dev/null
@@ -1,54 +0,0 @@
-##included template. Generates the @Column annotation.
-##Assumes that the context has a "column" and a "table" object
-##generate annotation only the parameters for the column NOT default
-##and the generateDLLAnnotation property is not set on the table
-###------------------------------------------------
-#macro( append $members $parameters )
-#if( $members == "")
-#set( $members = $parameters )
-#else
-#set( $members = "$members, $parameters" ) 
-#end	
-#end
-###------------------------------------------------
-#if ( $column.dataTypeLOB)
-    @Lob()
-#end
-#if ( $column.needMapTemporalType)
-    @Temporal( TemporalType.$column.temporalType)
-#end
-#set ($members = "")
-#if ( !$column.default || $customizer.generateDDLAnnotations )
-#if ( !${column.defaultname} )
-#append($members "name=$customizer.quote($column.name)" )
-#end
-#if (!$column.insertable)
-#append(${members} "insertable=false")
-#end
-#if (!$column.updateable)
-#append(${members} "updatable=false")
-#end
-#end
-#if( $customizer.generateDDLAnnotations )
-#if ($column.unique)
-#append($members  "unique=true")
-#end
-#if (!$column.nullable)
-#append($members  "nullable=false")
-#end
-#if ($column.size > 0)
-#if ($column.numeric)
-#append($members "precision=$column.size")
-#if ($column.decimalDigits != 0 && $column.decimalDigits != -1)
-#append($members "scale=$column.decimalDigits")
-#end
-#else
-#if ( !$column.dataTypeLOB)
-#append($members "length=$column.size")
-#end
-#end
-#end
-#end
-#if( $members !="" )
-	@Column($members)
-#end
diff --git a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/join.vm b/jpa/plugins/org.eclipse.jpt.gen/templates/entities/join.vm
deleted file mode 100644
index 531e4d9..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/join.vm
+++ /dev/null
@@ -1,80 +0,0 @@
-##included template. Generates the @JoinTable, @JoinColumn or @JoinColumns annotation.
-##Assumes that the context has a "role" object representing the generated AssociationRole
-##
-##macro joinColumn uses $column, $referencedColumn
-#macro (joinColumn $column $referencedColumn)
-#set ($members = "name=$customizer.quote($column.joinColumnName)")
-#if( !$referencedColumn.primaryKey || $referencedColumn.partOfCompositePrimaryKey )
-#set ($members = "$members, referencedColumnName=$customizer.quote($referencedColumn.name)")
-#end
-#if( $customizer.generateDDLAnnotations )
-#if ($column.unique && !$column.primaryKey)
-#set ($members = "$members, unique=true")
-#end
-#if (!$column.nullable)
-#set ($members = "$members, nullable=false")
-#end
-#end
-#if ($customizer.generateDDLAnnotations && !$role.association.joinTable && !$role.referrerTable.isColumnUpdateInsert($role, $column))
-#set ($members = "$members, insertable=false, updatable=false")
-#end
-@JoinColumn($members)#end
-##
-##
-##
-#if ($role.association.joinTable)
-#set ($joinTable = $role.association.joinTable)
-	@JoinTable(
-		name="${joinTable.joinTableAnnotationName}"
-		, joinColumns={
-#foreach ($column in $role.referrerColumns)
-#set ($referencedColumn = $role.getReferencedColumn(${column.name}))
-##$referencedColumn is the column in the join table
-			#joinColumn($referencedColumn $column)
-#if ($velocityCount < $role.referrerColumns.size() )
-,
-#end			
-#end
-
-			}
-		, inverseJoinColumns={
-#foreach ($column in $role.referencedColumns)
-#set ($referencedColumn = $role.getReferrerColumn(${column.name}))
-##$referencedColumn is the column in the join table
-			#joinColumn($referencedColumn $column)
-#if ($velocityCount < $role.referencedColumns.size() )
-,
-#end			
-#end
-
-			}
-		)
-#else
-#if ($role.referrerColumns.size() == 1)
-#set ($column = $role.referrerColumns.get(0))
-#set ($referencedColumn = $role.getReferencedColumn(${column.name}))
-#set ($referencedTableName = $role.getReferencedTable().getName() )
-#set( $referencedTablePkName = $role.getReferencedTable().getPrimaryKeyColumn().name )
-#set( $computedJoinColumnName = "${role.propertyName}_${referencedTablePkName}" )
-#set( $isDefaultJoinColumnName =  $column.isDefaultJoinColumnName( ${role.propertyName}) )
-#if( ! $isDefaultJoinColumnName )
-	#joinColumn($column $referencedColumn)
-
-#elseif( $customizer.generateDDLAnnotations )
-	#joinColumn($column $referencedColumn)
-
-#end
-#else
-	@JoinColumns({
-#foreach ($column in $role.referrerColumns)
-#set ($referencedColumn = $role.getReferencedColumn(${column.name}))
-		#joinColumn($column $referencedColumn)
-#if ($velocityCount < $role.referrerColumns.size() )
-,
-#else
-
-#end
-#end		
-		})
-#end
-#end
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/main.java.vm b/jpa/plugins/org.eclipse.jpt.gen/templates/entities/main.java.vm
deleted file mode 100644
index 6f50a76..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/main.java.vm
+++ /dev/null
@@ -1,134 +0,0 @@
-#if ($table.package != "")
-package ${table.package};
-#end
-
-import java.io.Serializable;
-import javax.persistence.*;
-${table.importStatements}
-
-/**
- * The persistent class for the ${table.name} database table.
- * 
- */
-@Entity
-#if( !${table.defaultname} || $customizer.generateDDLAnnotations)
-@Table(name="${table.name}")
-#end
-public class ${table.className} ${table.generateExtendsImplements()} {
-	private static final long serialVersionUID = 1L;
-#####
-##### fields
-#####
-#if ($table.compositeKey)
-#if ($table.access == "field")
-
-	@EmbeddedId
-#end
-	private ${table.compositeKeyClassName} ${table.compositeKeyPropertyName};
-#end
-#foreach ($column in $table.getSimpleColumns(true, true, false))
-#if ($table.access == "field")
-
-#parse("mappingKind.vm")
-#parse("column.vm")
-#end
-	${column.fieldScope} ${column.simplePropertyType} ${column.propertyName};
-#end
-#foreach ($role in $table.associationRoles)
-#####
-##### field annotations
-#####
-#if ($table.access == "field")
-
-	//${role.description}
-#if ($role.cardinality == "many-to-one")
-#parse("manyToOne.vm")
-#elseif ($role.cardinality == "many-to-many")
-#parse("manyToMany.vm")
-#elseif ($role.cardinality == "one-to-many")
-#parse("oneToMany.vm")
-#elseif ($role.cardinality == "one-to-one")
-#parse("oneToOne.vm")
-#end
-#end
-#####
-##### field declaration
-#####
-#if ($role.cardinality == "many-to-one" || $role.cardinality == "one-to-one")
-#set ($propertyType = ${role.referencedTable.className})
-#elseif ($role.cardinality == "many-to-many" || $role.cardinality == "one-to-many")
-#set ($propertyType = "${role.referencedTable.simpleCollectionType}<${role.referencedTable.className}>")
-#end
-	private $propertyType $role.propertyName;
-#end
-
-    public ${table.className}() {
-    }
-
-#####
-##### simple properties getters and setters
-#####
-#if ($table.compositeKey)
-#if ($table.access == "property")
-
-	@EmbeddedId
-#end
-	public $table.compositeKeyClassName $customizer.propertyGetter($table.compositeKeyPropertyName)() {
-		return this.${table.compositeKeyPropertyName};
-	}
-
-	public void $customizer.propertySetter($table.compositeKeyPropertyName)($table.compositeKeyClassName $table.compositeKeyPropertyName) {
-		this.${table.compositeKeyPropertyName} = ${table.compositeKeyPropertyName};
-	}
-	
-#end
-#foreach ($column in $table.getSimpleColumns(true, true, false))
-#if ($table.access == "property")
-
-#parse("mappingKind.vm")
-#parse("column.vm")
-#end
-	$column.propertyGetScope $column.simplePropertyType $customizer.propertyGetter($column.propertyName)() {
-		return this.${column.propertyName};
-	}
-
-	$column.propertySetScope void $customizer.propertySetter($column.propertyName)($column.simplePropertyType $column.propertyName) {
-		this.${column.propertyName} = ${column.propertyName};
-	}
-
-#end
-#####
-##### associations getters and setters
-#####
-#foreach ($role in $table.associationRoles)
-#if ($table.access == "property")
-
-	//${role.description}
-#if ($role.cardinality == "many-to-one")
-#parse("manyToOne.vm")
-#elseif ($role.cardinality == "many-to-many")
-#parse("manyToMany.vm")
-#elseif ($role.cardinality == "one-to-many")
-#parse("oneToMany.vm")
-#elseif ($role.cardinality == "one-to-one")
-#parse("oneToOne.vm")
-#end
-#end
-##
-#if ($role.cardinality == "many-to-one" || $role.cardinality == "one-to-one")
-#set ($propertyType = $role.referencedTable.className)
-#elseif ($role.cardinality == "many-to-many" || $role.cardinality == "one-to-many")
-#set ($propertyType = "${role.referencedTable.simpleCollectionType}<${role.referencedTable.className}>")
-#end
-	public $propertyType $customizer.propertyGetter($role.propertyName)() {
-		return this.${role.propertyName};
-	}
-
-	public void ${customizer.propertySetter($role.propertyName)}($propertyType $role.propertyName) {
-		this.${role.propertyName} = $role.propertyName;
-	}
-	
-##
-#end
-##
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/manyToMany.vm b/jpa/plugins/org.eclipse.jpt.gen/templates/entities/manyToMany.vm
deleted file mode 100644
index e482aa3..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/manyToMany.vm
+++ /dev/null
@@ -1,26 +0,0 @@
-##included template. Generates the @ManyToMany annotation.
-##Assumes that the context has a "role" object representing the generated AssociationRole
-##
-#if ($role.association.bidirectional && !$role.isReferrerRole())##the owning side (either side for many-to-many)
-#set ($members = $customizer.appendAnnotation("", "mappedBy", $role.oppositeRole.propertyName, true))
-#set ($members = $customizer.appendAnnotation($members, "cascade", $customizer.genCascades($role), false))
-#if($customizer.genFetch($role.referrerTable)!="" && $customizer.genFetch($role.referrerTable)!="FetchType.LAZY")
-#set ($members = $customizer.appendAnnotation($members, "fetch", $customizer.genFetch($role.referrerTable), false))
-#end
-#if($members!="")
-	@ManyToMany($members)
-#else	
-    @ManyToMany
-#end    
-#else
-#set ($members = $customizer.appendAnnotation("", "cascade", $customizer.genCascades($role), false))
-#if($customizer.genFetch($role.referrerTable)!="" && $customizer.genFetch($role.referrerTable)!="FetchType.LAZY")
-#set ($members = $customizer.appendAnnotation($members, "fetch", $customizer.genFetch($role.referrerTable), false))
-#end
-#if($members!="")
-	@ManyToMany($members)
-#else	
-    @ManyToMany
-#end    
-#parse("join.vm")
-#end
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/manyToOne.vm b/jpa/plugins/org.eclipse.jpt.gen/templates/entities/manyToOne.vm
deleted file mode 100644
index 7d279bb..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/manyToOne.vm
+++ /dev/null
@@ -1,13 +0,0 @@
-##included template. Generates the @ManyToOne annotation.
-##Assumes that the context has a "role" object representing the generated AssociationRole
-##
-#set ($members = $customizer.appendAnnotation("", "cascade", $customizer.genCascades($role), false))
-#if( $customizer.genFetch($role.referrerTable)!= "" && $customizer.genFetch($role.referrerTable)!= "FetchType.EAGER")
-#set ($members = $customizer.appendAnnotation($members, "fetch", $customizer.genFetch($role.referrerTable), false))
-#end
-#if($members!="")
-	@ManyToOne($members)
-#else
-    @ManyToOne
-#end
-#parse("join.vm")
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/mappingKind.vm b/jpa/plugins/org.eclipse.jpt.gen/templates/entities/mappingKind.vm
deleted file mode 100644
index 80ad057..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/mappingKind.vm
+++ /dev/null
@@ -1,34 +0,0 @@
-##included template. Generates the @Basic, @Id, @Version annotations.
-##Assumes that the context has a "column" object
-##
-#set ($mappingKind = $column.mappingKind)
-#if ($mappingKind == "id")
-	@Id
-#set ($idGenerator = $table.idGenerator)
-#if ($idGenerator == "auto")
-#set ($generationType = "GenerationType.AUTO")
-#elseif ($idGenerator == "identity")
-#set ($generationType = "GenerationType.IDENTITY")
-#elseif ($idGenerator == "sequence")
-#set ($generationType = "GenerationType.SEQUENCE")
-#elseif ($idGenerator == "table")
-#set ($generationType = "GenerationType.TABLE")
-#else
-#set ($generationType = "")
-#end
-#if ($idGenerator == "sequence" )
-#set ($generatorName = "${table.name.toUpperCase()}_${column.propertyName.toUpperCase()}_GENERATOR")
-#if( $table.formattedSequence != "" )
-	@SequenceGenerator(name="$generatorName", sequenceName="$table.formattedSequence")
-#else
-	@SequenceGenerator(name="$generatorName" )
-#end	
-	@GeneratedValue(strategy=$generationType, generator="$generatorName")
-#elseif ($generationType != "")
-	@GeneratedValue(strategy=$generationType)
-#end      
-#elseif ($mappingKind == "version")
-	@Version
-#else
-##DEFAULT is @Basic, no need to generate
-#end
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/oneToMany.vm b/jpa/plugins/org.eclipse.jpt.gen/templates/entities/oneToMany.vm
deleted file mode 100644
index 46f15cb..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/oneToMany.vm
+++ /dev/null
@@ -1,18 +0,0 @@
-##included template. Generates the @OneToMany annotation.
-##Assumes that the context has a "role" object representing the generated AssociationRole
-##
-#if ($role.association.bidirectional)
-#set ($members = $customizer.appendAnnotation("", "mappedBy", $role.oppositeRole.propertyName, true))
-#set ($members = $customizer.appendAnnotation($members, "cascade", $customizer.genCascades($role), false))
-#if($customizer.genFetch($role.referrerTable)!="" && $customizer.genFetch($role.referrerTable) !="FetchType.LAZY")
-#set ($members = $customizer.appendAnnotation($members, "fetch", $customizer.genFetch($role.referrerTable), false))
-#end
-	@OneToMany($members)
-#else
-#set ($members = $customizer.appendAnnotation("", "cascade", $customizer.genCascades($role), false))
-#if($customizer.genFetch($role.referrerTable)!="" && $customizer.genFetch($role.referrerTable) !="FetchType.LAZY")
-#set ($members = $customizer.appendAnnotation($members, "fetch", $customizer.genFetch($role.referrerTable), false))
-#end
-	@OneToMany($members)
-#parse("join.vm")
-#end
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/oneToOne.vm b/jpa/plugins/org.eclipse.jpt.gen/templates/entities/oneToOne.vm
deleted file mode 100644
index 7bd7519..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/oneToOne.vm
+++ /dev/null
@@ -1,22 +0,0 @@
-##included template. Generates the @OneToOne annotation.
-##Assumes that the context has a "role" object representing the generated AssociationRole
-##
-#if ($role.association.bidirectional && !$role.isReferrerRole())##the owning side (either side for one-to-one)
-#set ($members = $customizer.appendAnnotation("", "mappedBy", $role.oppositeRole.propertyName, true))
-#set ($members = $customizer.appendAnnotation($members, "cascade", $customizer.genCascades($role), false))
-#if( $customizer.genFetch($role.referrerTable)!="" && $customizer.genFetch($role.referrerTable)!="FetchType.EAGER" )
-#set ($members = $customizer.appendAnnotation($members, "fetch", $customizer.genFetch($role.referrerTable), false))
-#end
-	@OneToOne($members)
-#else
-#set ($members = $customizer.appendAnnotation("", "cascade", $customizer.genCascades($role), false))
-#if( $customizer.genFetch($role.referrerTable)!="" && $customizer.genFetch($role.referrerTable)!="FetchType.EAGER" )
-#set ($members = $customizer.appendAnnotation($members, "fetch", $customizer.genFetch($role.referrerTable), false))
-#end
-#if($members!="")
-	@OneToOne($members)
-#else
-	@OneToOne
-#end
-#parse("join.vm")
-#end
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/pk.java.vm b/jpa/plugins/org.eclipse.jpt.gen/templates/entities/pk.java.vm
deleted file mode 100644
index 1831098..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/templates/entities/pk.java.vm
+++ /dev/null
@@ -1,66 +0,0 @@
-#if ($table.package != "")
-package ${table.package};
-#end
-
-import java.io.Serializable;
-import javax.persistence.*;
-
-/**
- * The primary key class for the ${table.name} database table.
- * 
- */
-@Embeddable
-public class ${table.compositeKeyClassName} implements Serializable {
-	//default serial version id, required for serializable classes.
-	private static final long serialVersionUID = 1L;
-#####
-##### fields
-#####
-#foreach ($column in $table.primaryKeyColumns)
-#if ($table.access == "field")
-
-#parse("column.vm")
-#end
-	${column.fieldScope} ${column.propertyType} ${column.propertyName};
-#end
-
-    public ${table.compositeKeyClassName}() {
-    }
-#####
-##### simple properties getters and setters
-#####
-#foreach ($column in $table.primaryKeyColumns)
-#if ($table.access == "property")
-
-#parse("column.vm")
-#end
-	$column.propertyGetScope $column.propertyType $customizer.propertyGetter($column.propertyName)() {
-		return this.${column.propertyName};
-	}
-	$column.propertySetScope void $customizer.propertySetter($column.propertyName)($column.propertyType $column.propertyName) {
-		this.${column.propertyName} = ${column.propertyName};
-	}
-#end
-##
-## equals/hashCode
-
-	public boolean equals(Object other) {
-		if (this == other) {
-			return true;
-		}
-		if (!(other instanceof ${table.compositeKeyClassName})) {
-			return false;
-		}
-		${table.compositeKeyClassName} castOther = (${table.compositeKeyClassName})other;
-		return 
-			${table.primaryKeyEqualsClause}
-
-    }
-    
-	public int hashCode() {
-		final int prime = 31;
-		int hash = 17;
-		${table.primaryKeyHashCodeClause}
-		return hash;
-    }
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.utility/.classpath b/jpa/plugins/org.eclipse.jpt.utility/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/plugins/org.eclipse.jpt.utility/.cvsignore b/jpa/plugins/org.eclipse.jpt.utility/.cvsignore
deleted file mode 100644
index a128605..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-bin
-@dot
-temp.folder
-build.xml
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.utility/.project b/jpa/plugins/org.eclipse.jpt.utility/.project
deleted file mode 100644
index 99b389b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.utility</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/jpa/plugins/org.eclipse.jpt.utility/.settings/org.eclipse.core.resources.prefs b/jpa/plugins/org.eclipse.jpt.utility/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 8e5b2c2..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue Jan 15 11:12:22 EST 2008
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/plugins/org.eclipse.jpt.utility/.settings/org.eclipse.jdt.core.prefs b/jpa/plugins/org.eclipse.jpt.utility/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 4438260..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun May 27 14:55:37 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jpa/plugins/org.eclipse.jpt.utility/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.utility/META-INF/MANIFEST.MF
deleted file mode 100644
index 4b9b41b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,88 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.utility
-Bundle-Version: 1.5.0.qualifier
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.jpt.utility,
- org.eclipse.jpt.utility.internal;
-  x-friends:="org.eclipse.jpt.core,
-   org.eclipse.jpt.db,
-   org.eclipse.jpt.db.ui,
-   org.eclipse.jpt.gen,
-   org.eclipse.jpt.jaxb.ui,
-   org.eclipse.jpt.ui",
- org.eclipse.jpt.utility.internal.enumerations;
-  x-friends:="org.eclipse.jpt.core,
-   org.eclipse.jpt.db,
-   org.eclipse.jpt.db.ui,
-   org.eclipse.jpt.gen,
-   org.eclipse.jpt.ui",
- org.eclipse.jpt.utility.internal.iterables;
-  x-friends:="org.eclipse.jpt.core,
-   org.eclipse.jpt.db,
-   org.eclipse.jpt.db.ui,
-   org.eclipse.jpt.gen,
-   org.eclipse.jpt.jaxb.ui,
-   org.eclipse.jpt.ui",
- org.eclipse.jpt.utility.internal.iterators;
-  x-friends:="org.eclipse.jpt.core,
-   org.eclipse.jpt.db,
-   org.eclipse.jpt.db.ui,
-   org.eclipse.jpt.gen,
-   org.eclipse.jpt.jaxb.ui,
-   org.eclipse.jpt.ui",
- org.eclipse.jpt.utility.internal.model;
-  x-friends:="org.eclipse.jpt.core,
-   org.eclipse.jpt.db,
-   org.eclipse.jpt.db.ui,
-   org.eclipse.jpt.gen,
-   org.eclipse.jpt.ui",
- org.eclipse.jpt.utility.internal.model.listener.awt;
-  x-friends:="org.eclipse.jpt.core,
-   org.eclipse.jpt.db,
-   org.eclipse.jpt.db.ui,
-   org.eclipse.jpt.gen,
-   org.eclipse.jpt.ui",
- org.eclipse.jpt.utility.internal.model.value;
-  x-friends:="org.eclipse.jpt.core,
-   org.eclipse.jpt.db,
-   org.eclipse.jpt.db.ui,
-   org.eclipse.jpt.gen,
-   org.eclipse.jpt.ui",
- org.eclipse.jpt.utility.internal.model.value.prefs;
-  x-friends:="org.eclipse.jpt.core,
-   org.eclipse.jpt.db,
-   org.eclipse.jpt.db.ui,
-   org.eclipse.jpt.gen,
-   org.eclipse.jpt.ui",
- org.eclipse.jpt.utility.internal.model.value.swing;
-  x-friends:="org.eclipse.jpt.core,
-   org.eclipse.jpt.db,
-   org.eclipse.jpt.db.ui,
-   org.eclipse.jpt.gen,
-   org.eclipse.jpt.ui",
- org.eclipse.jpt.utility.internal.node;
-  x-friends:="org.eclipse.jpt.core,
-   org.eclipse.jpt.db,
-   org.eclipse.jpt.db.ui,
-   org.eclipse.jpt.gen,
-   org.eclipse.jpt.ui",
- org.eclipse.jpt.utility.internal.swing;
-  x-friends:="org.eclipse.jpt.core,
-   org.eclipse.jpt.db,
-   org.eclipse.jpt.db.ui,
-   org.eclipse.jpt.gen,
-   org.eclipse.jpt.ui",
- org.eclipse.jpt.utility.internal.synchronizers;
-  x-friends:="org.eclipse.jpt.core,
-   org.eclipse.jpt.db,
-   org.eclipse.jpt.db.ui,
-   org.eclipse.jpt.gen,
-   org.eclipse.jpt.ui",
- org.eclipse.jpt.utility.model,
- org.eclipse.jpt.utility.model.event,
- org.eclipse.jpt.utility.model.listener,
- org.eclipse.jpt.utility.model.value
diff --git a/jpa/plugins/org.eclipse.jpt.utility/about.html b/jpa/plugins/org.eclipse.jpt.utility/about.html
deleted file mode 100644
index be534ba..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 02, 2008</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/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</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>
-
-</BODY>
-</HTML>
diff --git a/jpa/plugins/org.eclipse.jpt.utility/build.properties b/jpa/plugins/org.eclipse.jpt.utility/build.properties
deleted file mode 100644
index 11ab8d4..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/build.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2007 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-javacSource=1.5
-javacTarget=1.5
-source.. = src/
-output.. = bin/
-bin.includes = .,\
-               META-INF/,\
-               about.html,\
-               plugin.properties
diff --git a/jpa/plugins/org.eclipse.jpt.utility/component.xml b/jpa/plugins/org.eclipse.jpt.utility/component.xml
deleted file mode 100644
index 364b5c5..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/component.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2007, 2010 Oracle. 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:
-    Oracle - initial API and implementation
- -->
-<component  xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.jpt.utility"><description url=""></description><component-depends unrestricted="true"></component-depends><plugin id="org.eclipse.jpt.utility" fragment="false"/></component>
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.utility/plugin.properties b/jpa/plugins/org.eclipse.jpt.utility/plugin.properties
deleted file mode 100644
index c959ed0..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/plugin.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2009 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-# ====================================================================
-# To code developer:
-#   Do NOT change the properties between this line and the
-#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
-#   Make a new property name, append to the end of the file and change
-#   the code to use the new property.
-# ====================================================================
-
-# ====================================================================
-# %%% END OF TRANSLATED PROPERTIES %%%
-# ====================================================================
-
-pluginName = Dali Java Persistence Tools - Utility
-providerName = Eclipse Web Tools Platform
-
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/Command.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/Command.java
deleted file mode 100644
index 5d1941d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/Command.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility;
-
-import java.io.Serializable;
-
-/**
- * Simple interface for implementing the GOF Command design pattern,
- * and it doesn't carry the baggage of {@link java.lang.Runnable}.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface Command {
-
-	/**
-	 * Execute the command. The semantics of the command
-	 * is determined by the contract between the client and server.
-	 */
-	void execute();
-
-	/**
-	 * Singleton implementation of the command interface that will do nothing
-	 * when executed.
-	 */
-	final class Null implements Command, Serializable {
-		public static final Command INSTANCE = new Null();
-		public static Command instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Null() {
-			super();
-		}
-		public void execute() {
-			// do nothing
-		}
-		@Override
-		public String toString() {
-			return "Command.Null"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-	/**
-	 * Singleton implementation of the command interface that will throw an
-	 * exception when executed.
-	 */
-	final class Disabled implements Command, Serializable {
-		public static final Command INSTANCE = new Disabled();
-		public static Command instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Disabled() {
-			super();
-		}
-		// throw an exception
-		public void execute() {
-			throw new UnsupportedOperationException();
-		}
-		@Override
-		public String toString() {
-			return "Command.Disabled"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/CommandExecutor.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/CommandExecutor.java
deleted file mode 100644
index 7c427cc..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/CommandExecutor.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility;
-
-import java.io.Serializable;
-
-/**
- * This interface allows clients to control how a command is executed.
- * This is useful when the server provides the command but the client provides
- * the context (e.g. the client would like to dispatch the command to the UI
- * thread).
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface CommandExecutor {
-
-	/**
-	 * Execute the specified command.
-	 */
-	void execute(Command command);
-
-
-	/**
-	 * Singleton implementation of the command executor interface
-	 * that simply executes the command without any sort of enhancement.
-	 */
-	final class Default implements CommandExecutor, Serializable {
-		public static final CommandExecutor INSTANCE = new Default();
-		public static CommandExecutor instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Default() {
-			super();
-		}
-		public void execute(Command command) {
-			command.execute();
-		}
-		@Override
-		public String toString() {
-			return "CommandExecutor.Default"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/Filter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/Filter.java
deleted file mode 100644
index adf33f9..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/Filter.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility;
-
-import java.io.Serializable;
-
-/**
- * Used by various "pluggable" classes to filter objects.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- * 
- * @param <T> the type of objects to be filtered
- */
-public interface Filter<T> {
-
-	/**
-	 * Return whether the specified object is "accepted" by the
-	 * filter. The semantics of "accept" is determined by the
-	 * contract between the client and the server.
-	 */
-	boolean accept(T o);
-
-
-	/**
-	 * Singleton implemetation of the filter interface that accepts all the
-	 * objects (i.e. it does no filtering).
-	 */
-	final class Null<S> implements Filter<S>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final Filter INSTANCE = new Null();
-		@SuppressWarnings("unchecked")
-		public static <R> Filter<R> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Null() {
-			super();
-		}
-		// nothing is filtered - everything is accepted
-		public boolean accept(S o) {
-			return true;
-		}
-		@Override
-		public String toString() {
-			return "Filter.Null";  //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-	/**
-	 * Singleton implemetation of the filter interface that accepts none of the
-	 * objects (i.e. it filters out all the objects).
-	 */
-	final class Opaque<S> implements Filter<S>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final Filter INSTANCE = new Opaque();
-		@SuppressWarnings("unchecked")
-		public static <R> Filter<R> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Opaque() {
-			super();
-		}
-		// everything is filtered - nothing is accepted
-		public boolean accept(S o) {
-			return false;
-		}
-		@Override
-		public String toString() {
-			return "Filter.Opaque";  //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-	/**
-	 * Singleton implemetation of the filter interface that throws an exception
-	 * if called.
-	 */
-	final class Disabled<S> implements Filter<S>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final Filter INSTANCE = new Disabled();
-		@SuppressWarnings("unchecked")
-		public static <R> Filter<R> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Disabled() {
-			super();
-		}
-		// throw an exception
-		public boolean accept(S o) {
-			throw new UnsupportedOperationException();
-		}
-		@Override
-		public String toString() {
-			return "Filter.Disabled";  //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/IndentingPrintWriter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/IndentingPrintWriter.java
deleted file mode 100644
index 35fa70a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/IndentingPrintWriter.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility;
-
-import java.io.PrintWriter;
-import java.io.Writer;
-
-/**
- * Extend {@link PrintWriter} to automatically indent new lines.
- */
-public class IndentingPrintWriter
-	extends PrintWriter
-{
-	private final String indent;
-	private int indentLevel;
-	private boolean needsIndent;
-
-	public static String DEFAULT_INDENT = "\t"; //$NON-NLS-1$
-
-
-	/**
-	 * Construct a writer that indents with tabs.
-	 */
-	public IndentingPrintWriter(Writer out) {
-		this(out, DEFAULT_INDENT);
-	}
-
-	/**
-	 * Construct a writer that indents with the specified string.
-	 */
-	public IndentingPrintWriter(Writer out, String indent) {
-		super(out);
-		this.indent = indent;
-		this.indentLevel = 0;
-		this.needsIndent = true;
-	}
-
-	/**
-	 * Set flag so following line is indented.
-	 */
-	@Override
-	public void println() {
-		synchronized (this.lock) {
-			super.println();
-			this.needsIndent = true;
-		}
-	}
-
-	/**
-	 * Print the appropriate indent.
-	 * Pre-condition: synchronized
-	 */
-	private void printIndent() {
-		if (this.needsIndent) {
-			this.needsIndent = false;
-			for (int i = this.indentLevel; i-- > 0; ) {
-				this.print(this.indent);
-			}
-		}
-	}
-
-	/**
-	 * Write a portion of an array of characters.
-	 */
-	@Override
-	public void write(char buf[], int off, int len) {
-		synchronized (this.lock) {
-			this.printIndent();
-			super.write(buf, off, len);
-		}
-	}
-
-	/**
-	 * Write a single character.
-	 */
-	@Override
-	public void write(int c) {
-		synchronized (this.lock) {
-			this.printIndent();
-			super.write(c);
-		}
-	}
-
-	/**
-	 * Write a portion of a string.
-	 */
-	@Override
-	public void write(String s, int off, int len) {
-		synchronized (this.lock) {
-			this.printIndent();
-			super.write(s, off, len);
-		}
-	}
-
-	/**
-	 * Bump the indent level.
-	 */
-	public void indent() {
-		this.incrementIndentLevel();
-	}
-
-	/**
-	 * Decrement the indent level.
-	 */
-	public void undent() {
-		this.decrementIndentLevel();
-	}
-
-	/**
-	 * Bump the indent level.
-	 */
-	public void incrementIndentLevel() {
-		synchronized (this.lock) {
-			this.indentLevel++;
-		}
-	}
-
-	/**
-	 * Decrement the indent level.
-	 */
-	public void decrementIndentLevel() {
-		synchronized (this.lock) {
-			this.indentLevel--;
-		}
-	}
-
-	/**
-	 * Return the current indent level.
-	 */
-	public int getIndentLevel() {
-		synchronized (this.lock) {
-			return this.indentLevel;
-		}
-	}
-
-	/**
-	 * Allow the indent level to be set directly.
-	 * Return the previous indent level.
-	 */
-	public int setIndentLevel(int indentLevel) {
-		synchronized (this.lock) {
-			int old = this.indentLevel;
-			this.indentLevel = indentLevel;
-			return old;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/JavaType.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/JavaType.java
deleted file mode 100644
index ab769cc..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/JavaType.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility;
-
-import java.io.PrintWriter;
-
-/**
- * This interface describes a Java type; i.e. its "element type"
- * and its "array depth". The element type is referenced by name,
- * allowing us to reference classes that are not (or cannot be) loaded.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- * <p>
- * This interface is not intended to be implemented by clients.
- */
-public interface JavaType {
-
-	/**
-	 * Return the name of the type's "element type".
-	 * A member type will have one or more <code>'$'</code> characters in its name.
-	 */
-	String getElementTypeName();
-
-	/**
-	 * Return the type's "array depth".
-	 */
-	int getArrayDepth();
-
-	/**
-	 * Return whether the type is an array (i.e. its "array depth" is greater
-	 * than zero).
-	 */
-	boolean isArray();
-
-	/**
-	 * Return whether the type is a "primitive" (e.g. <code>int</code>, <code>float</code>).
-	 * <p>
-	 * <strong>NB:</strong> <code>void.class.isPrimitive() == true</code>
-	 */
-	boolean isPrimitive();
-
-	/**
-	 * Return whether the type is a "primitive wrapper" (e.g. {@link java.lang.Integer},
-	 * {@link java.lang.Float}).
-	 * <p>
-	 * <strong>NB:</strong> <code>void.class.isPrimitive() == true</code>
-	 */
-	boolean isPrimitiveWrapper();
-
-	/**
-	 * Return whether the type is a "variable primitive" (e.g. <code>int</code>, <code>float</code>,
-	 * but not <code>void</code>).
-	 * <p>
-	 * <strong>NB:</strong> variables cannot be declared <code>void</code>
-	 */
-	boolean isVariablePrimitive();
-
-	/**
-	 * Return whether the type is a "variable primitive wrapper" (e.g.
-	 * {@link java.lang.Integer}, {@link java.lang.Float},
-	 * but not {@link java.lang.Void}).
-	 * <p>
-	 * <strong>NB:</strong> variables cannot be declared <code>void</code>
-	 */
-	boolean isVariablePrimitiveWrapper();
-
-	/**
-	 * Return the class corresponding to the type's element type and array depth.
-	 */
-	Class<?> getJavaClass() throws ClassNotFoundException;
-
-	/**
-	 * Return the version of the type's name that matches that
-	 * returned by {@link java.lang.Class#getName()}
-	 * (e.g. <code>"[[J"</code>, <code>"[Ljava.lang.Object;"</code>,
-	 * <code>"java.util.Map$Entry"</code>).
-	 */
-	String getJavaClassName();
-
-	/**
-	 * Return whether the type is equal to the specified type.
-	 */
-	boolean equals(String otherElementTypeName, int otherArrayDepth);
-
-	/**
-	 * Return whether the type describes to the specified type.
-	 */
-	boolean describes(String className);
-
-	/**
-	 * Return whether the type describes to the specified type.
-	 */
-	boolean describes(Class<?> javaClass);
-
-	/**
-	 * Return whether the type is equal to the specified type.
-	 */
-	boolean equals(JavaType other);
-
-	/**
-	 * Return the version of the type's name that can be used in source code:<ul>
-	 * <li><code>"[[J"</code> => <code>"long[][]"</code>
-	 * <li><code>"java.util.Map$Entry"</code> => <code>"java.util.Map.Entry"</code>
-	 * </ul>
-	 */
-	String declaration();
-
-	/**
-	 * Append the version of the type's name that can be used in source code:<ul>
-	 * <li><code>"[[J"</code> => <code>"long[][]"</code>
-	 * <li><code>"java.util.Map$Entry"</code> => <code>"java.util.Map.Entry"</code>
-	 * </ul>
-	 */
-	void appendDeclarationTo(StringBuilder sb);
-
-	/**
-	 * Print the version of the type's name that can be used in source code:<ul>
-	 * <li><code>"[[J"</code> => <code>"long[][]"</code>
-	 * <li><code>"java.util.Map$Entry"</code> => <code>"java.util.Map.Entry"</code>
-	 * </ul>
-	 */
-	void printDeclarationOn(PrintWriter pw);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/MethodSignature.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/MethodSignature.java
deleted file mode 100644
index 4b33c7e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/MethodSignature.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility;
-
-import java.io.PrintWriter;
-import java.lang.reflect.Method;
-
-/**
- * This interface describes a Java method signature; i.e. its "name"
- * and its "parameter types". The parameter types are referenced by name,
- * allowing us to reference classes that are not (or cannot be) loaded.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- * <p>
- * This interface is not intended to be implemented by clients.
- */
-public interface MethodSignature {
-
-	/**
-	 * Return the method's name.
-	 */
-	String getName();
-
-	/**
-	 * Return the method's parameter types.
-	 */
-	JavaType[] getParameterTypes();
-
-	/**
-	 * Return whether the method signature describes the specified method.
-	 */
-	boolean describes(Method method);
-
-	/**
-	 * Return whether the method signature equals the specified signature.
-	 */
-	boolean equals(String otherName, JavaType[] otherParameterTypes);
-
-	/**
-	 * Return whether the method signature equals the specified signature.
-	 */
-	boolean equals(MethodSignature other);
-
-	/**
-	 * Return a string representation of the method's signature:<p>
-	 * <code>"foo(int, java.lang.String)"</code>
-	 */
-	String getSignature();
-
-	/**
-	 * Append a string representation of the method's signature:<p>
-	 * <code>"foo(int, java.lang.String)"</code>
-	 */
-	void appendSignatureTo(StringBuilder sb);
-
-	/**
-	 * Print a string representation of the method's signature:<p>
-	 * <code>"foo(int, java.lang.String)"</code>
-	 */
-	void printSignatureOn(PrintWriter pw);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/AbstractAssociation.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/AbstractAssociation.java
deleted file mode 100644
index ddca716..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/AbstractAssociation.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-/**
- * Implement some of the methods in {@link Association} that can
- * be defined in terms of the other methods.
- */
-public abstract class AbstractAssociation<K, V>
-	implements Association<K, V>
-{
-
-	/**
-	 * Default constructor.
-	 */
-	protected AbstractAssociation() {
-		super();
-	}
-
-	@Override
-	public synchronized boolean equals(Object o) {
-		if ( ! (o instanceof Association<?, ?>)) {
-			return false;
-		}
-		Association<?, ?> other = (Association<?, ?>) o;
-		return (this.key() == null ?
-					other.key() == null : this.key().equals(other.key()))
-			&& (this.value() == null ?
-					other.value() == null : this.value().equals(other.value()));
-	}
-
-	@Override
-	public synchronized int hashCode() {
-		return (this.key() == null ? 0 : this.key().hashCode())
-			^ (this.value() == null ? 0 : this.value().hashCode());
-	}
-
-	@Override
-	public synchronized String toString() {
-		return this.key() + " => " + this.value(); //$NON-NLS-1$
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ArrayTools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ArrayTools.java
deleted file mode 100644
index f1d37d5..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ArrayTools.java
+++ /dev/null
@@ -1,3122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Random;
-
-/**
- * Array-related utility methods.
- */
-public final class ArrayTools {
-	public static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
-	public static final char[] EMPTY_CHAR_ARRAY = new char[0];
-	public static final int[] EMPTY_INT_ARRAY = new int[0];
-
-	// ********** instantiation **********
-
-	/**
-	 * Return a new array with the same length
-	 * and the same component type as the specified array.
-	 * <p>
-	 * <code>Arrays.newArray(Object[] array)</code>
-	 */
-	public static <E> E[] newArray(E[] array) {
-		return newArray(array, array.length);
-	}
-
-	/**
-	 * Return a new array with the specified length
-	 * and the same component type as the specified array.
-	 * <p>
-	 * <code>Arrays.newArray(Object[] array, int length)</code>
-	 */
-	public static <E> E[] newArray(E[] array, int length) {
-		return newArray(componentType(array), length);
-	}
-
-	/**
-	 * Return the specified array's component type, with appropriate support
-	 * for generics.
-	 */
-	public static <E> Class<? extends E> componentType(E[] array) {
-		Class<?> rawComponentType = array.getClass().getComponentType();
-		@SuppressWarnings("unchecked")
-		Class<? extends E> componentType = (Class<? extends E>) rawComponentType;
-		return componentType;
-	}
-
-	/**
-	 * Return a new array with the specified component type and length,
-	 * with appropriate support for generics. The component type cannot be a
-	 * primitive type.
-	 */
-	public static <E> E[] newArray(Class<? extends E> componentType, int length) {
-		if (componentType.isPrimitive()) {
-			throw new IllegalArgumentException("Array class cannot be primitive: " + componentType); //$NON-NLS-1$
-		}
-		return newArray_(componentType, length);
-	}
-
-	/**
-	 * assume the component type is not a primitive class
-	 */
-	@SuppressWarnings("unchecked")
-	private static <E> E[] newArray_(Class<? extends E> componentType, int length) {
-		return (E[]) ((componentType == OBJECT_CLASS) ?
-				new Object[length] :
-				Array.newInstance(componentType, length));
-	}
-	private static final Class<Object> OBJECT_CLASS = Object.class;
-
-
-	// ********** conversion **********
-
-	/**
-	 * Return an array corresponding to the specified iterable.
-	 * <p>
-	 * <code>Iterable.toArray()</code>
-	 * @see Collection#toArray()
-	 */
-	public static Object[] array(Iterable<?> iterable) {
-		return array(iterable.iterator());
-	}
-
-	/**
-	 * Return an array corresponding to the specified iterable.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Iterable.toArray()</code>
-	 * @see Collection#toArray()
-	 */
-	public static Object[] array(Iterable<?> iterable, int iterableSize) {
-		return array(iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Return an array corresponding to the specified iterable;
-	 * the runtime type of the returned array is that of the specified array.
-	 * If the iterable fits in the specified array, it is returned therein.
-	 * Otherwise, a new array is allocated with the runtime type of the
-	 * specified array and the size of the iterable.
-	 * <p>
-	 * <code>Iterable.toArray(Object[])</code>
-	 * @see Collection#toArray(Object[])
-	 */
-	public static <E> E[] array(Iterable<? extends E> iterable, E[] array) {
-		return array(iterable.iterator(), array);
-	}
-
-	/**
-	 * Return an array corresponding to the specified iterable;
-	 * the runtime type of the returned array is that of the specified array.
-	 * If the iterable fits in the specified array, it is returned therein.
-	 * Otherwise, a new array is allocated with the runtime type of the
-	 * specified array and the size of the iterable.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Iterable.toArray(Object[])</code>
-	 * @see Collection#toArray(Object[])
-	 */
-	public static <E> E[] array(Iterable<? extends E> iterable, int iterableSize, E[] array) {
-		return array(iterable.iterator(), iterableSize, array);
-	}
-
-	/**
-	 * Return an array corresponding to the specified iterator.
-	 * <p>
-	 * <code>Iterator.toArray()</code>
-	 * @see Collection#toArray()
-	 */
-	public static Object[] array(Iterator<?> iterator) {
-		return iterator.hasNext() ?
-				CollectionTools.list(iterator).toArray() :
-				EMPTY_OBJECT_ARRAY;
-	}
-
-	/**
-	 * Return an array corresponding to the specified iterator.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Iterator.toArray()</code>
-	 * @see Collection#toArray()
-	 */
-	public static Object[] array(Iterator<?> iterator, int iteratorSize) {
-		return iterator.hasNext() ?
-				CollectionTools.list(iterator, iteratorSize).toArray() :
-				EMPTY_OBJECT_ARRAY;
-	}
-
-	/**
-	 * Return an array corresponding to the specified iterator;
-	 * the runtime type of the returned array is that of the specified array.
-	 * If the iterator fits in the specified array, it is returned therein.
-	 * Otherwise, a new array is allocated with the runtime type of the
-	 * specified array and the size of the iterator.
-	 * <p>
-	 * <code>Iterator.toArray(Object[])</code>
-	 * @see Collection#toArray(Object[])
-	 */
-	public static <E> E[] array(Iterator<? extends E> iterator, E[] array) {
-		return iterator.hasNext() ?
-				CollectionTools.list(iterator).toArray(array) :
-				emptyArray(array);
-	}
-
-	/**
-	 * Return an array corresponding to the specified iterator;
-	 * the runtime type of the returned array is that of the specified array.
-	 * If the iterator fits in the specified array, it is returned therein.
-	 * Otherwise, a new array is allocated with the runtime type of the
-	 * specified array and the size of the iterator.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Iterator.toArray(Object[])</code>
-	 * @see Collection#toArray(Object[])
-	 */
-	public static <E> E[] array(Iterator<? extends E> iterator, int iteratorSize, E[] array) {
-		return iterator.hasNext() ?
-				CollectionTools.list(iterator, iteratorSize).toArray(array) :
-				emptyArray(array);
-	}
-
-	/**
-	 * If the specified array is empty, return it;
-	 * otherwise, set its first element to null.
-	 * @see Collection#toArray(Object[])
-	 */
-	private static <E> E[] emptyArray(E[] array) {
-		return (array.length == 0) ? array : clearFirst(array);
-	}
-
-	/**
-	 * Set the specified array's first element to null and and return the array.
-	 * Assume the array length > 0.
-	 */
-	private static <E> E[] clearFirst(E[] array) {
-		array[0] = null;
-		return array;
-	}
-
-
-	// ********** add **********
-
-	/**
-	 * Return a new array containing the elements in the
-	 * specified array followed by the specified object to be added.
-	 * <p>
-	 * <code>Arrays.add(Object[] array, Object o)</code>
-	 */
-	public static <E> E[] add(E[] array, E value) {
-		int len = array.length;
-		E[] result = newArray(array, len + 1);
-		if (len > 0) {
-			System.arraycopy(array, 0, result, 0, len);
-		}
-		result[len] = value;
-		return result;
-	}
-
-	/**
-	 * Return a new array containing the elements in the
-	 * specified array with the specified object added at the specified index.
-	 * <p>
-	 * <code>Arrays.add(Object[] array, int index, Object o)</code>
-	 */
-	public static <E> E[] add(E[] array, int index, E value) {
-		int len = array.length;
-		E[] result = newArray(array, len + 1);
-		if (index > 0) {
-			System.arraycopy(array, 0, result, 0, index);
-		}
-		result[index] = value;
-		if (index < len) {
-			System.arraycopy(array, index, result, index + 1, len - index);
-		}
-		return result;
-	}
-
-	/**
-	 * Return a new array containing the elements in the
-	 * specified array followed by the specified value to be added.
-	 * <p>
-	 * <code>Arrays.add(char[] array, char value)</code>
-	 */
-	public static char[] add(char[] array, char value) {
-		int len = array.length;
-		char[] result = new char[len + 1];
-		if (len > 0) {
-			System.arraycopy(array, 0, result, 0, len);
-		}
-		result[len] = value;
-		return result;
-	}
-
-	/**
-	 * Return a new array containing the elements in the
-	 * specified array with the specified value added at the specified index.
-	 * <p>
-	 * <code>Arrays.add(char[] array, int index, char value)</code>
-	 */
-	public static char[] add(char[] array, int index, char value) {
-		int len = array.length;
-		char[] result = new char[len + 1];
-		if (index > 0) {
-			System.arraycopy(array, 0, result, 0, index);
-		}
-		result[index] = value;
-		if (index < len) {
-			System.arraycopy(array, index, result, index + 1, len - index);
-		}
-		return result;
-	}
-
-	/**
-	 * Return a new array containing the elements in the
-	 * specified array followed by the specified value to be added.
-	 * <p>
-	 * <code>Arrays.add(int[] array, int value)</code>
-	 */
-	public static int[] add(int[] array, int value) {
-		int len = array.length;
-		int[] result = new int[len + 1];
-		if (len > 0) {
-			System.arraycopy(array, 0, result, 0, len);
-		}
-		result[len] = value;
-		return result;
-	}
-
-	/**
-	 * Return a new array containing the elements in the
-	 * specified array with the specified value added at the specified index.
-	 * <p>
-	 * <code>Arrays.add(int[] array, int index, int value)</code>
-	 */
-	public static int[] add(int[] array, int index, int value) {
-		int len = array.length;
-		int[] result = new int[len + 1];
-		if (index > 0) {
-			System.arraycopy(array, 0, result, 0, index);
-		}
-		result[index] = value;
-		if (index < len) {
-			System.arraycopy(array, index, result, index + 1, len - index);
-		}
-		return result;
-	}
-
-
-	// ********** add all **********
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array followed by the elements
-	 * in the specified collection.
-	 *<p>
-	 * <code>Arrays.addAll(Object[] array, Collection collection)</code>
-	 */
-	public static <E> E[] addAll(E[] array, Collection<? extends E> collection) {
-		return addAll(array, collection, collection.size());
-	}
-
-	/**
-	 * check collection size
-	 */
-	private static <E> E[] addAll(E[] array, Collection<? extends E> collection, int collectionSize) {
-		return (collectionSize == 0) ? array : addAll_(array, collection, collectionSize);
-	}
-
-	/**
-	 * assume the collection is non-empty
-	 */
-	private static <E> E[] addAll_(E[] array, Collection<? extends E> collection) {
-		return addAll_(array, collection, collection.size());
-	}
-
-	/**
-	 * assume collection size > zero
-	 */
-	private static <E> E[] addAll_(E[] array, Collection<? extends E> collection, int collectionSize) {
-		return addAll(array, collection, array.length, collectionSize);
-	}
-
-	/**
-	 * assume collection size > zero; check array length
-	 */
-	private static <E> E[] addAll(E[] array, Collection<? extends E> collection, int arrayLength, int collectionSize) {
-		return (arrayLength == 0) ?
-				collection.toArray(newArray(array, collectionSize)) :
-				addAll_(array, collection, arrayLength, collectionSize);
-	}
-
-	/**
-	 * assume array length and collection size > zero
-	 */
-	private static <E> E[] addAll_(E[] array, Collection<? extends E> collection, int arrayLength, int collectionSize) {
-		E[] result = newArray(array, arrayLength + collectionSize);
-		System.arraycopy(array, 0, result, 0, arrayLength);
-		int i = arrayLength;
-		for (E element : collection) {
-			result[i++] = element;
-		}
-		return result;
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array followed by the elements
-	 * in the specified iterable.
-	 * <p>
-	 * <code>Arrays.addAll(Object[] array, Iterable iterable)</code>
-	 */
-	public static <E> E[] addAll(E[] array, Iterable<? extends E> iterable) {
-		return addAll(array, iterable.iterator());
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array followed by the elements
-	 * in the specified iterable.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Arrays.addAll(Object[] array, Iterable iterable)</code>
-	 */
-	public static <E> E[] addAll(E[] array, Iterable<? extends E> iterable, int iterableSize) {
-		return addAll(array, iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array followed by the elements
-	 * in the specified iterator.
-	 * <p>
-	 * <code>Arrays.addAll(Object[] array, Iterator iterator)</code>
-	 */
-	public static <E> E[] addAll(E[] array, Iterator<? extends E> iterator) {
-		return iterator.hasNext() ? addAll_(array, CollectionTools.list(iterator)) : array;
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array followed by the elements
-	 * in the specified iterator.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Arrays.addAll(Object[] array, Iterator iterator)</code>
-	 */
-	public static <E> E[] addAll(E[] array, Iterator<? extends E> iterator, int iteratorSize) {
-		return iterator.hasNext() ? addAll_(array, CollectionTools.list(iterator, iteratorSize)) : array;
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array 1 followed by the elements
-	 * in the specified array 2.
-	 * <p>
-	 * <code>Arrays.addAll(Object[] array1, Object[] array2)</code>
-	 */
-	public static <E> E[] addAll(E[] array1, E... array2) {
-		return addAll(array1, array2, array2.length);
-	}
-
-	/**
-	 * check array 2 length
-	 */
-	private static <E> E[] addAll(E[] array1, E[] array2, int array2Length) {
-		return (array2Length == 0) ? array1 : addAll_(array1, array2, array2Length);
-	}
-
-	/**
-	 * assume array 2 length > 0
-	 */
-	private static <E> E[] addAll_(E[] array1, E[] array2, int array2Length) {
-		return addAll(array1, array2, array1.length, array2Length);
-	}
-
-	/**
-	 * assume array 2 length > 0; check array 1 length
-	 */
-	private static <E> E[] addAll(E[] array1, E[] array2, int array1Length, int array2Length) {
-		return (array1Length == 0) ? array2 : addAll_(array1, array2, array1Length, array2Length);
-	}
-
-	/**
-	 * assume both array lengths > 0
-	 */
-	private static <E> E[] addAll_(E[] array1, E[] array2, int array1Length, int array2Length) {
-		E[] result = newArray(array1, array1Length + array2Length);
-		System.arraycopy(array1, 0, result, 0, array1Length);
-		System.arraycopy(array2, 0, result, array1Length, array2Length);
-		return result;
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * first specified array with the objects in the second
-	 * specified array added at the specified index.
-	 * <p>
-	 * <code>Arrays.addAll(Object[] array1, int index, Object[] array2)</code>
-	 */
-	public static <E> E[] addAll(E[] array1, int index, E... array2) {
-		return addAll(array1, index, array2, array2.length);
-	}
-
-	/**
-	 * check array 2 length
-	 */
-	private static <E> E[] addAll(E[] array1, int index, E[] array2, int array2Length) {
-		return (array2Length == 0) ? array1 : addAll_(array1, index, array2, array2Length);
-	}
-
-	/**
-	 * assume array 2 length > 0
-	 */
-	private static <E> E[] addAll_(E[] array1, int index, E[] array2, int array2Length) {
-		return addAll(array1, index, array2, array1.length, array2Length);
-	}
-
-	/**
-	 * assume array 2 length > 0; check array 1 length
-	 */
-	private static <E> E[] addAll(E[] array1, int index, E[] array2, int array1Length, int array2Length) {
-		return (array1Length == 0) ?
-					array2 :
-					(index == array1Length) ?  // 'array2' added to end of 'array1'
-						addAll_(array1, array2, array1Length, array2Length) :
-						addAll_(array1, index, array2, array1Length, array2Length);
-	}
-
-	/**
-	 * assume both array lengths > 0 and index != array 1 length
-	 */
-	private static <E> E[] addAll_(E[] array1, int index, E[] array2, int array1Length, int array2Length) {
-		E[] result = newArray(array1, array1Length + array2Length);
-		System.arraycopy(array1, 0, result, 0, index);
-		System.arraycopy(array2, 0, result, index, array2Length);
-		System.arraycopy(array1, index, result, index + array2Length, array1Length - index);
-		return result;
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array with the elements
-	 * in the specified collection inserted at the specified index.
-	 * <p>
-	 * <code>Arrays.addAll(Object[] array, int index, Collection c)</code>
-	 */
-	public static <E> E[] addAll(E[] array, int index, Collection<? extends E> collection) {
-		return addAll(array, index, collection, collection.size());
-	}
-
-	/**
-	 * check collection size
-	 */
-	private static <E> E[] addAll(E[] array, int index, Collection<? extends E> collection, int collectionSize) {
-		return (collectionSize == 0) ? array : addAll_(array, index, collection, collectionSize);
-	}
-
-	/**
-	 * assume collection size > 0
-	 */
-	private static <E> E[] addAll_(E[] array, int index, Collection<? extends E> collection, int collectionSize) {
-		return addAll(array, index, collection, array.length, collectionSize);
-	}
-
-	/**
-	 * assume collection size > 0; check array length
-	 */
-	private static <E> E[] addAll(E[] array, int index, Collection<? extends E> collection, int arrayLength, int collectionSize) {
-		if (arrayLength == 0) {
-			if (index == 0) {
-				return collection.toArray(newArray(array, collectionSize));
-			}
-			throw new IndexOutOfBoundsException("Index: " + index + ", Size: 0"); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		return (index == arrayLength) ?  // 'collection' added to end of 'array'
-				addAll_(array, collection, arrayLength, collectionSize) :
-				addAll_(array, index, collection, arrayLength, collectionSize);
-	}
-
-	/**
-	 * assume array length and collection size > 0 and index != array length
-	 */
-	private static <E> E[] addAll_(E[] array, int index, Collection<? extends E> collection, int arrayLength, int collectionSize) {
-		E[] result = newArray(array, arrayLength + collectionSize);
-		System.arraycopy(array, 0, result, 0, index);
-		int i = index;
-		for (E item : collection) {
-			result[i++] = item;
-		}
-		System.arraycopy(array, index, result, index + collectionSize, arrayLength - index);
-		return result;
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array with the elements
-	 * in the specified iterable inserted at the specified index.
-	 * <p>
-	 * <code>Arrays.addAll(Object[] array, int index, Iterable iterable)</code>
-	 */
-	public static <E> E[] addAll(E[] array, int index, Iterable<? extends E> iterable) {
-		return addAll(array, index, iterable.iterator());
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array with the elements
-	 * in the specified iterable inserted at the specified index.
-	 * <p>
-	 * <code>Arrays.addAll(Object[] array, int index, Iterable iterable)</code>
-	 */
-	public static <E> E[] addAll(E[] array, int index, Iterable<? extends E> iterable, int iterableSize) {
-		return addAll(array, index, iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array with the elements
-	 * in the specified iterator inserted at the specified index.
-	 * <p>
-	 * <code>Arrays.addAll(Object[] array, int index, Iterator iterator)</code>
-	 */
-	public static <E> E[] addAll(E[] array, int index, Iterator<? extends E> iterator) {
-		return iterator.hasNext() ? addAll_(array, index, CollectionTools.list(iterator)) : array;
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array with the elements
-	 * in the specified iterator inserted at the specified index.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Arrays.addAll(Object[] array, int index, Iterator iterator)</code>
-	 */
-	public static <E> E[] addAll(E[] array, int index, Iterator<? extends E> iterator, int iteratorSize) {
-		return iterator.hasNext() ? addAll_(array, index, CollectionTools.list(iterator, iteratorSize)) : array;
-	}
-
-	/**
-	 * assume collection is non-empty
-	 */
-	private static <E> E[] addAll_(E[] array, int index, Collection<? extends E> collection) {
-		return addAll_(array, index, collection, collection.size());
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array 1 followed by the elements
-	 * in the specified array 2.
-	 * <p>
-	 * <code>Arrays.addAll(char[] array1, char[] array2)</code>
-	 */
-	public static char[] addAll(char[] array1, char... array2) {
-		return addAll(array1, array2, array2.length);
-	}
-
-	/**
-	 * check array 2 length
-	 */
-	private static char[] addAll(char[] array1, char[] array2, int array2Length) {
-		return (array2Length == 0) ? array1 : addAll_(array1, array2, array2Length);
-	}
-
-	/**
-	 * assume array 2 length > 0
-	 */
-	private static char[] addAll_(char[] array1, char[] array2, int array2Length) {
-		return addAll(array1, array2, array1.length, array2Length);
-	}
-
-	/**
-	 * assume array 2 length > 0; check array 1 length
-	 */
-	private static char[] addAll(char[] array1, char[] array2, int array1Length, int array2Length) {
-		return (array1Length == 0) ? array2 : addAll_(array1, array2, array1Length, array2Length);
-	}
-
-	/**
-	 * assume both array lengths > 0
-	 */
-	private static char[] addAll_(char[] array1, char[] array2, int array1Length, int array2Length) {
-		char[] result = new char[array1Length + array2Length];
-		System.arraycopy(array1, 0, result, 0, array1Length);
-		System.arraycopy(array2, 0, result, array1Length, array2Length);
-		return result;
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * first specified array with the objects in the second
-	 * specified array added at the specified index.
-	 * <p>
-	 * <code>Arrays.add(char[] array1, int index, char[] array2)</code>
-	 */
-	public static char[] addAll(char[] array1, int index, char... array2) {
-		return addAll(array1, index, array2, array2.length);
-	}
-
-	/**
-	 * check array 2 length
-	 */
-	private static char[] addAll(char[] array1, int index, char[] array2, int array2Length) {
-		return (array2Length == 0) ? array1 : addAll_(array1, index, array2, array2Length);
-	}
-
-	/**
-	 * assume array 2 length > 0
-	 */
-	private static char[] addAll_(char[] array1, int index, char[] array2, int array2Length) {
-		return addAll(array1, index, array2, array1.length, array2Length);
-	}
-
-	/**
-	 * assume array 2 length > 0; check array 1 length
-	 */
-	private static char[] addAll(char[] array1, int index, char[] array2, int array1Length, int array2Length) {
-		return (array1Length == 0) ?
-					array2 :
-					(index == array1Length) ?  // 'array2' added to end of 'array1'
-						addAll_(array1, array2, array1Length, array2Length) :
-						addAll_(array1, index, array2, array1Length, array2Length);
-	}
-
-	/**
-	 * assume both array lengths > 0 and index != array 1 length
-	 */
-	private static char[] addAll_(char[] array1, int index, char[] array2, int array1Length, int array2Length) {
-		char[] result = new char[array1Length + array2Length];
-		System.arraycopy(array1, 0, result, 0, index);
-		System.arraycopy(array2, 0, result, index, array2Length);
-		System.arraycopy(array1, index, result, index + array2Length, array1Length - index);
-		return result;
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * specified array 1 followed by the elements
-	 * in the specified array 2.
-	 * <p>
-	 * <code>Arrays.addAll(int[] array1, int[] array2)</code>
-	 */
-	public static int[] addAll(int[] array1, int... array2) {
-		return addAll(array1, array2, array2.length);
-	}
-
-	/**
-	 * check array 2 length
-	 */
-	private static int[] addAll(int[] array1, int[] array2, int array2Length) {
-		return (array2Length == 0) ? array1 : addAll_(array1, array2, array2Length);
-	}
-
-	/**
-	 * assume array 2 length > 0
-	 */
-	private static int[] addAll_(int[] array1, int[] array2, int array2Length) {
-		return addAll(array1, array2, array1.length, array2Length);
-	}
-
-	/**
-	 * assume array 2 length > 0; check array 1 length
-	 */
-	private static int[] addAll(int[] array1, int[] array2, int array1Length, int array2Length) {
-		return (array1Length == 0) ? array2 : addAll_(array1, array2, array1Length, array2Length);
-	}
-
-	/**
-	 * assume both array lengths > 0
-	 */
-	private static int[] addAll_(int[] array1, int[] array2, int array1Length, int array2Length) {
-		int[] result = new int[array1Length + array2Length];
-		System.arraycopy(array1, 0, result, 0, array1Length);
-		System.arraycopy(array2, 0, result, array1Length, array2Length);
-		return result;
-	}
-
-	/**
-	 * Return an array containing the elements in the
-	 * first specified array with the objects in the second
-	 * specified array added at the specified index.
-	 * <p>
-	 * <code>Arrays.add(int[] array1, int index, int[] array2)</code>
-	 */
-	public static int[] addAll(int[] array1, int index, int... array2) {
-		return addAll(array1, index, array2, array2.length);
-	}
-
-	/**
-	 * check array 2 length
-	 */
-	private static int[] addAll(int[] array1, int index, int[] array2, int array2Length) {
-		return (array2Length == 0) ? array1 : addAll_(array1, index, array2, array2Length);
-	}
-
-	/**
-	 * assume array 2 length > 0
-	 */
-	private static int[] addAll_(int[] array1, int index, int[] array2, int array2Length) {
-		return addAll(array1, index, array2, array1.length, array2Length);
-	}
-
-	/**
-	 * assume array 2 length > 0; check array 1 length
-	 */
-	private static int[] addAll(int[] array1, int index, int[] array2, int array1Length, int array2Length) {
-		return (array1Length == 0) ?
-					array2 :
-					(index == array1Length) ?  // 'array2' added to end of 'array1'
-						addAll_(array1, array2, array1Length, array2Length) :
-						addAll_(array1, index, array2, array1Length, array2Length);
-	}
-
-	/**
-	 * assume both array lengths > 0 and index != array 1 length
-	 */
-	private static int[] addAll_(int[] array1, int index, int[] array2, int array1Length, int array2Length) {
-		int[] result = new int[array1Length + array2Length];
-		System.arraycopy(array1, 0, result, 0, index);
-		System.arraycopy(array2, 0, result, index, array2Length);
-		System.arraycopy(array1, index, result, index + array2Length, array1Length - index);
-		return result;
-	}
-
-
-	// ********** clear **********
-
-	/**
-	 * Return an empty array with the same component type as the specified array.
-	 * <p>
-	 * <code>Arrays.clear(Object[] array)</code>
-	 */
-	public static <E> E[] clear(E[] array) {
-		return (array.length == 0) ? array : newArray(array, 0);
-	}
-
-
-	// ********** concatenate **********
-
-	/**
-	 * Return an array containing all the elements in all the
-	 * specified arrays, concatenated in the specified order.
-	 * This is useful for building constant arrays out of other constant arrays.
-	 * <p>
-	 * <code>Arrays.concatenate(Object[]... arrays)</code>
-	 */
-	public static <E> E[] concatenate(E[]... arrays) {
-		int len = 0;
-		for (E[] array : arrays) {
-			len += array.length;
-		}
-		E[] result = newArray(arrays[0], len);
-		if (len == 0) {
-			return result;
-		}
-		int current = 0;
-		for (E[] array : arrays) {
-			int arrayLength = array.length;
-			if (arrayLength > 0) {
-				System.arraycopy(array, 0, result, current, arrayLength);
-				current += arrayLength;
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * Return an array containing all the elements in  all the
-	 * specified arrays, concatenated in the specified order.
-	 * This is useful for building constant arrays out other constant arrays.
-	 * <p>
-	 * <code>Arrays.concatenate(char[]... arrays)</code>
-	 */
-	public static char[] concatenate(char[]... arrays) {
-		int len = 0;
-		for (char[] array : arrays) {
-			len += array.length;
-		}
-		if (len == 0) {
-			return EMPTY_CHAR_ARRAY;
-		}
-		char[] result = new char[len];
-		int current = 0;
-		for (char[] array : arrays) {
-			int arrayLength = array.length;
-			if (arrayLength != 0) {
-				System.arraycopy(array, 0, result, current, arrayLength);
-				current += arrayLength;
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * Return an array containing all the elements in  all the
-	 * specified arrays, concatenated in the specified order.
-	 * This is useful for building constant arrays out other constant arrays.
-	 * <p>
-	 * <code>Arrays.concatenate(int[]... arrays)</code>
-	 */
-	public static int[] concatenate(int[]... arrays) {
-		int len = 0;
-		for (int[] array : arrays) {
-			len += array.length;
-		}
-		if (len == 0) {
-			return EMPTY_INT_ARRAY;
-		}
-		int[] result = new int[len];
-		int current = 0;
-		for (int[] array : arrays) {
-			int arrayLength = array.length;
-			if (arrayLength != 0) {
-				System.arraycopy(array, 0, result, current, arrayLength);
-				current += arrayLength;
-			}
-		}
-		return result;
-	}
-
-
-	// ********** contains **********
-
-	/**
-	 * Return whether the specified array contains the
-	 * specified element.
-	 * <p>
-	 * <code>Arrays.contains(Object[] array, Object o)</code>
-	 */
-	public static boolean contains(Object[] array, Object value) {
-		return contains(array, value, array.length);
-	}
-
-	/**
-	 * check array length
-	 */
-	private static boolean contains(Object[] array, Object value, int arrayLength) {
-		return (arrayLength == 0) ? false : contains_(array, value, arrayLength);
-	}
-
-	/**
-	 * assume array length > 0
-	 */
-	public static boolean contains_(Object[] array, Object value, int arrayLength) {
-		if (value == null) {
-			for (int i = arrayLength; i-- > 0; ) {
-				if (array[i] == null) {
-					return true;
-				}
-			}
-		} else {
-			for (int i = arrayLength; i-- > 0; ) {
-				if (value.equals(array[i])) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified array contains the
-	 * specified element.
-	 * <p>
-	 * <code>Arrays.contains(char[] array, char value)</code>
-	 */
-	public static boolean contains(char[] array, char value) {
-		return contains(array, value, array.length);
-	}
-
-	/**
-	 * check array length
-	 */
-	private static boolean contains(char[] array, char value, int arrayLength) {
-		return (arrayLength == 0) ? false : contains_(array, value, arrayLength);
-	}
-
-	/**
-	 * assume array length > 0
-	 */
-	private static boolean contains_(char[] array, char value, int arrayLength) {
-		for (int i = arrayLength; i-- > 0; ) {
-			if (array[i] == value) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified array contains the
-	 * specified element.
-	 * <p>
-	 * <code>Arrays.contains(int[] array, int value)</code>
-	 */
-	public static boolean contains(int[] array, int value) {
-		return contains(array, value, array.length);
-	}
-
-	/**
-	 * check array length
-	 */
-	private static boolean contains(int[] array, int value, int arrayLength) {
-		return (arrayLength == 0) ? false : contains_(array, value, arrayLength);
-	}
-
-	/**
-	 * assume array length > 0
-	 */
-	private static boolean contains_(int[] array, int value, int arrayLength) {
-		for (int i = arrayLength; i-- > 0; ) {
-			if (array[i] == value) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-
-	// ********** contains all **********
-
-	/**
-	 * Return whether the specified array contains all of the
-	 * elements in the specified collection.
-	 * <p>
-	 * <code>Arrays.containsAll(Object[] array, Collection collection)</code>
-	 */
-	public static boolean containsAll(Object[] array, Collection<?> collection) {
-		return containsAll(array, collection.iterator());
-	}
-
-	/**
-	 * Return whether the specified array contains all of the
-	 * elements in the specified iterable.
-	 * <p>
-	 * <code>Arrays.containsAll(Object[] array, Iterable iterable)</code>
-	 */
-	public static boolean containsAll(Object[] array, Iterable<?> iterable) {
-		return containsAll(array, iterable.iterator());
-	}
-
-	/**
-	 * Return whether the specified array contains all of the
-	 * elements in the specified iterator.
-	 * <p>
-	 * <code>Arrays.containsAll(Object[] array, Iterator iterator)</code>
-	 */
-	public static boolean containsAll(Object[] array, Iterator<?> iterator) {
-		// use hashed lookup
-		HashSet<Object> set = CollectionTools.set(array);
-		while (iterator.hasNext()) {
-			if ( ! set.contains(iterator.next())) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Return whether the specified array 1 contains all of the
-	 * elements in the specified array 2.
-	 * <p>
-	 * <code>Arrays.containsAll(Object[] array1, Object[] array2)</code>
-	 */
-	public static boolean containsAll(Object[] array1, Object... array2) {
-		// use hashed lookup
-		HashSet<Object> set = CollectionTools.set(array1);
-		for (int i = array2.length; i-- > 0; ) {
-			if ( ! set.contains(array2[i])) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Return whether the specified array 1 contains all of the
-	 * elements in the specified array 2.
-	 * <p>
-	 * <code>Arrays.containsAll(char[] array1, char[] array2)</code>
-	 */
-	public static boolean containsAll(char[] array1, char... array2) {
-		for (int i = array2.length; i-- > 0; ) {
-			if ( ! contains(array1, array2[i])) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Return whether the specified array 1 contains all of the
-	 * elements in the specified array 2.
-	 * <p>
-	 * <code>Arrays.containsAll(int[] array1, int[] array2)</code>
-	 */
-	public static boolean containsAll(int[] array1, int... array2) {
-		for (int i = array2.length; i-- > 0; ) {
-			if ( ! contains(array1, array2[i])) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-
-	// ********** diff **********
-
-	/**
-	 * Return the index of the first elements in the specified
-	 * arrays that are different, beginning at the end.
-	 * If the arrays are identical, return -1.
-	 * If the arrays are different sizes, return the index of the
-	 * last element in the longer array.
-	 * Use the elements' {@link Object#equals()} method to compare the
-	 * elements.
-	 */
-	public static int diffEnd(Object[] array1, Object[] array2) {
-		int len1 = array1.length;
-		int len2 = array2.length;
-		if (len1 != len2) {
-			return Math.max(len1, len2) - 1;
-		}
-		for (int i = len1 - 1; i > -1; i--) {
-			Object o = array1[i];
-			if (o == null) {
-				if (array2[i] != null) {
-					return i;
-				}
-			} else {
-				if ( ! o.equals(array2[i])) {
-					return i;
-				}
-			}
-		}
-		return -1;
-	}
-
-	/**
-	 * Return the range of elements in the specified
-	 * arrays that are different.
-	 * If the arrays are identical, return [size, -1].
-	 * Use the elements' {@link Object#equals()} method to compare the
-	 * elements.
-	 * @see #diffStart(Object[], Object[])
-	 * @see #diffEnd(Object[], Object[])
-	 */
-	public static Range diffRange(Object[] array1, Object[] array2) {
-		int end = diffEnd(array1, array2);
-		if (end == -1) {
-			// the lists are identical, the start is the size of the two lists
-			return new Range(array1.length, end);
-		}
-		// the lists are different, calculate the start of the range
-		return new Range(diffStart(array1, array2), end);
-	}
-
-	/**
-	 * Return the index of the first elements in the specified
-	 * arrays that are different. If the arrays are identical, return
-	 * the size of the two arrays (i.e. one past the last index).
-	 * If the arrays are different sizes and all the elements in
-	 * the shorter array match their corresponding elements in
-	 * the longer array, return the size of the shorter array
-	 * (i.e. one past the last index of the shorter array).
-	 * Use the elements' {@link Object#equals()} method to compare the
-	 * elements.
-	 */
-	public static int diffStart(Object[] array1, Object[] array2) {
-		int end = Math.min(array1.length, array2.length);
-		for (int i = 0; i < end; i++) {
-			Object o = array1[i];
-			if (o == null) {
-				if (array2[i] != null) {
-					return i;
-				}
-			} else {
-				if ( ! o.equals(array2[i])) {
-					return i;
-				}
-			}
-		}
-		return end;
-	}
-
-
-	// ********** identity diff **********
-
-	/**
-	 * Return the index of the first elements in the specified
-	 * arrays that are different, beginning at the end.
-	 * If the arrays are identical, return -1.
-	 * If the arrays are different sizes, return the index of the
-	 * last element in the longer array.
-	 * Use object identity to compare the elements.
-	 */
-	public static int identityDiffEnd(Object[] array1, Object[] array2) {
-		int len1 = array1.length;
-		int len2 = array2.length;
-		if (len1 != len2) {
-			return Math.max(len1, len2) - 1;
-		}
-		for (int i = len1 - 1; i > -1; i--) {
-			if (array1[i] != array2[i]) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-	/**
-	 * Return the range of elements in the specified
-	 * arrays that are different.
-	 * If the arrays are identical, return [size, -1].
-	 * Use object identity to compare the elements.
-	 * @see #identityDiffStart(Object[], Object[])
-	 * @see #identityDiffEnd(Object[], Object[])
-	 */
-	public static Range identityDiffRange(Object[] array1, Object[] array2) {
-		int end = identityDiffEnd(array1, array2);
-		if (end == -1) {
-			// the lists are identical, the start is the size of the two lists
-			return new Range(array1.length, end);
-		}
-		// the lists are different, calculate the start of the range
-		return new Range(identityDiffStart(array1, array2), end);
-	}
-
-	/**
-	 * Return the index of the first elements in the specified
-	 * arrays that are different. If the arrays are identical, return
-	 * the size of the two arrays (i.e. one past the last index).
-	 * If the arrays are different sizes and all the elements in
-	 * the shorter array match their corresponding elements in
-	 * the longer array, return the size of the shorter array
-	 * (i.e. one past the last index of the shorter array).
-	 * Use object identity to compare the elements.
-	 */
-	public static int identityDiffStart(Object[] array1, Object[] array2) {
-		int end = Math.min(array1.length, array2.length);
-		for (int i = 0; i < end; i++) {
-			if (array1[i] != array2[i]) {
-				return i;
-			}
-		}
-		return end;
-	}
-
-
-	// ********** elements are identical **********
-
-	/**
-	 * Return whether the specified arrays contain the same elements.
-	 * <p>
-	 * <code>Arrays.identical(Object[] array1, Object[] array2)</code>
-	 */
-	public static boolean elementsAreIdentical(Object[] array1, Object[] array2) {
-		if (array1 == array2) {
-			return true;
-		}
-		if (array1 == null || array2 == null) {
-			return false;
-		}
-		int length = array1.length;
-		if (array2.length != length) {
-			return false;
-		}
-		for (int i = length; i-- > 0; ) {
-			if (array1[i] != array2[i]) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-
-	// ********** index of **********
-
-	/**
-	 * Return the index of the first occurrence of the
-	 * specified element in the specified array,
-	 * or return -1 if there is no such index.
-	 * <p>
-	 * <code>Arrays.indexOf(Object[] array, Object o)</code>
-	 */
-	public static int indexOf(Object[] array, Object value) {
-		int len = array.length;
-		if (value == null) {
-			for (int i = 0; i < len; i++) {
-				if (array[i] == null) {
-					return i;
-				}
-			}
-		} else {
-			for (int i = 0; i < len; i++) {
-				if (value.equals(array[i])) {
-					return i;
-				}
-			}
-		}
-		return -1;
-	}
-
-	/**
-	 * Return the index of the first occurrence of the
-	 * specified element in the specified array,
-	 * or return -1 if there is no such index.
-	 * <p>
-	 * <code>Arrays.identityIndexOf(Object[] array, Object o)</code>
-	 */
-	public static int identityIndexOf(Object[] array, Object value) {
-		int len = array.length;
-		for (int i = 0; i < len; i++) {
-			if (array[i] == value) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-	/**
-	 * Return the index of the first occurrence of the
-	 * specified element in the specified array,
-	 * or return -1 if there is no such index.
-	 * <p>
-	 * <code>Arrays.indexOf(char[] array, char value)</code>
-	 */
-	public static int indexOf(char[] array, char value) {
-		int len = array.length;
-		for (int i = 0; i < len; i++) {
-			if (array[i] == value) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-	/**
-	 * Return the index of the first occurrence of the
-	 * specified element in the specified array,
-	 * or return -1 if there is no such index.
-	 * <p>
-	 * <code>Arrays.indexOf(int[] array, int value)</code>
-	 */
-	public static int indexOf(int[] array, int value) {
-		int len = array.length;
-		for (int i = 0; i < len; i++) {
-			if (array[i] == value) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-
-	// ********** insertion index of **********
-
-	/**
-	 * Return the maximum index of where the specified comparable object
-	 * should be inserted into the specified sorted array and still keep
-	 * the array sorted.
-	 */
-	public static <E extends Comparable<? super E>> int insertionIndexOf(E[] sortedArray, Comparable<E> value) {
-		int len = sortedArray.length;
-		for (int i = 0; i < len; i++) {
-			if (value.compareTo(sortedArray[i]) < 0) {
-				return i;
-			}
-		}
-		return len;
-	}
-
-	/**
-	 * Return the maximum index of where the specified comparable object
-	 * should be inserted into the specified sorted array and still keep
-	 * the array sorted.
-	 */
-	public static <E> int insertionIndexOf(E[] sortedArray, E value, Comparator<? super E> comparator) {
-		int len = sortedArray.length;
-		for (int i = 0; i < len; i++) {
-			if (comparator.compare(value, sortedArray[i]) < 0) {
-				return i;
-			}
-		}
-		return len;
-	}
-
-
-	// ********** last index of **********
-
-	/**
-	 * Return the index of the last occurrence of the
-	 * specified element in the specified array;
-	 * return -1 if there is no such index.
-	 * <p>
-	 * <code>Arrays.lastIndexOf(Object[] array, Object o)</code>
-	 */
-	public static int lastIndexOf(Object[] array, Object value) {
-		int len = array.length;
-		if (value == null) {
-			for (int i = len; i-- > 0; ) {
-				if (array[i] == null) {
-					return i;
-				}
-			}
-		} else {
-			for (int i = len; i-- > 0; ) {
-				if (value.equals(array[i])) {
-					return i;
-				}
-			}
-		}
-		return -1;
-	}
-
-	/**
-	 * Return the index of the last occurrence of the
-	 * specified element in the specified array,
-	 * or return -1 if there is no such index.
-	 * <p>
-	 * <code>Arrays.lastIndexOf(char[] array, char value)</code>
-	 */
-	public static int lastIndexOf(char[] array, char value) {
-		for (int i = array.length; i-- > 0; ) {
-			if (array[i] == value) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-	/**
-	 * Return the index of the last occurrence of the
-	 * specified element in the specified array,
-	 * or return -1 if there is no such index.
-	 * <p>
-	 * <code>Arrays.lastIndexOf(int[] array, int value)</code>
-	 */
-	public static int lastIndexOf(int[] array, int value) {
-		for (int i = array.length; i-- > 0; ) {
-			if (array[i] == value) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-
-	// ********** min/max **********
-
-	/**
-	 * Return the character from the specified array with the minimum value.
-	 * <p>
-	 * <code>Arrays.min(char[] array)</code>
-	 */
-	public static char min(char... array) {
-		int len = array.length;
-		if (len == 0) {
-			throw new IndexOutOfBoundsException();
-		}
-		int last = len - 1;
-		char min = array[last];
-		for (int i = last; i-- > 0; ) {
-			char c = array[i];
-			if (c < min) {
-				min = c;
-			}
-		}
-		return min;
-	}
-
-	/**
-	 * Return the integer from the specified array with the minimum value.
-	 * <p>
-	 * <code>Arrays.min(int[] array)</code>
-	 */
-	public static int min(int... array) {
-		int len = array.length;
-		if (len == 0) {
-			throw new IndexOutOfBoundsException();
-		}
-		int last = len - 1;
-		int min = array[last];
-		for (int i = last; i-- > 0; ) {
-			int x = array[i];
-			if (x < min) {
-				min = x;
-			}
-		}
-		return min;
-	}
-
-	/**
-	 * Return the character from the specified array with the maximum value.
-	 * <p>
-	 * <code>Arrays.max(char[] array)</code>
-	 */
-	public static char max(char... array) {
-		int len = array.length;
-		if (len == 0) {
-			throw new IndexOutOfBoundsException();
-		}
-		int last = len - 1;
-		char max = array[last];
-		for (int i = last; i-- > 0; ) {
-			char c = array[i];
-			if (c > max) {
-				max = c;
-			}
-		}
-		return max;
-	}
-
-	/**
-	 * Return the integer from the specified array with the maximum value.
-	 * <p>
-	 * <code>Arrays.max(int[] array)</code>
-	 */
-	public static int max(int... array) {
-		int len = array.length;
-		if (len == 0) {
-			throw new IndexOutOfBoundsException();
-		}
-		int last = len - 1;
-		int max = array[last];
-		for (int i = last; i-- > 0; ) {
-			int x = array[i];
-			if (x > max) {
-				max = x;
-			}
-		}
-		return max;
-	}
-
-
-	// ********** move **********
-
-	/**
-	 * Move an element from the specified source index to the specified target
-	 * index. Return the altered array.
-	 * <p>
-	 * <code>Arrays.move(Object[] array, int targetIndex, int sourceIndex)</code>
-	 */
-	public static <E> E[] move(E[] array, int targetIndex, int sourceIndex) {
-		return (targetIndex == sourceIndex) ? array : move_(array, targetIndex, sourceIndex);
-	}
-
-	/**
-	 * assume target index != source index
-	 */
-	private static <E> E[] move_(E[] array, int targetIndex, int sourceIndex) {
-		E temp = array[sourceIndex];
-		if (targetIndex < sourceIndex) {
-			System.arraycopy(array, targetIndex, array, targetIndex + 1, sourceIndex - targetIndex);
-		} else {
-			System.arraycopy(array, sourceIndex + 1, array, sourceIndex, targetIndex - sourceIndex);
-		}
-		array[targetIndex] = temp;
-		return array;
-	}
-
-	/**
-	 * Move elements from the specified source index to the specified target
-	 * index. Return the altered array.
-	 * <p>
-	 * <code>Arrays.move(Object[] array, int targetIndex, int sourceIndex, int length)</code>
-	 */
-	public static <E> E[] move(E[] array, int targetIndex, int sourceIndex, int length) {
-		if ((targetIndex == sourceIndex) || (length == 0)) {
-			return array;
-		}
-		if (length == 1) {
-			return move_(array, targetIndex, sourceIndex);
-		}
-		E[] temp = newArray(array, length);
-		System.arraycopy(array, sourceIndex, temp, 0, length);
-		if (targetIndex < sourceIndex) {
-			System.arraycopy(array, targetIndex, array, targetIndex + length, sourceIndex - targetIndex);
-		} else {
-			System.arraycopy(array, sourceIndex + length, array, sourceIndex, targetIndex - sourceIndex);
-		}
-		System.arraycopy(temp, 0, array, targetIndex, length);
-		return array;
-	}
-
-	/**
-	 * Move an element from the specified source index to the specified target
-	 * index. Return the altered array.
-	 * <p>
-	 * <code>Arrays.move(int[] array, int targetIndex, int sourceIndex)</code>
-	 */
-	public static int[] move(int[] array, int targetIndex, int sourceIndex) {
-		return (targetIndex == sourceIndex) ? array : move_(array, targetIndex, sourceIndex);
-	}
-
-	/**
-	 * assume targetIndex != sourceIndex
-	 */
-	private static int[] move_(int[] array, int targetIndex, int sourceIndex) {
-		int temp = array[sourceIndex];
-		if (targetIndex < sourceIndex) {
-			System.arraycopy(array, targetIndex, array, targetIndex + 1, sourceIndex - targetIndex);
-		} else {
-			System.arraycopy(array, sourceIndex + 1, array, sourceIndex, targetIndex - sourceIndex);
-		}
-		array[targetIndex] = temp;
-		return array;
-	}
-
-	/**
-	 * Move elements from the specified source index to the specified target
-	 * index. Return the altered array.
-	 * <p>
-	 * <code>Arrays.move(int[] array, int targetIndex, int sourceIndex, int length)</code>
-	 */
-	public static int[] move(int[] array, int targetIndex, int sourceIndex, int length) {
-		if ((targetIndex == sourceIndex) || (length == 0)) {
-			return array;
-		}
-		if (length == 1) {
-			return move_(array, targetIndex, sourceIndex);
-		}
-		int[] temp = new int[length];
-		System.arraycopy(array, sourceIndex, temp, 0, length);
-		if (targetIndex < sourceIndex) {
-			System.arraycopy(array, targetIndex, array, targetIndex + length, sourceIndex - targetIndex);
-		} else {
-			System.arraycopy(array, sourceIndex + length, array, sourceIndex, targetIndex - sourceIndex);
-		}
-		System.arraycopy(temp, 0, array, targetIndex, length);
-		return array;
-	}
-
-	/**
-	 * Move an element from the specified source index to the specified target
-	 * index. Return the altered array.
-	 * <p>
-	 * <code>Arrays.move(char[] array, int targetIndex, int sourceIndex)</code>
-	 */
-	public static char[] move(char[] array, int targetIndex, int sourceIndex) {
-		return (targetIndex == sourceIndex) ? array : move_(array, targetIndex, sourceIndex);
-	}
-
-	/**
-	 * assume targetIndex != sourceIndex
-	 */
-	private static char[] move_(char[] array, int targetIndex, int sourceIndex) {
-		char temp = array[sourceIndex];
-		if (targetIndex < sourceIndex) {
-			System.arraycopy(array, targetIndex, array, targetIndex + 1, sourceIndex - targetIndex);
-		} else {
-			System.arraycopy(array, sourceIndex + 1, array, sourceIndex, targetIndex - sourceIndex);
-		}
-		array[targetIndex] = temp;
-		return array;
-	}
-
-	/**
-	 * Move elements from the specified source index to the specified target
-	 * index. Return the altered array.
-	 * <p>
-	 * <code>Arrays.move(char[] array, int targetIndex, int sourceIndex, int length)</code>
-	 */
-	public static char[] move(char[] array, int targetIndex, int sourceIndex, int length) {
-		if ((targetIndex == sourceIndex) || (length == 0)) {
-			return array;
-		}
-		if (length == 1) {
-			return move_(array, targetIndex, sourceIndex);
-		}
-		char[] temp = new char[length];
-		System.arraycopy(array, sourceIndex, temp, 0, length);
-		if (targetIndex < sourceIndex) {
-			System.arraycopy(array, targetIndex, array, targetIndex + length, sourceIndex - targetIndex);
-		} else {
-			System.arraycopy(array, sourceIndex + length, array, sourceIndex, targetIndex - sourceIndex);
-		}
-		System.arraycopy(temp, 0, array, targetIndex, length);
-		return array;
-	}
-
-
-	// ********** remove **********
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified element removed.
-	 * <p>
-	 * <code>Arrays.remove(Object[] array, Object value)</code>
-	 */
-	public static <E> E[] remove(E[] array, Object value) {
-		return removeElementAtIndex(array, indexOf(array, value));
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified element removed.
-	 * <p>
-	 * <code>Arrays.remove(char[] array, char value)</code>
-	 */
-	public static char[] remove(char[] array, char value) {
-		return removeElementAtIndex(array, indexOf(array, value));
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified element removed.
-	 * <p>
-	 * <code>Arrays.remove(int[] array, int value)</code>
-	 */
-	public static int[] remove(int[] array, int value) {
-		return removeElementAtIndex(array, indexOf(array, value));
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the first element removed.
-	 * <p>
-	 * <code>Arrays.removeFirst(Object[] array)</code>
-	 */
-	public static <E> E[] removeFirst(E[] array) {
-		return removeElementAtIndex(array, 0);
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the first element removed.
-	 * <p>
-	 * <code>Arrays.removeFirst(char[] array)</code>
-	 */
-	public static char[] removeFirst(char[] array) {
-		return removeElementAtIndex(array, 0);
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the first element removed.
-	 * <p>
-	 * <code>Arrays.removeFirst(int[] array)</code>
-	 */
-	public static int[] removeFirst(int[] array) {
-		return removeElementAtIndex(array, 0);
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the last element removed.
-	 * <p>
-	 * <code>Arrays.removeLast(Object[] array)</code>
-	 */
-	public static <E> E[] removeLast(E[] array) {
-		return removeElementAtIndex(array, array.length - 1);
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the last element removed.
-	 * <p>
-	 * <code>Arrays.removeLast(char[] array)</code>
-	 */
-	public static char[] removeLast(char[] array) {
-		return removeElementAtIndex(array, array.length - 1);
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the last element removed.
-	 * <p>
-	 * <code>Arrays.removeLast(int[] array)</code>
-	 */
-	public static int[] removeLast(int[] array) {
-		return removeElementAtIndex(array, array.length - 1);
-	}
-
-
-	// ********** remove all **********
-
-	/**
-	 * Remove from the specified array all the elements in
-	 * the specified iterable and return the result.
-	 * <p>
-	 * <code>Arrays.removeAll(Object[] array, Iterable iterable)</code>
-	 */
-	public static <E> E[] removeAll(E[] array, Iterable<?> iterable) {
-		return removeAll(array, iterable.iterator());
-	}
-
-	/**
-	 * Remove from the specified array all the elements in
-	 * the specified iterable and return the result.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Arrays.removeAll(Object[] array, Iterable iterable)</code>
-	 */
-	public static <E> E[] removeAll(E[] array, Iterable<?> iterable, int iterableSize) {
-		return removeAll(array, iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Remove from the specified array all the elements in
-	 * the specified iterator and return the result.
-	 * <p>
-	 * <code>Arrays.removeAll(Object[] array, Iterator iterator)</code>
-	 */
-	public static <E> E[] removeAll(E[] array, Iterator<?> iterator) {
-		// convert to a set to take advantage of hashed look-up
-		return iterator.hasNext() ? removeAll_(array, CollectionTools.set(iterator)) : array;
-	}
-
-	/**
-	 * Remove from the specified array all the elements in
-	 * the specified iterator and return the result.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Arrays.removeAll(Object[] array, Iterator iterator)</code>
-	 */
-	public static <E> E[] removeAll(E[] array, Iterator<?> iterator, int iteratorSize) {
-		// convert to a set to take advantage of hashed look-up
-		return iterator.hasNext() ? removeAll_(array, CollectionTools.set(iterator, iteratorSize)) : array;
-	}
-
-	/**
-	 * Remove from the specified array all the elements in
-	 * the specified collection and return the result.
-	 * <p>
-	 * <code>Arrays.removeAll(Object[] array, Collection collection)</code>
-	 */
-	public static <E> E[] removeAll(E[] array, Collection<?> collection) {
-		return collection.isEmpty() ? array : removeAll_(array, collection);
-	}
-
-	/**
-	 * assume collection is non-empty
-	 */
-	private static <E> E[] removeAll_(E[] array, Collection<?> collection) {
-		return removeAll(array, collection, array.length);
-	}
-
-	/**
-	 * assume collection is non-empty; check array length
-	 */
-	private static <E> E[] removeAll(E[] array, Collection<?> collection, int arrayLength) {
-		return (arrayLength == 0) ? array : removeAll_(array, collection, arrayLength);
-	}
-
-	/**
-	 * assume collection is non-empty and array length > 0
-	 */
-	private static <E> E[] removeAll_(E[] array, Collection<?> collection, int arrayLength) {
-		// build the indices of the elements that are to remain
-		int[] indices = new int[arrayLength];
-		int j = 0;
-		for (int i = 0; i < arrayLength; i++) {
-			if ( ! collection.contains(array[i])) {
-				indices[j++] = i;
-			}
-		}
-		if (j == arrayLength) {
-			return array;  // nothing was removed
-		}
-		E[] result = newArray(array, j);
-		int resultLength = result.length;
-		for (int i = 0; i < resultLength; i++) {
-			result[i] = array[indices[i]];
-		}
-		return result;
-	}
-
-	/**
-	 * Remove from the first specified array all the elements in
-	 * the second specified array and return the result.
-	 * <p>
-	 * <code>Arrays.removeAll(Object[] array1, Object[] array2)</code>
-	 */
-	public static <E> E[] removeAll(E[] array1, Object... array2) {
-		// convert to a set to take advantage of hashed look-up
-		return (array2.length == 0) ? array1 : removeAll_(array1, CollectionTools.set(array2));
-	}
-
-	/**
-	 * Remove from the first specified array all the elements in
-	 * the second specified array and return the result.
-	 * <p>
-	 * <code>Arrays#removeAll(char[] array1, char[] array2)</code>
-	 */
-	public static char[] removeAll(char[] array1, char... array2) {
-		if (array2.length == 0) {
-			return array1;
-		}
-		int array1Length = array1.length;
-		if (array1Length == 0) {
-			return array1;
-		}
-		int[] indices = new int[array1Length];
-		int j = 0;
-		for (int i = 0; i < array1Length; i++) {
-			if ( ! contains(array2, array1[i])) {
-				indices[j++] = i;
-			}
-		}
-		if (j == array1Length) {
-			return array1;  // nothing was removed
-		}
-		char[] result = new char[j];
-		int resultLength = result.length;
-		for (int i = 0; i < resultLength; i++) {
-			result[i] = array1[indices[i]];
-		}
-		return result;
-	}
-
-	/**
-	 * Remove from the first specified array all the elements in
-	 * the second specified array and return the result.
-	 * <p>
-	 * <code>Arrays#removeAll(int[] array1, int[] array2)</code>
-	 */
-	public static int[] removeAll(int[] array1, int... array2) {
-		if (array2.length == 0) {
-			return array1;
-		}
-		int array1Length = array1.length;
-		if (array1Length == 0) {
-			return array1;
-		}
-		int[] indices = new int[array1Length];
-		int j = 0;
-		for (int i = 0; i < array1Length; i++) {
-			if ( ! contains(array2, array1[i])) {
-				indices[j++] = i;
-			}
-		}
-		if (j == array1Length) {
-			return array1;  // nothing was removed
-		}
-		int[] result = new int[j];
-		int resultLength = result.length;
-		for (int i = 0; i < resultLength; i++) {
-			result[i] = array1[indices[i]];
-		}
-		return result;
-	}
-
-
-	// ********** remove all occurrences **********
-
-	/**
-	 * Remove from the specified array all occurrences of
-	 * the specified element and return the result.
-	 * <p>
-	 * <code>Arrays.removeAllOccurrences(Object[] array, Object value)</code>
-	 */
-	public static <E> E[] removeAllOccurrences(E[] array, Object value) {
-		int arrayLength = array.length;
-		if (arrayLength == 0) {
-			return array;
-		}
-		int[] indices = new int[arrayLength];
-		int j = 0;
-		if (value == null) {
-			for (int i = arrayLength; i-- > 0; ) {
-				if (array[i] != null) {
-					indices[j++] = i;
-				}
-			}
-		} else {
-			for (int i = array.length; i-- > 0; ) {
-				if ( ! value.equals(array[i])) {
-					indices[j++] = i;
-				}
-			}
-		}
-		if (j == arrayLength) {
-			return array;  // nothing was removed
-		}
-		E[] result = newArray(array, j);
-		int resultLength = result.length;
-		for (int i = 0; i < resultLength; i++) {
-			result[i] = array[indices[i]];
-		}
-		return result;
-	}
-
-	/**
-	 * Remove from the specified array all occurrences of
-	 * the specified element and return the result.
-	 * <p>
-	 * <code>Arrays.removeAllOccurrences(char[] array, char value)</code>
-	 */
-	public static char[] removeAllOccurrences(char[] array, char value) {
-		int arrayLength = array.length;
-		if (arrayLength == 0) {
-			return array;
-		}
-		int[] indices = new int[arrayLength];
-		int j = 0;
-		for (int i = arrayLength; i-- > 0; ) {
-			if (array[i] != value) {
-				indices[j++] = i;
-			}
-		}
-		if (j == arrayLength) {
-			return array;  // nothing was removed
-		}
-		char[] result = new char[j];
-		int resultLength = result.length;
-		for (int i = 0; i < resultLength; i++) {
-			result[i] = array[indices[i]];
-		}
-		return result;
-	}
-
-	/**
-	 * Remove from the specified array all occurrences of
-	 * the specified element and return the result.
-	 * <p>
-	 * <code>Arrays.removeAllOccurrences(int[] array, int value)</code>
-	 */
-	public static int[] removeAllOccurrences(int[] array, int value) {
-		int arrayLength = array.length;
-		if (arrayLength == 0) {
-			return array;
-		}
-		int[] indices = new int[arrayLength];
-		int j = 0;
-		for (int i = arrayLength; i-- > 0; ) {
-			if (array[i] != value) {
-				indices[j++] = i;
-			}
-		}
-		if (j == arrayLength) {
-			return array;  // nothing was removed
-		}
-		int[] result = new int[j];
-		int resultLength = result.length;
-		for (int i = 0; i < resultLength; i++) {
-			result[i] = array[indices[i]];
-		}
-		return result;
-	}
-
-
-	// ********** remove duplicate elements **********
-
-	/**
-	 * Remove any duplicate elements from the specified array,
-	 * while maintaining the order.
-	 */
-	public static <E> E[] removeDuplicateElements(E... array) {
-		int len = array.length;
-		if ((len == 0) || (len == 1)) {
-			return array;
-		}
-		ArrayList<E> temp = CollectionTools.list(array);
-		return CollectionTools.removeDuplicateElements(temp, len) ?
-					temp.toArray(newArray(array, temp.size())) :
-					array;
-	}
-
-
-	// ********** remove element at index **********
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified element removed.
-	 * <p>
-	 * <code>Arrays.removeElementAtIndex(Object[] array, int index)</code>
-	 */
-	public static <E> E[] removeElementAtIndex(E[] array, int index) {
-		return removeElementsAtIndex(array, index, 1);
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified element removed.
-	 * <p>
-	 * <code>Arrays.removeElementAtIndex(char[] array, int index)</code>
-	 */
-	public static char[] removeElementAtIndex(char[] array, int index) {
-		return removeElementsAtIndex(array, index, 1);
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified element removed.
-	 * <p>
-	 * <code>Arrays.removeElementAtIndex(int[] array, int index)</code>
-	 */
-	public static int[] removeElementAtIndex(int[] array, int index) {
-		return removeElementsAtIndex(array, index, 1);
-	}
-
-
-	// ********** remove elements at index **********
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified elements removed.
-	 * <p>
-	 * <code>Arrays.removeElementsAtIndex(Object[] array, int index, int length)</code>
-	 */
-	public static <E> E[] removeElementsAtIndex(E[] array, int index, int length) {
-		if (length == 0) {
-			return array;
-		}
-		int arrayLength = array.length;
-		int newLength = arrayLength - length;
-		E[] result = newArray(array, newLength);
-		if ((newLength == 0) && (index == 0)) {
-			return result;  // performance tweak
-		}
-		if (index != 0) {
-			System.arraycopy(array, 0, result, 0, index);
-		}
-		int length2 = newLength - index;
-		if (length2 != 0) {
-			System.arraycopy(array, index + length, result, index, length2);
-		}
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified elements removed.
-	 * <p>
-	 * <code>Arrays.removeElementsAtIndex(char[] array, int index, int length)
-	 */
-	public static char[] removeElementsAtIndex(char[] array, int index, int length) {
-		if (length == 0) {
-			return array;
-		}
-		int arrayLength = array.length;
-		int newLength = arrayLength - length;
-		if ((newLength == 0) && (index == 0)) {
-			return EMPTY_CHAR_ARRAY;  // performance tweak
-		}
-		char[] result = new char[newLength];
-		if (index != 0) {
-			System.arraycopy(array, 0, result, 0, index);
-		}
-		int length2 = newLength - index;
-		if (length2 != 0) {
-			System.arraycopy(array, index + length, result, index, length2);
-		}
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified elements removed.
-	 * <p>
-	 * <code>Arrays.removeElementsAtIndex(int[] array, int index, int length)
-	 */
-	public static int[] removeElementsAtIndex(int[] array, int index, int length) {
-		if (length == 0) {
-			return array;
-		}
-		int arrayLength = array.length;
-		int newLength = arrayLength - length;
-		if ((newLength == 0) && (index == 0)) {
-			return EMPTY_INT_ARRAY;  // performance tweak
-		}
-		int[] result = new int[newLength];
-		if (index != 0) {
-			System.arraycopy(array, 0, result, 0, index);
-		}
-		int length2 = newLength - index;
-		if (length2 != 0) {
-			System.arraycopy(array, index + length, result, index, length2);
-		}
-		return result;
-	}
-
-
-	// ********** replace all **********
-
-	/**
-	 * Replace all occurrences of the specified old value with
-	 * the specified new value. Return the altered array.
-	 * <p>
-	 * <code>Arrays.replaceAll(Object[] array, Object oldValue, Object newValue)</code>
-	 */
-	public static <E> E[] replaceAll(E[] array, Object oldValue, E newValue) {
-		if (oldValue == null) {
-			for (int i = array.length; i-- > 0; ) {
-				if (array[i] == null) {
-					array[i] = newValue;
-				}
-			}
-		} else {
-			for (int i = array.length; i-- > 0; ) {
-				if (oldValue.equals(array[i])) {
-					array[i] = newValue;
-				}
-			}
-		}
-		return array;
-	}
-
-	/**
-	 * Replace all occurrences of the specified old value with
-	 * the specified new value. Return the altered array.
-	 *<p>
-	 * <code> Arrays.replaceAll(int[] array, int oldValue, int newValue)</code>
-	 */
-	public static int[] replaceAll(int[] array, int oldValue, int newValue) {
-		for (int i = array.length; i-- > 0; ) {
-			if (array[i] == oldValue) {
-				array[i] = newValue;
-			}
-		}
-		return array;
-	}
-
-	/**
-	 * Replace all occurrences of the specified old value with
-	 * the specified new value. Return the altered array.
-	 * <p>
-	 * <code>Arrays.replaceAll(char[] array, char oldValue, char newValue)</code>
-	 */
-	public static char[] replaceAll(char[] array, char oldValue, char newValue) {
-		for (int i = array.length; i-- > 0; ) {
-			if (array[i] == oldValue) {
-				array[i] = newValue;
-			}
-		}
-		return array;
-	}
-
-
-	// ********** retain all **********
-
-	/**
-	 * Retain in the specified array all the elements in
-	 * the specified iterable and return the result.
-	 * <p>
-	 * <code>Arrays.retainAll(Object[] array, Iterable iterable)</code>
-	 */
-	public static <E> E[] retainAll(E[] array, Iterable<?> iterable) {
-		int arrayLength = array.length;
-		return (arrayLength == 0) ? array : retainAll(array, arrayLength, iterable.iterator());
-	}
-
-	/**
-	 * Retain in the specified array all the elements in
-	 * the specified iterable and return the result.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Arrays.retainAll(Object[] array, Iterable iterable)</code>
-	 */
-	public static <E> E[] retainAll(E[] array, Iterable<?> iterable, int iterableSize) {
-		int arrayLength = array.length;
-		return (arrayLength == 0) ? array : retainAll(array, arrayLength, iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Retain in the specified array all the elements in
-	 * the specified iterator and return the result.
-	 * <p>
-	 * <code>Arrays.retainAll(Object[] array, Iterator iterator)</code>
-	 */
-	public static <E> E[] retainAll(E[] array, Iterator<?> iterator) {
-		int arrayLength = array.length;
-		return (arrayLength == 0) ? array : retainAll(array, arrayLength, iterator);
-	}
-
-	/**
-	 * Retain in the specified array all the elements in
-	 * the specified iterator and return the result.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Arrays.retainAll(Object[] array, Iterator iterator)</code>
-	 */
-	public static <E> E[] retainAll(E[] array, Iterator<?> iterator, int iteratorSize) {
-		int arrayLength = array.length;
-		return (arrayLength == 0) ? array : retainAll(array, arrayLength, iterator, iteratorSize);
-	}
-
-	/**
-	 * assume array length > 0
-	 */
-	private static <E> E[] retainAll(E[] array, int arrayLength, Iterator<?> iterator) {
-		return iterator.hasNext() ?
-				retainAll_(array, CollectionTools.set(iterator), arrayLength) :
-				newArray(array, 0);
-	}
-
-	/**
-	 * assume array length > 0
-	 */
-	private static <E> E[] retainAll(E[] array, int arrayLength, Iterator<?> iterator, int iteratorSize) {
-		return iterator.hasNext() ?
-				retainAll_(array, CollectionTools.set(iterator, iteratorSize), arrayLength) :
-				newArray(array, 0);
-	}
-
-	/**
-	 * Retain in the specified array all the elements in
-	 * the specified collection and return the result.
-	 * <p>
-	 * <code>Arrays.retainAll(Object[] array, Collection collection)</code>
-	 */
-	public static <E> E[] retainAll(E[] array, Collection<?> collection) {
-		int arrayLength = array.length;
-		return (arrayLength == 0) ? array : retainAll(array, collection, arrayLength);
-	}
-
-	/**
-	 * assume array length > 0
-	 */
-	private static <E> E[] retainAll(E[] array, Collection<?> collection, int arrayLength) {
-		return collection.isEmpty() ?
-				newArray(array, 0) :
-				retainAll_(array, collection, arrayLength);
-	}
-
-	/**
-	 * assume collection is non-empty and array length > 0
-	 */
-	private static <E> E[] retainAll_(E[] array, Collection<?> collection, int arrayLength) {
-		int[] indices = new int[arrayLength];
-		int j = 0;
-		for (int i = 0; i < arrayLength; i++) {
-			if (collection.contains(array[i])) {
-				indices[j++] = i;
-			}
-		}
-		if (j == arrayLength) {
-			return array;  // everything was retained
-		}
-		E[] result = newArray(array, j);
-		int resultLength = result.length;
-		for (int i = 0; i < resultLength; i++) {
-			result[i] = array[indices[i]];
-		}
-		return result;
-	}
-
-	/**
-	 * Remove from the first specified array all the elements in
-	 * the second specified array and return the result.
-	 * <p>
-	 * <code>Arrays.retainAll(Object[] array1, Object[] array2)</code>
-	 */
-	public static <E> E[] retainAll(E[] array1, Object[] array2) {
-		int array1Length = array1.length;
-		return (array1Length == 0) ?
-				array1 :
-				(array2.length == 0) ?
-					newArray(array1, 0) :
-					retainAll(array1, CollectionTools.set(array2), array1Length);
-	}
-
-	/**
-	 * Remove from the first specified array all the elements in
-	 * the second specified array and return the result.
-	 * <p>
-	 * <code>Arrays.retainAll(char[] array1, char[] array2)</code>
-	 */
-	public static char[] retainAll(char[] array1, char... array2) {
-		int array1Length = array1.length;
-		return (array1Length == 0) ? array1 : retainAll(array1, array2, array1Length);
-	}
-
-	/**
-	 * assume array 1 length > 0
-	 */
-	private static char[] retainAll(char[] array1, char[] array2, int array1Length) {
-		int array2Length = array2.length;
-		return (array2Length == 0) ? EMPTY_CHAR_ARRAY : retainAll(array1, array2, array1Length, array2Length);
-	}
-
-	/**
-	 * assume both array lengths > 0
-	 */
-	private static char[] retainAll(char[] array1, char[] array2, int array1Length, int array2Length) {
-		int[] indices = new int[array1Length];
-		int j = 0;
-		for (int i = 0; i < array1Length; i++) {
-			if (contains_(array2, array1[i], array2Length)) {
-				indices[j++] = i;
-			}
-		}
-		if (j == array1Length) {
-			return array1;  // everything was retained
-		}
-		char[] result = new char[j];
-		int resultLength = result.length;
-		for (int i = 0; i < resultLength; i++) {
-			result[i] = array1[indices[i]];
-		}
-		return result;
-	}
-
-	/**
-	 * Remove from the first specified array all the elements in
-	 * the second specified array and return the result.
-	 * <p>
-	 * <code>Arrays.retainAll(int[] array1, int[] array2)</code>
-	 */
-	public static int[] retainAll(int[] array1, int... array2) {
-		int array1Length = array1.length;
-		return (array1Length == 0) ? array1 : retainAll(array1, array2, array1Length);
-	}
-
-	/**
-	 * assume array 1 length > 0
-	 */
-	private static int[] retainAll(int[] array1, int[] array2, int array1Length) {
-		int array2Length = array2.length;
-		return (array2Length == 0) ? EMPTY_INT_ARRAY : retainAll(array1, array2, array1Length, array2Length);
-	}
-
-	/**
-	 * assume both array lengths > 0
-	 */
-	private static int[] retainAll(int[] array1, int[] array2, int array1Length, int array2Length) {
-		int[] indices = new int[array1Length];
-		int j = 0;
-		for (int i = 0; i < array1Length; i++) {
-			if (contains_(array2, array1[i], array2Length)) {
-				indices[j++] = i;
-			}
-		}
-		if (j == array1Length) {
-			return array1;  // everything was retained
-		}
-		int[] result = new int[j];
-		int resultLength = result.length;
-		for (int i = 0; i < resultLength; i++) {
-			result[i] = array1[indices[i]];
-		}
-		return result;
-	}
-
-
-	// ********** reverse **********
-
-	/**
-	 * Return the array, reversed.
-	 * <p>
-	 * <code>Arrays.reverse(Object... array)</code>
-	 */
-	public static <E> E[] reverse(E... array) {
-		int len = array.length;
-		if ((len == 0) || (len == 1)) {
-			return array;
-		}
-		for (int i = 0, mid = len >> 1, j = len - 1; i < mid; i++, j--) {
-			swap(array, i, j);
-		}
-		return array;
-	}
-
-	/**
-	 * Return the array, reversed.
-	 * <p>
-	 * <code>Arrays.reverse(char... array)</code>
-	 */
-	public static char[] reverse(char... array) {
-		int len = array.length;
-		if ((len == 0) || (len == 1)) {
-			return array;
-		}
-		for (int i = 0, mid = len >> 1, j = len - 1; i < mid; i++, j--) {
-			swap(array, i, j);
-		}
-		return array;
-	}
-
-	/**
-	 * Return the array, reversed.
-	 * <p>
-	 * <code>Arrays.reverse(int... array)</code>
-	 */
-	public static int[] reverse(int... array) {
-		int len = array.length;
-		if ((len == 0) || (len == 1)) {
-			return array;
-		}
-		for (int i = 0, mid = len >> 1, j = len - 1; i < mid; i++, j--) {
-			swap(array, i, j);
-		}
-		return array;
-	}
-
-
-	// ********** rotate **********
-
-	/**
-	 * Return the rotated array after rotating it one position.
-	 * <p>
-	 * <code>Arrays.rotate(Object[] array)</code>
-	 */
-	public static <E> E[] rotate(E... array) {
-		return rotate(array, 1);
-	}
-
-	/**
-	 * Return the rotated array after rotating it the specified distance.
-	 * <p>
-	 * <code>Arrays.rotate(Object[] array, int distance)</code>
-	 */
-	public static <E> E[] rotate(E[] array, int distance) {
-		int len = array.length;
-		if ((len == 0) || (len == 1)) {
-			return array;
-		}
-		distance = distance % len;
-		if (distance < 0) {
-			distance += len;
-		}
-		if (distance == 0) {
-			return array;
-		}
-		for (int cycleStart = 0, nMoved = 0; nMoved != len; cycleStart++) {
-			E displaced = array[cycleStart];
-			int i = cycleStart;
-			do {
-				i += distance;
-				if (i >= len) {
-					i -= len;
-				}
-				E temp = array[i];
-				array[i] = displaced;
-				displaced = temp;
-				nMoved ++;
-			} while (i != cycleStart);
-		}
-		return array;
-	}
-
-	/**
-	 * Return the rotated array after rotating it one position.
-	 * <p>
-	 * <code>Arrays.rotate(char[] array)</code>
-	 */
-	public static char[] rotate(char... array) {
-		return rotate(array, 1);
-	}
-
-	/**
-	 * Return the rotated array after rotating it the specified distance.
-	 * <p>
-	 * <code>Arrays.rotate(char[] array, int distance)</code>
-	 */
-	public static char[] rotate(char[] array, int distance) {
-		int len = array.length;
-		if ((len == 0) || (len == 1)) {
-			return array;
-		}
-		distance = distance % len;
-		if (distance < 0) {
-			distance += len;
-		}
-		if (distance == 0) {
-			return array;
-		}
-		for (int cycleStart = 0, nMoved = 0; nMoved != len; cycleStart++) {
-			char displaced = array[cycleStart];
-			int i = cycleStart;
-			do {
-				i += distance;
-				if (i >= len) {
-					i -= len;
-				}
-				char temp = array[i];
-				array[i] = displaced;
-				displaced = temp;
-				nMoved ++;
-			} while (i != cycleStart);
-		}
-		return array;
-	}
-
-	/**
-	 * Return the rotated array after rotating it one position.
-	 * <p>
-	 * <code>Arrays.rotate(int[] array)</code>
-	 */
-	public static int[] rotate(int... array) {
-		return rotate(array, 1);
-	}
-
-	/**
-	 * Return the rotated array after rotating it the specified distance.
-	 * <p>
-	 * <code>Arrays.rotate(int[] array, int distance)</code>
-	 */
-	public static int[] rotate(int[] array, int distance) {
-		int len = array.length;
-		if ((len == 0) || (len == 1)) {
-			return array;
-		}
-		distance = distance % len;
-		if (distance < 0) {
-			distance += len;
-		}
-		if (distance == 0) {
-			return array;
-		}
-		for (int cycleStart = 0, nMoved = 0; nMoved != len; cycleStart++) {
-			int displaced = array[cycleStart];
-			int i = cycleStart;
-			do {
-				i += distance;
-				if (i >= len) {
-					i -= len;
-				}
-				int temp = array[i];
-				array[i] = displaced;
-				displaced = temp;
-				nMoved ++;
-			} while (i != cycleStart);
-		}
-		return array;
-	}
-
-
-	// ********** shuffle **********
-
-	private static final Random RANDOM = new Random();
-
-	/**
-	 * Return the array after "shuffling" it.
-	 * <p>
-	 * <code>Arrays.shuffle(Object... array)</code>
-	 */
-	public static <E> E[] shuffle(E... array) {
-		return shuffle(array, RANDOM);
-	}
-
-	/**
-	 * Return the array after "shuffling" it.
-	 * <p>
-	 * <code>Arrays.shuffle(Object[] array, Random r)</code>
-	 */
-	public static <E> E[] shuffle(E[] array, Random random) {
-		int len = array.length;
-		if ((len == 0) || (len == 1)) {
-			return array;
-		}
-		for (int i = len; i-- > 0; ) {
-			swap(array, i, random.nextInt(len));
-		}
-		return array;
-	}
-
-	/**
-	 * Return the array after "shuffling" it.
-	 * <p>
-	 * <code>Arrays.shuffle(char... array)</code>
-	 */
-	public static char[] shuffle(char... array) {
-		return shuffle(array, RANDOM);
-	}
-
-	/**
-	 * Return the array after "shuffling" it.
-	 * <p>
-	 * <code>Arrays.shuffle(char[] array, Random r)</code>
-	 */
-	public static char[] shuffle(char[] array, Random random) {
-		int len = array.length;
-		if ((len == 0) || (len == 1)) {
-			return array;
-		}
-		for (int i = len; i-- > 0; ) {
-			swap(array, i, random.nextInt(len));
-		}
-		return array;
-	}
-
-	/**
-	 * Return the array after "shuffling" it.
-	 * <p>
-	 * <code>Arrays.shuffle(int... array)</code>
-	 */
-	public static int[] shuffle(int... array) {
-		return shuffle(array, RANDOM);
-	}
-
-	/**
-	 * Return the array after "shuffling" it.
-	 * <p>
-	 * <code>Arrays.shuffle(int[] array, Random r)</code>
-	 */
-	public static int[] shuffle(int[] array, Random random) {
-		int len = array.length;
-		if ((len == 0) || (len == 1)) {
-			return array;
-		}
-		for (int i = len; i-- > 0; ) {
-			swap(array, i, random.nextInt(len));
-		}
-		return array;
-	}
-
-
-	// ********** sub-array **********
-
-	/**
-	 * Return a sub-array of the specified array with elements copied from
-	 * the specified range. The "from" index is inclusive; the "to" index is exclusive.
-	 * <p>
-	 * <code>Arrays.subArray(E[] array, int fromIndex, int toIndex)</code>
-	 */
-	public static <E> E[] subArray(E[] array, int fromIndex, int toIndex) {
-		int len = toIndex - fromIndex;
-		E[] result = newArray(array, len);
-		if (len > 0) {
-			System.arraycopy(array, fromIndex, result, 0, len);
-		}
-		return result;
-	}
-
-	/**
-	 * Return a sub-array of the specified array with elements copied from
-	 * the specified range. The "from" index is inclusive; the "to" index is exclusive.
-	 * <p>
-	 * <code>Arrays.subArray(int[] array, int fromIndex, int toIndex)</code>
-	 */
-	public static int[] subArray(int[] array, int fromIndex, int toIndex) {
-		int len = toIndex - fromIndex;
-		if (len == 0) {
-			return EMPTY_INT_ARRAY;
-		}
-		int[] result = new int[len];
-		System.arraycopy(array, fromIndex, result, 0, len);
-		return result;
-	}
-
-	/**
-	 * Return a sub-array of the specified array with elements copied from
-	 * the specified range. The "from" index is inclusive; the "to" index is exclusive.
-	 * <p>
-	 * <code>
-	 * Arrays.subArray(char[] array, int fromIndex, int toIndex)</code>
-	 * </code>
-	 */
-	public static char[] subArray(char[] array, int fromIndex, int toIndex) {
-		int len = toIndex - fromIndex;
-		if (len == 0) {
-			return EMPTY_CHAR_ARRAY;
-		}
-		char[] result = new char[len];
-		System.arraycopy(array, fromIndex, result, 0, len);
-		return result;
-	}
-
-
-	// ********** swap **********
-
-	/**
-	 * Return the array after the specified elements have been "swapped".
-	 * <p>
-	 * <code>Arrays.swap(Object[] array, int i, int j)</code>
-	 */
-	public static <E> E[] swap(E[] array, int i, int j) {
-		return (i == j) ? array : swap_(array, i, j);
-	}
-
-	/**
-	 * assume the indices are different
-	 */
-	private static <E> E[] swap_(E[] array, int i, int j) {
-		E temp = array[i];
-		array[i] = array[j];
-		array[j] = temp;
-		return array;
-	}
-
-	/**
-	 * Return the array after the specified elements have been "swapped".
-	 * <p>
-	 * <code>Arrays.swap(char[] array, int i, int j)</code>
-	 */
-	public static char[] swap(char[] array, int i, int j) {
-		return (i == j) ? array : swap_(array, i, j);
-	}
-
-	/**
-	 * assume the indices are different
-	 */
-	private static char[] swap_(char[] array, int i, int j) {
-		char temp = array[i];
-		array[i] = array[j];
-		array[j] = temp;
-		return array;
-	}
-
-	/**
-	 * Return the array after the specified elements have been "swapped".
-	 * <p>
-	 * <code>Arrays.swap(int[] array, int i, int j)</code>
-	 */
-	public static int[] swap(int[] array, int i, int j) {
-		return (i == j) ? array : swap_(array, i, j);
-	}
-
-	/**
-	 * assume the indices are different
-	 */
-	private static int[] swap_(int[] array, int i, int j) {
-		int temp = array[i];
-		array[i] = array[j];
-		array[j] = temp;
-		return array;
-	}
-
-
-	// ********** Arrays enhancements **********
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(boolean[], boolean)
-	 */
-	public static boolean[] fill(boolean[] array, boolean value) {
-		Arrays.fill(array, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(boolean[], int, int, boolean)
-	 */
-	public static boolean[] fill(boolean[] array, int fromIndex, int toIndex, boolean value) {
-		Arrays.fill(array, fromIndex, toIndex, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(byte[], byte)
-	 */
-	public static byte[] fill(byte[] array, byte value) {
-		Arrays.fill(array, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(byte[], int, int, byte)
-	 */
-	public static byte[] fill(byte[] array, int fromIndex, int toIndex, byte value) {
-		Arrays.fill(array, fromIndex, toIndex, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(char[], char)
-	 */
-	public static char[] fill(char[] array, char value) {
-		Arrays.fill(array, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(char[], int, int, char)
-	 */
-	public static char[] fill(char[] array, int fromIndex, int toIndex, char value) {
-		Arrays.fill(array, fromIndex, toIndex, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(double[], double)
-	 */
-	public static double[] fill(double[] array, double value) {
-		Arrays.fill(array, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(double[], int, int, double)
-	 */
-	public static double[] fill(double[] array, int fromIndex, int toIndex, double value) {
-		Arrays.fill(array, fromIndex, toIndex, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(float[], float)
-	 */
-	public static float[] fill(float[] array, float value) {
-		Arrays.fill(array, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(float[], int, int, float)
-	 */
-	public static float[] fill(float[] array, int fromIndex, int toIndex, float value) {
-		Arrays.fill(array, fromIndex, toIndex, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(int[], int)
-	 */
-	public static int[] fill(int[] array, int value) {
-		Arrays.fill(array, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(int[], int, int, int)
-	 */
-	public static int[] fill(int[] array, int fromIndex, int toIndex, int value) {
-		Arrays.fill(array, fromIndex, toIndex, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(Object[], Object)
-	 */
-	public static <E> E[] fill(E[] array, E value) {
-		Arrays.fill(array, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(Object[], int, int, Object)
-	 */
-	public static <E> E[] fill(E[] array, int fromIndex, int toIndex, E value) {
-		Arrays.fill(array, fromIndex, toIndex, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(long[], long)
-	 */
-	public static long[] fill(long[] array, long value) {
-		Arrays.fill(array, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(long[], int, int, long)
-	 */
-	public static long[] fill(long[] array, int fromIndex, int toIndex, long value) {
-		Arrays.fill(array, fromIndex, toIndex, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(short[], short)
-	 */
-	public static short[] fill(short[] array, short value) {
-		Arrays.fill(array, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see Arrays#fill(short[], int, int, short)
-	 */
-	public static short[] fill(short[] array, int fromIndex, int toIndex, short value) {
-		Arrays.fill(array, fromIndex, toIndex, value);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(byte[])
-	 */
-	public static byte[] sort(byte... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(byte[], int, int)
-	 */
-	public static byte[] sort(byte[] array, int fromIndex, int toIndex) {
-		Arrays.sort(array, fromIndex, toIndex);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(char[])
-	 */
-	public static char[] sort(char... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(char[], int, int)
-	 */
-	public static char[] sort(char[] array, int fromIndex, int toIndex) {
-		Arrays.sort(array, fromIndex, toIndex);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(double[])
-	 */
-	public static double[] sort(double... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(double[], int, int)
-	 */
-	public static double[] sort(double[] array, int fromIndex, int toIndex) {
-		Arrays.sort(array, fromIndex, toIndex);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(float[])
-	 */
-	public static float[] sort(float... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(float[], int, int)
-	 */
-	public static float[] sort(float[] array, int fromIndex, int toIndex) {
-		Arrays.sort(array, fromIndex, toIndex);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(int[])
-	 */
-	public static int[] sort(int... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(int[], int, int)
-	 */
-	public static int[] sort(int[] array, int fromIndex, int toIndex) {
-		Arrays.sort(array, fromIndex, toIndex);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(Object[])
-	 */
-	public static <E> E[] sort(E... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(Object[], Comparator)
-	 */
-	public static <E> E[] sort(E[] array, Comparator<? super E> comparator) {
-		Arrays.sort(array, comparator);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(Object[], int, int)
-	 */
-	public static <E> E[] sort(E[] array, int fromIndex, int toIndex) {
-		Arrays.sort(array, fromIndex, toIndex);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(Object[], int, int, Comparator)
-	 */
-	public static <E> E[] sort(E[] array, int fromIndex, int toIndex, Comparator<? super E> comparator) {
-		Arrays.sort(array, fromIndex, toIndex, comparator);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(long[])
-	 */
-	public static long[] sort(long... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(long[], int, int)
-	 */
-	public static long[] sort(long[] array, int fromIndex, int toIndex) {
-		Arrays.sort(array, fromIndex, toIndex);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(short[])
-	 */
-	public static short[] sort(short... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see Arrays#sort(short[], int, int)
-	 */
-	public static short[] sort(short[] array, int fromIndex, int toIndex) {
-		Arrays.sort(array, fromIndex, toIndex);
-		return array;
-	}
-
-
-	// ********** constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private ArrayTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Association.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Association.java
deleted file mode 100644
index 03130e8..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Association.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-/**
- * Straightforward definition of an object pairing.
- * The key is immutable.
- */
-public interface Association<K, V> {
-
-	/**
-	 * Return the association's key.
-	 */
-	K key();
-
-	/**
-	 * Return the association's value.
-	 */
-	V value();
-
-	/**
-	 * Set the association's value.
-	 * Return the previous value.
-	 */
-	V setValue(V value);
-
-	/**
-	 * Return true if both the associations' keys and values
-	 * are equal.
-	 */
-	boolean equals(Object o);
-
-	/**
-	 * Return a hash code based on the association's
-	 * key and value.
-	 */
-	int hashCode();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/AsynchronousCommandExecutor.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/AsynchronousCommandExecutor.java
deleted file mode 100644
index 3ef4f41..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/AsynchronousCommandExecutor.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.util.concurrent.ThreadFactory;
-
-import org.eclipse.jpt.utility.Command;
-
-/**
- * This command executor will dispatch commands to be executed in a separate
- * thread, allowing calls to {@link CommandExecutor#execute(Command)} to return
- * immediately.
- * <p>
- * <strong>NB:</strong> The client-supplied commands should handle any
- * exception appropriately (e.g. log the exception and return gracefully) so
- * the command execution thread can continue executing.
- */
-public class AsynchronousCommandExecutor
-	implements StatefulCommandExecutor
-{
-	/**
-	 * This command queue is shared with the command execution/consumer thread.
-	 * Adding a command to it will trigger the command to be executed by the
-	 * command execution thread or, if another command is currently executing,
-	 * to execute the new command once the currently executing command has
-	 * finished executing.
-	 */
-	final SynchronizedQueue<Command> commands = new SynchronizedQueue<Command>();
-
-	/**
-	 * Most of the thread-related behavior is delegated to this coordinator.
-	 */
-	private final ConsumerThreadCoordinator consumerThreadCoordinator;
-
-
-	// ********** construction **********
-
-	/**
-	 * Construct an asynchronous command executor.
-	 * Use simple JDK thread(s) for the command execution thread(s).
-	 * Allow the command execution thread(s) to be assigned JDK-generated names.
-	 */
-	public AsynchronousCommandExecutor() {
-		this(SimpleThreadFactory.instance(), null);
-	}
-
-	/**
-	 * Construct an asynchronous command executor.
-	 * Use the specified thread factory to construct the command execution thread(s).
-	 * Allow the command execution thread(s) to be assigned JDK-generated names.
-	 */
-	public AsynchronousCommandExecutor(ThreadFactory threadFactory) {
-		this(threadFactory, null);
-	}
-
-	/**
-	 * Construct an asynchronous command executor.
-	 * Use simple JDK thread(s) for the command execution thread(s).
-	 * Assign the command execution thread(s) the specified name.
-	 */
-	public AsynchronousCommandExecutor(String threadName) {
-		this(SimpleThreadFactory.instance(), threadName);
-	}
-
-	/**
-	 * Construct an asynchronous command executor.
-	 * Assign the command execution thread(s) the specified name.
-	 */
-	public AsynchronousCommandExecutor(ThreadFactory threadFactory, String threadName) {
-		super();
-		this.consumerThreadCoordinator = this.buildConsumerThreadCoordinator(threadFactory, threadName);
-	}
-
-	private ConsumerThreadCoordinator buildConsumerThreadCoordinator(ThreadFactory threadFactory, String threadName) {
-		return new ConsumerThreadCoordinator(this.buildConsumer(), threadFactory, threadName);
-	}
-
-	private ConsumerThreadCoordinator.Consumer buildConsumer() {
-		return new Consumer();
-	}
-
-
-	// ********** CallbackStatefulCommandExecutor implementation **********
-
-	/**
-	 * Build and start the command execution/consumer thread.
-	 * <p>
-	 * Note: We don't clear the command queue here; so if a command has been
-	 * added to the queue <em>before</em> getting here, the first command will
-	 * be executed promptly (albeit, asynchronously).
-	 * The command queue will be non-empty if:<ul>
-	 * <li>{@link #execute(Command)} was called after the command executor was
-	 *     constructed but before {@link #start()} was called; or
-	 * <li>{@link #execute(Command)} was called after {@link #stop()} was called
-	 *     but before {@link #start()} was called (to restart the command executor); or
-	 * <li>{@link #stop()} was called when there were still outstanding commands
-	 *     remaining in the command queue
-	 * </ul>
-	 */
-	public void start() {
-		this.consumerThreadCoordinator.start();
-	}
-
-	/**
-	 * Put the specified command on the command queue, to be consumed by the
-	 * command execution thread.
-	 */
-	public void execute(Command command) {
-		this.commands.enqueue(command);
-	}
-
-	/**
-	 * Interrupt the command execution thread so that it stops executing at the
-	 * end of the current command. Suspend the current thread until
-	 * the command execution thread is finished executing. If any uncaught
-	 * exceptions were thrown while the execution thread was executing,
-	 * wrap them in a composite exception and throw the composite exception.
-	 */
-	public void stop() {
-		this.consumerThreadCoordinator.stop();
-	}
-
-
-	// ********** consumer **********
-
-	/**
-	 * This implementation of {@link ConsumerThreadCoordinator.Consumer}
-	 * will execute the commands enqueued by the asynchronous command executor.
-	 * It will wait until the shared command queue is non-empty to begin executing the
-	 * commands in the queue. Once a comand is executed, the thread will quiesce until
-	 * another command is placed in the command queue. If a new command is
-	 * enqueued during the execution of another command (either recursively by
-	 * the command itself or by another thread),
-	 * the new command will be executed immediately after the currently
-	 * executing command is finished.
-	 * Stop the thread by calling {@link Thread#interrupt()}.
-	 */
-	class Consumer
-		implements ConsumerThreadCoordinator.Consumer
-	{
-		Consumer() {
-			super();
-		}
-
-		/**
-		 * Wait until a command has been placed in the queue.
-		 */
-		public void waitForProducer() throws InterruptedException {
-			AsynchronousCommandExecutor.this.commands.waitUntilNotEmpty();
-		}
-
-		/**
-		 * Execute the first command in the queue and notify our listeners.
-		 */
-		public void execute() {
-			AsynchronousCommandExecutor.this.commands.dequeue().execute();
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Bag.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Bag.java
deleted file mode 100644
index 5c3eb3e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Bag.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.AbstractCollection;
-import java.util.Iterator;
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-
-/**
- * A collection that allows duplicate elements.
- * <p>
- * The <code>Bag</code> interface places additional stipulations,
- * beyond those inherited from the {@link java.util.Collection} interface,
- * on the contracts of the {@link #equals(Object)} and {@link #hashCode()} methods.
- * 
- * @see HashBag
- */
-
-public interface Bag<E> extends java.util.Collection<E> {
-
-	/**
-	 * Compares the specified object with this bag for equality. Returns
-	 * <code>true</code> if the specified object is also a bag, the two bags
-	 * have the same size, and every member of the specified bag is
-	 * contained in this bag with the same number of occurrences (or equivalently,
-	 * every member of this bag is contained in the specified bag with the same
-	 * number of occurrences). This definition ensures that the
-	 * equals method works properly across different implementations of the
-	 * bag interface.
-	 */
-	boolean equals(Object o);
-
-	/**
-	 * Returns the hash code value for this bag. The hash code of a bag is
-	 * defined to be the sum of the hash codes of the elements in the bag,
-	 * where the hashcode of a <code>null</code> element is defined to be zero.
-	 * This ensures that <code>b1.equals(b2)</code> implies that
-	 * <code>b1.hashCode() == b2.hashCode()</code> for any two bags
-	 * <code>b1</code> and <code>b2</code>, as required by the general
-	 * contract of the {@link Object#hashCode()} method.
-	 */
-	int hashCode();
-
-	/**
-	 * Return the number of times the specified object occurs in the bag.
-	 */
-	int count(Object o);
-
-	/**
-	 * Add the specified object the specified number of times to the bag.
-	 * Return whether the bag changed.
-	 */
-	boolean add(E o, int count);
-
-	/**
-	 * Remove the specified number of occurrences of the specified object
-	 * from the bag. Return whether the bag changed.
-	 */
-	boolean remove(Object o, int count);
-
-	/**
-	 * Return an iterator that returns each item in the bag
-	 * once and only once, irrespective of how many times
-	 * the item was added to the bag.
-	 */
-	java.util.Iterator<E> uniqueIterator();
-
-	/**
-	 * Return the number of unique items in the bag.
-	 */
-	int uniqueCount();
-
-	/**
-	 * Return an iterator that returns an entry for each item in the bag
-	 * once and only once, irrespective of how many times
-	 * the item was added to the bag. The entry will indicate the item's
-	 * count.
-	 */
-	java.util.Iterator<Entry<E>> entries();
-
-
-	/**
-	 * A bag entry (element-count pair).
-	 * The {@link Bag#entries()} method returns an iterator whose
-	 * elements are of this class. The <em>only</em> way to obtain a reference
-	 * to a bag entry is from the iterator returned by this method. These
-	 * <code>Bag.Entry</code> objects are valid <em>only</em> for the duration
-	 * of the iteration; more formally, the behavior of a bag entry is
-	 * undefined if the backing bag has been modified after the entry was
-	 * returned by the iterator, except through the {@link #setCount(int)}
-	 * operation on the bag entry.
-	 */
-	interface Entry<E> {
-
-		/**
-		 * Return the entry's element.
-		 */
-		E getElement();
-
-		/**
-		 * Return entry's count; i.e. the number of times the entry's element
-		 * occurs in the bag.
-		 * @see Bag#count(Object)
-		 */
-		int getCount();
-
-		/**
-		 * Set the entry's count; i.e. the number of times the entry's element
-		 * occurs in the bag. The new count must be a positive number.
-		 * Return the previous count of the entry's element.
-		 * NB: Use {@link Iterator#remove()} to set the
-		 * count to zero.
-		 */
-		int setCount(int count);
-
-		/**
-		 * Return whether the entry is equal to the specified object;
-		 * i.e. the specified object is a <code>Bag.Entry</code> and its
-		 * element and count are the same as the entry's.
-		 */
-		boolean equals(Object obj);
-
-		/**
-		 * Return the entry's hash code.
-		 */
-		int hashCode();
-
-	}
-
-
-	final class Empty<E> extends AbstractCollection<E> implements Bag<E>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final Bag INSTANCE = new Empty();
-		@SuppressWarnings("unchecked")
-		public static <T> Bag<T> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Empty() {
-			super();
-		}
-		@Override
-		public Iterator<E> iterator() {
-			return EmptyIterator.instance();
-		}
-		@Override
-		public int size() {
-			return 0;
-		}
-		public Iterator<E> uniqueIterator() {
-			return EmptyIterator.instance();
-		}
-		public int uniqueCount() {
-			return 0;
-		}
-		public int count(Object o) {
-			return 0;
-		}
-		public Iterator<Bag.Entry<E>> entries() {
-			return EmptyIterator.instance();
-		}
-		public boolean remove(Object o, int count) {
-			return false;
-		}
-		public boolean add(E o, int count) {
-			throw new UnsupportedOperationException();
-		}
-		@Override
-		public boolean equals(Object o) {
-			if (o == this) {
-				return true;
-			}
-			if ( ! (o instanceof Bag<?>)) {
-				return false;
-			}
-			return ((Bag<?>) o).size() == 0;
-		}
-		@Override
-		public int hashCode() {
-			return 0;
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BidiFilter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BidiFilter.java
deleted file mode 100644
index 5991753..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BidiFilter.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-import org.eclipse.jpt.utility.Filter;
-
-/**
- * Used by various "pluggable" classes to filter objects
- * in both directions.
- * 
- * If anyone can come up with a better class name
- * and/or method name, I would love to hear it.  ~bjv
- */
-public interface BidiFilter<T> extends Filter<T> {
-
-	/**
-	 * Return whether the specified object is "accepted" by the
-	 * "reverse" filter. What that means is determined by the client.
-	 */
-	boolean reverseAccept(T o);
-
-
-	final class Null<S> implements BidiFilter<S>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final BidiFilter INSTANCE = new Null();
-		@SuppressWarnings("unchecked")
-		public static <R> BidiFilter<R> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Null() {
-			super();
-		}
-		// nothing is filtered - everything is accepted
-		public boolean accept(S o) {
-			return true;
-		}
-		// nothing is "reverse-filtered" - everything is accepted
-		public boolean reverseAccept(S o) {
-			return true;
-		}
-		@Override
-		public String toString() {
-			return "BidiFilter.Null"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-	final class Opaque<S> implements BidiFilter<S>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final BidiFilter INSTANCE = new Opaque();
-		@SuppressWarnings("unchecked")
-		public static <R> BidiFilter<R> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Opaque() {
-			super();
-		}
-		// everything is filtered - nothing is accepted
-		public boolean accept(S o) {
-			return false;
-		}
-		// everything is "reverse-filtered" - nothing is accepted
-		public boolean reverseAccept(S o) {
-			return false;
-		}
-		@Override
-		public String toString() {
-			return "BidiFilter.Opaque"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-	final class Disabled<S> implements BidiFilter<S>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final BidiFilter INSTANCE = new Disabled();
-		@SuppressWarnings("unchecked")
-		public static <R> BidiFilter<R> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Disabled() {
-			super();
-		}
-		// throw an exception
-		public boolean accept(S o) {
-			throw new UnsupportedOperationException();
-		}
-		// throw an exception
-		public boolean reverseAccept(S o) {
-			throw new UnsupportedOperationException();
-		}
-		@Override
-		public String toString() {
-			return "BidiFilter.Disabled"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BidiStringConverter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BidiStringConverter.java
deleted file mode 100644
index d11d242..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BidiStringConverter.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-/**
- * Used by various "pluggable" classes to transform objects
- * into strings and vice versa.
- * 
- * If anyone can come up with a better class name
- * and/or method name, I would love to hear it.  ~bjv
- */
-public interface BidiStringConverter<T> extends StringConverter<T> {
-
-	/**
-	 * Convert the specified string into an object.
-	 * The semantics of "convert to object" is determined by the
-	 * contract between the client and the server.
-	 * Typically, if the string is null, null is returned.
-	 */
-	T convertToObject(String s);
-
-
-	final class Default<S> implements BidiStringConverter<S>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final BidiStringConverter INSTANCE = new Default();
-		@SuppressWarnings("unchecked")
-		public static <R> BidiStringConverter<R> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Default() {
-			super();
-		}
-		// simply return the object's #toString() result
-		public String convertToString(S o) {
-			return (o == null) ? null : o.toString();
-		}
-		// simply return the string
-		@SuppressWarnings("unchecked")
-		public S convertToObject(String s) {
-			return (S) s;
-		}
-		@Override
-		public String toString() {
-			return "BidiStringConverter.Default"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-	final class Disabled<S> implements BidiStringConverter<S>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final BidiStringConverter INSTANCE = new Disabled();
-		@SuppressWarnings("unchecked")
-		public static <R> BidiStringConverter<R> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Disabled() {
-			super();
-		}
-		// throw an exception
-		public String convertToString(S o) {
-			throw new UnsupportedOperationException();
-		}
-		// throw an exception
-		public S convertToObject(String s) {
-			throw new UnsupportedOperationException();
-		}
-		@Override
-		public String toString() {
-			return "BidiStringConverter.Disabled"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-	final class BooleanConverter implements BidiStringConverter<Boolean>, Serializable {
-		public static final BidiStringConverter<Boolean> INSTANCE = new BooleanConverter();
-		public static BidiStringConverter<Boolean> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private BooleanConverter() {
-			super();
-		}
-		/** Return "true" if the Boolean is true, otherwise return "false". */
-		public String convertToString(Boolean b) {
-			return (b == null) ? null : b.toString();
-		}
-		/** Return Boolean.TRUE if the string is "true" (case-insensitive), otherwise return Boolean.FALSE. */
-		public Boolean convertToObject(String s) {
-			return (s == null) ? null : Boolean.valueOf(s);
-		}
-		@Override
-		public String toString() {
-			return "BidiStringConverter.BooleanConverter"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-	final class IntegerConverter implements BidiStringConverter<Integer>, Serializable {
-		public static final BidiStringConverter<Integer> INSTANCE = new IntegerConverter();
-		public static BidiStringConverter<Integer> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private IntegerConverter() {
-			super();
-		}
-		/** Integer's #toString() works well. */
-		public String convertToString(Integer integer) {
-			return (integer == null) ? null : integer.toString();
-		}
-		/** Convert the string to an Integer, if possible. */
-		public Integer convertToObject(String s) {
-			return (s == null) ? null : Integer.valueOf(s);
-		}
-		@Override
-		public String toString() {
-			return "BidiStringConverter.IntegerConverter"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BidiTransformer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BidiTransformer.java
deleted file mode 100644
index 83eca98..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BidiTransformer.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-/**
- * Used by various "pluggable" classes to transform objects
- * in both directions.
- * 
- * If anyone can come up with a better class name
- * and/or method name, I would love to hear it.  ~bjv
- */
-public interface BidiTransformer<T1, T2> extends Transformer<T1, T2> {
-
-	/**
-	 * Return the "reverse-transformed" object.
-	 * The semantics of "reverse-transform" is determined by the
-	 * contract between the client and the server.
-	 */
-	T1 reverseTransform(T2 o);
-
-
-	final class Null<S1, S2> implements BidiTransformer<S1, S2>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final BidiTransformer INSTANCE = new Null();
-		@SuppressWarnings("unchecked")
-		public static <R1, R2> BidiTransformer<R1, R2> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Null() {
-			super();
-		}
-		// simply return the object, unchanged
-		@SuppressWarnings("unchecked")
-		public S2 transform(S1 o) {
-			return (S2) o;
-		}
-		// simply return the object, unchanged
-		@SuppressWarnings("unchecked")
-		public S1 reverseTransform(S2 o) {
-			return (S1) o;
-		}
-		@Override
-		public String toString() {
-			return "BidiTransformer.Null"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-	final class Disabled<S1, S2> implements BidiTransformer<S1, S2>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final BidiTransformer INSTANCE = new Disabled();
-		@SuppressWarnings("unchecked")
-		public static <R1, R2> BidiTransformer<R1, R2> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Disabled() {
-			super();
-		}
-		// throw an exception
-		public S2 transform(S1 o) {
-			throw new UnsupportedOperationException();
-		}
-		// throw an exception
-		public S1 reverseTransform(S2 o) {
-			throw new UnsupportedOperationException();
-		}
-		@Override
-		public String toString() {
-			return "BidiTransformer.Disabled"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BitTools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BitTools.java
deleted file mode 100644
index 77e00ec..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BitTools.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-/**
- * Assorted bit tools
- */
-public final class BitTools {
-
-	/**
-	 * Return whether the specified 'flags' has the specified
-	 * 'flagToCheck' set.
-	 */
-	public static boolean flagIsSet(int flags, int flagToCheck) {
-		return allFlagsAreSet(flags, flagToCheck);
-	}
-
-	/**
-	 * Return whether the specified 'flags' has the specified
-	 * 'flagToCheck' turned off.
-	 */
-	public static boolean flagIsOff(int flags, int flagToCheck) {
-		return allFlagsAreOff(flags, flagToCheck);
-	}
-
-	/**
-	 * Return whether the specified 'flags' has ONLY the specified
-	 * 'flagToCheck' set.
-	 */
-	public static boolean onlyFlagIsSet(int flags, int flagToCheck) {
-		return onlyFlagsAreSet(flags, flagToCheck);
-	}
-
-	/**
-	 * Return whether the specified 'flags' has ONLY the specified
-	 * 'flagToCheck' turned off.
-	 */
-	public static boolean onlyFlagIsOff(int flags, int flagToCheck) {
-		return onlyFlagsAreOff(flags, flagToCheck);
-	}
-
-	/**
-	 * Return whether the specified 'flags' has all the specified
-	 * 'flagsToCheck' set.
-	 */
-	public static boolean allFlagsAreSet(int flags, int flagsToCheck) {
-		return (flags & flagsToCheck) == flagsToCheck;
-	}
-
-	/**
-	 * Return whether the specified 'flags' has all the specified
-	 * 'flagsToCheck' turned off.
-	 */
-	public static boolean allFlagsAreOff(int flags, int flagsToCheck) {
-		return (flags & flagsToCheck) == 0;
-	}
-
-	/**
-	 * Return whether the specified 'flags' has ONLY the specified
-	 * 'flagsToCheck' set.
-	 */
-	public static boolean onlyFlagsAreSet(int flags, int flagsToCheck) {
-		return allFlagsAreSet(flags, flagsToCheck) && allFlagsAreOff(flags, ~flagsToCheck);
-	}
-
-	/**
-	 * Return whether the specified 'flags' has ONLY the specified
-	 * 'flagsToCheck' turned off.
-	 */
-	public static boolean onlyFlagsAreOff(int flags, int flagsToCheck) {
-		return allFlagsAreOff(flags, flagsToCheck) && allFlagsAreSet(flags, ~flagsToCheck);
-	}
-
-	/**
-	 * Return whether the specified 'flags' has any one of the specified
-	 * 'flagsToCheck' set.
-	 */
-	public static boolean anyFlagsAreSet(int flags, int flagsToCheck) {
-		return (flags & flagsToCheck) != 0;
-	}
-
-	/**
-	 * Return whether the specified 'flags' has any one of the specified
-	 * 'flagsToCheck' turned off.
-	 */
-	public static boolean anyFlagsAreOff(int flags, int flagsToCheck) {
-		return (flags & flagsToCheck) != flagsToCheck;
-	}
-
-	/**
-	 * Return whether the specified 'flags' has all the specified
-	 * 'flagsToCheck' set.
-	 */
-	public static boolean allFlagsAreSet(int flags, int... flagsToCheck) {
-		for (int i = flagsToCheck.length; i-- > 0; ) {
-			if ( ! allFlagsAreSet(flags, flagsToCheck[i])) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Return whether the specified 'flags' has all the specified
-	 * 'flagsToCheck' turned off.
-	 */
-	public static boolean allFlagsAreOff(int flags, int... flagsToCheck) {
-		for (int i = flagsToCheck.length; i-- > 0; ) {
-			if ( ! allFlagsAreOff(flags, flagsToCheck[i])) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Return whether the specified 'flags' has ONLY the specified
-	 * 'flagsToCheck' set.
-	 */
-	public static boolean onlyFlagsAreSet(int flags, int... flagsToCheck) {
-		int combinedFlags = orFlags(flagsToCheck);
-		return allFlagsAreSet(flags, combinedFlags) && allFlagsAreOff(flags, ~combinedFlags);
-	}
-
-	/**
-	 * Return whether the specified 'flags' has ONLY the specified
-	 * 'flagsToCheck' turned off.
-	 */
-	public static boolean onlyFlagsAreOff(int flags, int... flagsToCheck) {
-		int combinedFlags = orFlags(flagsToCheck);
-		return allFlagsAreOff(flags, combinedFlags) && allFlagsAreSet(flags, ~combinedFlags);
-	}
-
-	/**
-	 * Return whether the specified 'flags' has any one of the specified
-	 * 'flagsToCheck' set.
-	 */
-	public static boolean anyFlagsAreSet(int flags, int... flagsToCheck) {
-		for (int i = flagsToCheck.length; i-- > 0; ) {
-			if (anyFlagsAreSet(flags, flagsToCheck[i])) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified 'flags' has any one of the specified
-	 * 'flagsToCheck' turned off.
-	 */
-	public static boolean anyFlagsAreOff(int flags, int... flagsToCheck) {
-		for (int i = flagsToCheck.length; i-- > 0; ) {
-			if (anyFlagsAreOff(flags, flagsToCheck[i])) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * OR all the specified 'flags' together and return the result.
-	 */
-	public static int orFlags(int... flags) {
-		int last = flags.length - 1;
-		int result = flags[last];
-		for (int i = last; i-- > 0; ) {
-			result |= flags[i];
-		}
-		return result;
-	}
-
-	/**
-	 * AND all the specified 'flags' together and return the result.
-	 */
-	public static int andFlags(int... flags) {
-		int last = flags.length - 1;
-		int result = flags[last];
-		for (int i = last; i-- > 0; ) {
-			result &= flags[i];
-		}
-		return result;
-	}
-
-	/**
-	 * XOR all the specified 'flags' together and return the result.
-	 */
-	public static int xorFlags(int... flags) {
-		int last = flags.length - 1;
-		int result = flags[last];
-		for (int i = last; i-- > 0; ) {
-			result ^= flags[i];
-		}
-		return result;
-	}
-
-
-	// ********** constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private BitTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BooleanReference.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BooleanReference.java
deleted file mode 100644
index 895f566..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BooleanReference.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-/**
- * Provide a container for passing a flag that can be changed by the recipient.
- * 
- * @see SynchronizedBoolean
- */
-public class BooleanReference
-	implements Cloneable, Serializable
-{
-	/** Backing <code>boolean</code>. */
-	private volatile boolean value;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Create a <code>boolean</code> reference with the specified initial value.
-	 */
-	public BooleanReference(boolean value) {
-		super();
-		this.value = value;
-	}
-
-	/**
-	 * Create a <code>boolean</code> reference with an initial value of
-	 * <code>false</code>.
-	 */
-	public BooleanReference() {
-		this(false);
-	}
-
-
-	// ********** accessors **********
-
-	/**
-	 * Return the current <code>boolean</code> value.
-	 */
-	public boolean getValue() {
-		return this.value;
-	}
-
-	/**
-	 * Return whether the current <code>boolean</code> value is the specified
-	 * value.
-	 */
-	public boolean is(boolean v) {
-		return this.value == v;
-	}
-
-	/**
-	 * Return whether the current <code>boolean</code> value is not the
-	 * specified value.
-	 */
-	public boolean isNot(boolean v) {
-		return this.value != v;
-	}
-
-	/**
-	 * Return whether the current <code>boolean</code> value is
-	 * <code>true</code>.
-	 */
-	public boolean isTrue() {
-		return this.value;
-	}
-
-	/**
-	 * Return whether the current <code>boolean</code> value is
-	 * <code>false</code>.
-	 */
-	public boolean isFalse() {
-		return ! this.value;
-	}
-
-	/**
-	 * Set the <code>boolean</code> value.
-	 * Return the previous value.
-	 */
-	public boolean setValue(boolean value) {
-		boolean old = this.value;
-		this.value = value;
-		return old;
-	}
-
-	/**
-	 * Set the <code>boolean</code> value to the NOT of its current value.
-	 * Return the new value.
-	 */
-	public boolean flip() {
-		return this.value = ! this.value;
-	}
-
-	/**
-	 * Set the <code>boolean</code> value to the NOT of the specified value.
-	 * Return the previous value.
-	 */
-	public boolean setNot(boolean v) {
-		return this.setValue( ! v);
-	}
-
-	/**
-	 * Set the <code>boolean</code> value to <code>true</code>.
-	 * Return the previous value.
-	 */
-	public boolean setTrue() {
-		return this.setValue(true);
-	}
-
-	/**
-	 * Set the <code>boolean</code> value to <code>false</code>.
-	 * Return the previous value.
-	 */
-	public boolean setFalse() {
-		return this.setValue(false);
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public Object clone() {
-		try {
-			return super.clone();
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-	@Override
-	public boolean equals(Object o) {
-		return (o instanceof BooleanReference) &&
-			(this.value == ((BooleanReference) o).value);
-	}
-
-	@Override
-	public int hashCode() {
-		return this.value ? 1 : 0;
-	}
-
-	@Override
-	public String toString() {
-		return '[' + String.valueOf(this.value) + ']';
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BooleanTools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BooleanTools.java
deleted file mode 100644
index fac2a7e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BooleanTools.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-/**
- * Assorted "Capital-B Boolean" operations.
- */
- // commented code is just playing around with building *everything* from NAND
-public final class BooleanTools {
-
-	/**
-	 * Return the NOT of the specified Boolean.
-	 * Boolean#not()
-	 */
-	public static Boolean not(Boolean b) {
-		return Boolean.valueOf( ! b.booleanValue());
-//		return nand(b, b);
-	}
-
-	/**
-	 * Return the AND of the specified Booleans.
-	 * Boolean#and(Boolean)
-	 */
-	public static Boolean and(Boolean b1, Boolean b2) {
-		return Boolean.valueOf(b1.booleanValue() && b2.booleanValue());
-//		Boolean nand = nand(b1, b2);
-//		return nand(nand, nand);
-	}
-
-	/**
-	 * Return the OR of the specified Booleans.
-	 * Boolean#or(Boolean)
-	 */
-	public static Boolean or(Boolean b1, Boolean b2) {
-		return Boolean.valueOf(b1.booleanValue() || b2.booleanValue());
-//		Boolean nand = nand(b1, b2);
-//		Boolean xor = nand(nand(b1, nand), nand(b2, nand));
-//		Boolean and = nand(nand, nand);
-//		Boolean nand2 = nand(xor, and);
-//		return nand(nand(xor, nand2), nand(and, nand2));
-	}
-
-	/**
-	 * Return the XOR of the specified Booleans.
-	 * Boolean#xor(Boolean)
-	 */
-	public static Boolean xor(Boolean b1, Boolean b2) {
-		return and(or(b1, b2), nand(b1, b2));
-//		Boolean nand = nand(b1, b2);
-//		return nand(nand(b1, nand), nand(b2, nand));
-	}
-
-	/**
-	 * Return the NAND of the specified Booleans.
-	 * Boolean#nand(Boolean)
-	 */
-	public static Boolean nand(Boolean b1, Boolean b2) {
-		return not(and(b1, b2));
-//		return Boolean.valueOf( ! (b1.booleanValue() && b2.booleanValue()));
-	}
-
-	/**
-	 * Return the NOR of the specified Booleans.
-	 * Boolean#nor(Boolean)
-	 */
-	public static Boolean nor(Boolean b1, Boolean b2) {
-		return not(or(b1, b2));
-//		Boolean nand = nand(b1, b2);
-//		Boolean xor = nand(nand(b1, nand), nand(b2, nand));
-//		Boolean and = nand(nand, nand);
-//		Boolean nand2 = nand(xor, and);
-//		Boolean nand3 = nand(nand(xor, nand2), nand(and, nand2));
-//		return nand(nand3, nand3);
-	}
-
-	/**
-	 * Return the XNOR of the specified Booleans.
-	 * Boolean#xnor(Boolean)
-	 */
-	public static Boolean xnor(Boolean b1, Boolean b2) {
-		return not(xor(b1, b2));
-//		Boolean nand = nand(b1, b2);
-//		Boolean xor = nand(nand(b1, nand), nand(b2, nand));
-//		return nand(xor, xor);
-	}
-
-
-	// ********** constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private BooleanTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ClassName.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ClassName.java
deleted file mode 100644
index 92ef041..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ClassName.java
+++ /dev/null
@@ -1,431 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-/**
- * Convenience methods related to Java class names as returned by
- * {@link java.lang.Class#getName()}.
- */
-public final class ClassName {
-
-	public static final String VOID_CLASS_NAME = ReflectionTools.VOID_CLASS.getName();
-	public static final String VOID_WRAPPER_CLASS_NAME = ReflectionTools.VOID_WRAPPER_CLASS.getName();
-
-	public static final char REFERENCE_CLASS_CODE = 'L';
-	public static final char REFERENCE_CLASS_NAME_DELIMITER = ';';
-
-	/**
-	 * Return whether the specified class is an array type.
-	 * @see java.lang.Class#getName()
-	 */
-	public static boolean isArray(String className) {
-		return className.charAt(0) == '[';
-	}
-
-	/**
-	 * Return the "element type" of the specified class.
-	 * The element type is the base type held by an array type.
-	 * Non-array types simply return themselves.
-	 * @see java.lang.Class#getName()
-	 */
-	public static String getElementTypeName(String className) {
-		int depth = getArrayDepth(className);
-		if (depth == 0) {
-			// the name is in the form: "java.lang.Object" or "int"
-			return className;
-		}
-		return getElementTypeName_(className, depth);
-	}
-
-	/**
-	 * pre-condition: array depth is not zero
-	 */
-	private static String getElementTypeName_(String className, int arrayDepth) {
-		int last = className.length() - 1;
-		if (className.charAt(arrayDepth) == REFERENCE_CLASS_CODE) {
-			// the name is in the form: "[[[Ljava.lang.Object;"
-			return className.substring(arrayDepth + 1, last);	// drop the trailing ';'
-		}
-		// the name is in the form: "[[[I"
-		return forCode(className.charAt(last));
-	}
-
-	/**
-	 * Return the "array depth" of the specified class.
-	 * The depth is the number of dimensions for an array type.
-	 * Non-array types have a depth of zero.
-	 * @see java.lang.Class#getName()
-	 */
-	public static int getArrayDepth(String className) {
-		int depth = 0;
-		while (className.charAt(depth) == '[') {
-			depth++;
-		}
-		return depth;
-	}
-
-	/**
-	 * Return the specified class's component type.
-	 * Return <code>null</code> if the specified class is not an array type.
-	 * @see java.lang.Class#getName()
-	 */
-	public static String getComponentTypeName(String className) {
-		switch (getArrayDepth(className)) {
-			case 0:
-				return null;
-			case 1:
-				return getElementTypeName_(className, 1);
-			default:
-				return className.substring(1);
-		}
-	}
-
-	/**
-	 * Return the specified class's simple name.
-	 * Return an empty string if the specified class is anonymous.
-	 * <p>
-	 * The simple name of an array type is the simple name of the
-	 * component type with <code>"[]"</code> appended. In particular,
-	 * the simple name of an array type whose component type is
-	 * anonymous is simply <code>"[]"</code>.
-	 * @see java.lang.Class#getSimpleName()
-	 */
-	public static String getSimpleName(String className) {
-		return isArray(className) ?
-				getSimpleName(getComponentTypeName(className)) + "[]" : //$NON-NLS-1$
-				getSimpleName_(className);
-	}
-
-	/**
-	 * pre-condition: specified class is not an array type
-	 */
-	private static String getSimpleName_(String className) {
-		int index = className.lastIndexOf('$');
-		if (index == -1) {  // "top-level" class - strip package name
-			return className.substring(className.lastIndexOf('.') + 1);
-		}
-
-		int len = className.length();
-		for (int i = ++index; i < len; i++) {
-			if ( ! charIsAsciiDigit(className.charAt(i))) {
-				return className.substring(i);  // "member" or "local" class
-			}
-		}
-		// all the characters past the '$' are ASCII digits ("anonymous" class)
-		return ""; //$NON-NLS-1$
-	}
-
-	/**
-	 * Return the specified class's package name (e.g.
-	 * <code>"java.lang.Object"</code> returns
-	 * <code>"java.lang"</code>).
-	 * Return an empty string if the specified class is:<ul>
-	 * <li>in the "default" package
-	 * <li>an array class
-	 * <li>a primtive class
-	 * </ul>
-	 * @see java.lang.Class#getPackage()
-	 * @see java.lang.Package#getName()
-	 */
-	public static String getPackageName(String className) {
-		if (isArray(className)) {
-			return ""; //$NON-NLS-1$
-		}
-		int lastPeriod = className.lastIndexOf('.');
-		return (lastPeriod == -1) ? "" : className.substring(0, lastPeriod); //$NON-NLS-1$
-	}
-
-	/**
-	 * Return whether the specified class is a "top-level" class,
-	 * as opposed to a "member", "local", or "anonymous" class,
-	 * using the standard JDK naming conventions (i.e. the class
-	 * name does NOT contain a <code>'$'</code>).
-	 * A "top-level" class can be either the "primary" (public) class defined
-	 * in a file/compilation unit (i.e. the class with the same name as its
-	 * file's simple base name) or a "non-primary" (package visible) class
-	 * (i.e. the other top-level classes defined in a file).
-	 * A "top-level" class can contain any of the other types of classes. 
-	 * @see java.lang.Class#getName()
-	 */
-	public static boolean isTopLevel(String className) {
-		if (isArray(className)) {
-			return false;
-		}
-		return className.lastIndexOf('$') == -1;
-	}
-
-	/**
-	 * Return whether the specified class is a "member" class,
-	 * as opposed to a "top-level", "local", or "anonymous" class,
-	 * using the standard JDK naming convention (i.e. the class
-	 * name ends with a <code>'$'</code> followed by a legal class name; e.g.
-	 * <code>"TopLevelClass$1LocalClass$MemberClass"</code>).
-	 * A "member" class can be either "nested" (static) or "inner";
-	 * but there is no way to determine which from the class's name.
-	 * A "member" class can contain "local", "anonymous", or other
-	 * "member" classes; and vice-versa.
-	 * @see java.lang.Class#getName()
-	 */
-	public static boolean isMember(String className) {
-		if (isArray(className)) {
-			return false;
-		}
-		int index = className.lastIndexOf('$');
-		if (index == -1) {
-			return false;	// "top-level" class
-		}
-		// the character immediately after the dollar sign cannot be an ASCII digit
-		return ! charIsAsciiDigit(className.charAt(++index));
-	}
-
-	/**
-	 * Return whether the specified class is a "local" class,
-	 * as opposed to a "top-level", "member", or "anonymous" class,
-	 * using the standard JDK naming convention (i.e. the class name
-	 * ends with <code>"$nnnXXX"</code>,
-	 * where the <code>'$'</code> is
-	 * followed by a series of numeric digits which are followed by the
-	 * local class name; e.g. <code>"TopLevelClass$1LocalClass"</code>).
-	 * A "local" class can contain "member", "anonymous", or other
-	 * "local" classes; and vice-versa.
-	 * @see java.lang.Class#getName()
-	 */
-	public static boolean isLocal(String className) {
-		if (isArray(className)) {
-			return false;
-		}
-		int index = className.lastIndexOf('$');
-		if (index == -1) {
-			return false;	// "top-level" class
-		}
-		if ( ! charIsAsciiDigit(className.charAt(++index))) {
-			return false;  // "member" class
-		}
-		int len = className.length();
-		for (int i = ++index; i < len; i++) {
-			if ( ! charIsAsciiDigit(className.charAt(i))) {
-				return true;
-			}
-		}
-		// all the characters past the '$' are ASCII digits ("anonymous" class)
-		return false;
-	}
-
-	/**
-	 * Return whether the specified class is an "anonymous" class,
-	 * as opposed to a "top-level", "member", or "local" class,
-	 * using the standard JDK naming convention (i.e. the class
-	 * name ends with <code>"$nnn"</code> where all the characters past the
-	 * last <code>'$'</code> are ASCII numeric digits;
-	 * e.g. <code>"TopLevelClass$1"</code>).
-	 * An "anonymous" class can contain "member", "local", or other
-	 * "anonymous" classes; and vice-versa.
-	 * @see java.lang.Class#getName()
-	 */
-	public static boolean isAnonymous(String className) {
-		if (isArray(className)) {
-			return false;
-		}
-		int index = className.lastIndexOf('$');
-		if (index == -1) {
-			return false;	// "top-level" class
-		}
-		if ( ! charIsAsciiDigit(className.charAt(++index))) {
-			return false;  // "member" class
-		}
-		int len = className.length();
-		for (int i = ++index; i < len; i++) {
-			if ( ! charIsAsciiDigit(className.charAt(i))) {
-				return false;  // "local" class
-			}
-		}
-		// all the characters past the '$' are ASCII digits ("anonymous" class)
-		return true;
-	}
-
-	/**
-	 * {@link Character#isDigit(char)} returns <code>true</code> for some non-ASCII
-	 * digits. This method does not.
-	 */
-	private static boolean charIsAsciiDigit(char c) {
-		return ('0' <= c) && (c <= '9');
-	}
-
-	/**
-	 * Return whether the specified class is a "reference"
-	 * class (i.e. neither <code>void</code> nor one of the primitive variable classes,
-	 * <code>boolean</code>, <code>int</code>, <code>float</code>, etc.).
-	 * <p>
-	 * <strong>NB:</strong> <code>void.class.isPrimitive() == true</code>
-	 */
-	public static boolean isReference(String className) {
-		return ! isPrimitive(className);
-	}
-
-	/**
-	 * Return whether the specified class is a primitive
-	 * class (i.e. <code>void</code> or one of the primitive variable classes,
-	 * <code>boolean</code>, <code>int</code>, <code>float</code>, etc.).
-	 * <p>
-	 * <strong>NB:</strong> <code>void.class.isPrimitive() == true</code>
-	 */
-	public static boolean isPrimitive(String className) {
-		if (isArray(className) || (className.length() > ReflectionTools.MAX_PRIMITIVE_CLASS_NAME_LENGTH)) {
-			return false;  // performance tweak
-		}
-		for (ReflectionTools.Primitive primitive : ReflectionTools.PRIMITIVES) {
-			if (className.equals(primitive.javaClass.getName())) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified class is a primitive wrapper
-	 * class (i.e. <code>java.lang.Void</code> or one of the primitive
-	 * variable wrapper classes, <code>java.lang.Boolean</code>,
-	 * <code>java.lang.Integer</code>, <code>java.lang.Float</code>, etc.).
-	 * <p>
-	 * <strong>NB:</strong> <code>void.class.isPrimitive() == true</code>
-	 */
-	public static boolean isPrimitiveWrapper(String className) {
-		if (isArray(className) || (className.length() > ReflectionTools.MAX_PRIMITIVE_WRAPPER_CLASS_NAME_LENGTH)) {
-			return false;  // performance tweak
-		}
-		for (ReflectionTools.Primitive primitive : ReflectionTools.PRIMITIVES) {
-			if (className.equals(primitive.wrapperClass.getName())) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified class is a "variable" primitive
-	 * class (i.e. <code>boolean</code>, <code>int</code>, <code>float</code>, etc.,
-	 * but not <code>void</code>).
-	 * <p>
-	 * <strong>NB:</strong> <code>void.class.isPrimitive() == true</code>
-	 */
-	public static boolean isVariablePrimitive(String className) {
-		return isPrimitive(className)
-			&& ( ! className.equals(VOID_CLASS_NAME));
-	}
-
-	/**
-	 * Return whether the specified class is a "variable" primitive wrapper
-	 * class (i.e. <code>java.lang.Boolean</code>,
-	 * <code>java.lang.Integer</code>, <code>java.lang.Float</code>, etc.,
-	 * but not <code>java.lang.Void</code>).
-	 * <p>
-	 * <strong>NB:</strong> <code>void.class.isPrimitive() == true</code>
-	 */
-	public static boolean isVariablePrimitiveWrapper(String className) {
-		return isPrimitiveWrapper(className)
-			&& ( ! className.equals(VOID_WRAPPER_CLASS_NAME));
-	}
-
-	/**
-	 * Return the name of the primitive wrapper class corresponding to the specified
-	 * primitive class. Return <code>null</code> if the specified class is not a primitive.
-	 */
-	public static String getWrapperClassName(String primitiveClassName) {
-		for (ReflectionTools.Primitive primitive : ReflectionTools.PRIMITIVES) {
-			if (primitive.javaClass.getName().equals(primitiveClassName)) {
-				return primitive.wrapperClass.getName();
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Return the name of the primitive class corresponding to the specified
-	 * primitive wrapper class. Return <code>null</code> if the specified class
-	 * is not a primitive wrapper.
-	 */
-	public static String getPrimitiveClassName(String primitiveWrapperClassName) {
-		for (ReflectionTools.Primitive primitive : ReflectionTools.PRIMITIVES) {
-			if (primitive.wrapperClass.getName().equals(primitiveWrapperClassName)) {
-				return primitive.javaClass.getName();
-			}
-		}
-		return null;
-	}
-	
-	/**
-	 * Return whether the two class names are equivalent, given autoboxing.
-	 * (e.g. "java.lang.Integer" and "int" should be equivalent)
-	 */
-	public static boolean areAutoboxEquivalents(String className1, String className2) {
-		return Tools.valuesAreEqual(className1, className2)
-			|| Tools.valuesAreEqual(getPrimitiveClassName(className1), className2)
-			|| Tools.valuesAreEqual(getWrapperClassName(className1), className2);
-	}
-
-
-	// ********** primitive codes **********
-
-	/**
-	 * Return the primitive class name for the specified primitive class code.
-	 * Return <code>null</code> if the specified code
-	 * is not a primitive class code.
-	 * @see java.lang.Class#getName()
-	 */
-	public static String forCode(int classCode) {
-		return forCode((char) classCode);
-	}
-
-	/**
-	 * Return the primitive class name for the specified primitive class code.
-	 * Return <code>null</code> if the specified code
-	 * is not a primitive class code.
-	 * @see java.lang.Class#getName()
-	 */
-	public static String forCode(char classCode) {
-		Class<?> primitiveClass = ReflectionTools.getClassForCode(classCode);
-		return (primitiveClass == null) ? null : primitiveClass.getName();
-	}
-
-	/**
-	 * Return the class code for the specified primitive class.
-	 * Return <code>0</code> if the specified class
-	 * is not a primitive class.
-	 * @see java.lang.Class#getName()
-	 */
-	public static char getCodeForClassName(String primitiveClassName) {
-		if (( ! isArray(primitiveClassName)) && (primitiveClassName.length() <= ReflectionTools.MAX_PRIMITIVE_CLASS_NAME_LENGTH)) {
-			for (ReflectionTools.Primitive primitive : ReflectionTools.PRIMITIVES) {
-				if (primitive.javaClass.getName().equals(primitiveClassName)) {
-					return primitive.code;
-				}
-			}
-		}
-		return 0;
-	}
-
-	static void append(String className, StringBuilder sb) {
-		sb.append(REFERENCE_CLASS_CODE);
-		sb.append(className);
-		sb.append(REFERENCE_CLASS_NAME_DELIMITER);
-	}
-
-
-	// ********** suppressed constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private ClassName() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Classpath.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Classpath.java
deleted file mode 100644
index 3d1ae80..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Classpath.java
+++ /dev/null
@@ -1,940 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
-import java.io.Serializable;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import org.eclipse.jpt.utility.Filter;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-/**
- * <code>Classpath</code> models a Java classpath, which consists of a list of
- * {@link Entry}s, each of which contain Java classes. The classpath can return
- * the names of classes found in it etc. There are a number of static
- * convenience methods that can be use to construct <code>Classpath</code>s
- * corresponding to the Java classpath etc.
- */
-public class Classpath
-	implements Serializable
-{
-	/** The entries in the classpath */
-	private final Entry[] entries;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** static methods **********
-
-	// ***** factory methods for "standard" classpaths *****
-
-	/**
-	 * Return the Java "boot" classpath. This includes <code>rt.jar</code>.
-	 */
-	public static Classpath bootClasspath() {
-		return new Classpath(System.getProperty("sun.boot.class.path")); //$NON-NLS-1$
-	}
-	
-	/**
-	 * Return a "virtual classpath" that contains all the jars
-	 * that would be used by the Java Extension Mechanism.
-	 */
-	public static Classpath javaExtensionClasspath() {
-		File[] dirs = javaExtensionDirectories();
-		List<String> jarFileNames = new ArrayList<String>();
-		for (File dir : dirs) {
-			if (dir.isDirectory()) {
-				addJarFileNamesTo(dir, jarFileNames);
-			}
-		}
-		return new Classpath(jarFileNames);
-	}
-
-	/**
-	 * Return the Java "system" classpath.
-	 */
-	public static Classpath javaClasspath() {
-		return new Classpath(System.getProperty("java.class.path")); //$NON-NLS-1$
-	}
-
-	/**
-	 * Return the unretouched "complete" classpath.
-	 * This includes the boot classpath, the Java Extension
-	 * Mechanism classpath, and the normal "system" classpath.
-	 */
-	public static Classpath completeClasspath() {
-		return new Classpath(new Classpath[] {
-				bootClasspath(),
-				javaExtensionClasspath(),
-				javaClasspath()
-		});
-	}
-
-	/**
-	 * Return a classpath that contains the location of the specified class.
-	 */
-	public static Classpath classpathFor(Class<?> javaClass) {
-		return new Classpath(locationFor(javaClass));
-	}
-
-
-	// ***** file => class *****
-
-	/**
-	 * Convert a relative file name to a class name; this will work for
-	 * any file that has a single extension beyond the base
-	 * class name:<ul>
-	 * <li><code>"java/lang/String.class"</code> is converted to <code>"java.lang.String"</code>
-	 * <li><code>"java/lang/String.java"</code> is converted to <code>"java.lang.String"</code>
-	 * </ul>
-	 */
-	public static String convertToClassName(String classFileName) {
-		String className = FileTools.stripExtension(classFileName);
-		// do this for archive entry names
-		className = className.replace('/', '.');
-		// do this for O/S-specific file names
-		if (File.separatorChar != '/') {
-			className = className.replace(File.separatorChar, '.');
-		}
-		return className;
-	}
-
-	/**
-	 * Convert a file to a class name;
-	 * e.g. <code>File(java/lang/String.class)</code> is converted to
-	 * <code>"java.lang.String"</code>.
-	 */
-	public static String convertToClassName(File classFile) {
-		return convertToClassName(classFile.getPath());
-	}
-
-	/**
-	 * Convert a relative file name to a class;
-	 * e.g. <code>"java/lang/String.class"</code> is converted to
-	 * <code>java.lang.String.class</code>.
-	 */
-	public static Class<?> convertToClass(String classFileName) throws ClassNotFoundException {
-		return Class.forName(convertToClassName(classFileName));
-	}
-
-	/**
-	 * Convert a relative file to a class;
-	 * e.g. <code>File(java/lang/String.class)</code> is converted to
-	 * <code>java.lang.String.class</code>.
-	 */
-	public static Class<?> convertToClass(File classFile) throws ClassNotFoundException {
-		return convertToClass(classFile.getPath());
-	}
-
-
-	// ***** class => JAR entry *****
-
-	/**
-	 * Convert a class name to an archive entry name base;
-	 * e.g. <code>"java.lang.String"</code> is converted to
-	 * <code>"java/lang/String"</code>.
-	 */
-	public static String convertToArchiveEntryNameBase(String className) {
-		return className.replace('.', '/');
-	}
-	
-	/**
-	 * Convert a class to an archive entry name base;
-	 * e.g. <code>java.lang.String.class</code> is converted to
-	 * <code>"java/lang/String"</code>.
-	 */
-	public static String convertToArchiveEntryNameBase(Class<?> javaClass) {
-		return convertToArchiveEntryNameBase(javaClass.getName());
-	}
-	
-	/**
-	 * Convert a class name to an archive class file entry name;
-	 * e.g. <code>"java.lang.String"</code> is converted to
-	 * <code>"java/lang/String.class"</code>.
-	 */
-	public static String convertToArchiveClassFileEntryName(String className) {
-		return convertToArchiveEntryNameBase(className) + ".class"; //$NON-NLS-1$
-	}
-	
-	/**
-	 * Convert a class to an archive class file entry name;
-	 * e.g. <code>java.lang.String.class</code> is converted to
-	 * <code>"java/lang/String.class"</code>.
-	 */
-	public static String convertToArchiveClassFileEntryName(Class<?> javaClass) {
-		return convertToArchiveClassFileEntryName(javaClass.getName());
-	}
-	
-
-	// ***** class => file (.class or .java) *****
-
-	/**
-	 * Convert a class name to a file name base for the current O/S;
-	 * e.g. <code>"java.lang.String"</code> is converted to
-	 * <code>"java/lang/String"</code> on Unix and
-	 * <code>"java\\lang\\String"</code> on Windows.
-	 */
-	public static String convertToFileNameBase(String className) {
-		return className.replace('.', File.separatorChar);
-	}
-	
-	/**
-	 * Convert a class to a file name base for the current O/S;
-	 * e.g. <code>java.lang.String.class</code> is converted to
-	 * <code>"java/lang/String"</code> on Unix and
-	 * <code>"java\\lang\\String"</code> on Windows.
-	 */
-	public static String convertToFileNameBase(Class<?> javaClass) {
-		return convertToFileNameBase(javaClass.getName());
-	}
-	
-	/**
-	 * Convert a class name to a class file name for the current O/S;
-	 * e.g. <code>"java.lang.String"</code> is converted to
-	 * <code>"java/lang/String.class"</code> on Unix and
-	 * <code>"java\\lang\\String.class"</code> on Windows.
-	 */
-	public static String convertToClassFileName(String className) {
-		return convertToFileNameBase(className) + ".class"; //$NON-NLS-1$
-	}
-	
-	/**
-	 * Convert a class to a class file name for the current O/S;
-	 * e.g. <code>java.lang.String.class</code> is converted to
-	 * <code>"java/lang/String.class"</code> on Unix and
-	 * <code>"java\\lang\\String.class"</code> on Windows.
-	 */
-	public static String convertToClassFileName(Class<?> javaClass) {
-		return convertToClassFileName(javaClass.getName());
-	}
-	
-	/**
-	 * Convert a class name to a class file for the current O/S;
-	 * e.g. <code>"java.lang.String"</code> is converted to
-	 * <code>File(java/lang/String.class)</code>.
-	 */
-	public static File convertToClassFile(String className) {
-		return new File(convertToClassFileName(className));
-	}
-	
-	/**
-	 * Convert a class to a class file for the current O/S;
-	 * e.g. <code>java.lang.String.class</code> is converted to
-	 * <code>File(java/lang/String.class)</code>.
-	 */
-	public static File convertToClassFile(Class<?> javaClass) {
-		return convertToClassFile(javaClass.getName());
-	}
-	
-	/**
-	 * Convert a class name to a java file name for the current O/S;
-	 * e.g. <code>"java.lang.String"</code> is converted to
-	 * <code>"java/lang/String.java"</code> on Unixl and
-	 * <code>"java\\lang\\String.java"</code> on Windows.
-	 */
-	public static String convertToJavaFileName(String className) {
-		return convertToFileNameBase(className) + ".java"; //$NON-NLS-1$
-	}
-
-	/**
-	 * Convert a class to a java file name for the current O/S;
-	 * e.g. <code>java.lang.String.class</code> is converted to
-	 * <code>"java/lang/String.java"</code> on Unix and
-	 * <code>"java\\lang\\String.java"</code> on Windows.
-	 */
-	public static String convertToJavaFileName(Class<?> javaClass) {
-		return convertToJavaFileName(javaClass.getName());
-	}
-
-	/**
-	 * Convert a class name to a java file for the current O/S;
-	 * e.g. <code>"java.lang.String"</code> is converted to
-	 * <code>File(java/lang/String.java)</code>.
-	 */
-	public static File convertToJavaFile(String className) {
-		return new File(convertToJavaFileName(className));
-	}
-
-	/**
-	 * Convert a class to a java file for the current O/S;
-	 * e.g. <code>java.lang.String.class</code> is converted to
-	 * <code>File(java/lang/String.java)</code>.
-	 */
-	public static File convertToJavaFile(Class<?> javaClass) {
-		return convertToJavaFile(javaClass.getName());
-	}
-
-
-	// ***** class => resource *****
-
-	/**
-	 * Convert a class to a resource name;
-	 * e.g. <code>java.lang.String.class</code> is converted to
-	 * <code>"/java/lang/String.class"</code>.
-	 */
-	public static String convertToResourceName(Class<?> javaClass) {
-		return '/' + convertToArchiveClassFileEntryName(javaClass);
-	}
-
-	/**
-	 * Convert a class to a resource;
-	 * e.g. <code>java.lang.String.class</code> is converted to
-	 * <code>URL(jar:file:/C:/jdk/1.4.2_04/jre/lib/rt.jar!/java/lang/String.class)</code>.
-	 */
-	public static URL convertToResource(Class<?> javaClass) {
-		return javaClass.getResource(convertToResourceName(javaClass));
-	}
-
-
-	// ***** utilities *****
-
-	/**
-	 * Return whether the specified file is an archive file;
-	 * i.e. its name ends with <code>".zip"</code> or <code>".jar"</code>.
-	 */
-	public static boolean fileNameIsArchive(String fileName) {
-		String ext = FileTools.extension(fileName).toLowerCase();
-		return ext.equals(".jar") || ext.equals(".zip"); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-	/**
-	 * Return whether the specified file is an archive file;
-	 * i.e. its name ends with <code>".zip"</code> or <code>".jar"</code>.
-	 */
-	public static boolean fileIsArchive(File file) {
-		return fileNameIsArchive(file.getName());
-	}
-	
-	/**
-	 * Return what should be the fully-qualified file name
-	 * for the JRE runtime JAR;
-	 * e.g. <code>"C:\jdk1.4.2_04\jre\lib\rt.jar"</code>.
-	 */
-	public static String rtJarName() {
-		return locationFor(java.lang.Object.class);
-	}
-	
-	/**
-	 * Return the location from where the specified class was loaded.
-	 */
-	public static String locationFor(Class<?> javaClass) {
-		URL url = convertToResource(javaClass);
-		String path;
-		try {
-			path = FileTools.buildFile(url).getPath();
-		} catch (URISyntaxException ex) {
-			throw new RuntimeException(ex);
-		}
-		String protocol = url.getProtocol().toLowerCase();
-		if (protocol.equals("jar")) { //$NON-NLS-1$
-			// if the class is in a JAR, the URL will look something like this:
-			//     jar:file:/C:/jdk/1.4.2_04/jre/lib/rt.jar!/java/lang/String.class
-			return path.substring(0, path.indexOf('!'));
-		} else if (protocol.equals("file")) { //$NON-NLS-1$
-			// if the class is in a directory, the URL will look something like this:
-			//     file:/C:/dev/main/mwdev/class/org/eclipse/dali/utility/Classpath.class
-			return path.substring(0, path.length() - convertToClassFileName(javaClass).length() - 1);
-		} else if (protocol.equals("bundleresource")) { //$NON-NLS-1$
-			// if the class is in a bundle resource (Eclipse?), the URL will look something like this:
-			//     bundleresource://43/org/eclipse/dali/utility/Classpath.class
-			return path.substring(0, path.length() - convertToClassFileName(javaClass).length() - 1);
-		}
-
-		throw new IllegalStateException(url.toString());
-	}
-	
-	/**
-	 * Return the directories used by the Java Extension Mechanism.
-	 */
-	public static File[] javaExtensionDirectories() {
-		return convertToFiles(javaExtensionDirectoryNames());
-	}
-
-	/**
-	 * Return the directory names used by the Java Extension Mechanism.
-	 */
-	public static String[] javaExtensionDirectoryNames() {
-		return System.getProperty("java.ext.dirs").split(File.pathSeparator); //$NON-NLS-1$
-	}
-
-
-	// ***** internal *****
-
-	private static File[] convertToFiles(String[] fileNames) {
-		File[] files = new File[fileNames.length];
-		for (int i = fileNames.length; i-- > 0; ) {
-			files[i] = new File(fileNames[i]);
-		}
-		return files;
-	}
-
-	private static void addJarFileNamesTo(File dir, List<String> jarFileNames) {
-		File[] jarFiles = jarFilesIn(dir);
-		for (File jarFile : jarFiles) {
-			jarFileNames.add(FileTools.canonicalFile(jarFile).getPath());
-		}
-	}
-
-	private static File[] jarFilesIn(File directory) {
-		return directory.listFiles(jarFileFilter());
-	}
-
-	private static FileFilter jarFileFilter() {
-		return new FileFilter() {
-			public boolean accept(File file) {
-				return FileTools.extension(file.getName()).toLowerCase().equals(".jar"); //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a classpath with the specified entries.
-	 */
-	private Classpath(Entry[] entries) {
-		super();
-		this.entries = entries;
-	}
-
-	/**
-	 * Construct a classpath with the specified entries.
-	 */
-	public Classpath(String... fileNames) {
-		this(buildEntries(fileNames));
-	}
-
-	/**
-	 * Skip empty file names because they will end up expanding to the current
-	 * working directory, which is not what we want. Empty file names actually
-	 * occur with some frequency; such as when the classpath has been built up
-	 * dynamically with too many separators. For example:<pre>
-	 *     "C:\dev\foo.jar;;C:\dev\bar.jar"
-	 * </pre>will be parsed into three file names:<pre>
-	 *     { "C:\dev\foo.jar", "", "C:\dev\bar.jar" }
-	 * </pre>
-	 */
-	private static Entry[] buildEntries(String[] fileNames) {
-		List<Entry> entries = new ArrayList<Entry>();
-		for (String fileName : fileNames) {
-			if ((fileName != null) && (fileName.length() != 0)) {
-				entries.add(new Entry(fileName));
-			}
-		}
-		return entries.toArray(new Entry[entries.size()]);
-	}
-
-	/**
-	 * Construct a classpath with the specified path.
-	 */
-	public Classpath(String path) {
-		this(path.split(File.pathSeparator));
-	}
-
-	/**
-	 * Construct a classpath with the specified entries.
-	 */
-	public Classpath(Iterable<String> fileNames) {
-		this(ArrayTools.array(fileNames, EMPTY_STRING_ARRAY));
-	}
-	private static final String[] EMPTY_STRING_ARRAY = new String[0];
-
-	/**
-	 * Consolidate the specified classpaths into a single classpath.
-	 */
-	public Classpath(Classpath... classpaths) {
-		this(consolidateEntries(classpaths));
-	}
-
-	private static Entry[] consolidateEntries(Classpath[] classpaths) {
-		List<Entry> entries = new ArrayList<Entry>();
-		for (Classpath classpath : classpaths) {
-			CollectionTools.addAll(entries, classpath.getEntries());
-		}
-		return entries.toArray(new Entry[entries.size()]);
-	}
-
-
-	// ********** public API **********
-
-	/**
-	 * Return the classpath's entries.
-	 */
-	public Iterable<Entry> getEntries() {
-		return new ArrayIterable<Entry>(this.entries);
-	}
-
-	/**
-	 * Return the classpath's path.
-	 */
-	public String getPath() {
-		int max = this.entries.length - 1;
-		if (max == -1) {
-			return ""; //$NON-NLS-1$
-		}
-		StringBuilder sb = new StringBuilder(2000);
-		// stop one short of the end of the array
-		for (int i = 0; i < max; i++) {
-			sb.append(this.entries[i].getFileName());
-			sb.append(File.pathSeparatorChar);
-		}
-		sb.append(this.entries[max].getFileName());
-		return sb.toString();
-	}
-
-	/**
-	 * Search the classpath for the specified (unqualified) file
-	 * and return its entry. Return null if an entry is not found.
-	 * For example, you could use this method to find the entry
-	 * for <code>"rt.jar"</code> or <code>"toplink.jar"</code>.
-	 */
-	public Entry getEntryForFileNamed(String shortFileName) {
-		for (Entry entry : this.entries) {
-			if (entry.getFile().getName().equals(shortFileName)) {
-				return entry;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Return the first entry file in the classpath
-	 * that contains the specified class.
-	 * Return null if an entry is not found.
-	 */
-	public Entry getEntryForClassNamed(String className) {
-		String relativeClassFileName = convertToClassFileName(className);
-		String archiveEntryName = convertToArchiveClassFileEntryName(className);
-		for (Entry entry : this.entries) {
-			if (entry.contains(relativeClassFileName, archiveEntryName)) {
-				return entry;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Return the names of all the classes discovered on the classpath,
-	 * with duplicates removed.
-	 * @see #classNames()
-	 */
-	public Iterable<String> getClassNames() {
-		return this.getClassNames(Filter.Null.<String>instance());
-	}
-
-	/**
-	 * Return the names of all the classes discovered on the classpath
-	 * and accepted by the specified filter, with duplicates removed.
-	 * @see #classNames(Filter)
-	 */
-	public Iterable<String> getClassNames(Filter<String> filter) {
-		Collection<String> classNames = new HashSet<String>(10000);
-		this.addClassNamesTo(classNames, filter);
-		return classNames;
-	}
-
-	/**
-	 * Add the names of all the classes discovered on the classpath
-	 * to the specified collection.
-	 */
-	public void addClassNamesTo(Collection<String> classNames) {
-		this.addClassNamesTo(classNames, Filter.Null.<String>instance());
-	}
-
-	/**
-	 * Add the names of all the classes discovered on the classpath
-	 * and accepted by the specified filter to the specified collection.
-	 */
-	public void addClassNamesTo(Collection<String> classNames, Filter<String> filter) {
-		for (Entry entry : this.entries) {
-			entry.addClassNamesTo(classNames, filter);
-		}
-	}
-
-	/**
-	 * Return the names of all the classes discovered on the classpath.
-	 * Just a bit more performant than {@link #getClassNames()}.
-	 */
-	public Iterator<String> classNames() {
-		return this.classNames(Filter.Null.<String>instance());
-	}
-
-	/**
-	 * Return the names of all the classes discovered on the classpath
-	 * that are accepted by the specified filter.
-	 * Just a bit more performant than {@link #getClassNames(Filter)}.
-	 */
-	public Iterator<String> classNames(Filter<String> filter) {
-		return new CompositeIterator<String>(this.entryClassNamesIterators(filter));
-	}
-
-	private Iterator<Iterator<String>> entryClassNamesIterators(final Filter<String> filter) {
-		return new TransformationIterator<Entry, Iterator<String>>(new ArrayIterator<Entry>(this.entries)) {
-			@Override
-			protected Iterator<String> transform(Entry entry) {
-				return entry.classNames(filter);
-			}
-		};
-	}
-
-	/**
-	 * Return a "compressed" version of the classpath with its
-	 * duplicate entries eliminated.
-	 */
-	public Classpath compressed() {
-		return new Classpath(ArrayTools.removeDuplicateElements(this.entries));
-	}
-
-	/**
-	 * Convert the classpath to an array of URLs
-	 * (that can be used to instantiate a {@link java.net.URLClassLoader}).
-	 */
-	public Iterable<URL> getURLs() {
-		int len = this.entries.length;
-		URL[] urls = new URL[len];
-		for (int i = 0; i < len; i++) {
-			urls[i] = this.entries[i].getURL();
-		}
-		return new ArrayIterable<URL>(urls);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.getPath());
-	}
-
-
-	// ********** inner class **********
-
-	/**
-	 * <code>Entry</code> models a Java classpath entry, which can be either a
-	 * directory containing <code>.class</code> files or a JAR file (or,
-	 * similarly, a <code>.zip</code> file). The entry can return the names of
-	 * classes found in it etc.
-	 */
-	public static class Entry implements Serializable {
-		private final String fileName;
-		private final File file;
-		private final File canonicalFile;
-
-		private static final long serialVersionUID = 1L;
-
-		Entry(String fileName) {
-			super();
-			if ((fileName == null) || (fileName.length() == 0)) {
-				throw new IllegalArgumentException("'fileName' must be non-empty"); //$NON-NLS-1$
-			}
-			this.fileName = fileName;
-			this.file = new File(fileName);
-			this.canonicalFile = FileTools.canonicalFile(this.file);
-		}
-
-		public String getFileName() {
-			return this.fileName;
-		}
-
-		public File getFile() {
-			return this.file;
-		}
-
-		public File getCanonicalFile() {
-			return this.canonicalFile;
-		}
-
-		public String getCanonicalFileName() {
-			return this.canonicalFile.getAbsolutePath();
-		}
-
-		@Override
-		public boolean equals(Object o) {
-			if ( ! (o instanceof Entry)) {
-				return false;
-			}
-			return ((Entry) o).canonicalFile.equals(this.canonicalFile);
-		}
-
-		@Override
-		public int hashCode() {
-			return this.canonicalFile.hashCode();
-		}
-
-		/**
-		 * Return the entry's "canonical" URL.
-		 */
-		public URL getURL() {
-			try {
-				return this.canonicalFile.toURI().toURL();
-			} catch (IOException ex) {
-				throw new RuntimeException(ex);
-			}
-		}
-
-		/**
-		 * Return whether the entry contains the specified class.
-		 */
-		public boolean contains(Class<?> javaClass) {
-			return this.contains(javaClass.getName());
-		}
-
-		/**
-		 * Return whether the entry contains the specified class.
-		 */
-		public boolean contains(String className) {
-			return this.contains(convertToClassFileName(className), convertToArchiveClassFileEntryName(className));
-		}
-
-		/**
-		 * Return whether the entry contains either the specified relative
-		 * class file or the specified archive entry.
-		 * Not the prettiest signature, but it's internal....
-		 */
-		boolean contains(String relativeClassFileName, String archiveEntryName) {
-			if ( ! this.canonicalFile.exists()) {
-				return false;
-			}
-			if (this.canonicalFile.isDirectory() && (new File(this.canonicalFile, relativeClassFileName)).exists()) {
-				return true;
-			}
-			return (fileIsArchive(this.canonicalFile) && this.archiveContainsEntry(archiveEntryName));
-		}
-
-		/**
-		 * Return whether the entry's archive contains the specified entry.
-		 */
-		private boolean archiveContainsEntry(String zipEntryName) {
-			ZipFile zipFile = null;
-			ZipEntry zipEntry = null;
-			try {
-				zipFile = new ZipFile(this.canonicalFile);
-				zipEntry = zipFile.getEntry(zipEntryName);
-			} catch (IOException ex) {
-				// something is wrong, leave the entry null
-			} finally {
-				try {
-					if (zipFile != null) {
-						zipFile.close();
-					}
-				} catch (IOException ex) {
-					zipEntry = null;	// something is wrong, clear out the entry
-				}
-			}
-			return zipEntry != null;
-		}
-
-		/**
-		 * Return the names of all the classes discovered in the entry.
-		 * @see #classNames()
-		 */
-		public Iterable<String> getClassNames() {
-			return this.getClassNames(Filter.Null.<String>instance());
-		}
-
-		/**
-		 * Return the names of all the classes discovered in the entry
-		 * and accepted by the specified filter.
-		 * @see #classNames(Filter)
-		 */
-		public Iterable<String> getClassNames(Filter<String> filter) {
-			Collection<String> classNames = new ArrayList<String>(2000);
-			this.addClassNamesTo(classNames, filter);
-			return classNames;
-		}
-
-		/**
-		 * Add the names of all the classes discovered in the entry
-		 * to the specified collection.
-		 */
-		public void addClassNamesTo(Collection<String> classNames) {
-			this.addClassNamesTo(classNames, Filter.Null.<String>instance());
-		}
-
-		/**
-		 * Add the names of all the classes discovered in the entry
-		 * and accepted by the specified filter to the specified collection.
-		 */
-		public void addClassNamesTo(Collection<String> classNames, Filter<String> filter) {
-			if (this.canonicalFile.exists()) {
-				if (this.canonicalFile.isDirectory()) {
-					this.addClassNamesForDirectoryTo(classNames, filter);
-				} else if (fileIsArchive(this.canonicalFile)) {
-					this.addClassNamesForArchiveTo(classNames, filter);
-				}
-			}
-		}
-
-		/**
-		 * Add the names of all the classes discovered
-		 * under the entry's directory and accepted by
-		 * the specified filter to the specified collection.
-		 */
-		private void addClassNamesForDirectoryTo(Collection<String> classNames, Filter<String> filter) {
-			int start = this.canonicalFile.getAbsolutePath().length() + 1;
-			for (Iterator<File> stream = this.classFilesForDirectory(); stream.hasNext(); ) {
-				String className = convertToClassName(stream.next().getAbsolutePath().substring(start));
-				if (filter.accept(className)) {
-					classNames.add(className);
-				}
-			}
-		}
-
-		/**
-		 * Return an iterator on all the class files discovered
-		 * under the entry's directory.
-		 */
-		private Iterator<File> classFilesForDirectory() {
-			return new FilteringIterator<File>(FileTools.filesInTree(this.canonicalFile)) {
-				@Override
-				protected boolean accept(File next) {
-					return Entry.this.fileNameMightBeForClassFile(next.getName());
-				}
-			};
-		}
-
-		/**
-		 * Add the names of all the classes discovered
-		 * in the entry's archive file and accepted by the
-		 * specified filter to the specified collection.
-		 */
-		private void addClassNamesForArchiveTo(Collection<String> classNames, Filter<String> filter) {
-			ZipFile zipFile = null;
-			try {
-				zipFile = new ZipFile(this.canonicalFile);
-			} catch (IOException ex) {
-				throw new RuntimeException(ex);
-			}
-			for (Enumeration<? extends ZipEntry> stream = zipFile.entries(); stream.hasMoreElements(); ) {
-				ZipEntry zipEntry = stream.nextElement();
-				String zipEntryName = zipEntry.getName();
-				if (this.fileNameMightBeForClassFile(zipEntryName)) {
-					String className = convertToClassName(zipEntryName);
-					if (filter.accept(className)) {
-						classNames.add(className);
-					}
-				}
-			}
-			try {
-				zipFile.close();
-			} catch (IOException ex) {
-				return;
-			}
-		}
-
-		/**
-		 * Return whether the specified file might be a Java class file.
-		 * The file name must at least end with <code>".class"</code> and contain no spaces.
-		 * (Neither class names nor package names may contain spaces.)
-		 * Whether it actually is a class file will need to be determined by
-		 * a class loader.
-		 */
-		boolean fileNameMightBeForClassFile(String name) {
-			return FileTools.extension(name).toLowerCase().equals(".class") //$NON-NLS-1$
-					&& (name.indexOf(' ') == -1);
-		}
-
-		/**
-		 * Return the names of all the classes discovered on the classpath.
-		 * Just a bit more performant than {@link #getClassNames()}.
-		 */
-		public Iterator<String> classNames() {
-			return this.classNames(Filter.Null.<String>instance());
-		}
-
-		/**
-		 * Return the names of all the classes discovered on the classpath
-		 * that are accepted by the specified filter.
-		 * Just a bit more performant than {@link #getClassNames(Filter)}.
-		 */
-		public Iterator<String> classNames(Filter<String> filter) {
-			if (this.canonicalFile.exists()) {
-				if (this.canonicalFile.isDirectory()) {
-					return this.classNamesForDirectory(filter);
-				}
-				if (fileIsArchive(this.canonicalFile)) {
-					return this.classNamesForArchive(filter);
-				}
-			}
-			return EmptyIterator.instance();
-		}
-
-		/**
-		 * Return the names of all the classes discovered
-		 * under the entry's directory and accepted by
-		 * the specified filter.
-		 */
-		private Iterator<String> classNamesForDirectory(Filter<String> filter) {
-			return new FilteringIterator<String>(this.classNamesForDirectory(), filter);
-		}
-
-		/**
-		 * Transform the class files to class names.
-		 */
-		private Iterator<String> classNamesForDirectory() {
-			final int start = this.canonicalFile.getAbsolutePath().length() + 1;
-			return new TransformationIterator<File, String>(this.classFilesForDirectory()) {
-				@Override
-				protected String transform(File f) {
-					return convertToClassName(f.getAbsolutePath().substring(start));
-				}
-			};
-		}
-
-		/**
-		 * Return the names of all the classes discovered
-		 * in the entry's archive file and accepted by the
-		 * specified filter.
-		 */
-		private Iterator<String> classNamesForArchive(Filter<String> filter) {
-			// we can't simply wrap iterators here because we need to close the archive file...
-			ZipFile zipFile = null;
-			try {
-				zipFile = new ZipFile(this.canonicalFile);
-			} catch (IOException ex) {
-				return EmptyIterator.instance();
-			}
-			Collection<String> classNames = new HashSet<String>(zipFile.size());
-			for (Enumeration<? extends ZipEntry> stream = zipFile.entries(); stream.hasMoreElements(); ) {
-				ZipEntry zipEntry = stream.nextElement();
-				String zipEntryName = zipEntry.getName();
-				if (this.fileNameMightBeForClassFile(zipEntryName)) {
-					String className = convertToClassName(zipEntryName);
-					if (filter.accept(className)) {
-						classNames.add(className);
-					}
-				}
-			}
-			try {
-				zipFile.close();
-			} catch (IOException ex) {
-				return EmptyIterator.instance();
-			}
-			return classNames.iterator();
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CollectionTools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CollectionTools.java
deleted file mode 100644
index a3471ec..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CollectionTools.java
+++ /dev/null
@@ -1,1933 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Random;
-import java.util.RandomAccess;
-import java.util.TreeSet;
-import java.util.Vector;
-
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-import org.eclipse.jpt.utility.internal.iterators.ArrayListIterator;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementIterator;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementListIterator;
-import org.eclipse.jpt.utility.internal.iterators.SuperIteratorWrapper;
-
-/**
- * {@link Collection}-related utility methods.
- */
-public final class CollectionTools {
-
-	// ********** add all **********
-
-	/**
-	 * Add all the elements returned by the specified iterable
-	 * to the specified collection.
-	 * Return whether the collection changed as a result.
-	 * <p>
-	 * <code>Collection.addAll(Iterable iterable)</code>
-	 */
-	public static <E> boolean addAll(Collection<? super E> collection, Iterable<? extends E> iterable) {
-		return addAll(collection, iterable.iterator());
-	}
-
-	/**
-	 * Add all the elements returned by the specified iterable
-	 * to the specified collection.
-	 * Return whether the collection changed as a result.
-	 * <p>
-	 * <code>Collection.addAll(Iterable iterable)</code>
-	 */
-	public static <E> boolean addAll(Collection<? super E> collection, Iterable<? extends E> iterable, int size) {
-		return addAll(collection, iterable.iterator(), size);
-	}
-
-	/**
-	 * Add all the elements returned by the specified iterator
-	 * to the specified collection.
-	 * Return whether the collection changed as a result.
-	 * <p>
-	 * <code>Collection.addAll(Iterator iterator)</code>
-	 */
-	public static <E> boolean addAll(Collection<? super E> collection, Iterator<? extends E> iterator) {
-		return iterator.hasNext() ? addAll_(collection, iterator) : false;
-	}
-
-	/**
-	 * assume the iterator is not empty
-	 */
-	private static <E> boolean addAll_(Collection<? super E> collection, Iterator<? extends E> iterator) {
-		boolean modified = false;
-		while (iterator.hasNext()) {
-			modified |= collection.add(iterator.next());
-		}
-		return modified;
-	}
-
-	/**
-	 * Add all the elements returned by the specified iterator
-	 * to the specified collection.
-	 * Return whether the collection changed as a result.
-	 * <p>
-	 * <code>Collection.addAll(Iterator iterator)</code>
-	 */
-	public static <E> boolean addAll(Collection<? super E> collection, Iterator<? extends E> iterator, int size) {
-		return iterator.hasNext() ? collection.addAll(list(iterator, size)) : false;
-	}
-
-	/**
-	 * Add all the elements in the specified array
-	 * to the specified collection.
-	 * Return whether the collection changed as a result.
-	 * <p>
-	 * <code>Collection.addAll(Object[] array)</code>
-	 */
-	public static <E> boolean addAll(Collection<? super E> collection, E... array) {
-		return (array.length == 0) ? false : addAll_(collection, array);
-	}
-
-	/**
-	 * assume the array is not empty
-	 */
-	private static <E> boolean addAll_(Collection<? super E> collection, E... array) {
-		boolean modified = false;
-		for (E element : array) {
-			modified |= collection.add(element);
-		}
-		return modified;
-	}
-
-	/**
-	 * Add all the elements returned by the specified iterable
-	 * to the specified list at the specified index.
-	 * Return whether the list changed as a result.
-	 * <p>
-	 * <code>List.addAll(Iterable iterable)</code>
-	 */
-	public static <E> boolean addAll(List<? super E> list, int index, Iterable<E> iterable) {
-		return addAll(list, index, iterable.iterator());
-	}
-
-	/**
-	 * Add all the elements returned by the specified iterable
-	 * to the specified list at the specified index.
-	 * Return whether the list changed as a result.
-	 * <p>
-	 * <code>List.addAll(Iterable iterable)</code>
-	 */
-	public static <E> boolean addAll(List<? super E> list, int index, Iterable<E> iterable, int size) {
-		return addAll(list, index, iterable.iterator(), size);
-	}
-
-	/**
-	 * Add all the elements returned by the specified iterator
-	 * to the specified list at the specified index.
-	 * Return whether the list changed as a result.
-	 * <p>
-	 * <code>List.addAll(Iterator iterator)</code>
-	 */
-	public static <E> boolean addAll(List<? super E> list, int index, Iterator<? extends E> iterator) {
-		return iterator.hasNext() ? list.addAll(index, list(iterator)) : false;
-	}
-
-	/**
-	 * Add all the elements returned by the specified iterator
-	 * to the specified list at the specified index.
-	 * Return whether the list changed as a result.
-	 * <p>
-	 * <code>List.addAll(Iterator iterator)</code>
-	 */
-	public static <E> boolean addAll(List<? super E> list, int index, Iterator<? extends E> iterator, int size) {
-		return iterator.hasNext() ? list.addAll(index, list(iterator, size)) : false;
-	}
-
-	/**
-	 * Add all the elements in the specified array
-	 * to the specified list at the specified index.
-	 * Return whether the list changed as a result.
-	 * <p>
-	 * <code>List.addAll(Object[] array)</code>
-	 */
-	public static <E> boolean addAll(List<? super E> list, int index, E... array) {
-		return (array.length == 0) ? false : list.addAll(index, Arrays.asList(array));
-	}
-
-
-	// ********** bag **********
-
-	/**
-	 * Return a bag corresponding to the specified enumeration.
-	 * <p>
-	 * <code>HashBag(Enumeration enumeration)</code>
-	 */
-	public static <E> HashBag<E> bag(Enumeration<? extends E> enumeration) {
-		return bag(enumeration, new HashBag<E>());
-	}
-
-	/**
-	 * Return a bag corresponding to the specified enumeration.
-	 * The specified enumeration size is a performance hint.
-	 * <p>
-	 * <code>HashBag(Enumeration enumeration)</code>
-	 */
-	public static <E> HashBag<E> bag(Enumeration<? extends E> enumeration, int enumerationSize) {
-		return bag(enumeration, new HashBag<E>(enumerationSize));
-	}
-
-	private static <E> HashBag<E> bag(Enumeration<? extends E> enumeration, HashBag<E> bag) {
-		while (enumeration.hasMoreElements()) {
-			bag.add(enumeration.nextElement());
-		}
-		return bag;
-	}
-
-	/**
-	 * Return a bag corresponding to the specified iterable.
-	 * <p>
-	 * <code>HashBag(Iterable iterable)</code>
-	 */
-	public static <E> HashBag<E> bag(Iterable<? extends E> iterable) {
-		return bag(iterable.iterator());
-	}
-
-	/**
-	 * Return a bag corresponding to the specified iterable.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>HashBag(Iterable iterable)</code>
-	 */
-	public static <E> HashBag<E> bag(Iterable<? extends E> iterable, int iterableSize) {
-		return bag(iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Return a bag corresponding to the specified iterator.
-	 * <p>
-	 * <code>HashBag(Iterator iterator)</code>
-	 */
-	public static <E> HashBag<E> bag(Iterator<? extends E> iterator) {
-		return bag(iterator, new HashBag<E>());
-	}
-
-	/**
-	 * Return a bag corresponding to the specified iterator.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>HashBag(Iterator iterator)</code>
-	 */
-	public static <E> HashBag<E> bag(Iterator<? extends E> iterator, int iteratorSize) {
-		return bag(iterator, new HashBag<E>(iteratorSize));
-	}
-
-	private static <E> HashBag<E> bag(Iterator<? extends E> iterator, HashBag<E> bag) {
-		while (iterator.hasNext()) {
-			bag.add(iterator.next());
-		}
-		return bag;
-	}
-
-	/**
-	 * Return a bag corresponding to the specified array.
-	 * <p>
-	 * <code>HashBag(Object[] array)</code>
-	 */
-	public static <E> HashBag<E> bag(E... array) {
-		int len = array.length;
-		HashBag<E> bag = new HashBag<E>(len);
-		for (E item : array) {
-			bag.add(item);
-		}
-		return bag;
-	}
-
-
-	// ********** collection **********
-
-	/**
-	 * Return a collection corresponding to the specified enumeration.
-	 */
-	public static <E> HashBag<E> collection(Enumeration<? extends E> enumeration) {
-		return bag(enumeration);
-	}
-
-	/**
-	 * Return a collection corresponding to the specified enumeration.
-	 * The specified enumeration size is a performance hint.
-	 */
-	public static <E> HashBag<E> collection(Enumeration<? extends E> enumeration, int enumerationSize) {
-		return bag(enumeration, enumerationSize);
-	}
-
-	/**
-	 * Return a collection corresponding to the specified iterable.
-	 */
-	public static <E> HashBag<E> collection(Iterable<? extends E> iterable) {
-		return collection(iterable.iterator());
-	}
-
-	/**
-	 * Return a collection corresponding to the specified iterable.
-	 * The specified iterable size is a performance hint.
-	 */
-	public static <E> HashBag<E> collection(Iterable<? extends E> iterable, int iterableSize) {
-		return collection(iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Return a collection corresponding to the specified iterator.
-	 */
-	public static <E> HashBag<E> collection(Iterator<? extends E> iterator) {
-		return bag(iterator);
-	}
-
-	/**
-	 * Return a collection corresponding to the specified iterator.
-	 * The specified iterator size is a performance hint.
-	 */
-	public static <E> HashBag<E> collection(Iterator<? extends E> iterator, int iteratorSize) {
-		return bag(iterator, iteratorSize);
-	}
-
-	/**
-	 * Return a collection corresponding to the specified array.
-	 */
-	public static <E> HashBag<E> collection(E... array) {
-		return bag(array);
-	}
-
-
-	// ********** contains **********
-
-	/**
-	 * Return whether the specified enumeration contains the
-	 * specified element.
-	 * <p>
-	 * <code>Enumeration.contains(Object o)</code>
-	 */
-	public static boolean contains(Enumeration<?> enumeration, Object value) {
-		if (value == null) {
-			while (enumeration.hasMoreElements()) {
-				if (enumeration.nextElement() == null) {
-					return true;
-				}
-			}
-		} else {
-			while (enumeration.hasMoreElements()) {
-				if (value.equals(enumeration.nextElement())) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified iterable contains the
-	 * specified element.
-	 * <p>
-	 * <code>Iterable.contains(Object o)</code>
-	 */
-	public static boolean contains(Iterable<?> iterable, Object value) {
-		return contains(iterable.iterator(), value);
-	}
-
-	/**
-	 * Return whether the specified iterator contains the
-	 * specified element.
-	 * <p>
-	 * <code>Iterator.contains(Object o)</code>
-	 */
-	public static boolean contains(Iterator<?> iterator, Object value) {
-		if (value == null) {
-			while (iterator.hasNext()) {
-				if (iterator.next() == null) {
-					return true;
-				}
-			}
-		} else {
-			while (iterator.hasNext()) {
-				if (value.equals(iterator.next())) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-
-
-	// ********** contains all **********
-
-	/**
-	 * Return whether the specified collection contains all of the
-	 * elements in the specified iterable.
-	 * <p>
-	 * <code>Collection.containsAll(Iterable iterable)</code>
-	 */
-	public static boolean containsAll(Collection<?> collection, Iterable<?> iterable) {
-		return containsAll(collection, iterable.iterator());
-	}
-
-	/**
-	 * Return whether the specified collection contains all of the
-	 * elements in the specified iterator.
-	 * <p>
-	 * <code>Collection.containsAll(Iterator iterator)</code>
-	 */
-	public static boolean containsAll(Collection<?> collection, Iterator<?> iterator) {
-		while (iterator.hasNext()) {
-			if ( ! collection.contains(iterator.next())) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Return whether the specified collection contains all of the
-	 * elements in the specified array.
-	 * <p>
-	 * <code>Collection.containsAll(Object[] array)</code>
-	 */
-	public static boolean containsAll(Collection<?> collection, Object... array) {
-		for (int i = array.length; i-- > 0; ) {
-			if ( ! collection.contains(array[i])) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Return whether the specified iterable contains all of the
-	 * elements in the specified collection.
-	 * <p>
-	 * <code>Iterable.containsAll(Collection collection)</code>
-	 */
-	public static boolean containsAll(Iterable<?> iterable, Collection<?> collection) {
-		return containsAll(iterable.iterator(), collection);
-	}
-
-	/**
-	 * Return whether the specified iterable contains all of the
-	 * elements in the specified collection.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Iterable.containsAll(Collection collection)</code>
-	 */
-	public static boolean containsAll(Iterable<?> iterable, int iterableSize, Collection<?> collection) {
-		return containsAll(iterable.iterator(), iterableSize, collection);
-	}
-
-	/**
-	 * Return whether the specified iterable 1 contains all of the
-	 * elements in the specified iterable 2.
-	 * <p>
-	 * <code>Iterable.containsAll(Iterable iterable)</code>
-	 */
-	public static boolean containsAll(Iterable<?> iterable1, Iterable<?> iterable2) {
-		return containsAll(iterable1.iterator(), iterable2.iterator());
-	}
-
-	/**
-	 * Return whether the specified iterable 1 contains all of the
-	 * elements in the specified iterable 2.
-	 * The specified iterable 1 size is a performance hint.
-	 * <p>
-	 * <code>Iterable.containsAll(Iterable iterable)</code>
-	 */
-	public static boolean containsAll(Iterable<?> iterable1, int iterable1Size, Iterable<?> iterable2) {
-		return containsAll(iterable1.iterator(), iterable1Size, iterable2.iterator());
-	}
-
-	/**
-	 * Return whether the specified iterable contains all of the
-	 * elements in the specified iterator.
-	 * <p>
-	 * <code>Iterable.containsAll(Iterator iterator)</code>
-	 */
-	public static boolean containsAll(Iterable<?> iterable, Iterator<?> iterator) {
-		return containsAll(iterable.iterator(), iterator);
-	}
-
-	/**
-	 * Return whether the specified iterable contains all of the
-	 * elements in the specified iterator.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Iterable.containsAll(Iterator iterator)</code>
-	 */
-	public static boolean containsAll(Iterable<?> iterable, int iterableSize, Iterator<?> iterator) {
-		return containsAll(iterable.iterator(), iterableSize, iterator);
-	}
-
-	/**
-	 * Return whether the specified iterable contains all of the
-	 * elements in the specified array.
-	 * <p>
-	 * <code>Iterable.containsAll(Object[] array)</code>
-	 */
-	public static boolean containsAll(Iterable<?> iterable, Object... array) {
-		return containsAll(iterable.iterator(), array);
-	}
-
-	/**
-	 * Return whether the specified iterable contains all of the
-	 * elements in the specified array.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Iterable.containsAll(Object[] array)</code>
-	 */
-	public static boolean containsAll(Iterable<?> iterable, int iterableSize, Object... array) {
-		return containsAll(iterable.iterator(), iterableSize, array);
-	}
-
-	/**
-	 * Return whether the specified iterator contains all of the
-	 * elements in the specified collection.
-	 * <p>
-	 * <code>Iterator.containsAll(Collection collection)</code>
-	 */
-	public static boolean containsAll(Iterator<?> iterator, Collection<?> collection) {
-		return set(iterator).containsAll(collection);
-	}
-
-	/**
-	 * Return whether the specified iterator contains all of the
-	 * elements in the specified collection.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Iterator.containsAll(Collection collection)</code>
-	 */
-	public static boolean containsAll(Iterator<?> iterator, int iteratorSize, Collection<?> collection) {
-		return set(iterator, iteratorSize).containsAll(collection);
-	}
-
-	/**
-	 * Return whether the specified iterator contains all of the
-	 * elements in the specified iterable.
-	 * <p>
-	 * <code>Iterator.containsAll(Iterable iterable)</code>
-	 */
-	public static boolean containsAll(Iterator<?> iterator, Iterable<?> iterable) {
-		return containsAll(set(iterator), iterable);
-	}
-
-	/**
-	 * Return whether the specified iterator contains all of the
-	 * elements in the specified iterable.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Iterator.containsAll(Iterable iterable)</code>
-	 */
-	public static boolean containsAll(Iterator<?> iterator, int iteratorSize, Iterable<?> iterable) {
-		return containsAll(set(iterator, iteratorSize), iterable);
-	}
-
-	/**
-	 * Return whether the specified iterator 1 contains all of the
-	 * elements in the specified iterator 2.
-	 * <p>
-	 * <code>Iterator.containsAll(Iterator iterator)</code>
-	 */
-	public static boolean containsAll(Iterator<?> iterator1, Iterator<?> iterator2) {
-		return containsAll(set(iterator1), iterator2);
-	}
-
-	/**
-	 * Return whether the specified iterator 1 contains all of the
-	 * elements in the specified iterator 2.
-	 * The specified iterator 1 size is a performance hint.
-	 * <p>
-	 * <code>Iterator.containsAll(Iterator iterator)</code>
-	 */
-	public static boolean containsAll(Iterator<?> iterator1, int iterator1Size, Iterator<?> iterator2) {
-		return containsAll(set(iterator1, iterator1Size), iterator2);
-	}
-
-	/**
-	 * Return whether the specified iterator contains all of the
-	 * elements in the specified array.
-	 * <p>
-	 * <code>Iterator.containsAll(Object[] array)</code>
-	 */
-	public static boolean containsAll(Iterator<?> iterator, Object... array) {
-		return containsAll(set(iterator), array);
-	}
-
-	/**
-	 * Return whether the specified iterator contains all of the
-	 * elements in the specified array.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Iterator.containsAll(Object[] array)</code>
-	 */
-	public static boolean containsAll(Iterator<?> iterator, int iteratorSize, Object... array) {
-		return containsAll(set(iterator, iteratorSize), array);
-	}
-
-
-	// ********** diff **********
-
-	/**
-	 * Return the index of the first elements in the specified
-	 * lists that are different, beginning at the end.
-	 * If the lists are identical, return -1.
-	 * If the lists are different sizes, return the index of the
-	 * last element in the longer list.
-	 * Use the elements' {@link Object#equals()} method to compare the
-	 * elements.
-	 * <p>
-	 * <code>Collections.diffEnd(List list1, List list2)</code>
-	 */
-	public static int diffEnd(List<?> list1, List<?> list2) {
-		return ArrayTools.diffEnd(list1.toArray(), list2.toArray());
-	}
-
-	/**
-	 * Return the range of elements in the specified
-	 * arrays that are different.
-	 * If the arrays are identical, return [size, -1].
-	 * Use the elements' {@link Object#equals()} method to compare the
-	 * elements.
-	 * <p>
-	 * <code>Collections.diffRange(List list1, List list2)</code>
-	 * @see #diffStart(List, List)
-	 * @see #diffEnd(List, List)
-	 */
-	public static Range diffRange(List<?> list1, List<?> list2) {
-		return ArrayTools.diffRange(list1.toArray(), list2.toArray());
-	}
-
-	/**
-	 * Return the index of the first elements in the specified
-	 * lists that are different. If the lists are identical, return
-	 * the size of the two lists (i.e. one past the last index).
-	 * If the lists are different sizes and all the elements in
-	 * the shorter list match their corresponding elements in
-	 * the longer list, return the size of the shorter list
-	 * (i.e. one past the last index of the shorter list).
-	 * Use the elements' {@link Object#equals()} method to compare the
-	 * elements.
-	 * <p>
-	 * <code>Collections.diffStart(List list1, List list2)</code>
-	 */
-	public static int diffStart(List<?> list1, List<?> list2) {
-		return ArrayTools.diffStart(list1.toArray(), list2.toArray());
-	}
-
-
-	// ********** identity diff **********
-
-	/**
-	 * Return the index of the first elements in the specified
-	 * lists that are different, beginning at the end.
-	 * If the lists are identical, return -1.
-	 * If the lists are different sizes, return the index of the
-	 * last element in the longer list.
-	 * Use object identity to compare the elements.
-	 * <p>
-	 * <code>Collections.identityDiffEnd(List list1, List list2)</code>
-	 */
-	public static int identityDiffEnd(List<?> list1, List<?> list2) {
-		return ArrayTools.identityDiffEnd(list1.toArray(), list2.toArray());
-	}
-
-	/**
-	 * Return the range of elements in the specified
-	 * arrays that are different.
-	 * If the arrays are identical, return [size, -1].
-	 * Use object identity to compare the elements.
-	 * <p>
-	 * <code>Collections.identityDiffStart(List list1, List list2)</code>
-	 * @see #identityDiffStart(List, List)
-	 * @see #identityDiffEnd(List, List)
-	 */
-	public static Range identityDiffRange(List<?> list1, List<?> list2) {
-		return ArrayTools.identityDiffRange(list1.toArray(), list2.toArray());
-	}
-
-	/**
-	 * Return the index of the first elements in the specified
-	 * lists that are different. If the lists are identical, return
-	 * the size of the two lists (i.e. one past the last index).
-	 * If the lists are different sizes and all the elements in
-	 * the shorter list match their corresponding elements in
-	 * the longer list, return the size of the shorter list
-	 * (i.e. one past the last index of the shorter list).
-	 * Use object identity to compare the elements.
-	 * <p>
-	 * <code>Collections.identityDiffStart(List list1, List list2)</code>
-	 */
-	public static int identityDiffStart(List<?> list1, List<?> list2) {
-		return ArrayTools.identityDiffStart(list1.toArray(), list2.toArray());
-	}
-
-
-	// ********** elements are equal **********
-
-	/**
-	 * Return whether the specified iterables do not return the same elements
-	 * in the same order.
-	 */
-	public static boolean elementsAreDifferent(Iterable<?> iterable1, Iterable<?> iterable2) {
-		return elementsAreDifferent(iterable1.iterator(), iterable2.iterator());
-	}
-
-	/**
-	 * Return whether the specified iterators do not return the same elements
-	 * in the same order.
-	 */
-	public static boolean elementsAreDifferent(Iterator<?> iterator1, Iterator<?> iterator2) {
-		return ! elementsAreEqual(iterator1, iterator2);
-	}
-
-	/**
-	 * Return whether the specified iterables return equal elements.
-	 * <p>
-	 * <code>Iterable.elementsAreEqual(Iterable iterable)</code>
-	 */
-	public static boolean elementsAreEqual(Iterable<?> iterable1, Iterable<?> iterable2) {
-		return elementsAreEqual(iterable1.iterator(), iterable2.iterator());
-	}
-
-	/**
-	 * Return whether the specified iterators return equal elements.
-	 * <p>
-	 * <code>Iterator.elementsAreEqual(Iterator iterator)</code>
-	 */
-	public static boolean elementsAreEqual(Iterator<?> iterator1, Iterator<?> iterator2) {
-		while (iterator1.hasNext() && iterator2.hasNext()) {
-			if (Tools.valuesAreDifferent(iterator1.next(), iterator2.next())) {
-				return false;
-			}
-		}
-		return ! (iterator1.hasNext() || iterator2.hasNext());
-	}
-
-
-	// ********** elements are identical **********
-
-	/**
-	 * Return whether the specified iterables return the same elements.
-	 * <p>
-	 * <code>Iterable.identical(Iterable iterable)</code>
-	 */
-	public static boolean elementsAreIdentical(Iterable<?> iterable1, Iterable<?> iterable2) {
-		return elementsAreIdentical(iterable1.iterator(), iterable2.iterator());
-	}
-
-	/**
-	 * Return whether the specified iterators return the same elements.
-	 * <p>
-	 * <code>Iterator.identical(Iterator iterator)</code>
-	 */
-	public static boolean elementsAreIdentical(Iterator<?> iterator1, Iterator<?> iterator2) {
-		while (iterator1.hasNext() && iterator2.hasNext()) {
-			if (iterator1.next() != iterator2.next()) {
-				return false;
-			}
-		}
-		return ! (iterator1.hasNext() || iterator2.hasNext());
-	}
-
-
-	// ********** get **********
-
-	/**
-	 * Return the element corresponding to the specified index
-	 * in the specified iterable.
-	 * <p>
-	 * <code>Iterable.get(int index)</code>
-	 */
-	public static <E> E get(Iterable<? extends E> iterable, int index) {
-		return get(iterable.iterator(), index);
-	}
-
-	/**
-	 * Return the element corresponding to the specified index
-	 * in the specified iterator.
-	 * <p>
-	 * <code>Iterator.get(int index)</code>
-	 */
-	public static <E> E get(Iterator<? extends E> iterator, int index) {
-		int i = 0;
-		while (iterator.hasNext()) {
-			E next = iterator.next();
-			if (i++ == index) {
-				return next;
-			}
-		}
-		throw new IndexOutOfBoundsException(String.valueOf(index) + ':' + String.valueOf(i));
-	}
-
-
-	// ********** hash code **********
-
-	public static int hashCode(Iterable<?> iterable) {
-		if (iterable == null) {
-			return 0;
-		}
-		int hash = 1;
-		for (Object element : iterable) {
-			hash = 31 * hash + (element == null ? 0 : element.hashCode());
-		}
-		return hash;
-	}
-
-
-	// ********** index of **********
-
-	/**
-	 * Return the index of the first occurrence of the
-	 * specified element in the specified iterable;
-	 * return -1 if there is no such index.
-	 * <p>
-	 * <code>Iterable.indexOf(Object o)</code>
-	 */
-	public static int indexOf(Iterable<?> iterable, Object value) {
-		return indexOf(iterable.iterator(), value);
-	}
-
-	/**
-	 * Return the index of the first occurrence of the
-	 * specified element in the specified iterator;
-	 * return -1 if there is no such index.
-	 * <p>
-	 * <code>Iterator.indexOf(Object o)</code>
-	 */
-	public static int indexOf(Iterator<?> iterator, Object value) {
-		if (value == null) {
-			for (int i = 0; iterator.hasNext(); i++) {
-				if (iterator.next() == null) {
-					return i;
-				}
-			}
-		} else {
-			for (int i = 0; iterator.hasNext(); i++) {
-				if (value.equals(iterator.next())) {
-					return i;
-				}
-			}
-		}
-		return -1;
-	}
-
-
-	// ********** insertion index of **********
-
-	/**
-	 * Return the maximum index of where the specified comparable object
-	 * should be inserted into the specified sorted list and still keep
-	 * the list sorted.
-	 */
-	public static <E extends Comparable<? super E>> int insertionIndexOf(List<E> sortedList, Comparable<E> value) {
-		int len = sortedList.size();
-		for (int i = 0; i < len; i++) {
-			if (value.compareTo(sortedList.get(i)) < 0) {
-				return i;
-			}
-		}
-		return len;
-	}
-
-	/**
-	 * Return the maximum index of where the specified object
-	 * should be inserted into the specified sorted list and still keep
-	 * the list sorted.
-	 */
-	public static <E> int insertionIndexOf(List<E> sortedList, E value, Comparator<? super E> comparator) {
-		int len = sortedList.size();
-		for (int i = 0; i < len; i++) {
-			if (comparator.compare(value, sortedList.get(i)) < 0) {
-				return i;
-			}
-		}
-		return len;
-	}
-
-
-	// ********** iterable/iterator **********
-
-	/**
-	 * Return an iterable on the elements in the specified array.
-	 * <p>
-	 * <code>Arrays.iterable(Object[] array)</code>
-	 */
-	public static <E> Iterable<E> iterable(E... array) {
-		return new ArrayIterable<E>(array);
-	}
-
-	/**
-	 * Return an iterator on the elements in the specified array.
-	 * <p>
-	 * <code>Arrays.iterator(Object[] array)</code>
-	 */
-	public static <E> Iterator<E> iterator(E... array) {
-		return new ArrayIterator<E>(array);
-	}
-
-
-	// ********** last **********
-
-	/**
-	 * Return the specified iterable's last element.
-	 * <p>
-	 * <code>Iterable.last()</code>
-	 * 
-     * @exception NoSuchElementException iterable is empty.
-	 */
-	public static <E> E last(Iterable<E> iterable) {
-		return last(iterable.iterator());
-	}
-
-	/**
-	 * Return the specified iterator's last element.
-	 * <p>
-	 * <code>Iterator.last()</code>
-	 * 
-     * @exception NoSuchElementException iterator is empty.
-	 */
-	public static <E> E last(Iterator<E> iterator) {
-		E last;
-		do {
-			last = iterator.next();
-		} while (iterator.hasNext());
-		return last;
-	}
-
-
-	// ********** last index of **********
-
-	/**
-	 * Return the index of the last occurrence of the
-	 * specified element in the specified iterable;
-	 * return -1 if there is no such index.
-	 * <p>
-	 * <code>Iterable.lastIndexOf(Object o)
-	 */
-	public static int lastIndexOf(Iterable<?> iterable, Object value) {
-		return lastIndexOf(iterable.iterator(), value);
-	}
-
-	/**
-	 * Return the index of the last occurrence of the
-	 * specified element in the specified iterable;
-	 * return -1 if there is no such index.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Iterable.lastIndexOf(Object o)
-	 */
-	public static int lastIndexOf(Iterable<?> iterable, int iterableSize, Object value) {
-		return lastIndexOf(iterable.iterator(), iterableSize, value);
-	}
-
-	/**
-	 * Return the index of the last occurrence of the
-	 * specified element in the specified iterator;
-	 * return -1 if there is no such index.
-	 * <p>
-	 * <code>Iterator.lastIndexOf(Object o)
-	 */
-	public static int lastIndexOf(Iterator<?> iterator, Object value) {
-		return iterator.hasNext() ? list(iterator).lastIndexOf(value) : -1;
-	}
-
-	/**
-	 * Return the index of the last occurrence of the
-	 * specified element in the specified iterator;
-	 * return -1 if there is no such index.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Iterator.lastIndexOf(Object o)
-	 */
-	public static int lastIndexOf(Iterator<?> iterator, int iteratorSize, Object value) {
-		return iterator.hasNext() ? list(iterator, iteratorSize).lastIndexOf(value) : -1;
-	}
-
-
-	// ********** list **********
-
-	/**
-	 * Return a list corresponding to the specified iterable.
-	 * <p>
-	 * <code>Iterable.toList()</code>
-	 */
-	public static <E> ArrayList<E> list(Iterable<? extends E> iterable) {
-		return list(iterable.iterator());
-	}
-
-	/**
-	 * Return a list corresponding to the specified iterable.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Iterable.toList()</code>
-	 */
-	public static <E> ArrayList<E> list(Iterable<? extends E> iterable, int iterableSize) {
-		return list(iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Return a list corresponding to the specified iterator.
-	 * <p>
-	 * <code>Iterator.toList()</code>
-	 */
-	public static <E> ArrayList<E> list(Iterator<? extends E> iterator) {
-		return list(iterator, new ArrayList<E>());
-	}
-
-	/**
-	 * Return a list corresponding to the specified iterator.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Iterator.toList()</code>
-	 */
-	public static <E> ArrayList<E> list(Iterator<? extends E> iterator, int iteratorSize) {
-		return list(iterator, new ArrayList<E>(iteratorSize));
-	}
-
-	private static <E> ArrayList<E> list(Iterator<? extends E> iterator, ArrayList<E> list) {
-		while (iterator.hasNext()) {
-			list.add(iterator.next());
-		}
-		return list;
-	}
-
-	/**
-	 * Return a list corresponding to the specified array.
-	 * Unlike {@link Arrays#asList(Object[])}, the list
-	 * is modifiable and is not backed by the array.
-	 */
-	public static <E> ArrayList<E> list(E... array) {
-		return new ArrayList<E>(Arrays.asList(array));
-	}
-
-	/**
-	 * Return a list iterator for the specified array.
-	 * <p>
-	 * <code>Arrays.listIterator(Object[] array)</code>
-	 */
-	public static <E> ListIterator<E> listIterator(E... array) {
-		return listIterator(array, 0);
-	}
-
-	/**
-	 * Return a list iterator for the specified array
-	 * starting at the specified position in the array.
-	 * <p>
-	 * <code>Arrays.listIterator(Object[] array, int index)</code>
-	 */
-	public static <E> ListIterator<E> listIterator(E[] array, int start) {
-		return listIterator(array, start, array.length - start);
-	}
-
-	/**
-	 * Return a list iterator for the specified array
-	 * starting at the specified position in the array.
-	 * <p>
-	 * <code>Arrays.listIterator(Object[] array, int index, int length)</code>
-	 */
-	public static <E> ListIterator<E> listIterator(E[] array, int start, int length) {
-		return new ArrayListIterator<E>(array, start, length);
-	}
-
-
-	// ********** move **********
-
-	/**
-	 * Move an element from the specified source index to the specified target
-	 * index. Return the altered list.
-	 * <p>
-	 * <code>List.move(int targetIndex, int sourceIndex)</code>
-	 */
-	public static <E> List<E> move(List<E> list, int targetIndex, int sourceIndex) {
-		return (targetIndex == sourceIndex) ? list : move_(list, targetIndex, sourceIndex);
-	}
-
-	/**
-	 * assume targetIndex != sourceIndex
-	 */
-	private static <E> List<E> move_(List<E> list, int targetIndex, int sourceIndex) {
-		if (list instanceof RandomAccess) {
-			// move elements, leaving the list in place
-			E temp = list.get(sourceIndex);
-			if (targetIndex < sourceIndex) {
-				for (int i = sourceIndex; i-- > targetIndex; ) {
-					list.set(i + 1, list.get(i));
-				}
-			} else {
-				for (int i = sourceIndex; i < targetIndex; i++) {
-					list.set(i, list.get(i + 1));
-				}
-			}
-			list.set(targetIndex, temp);
-		} else {
-			// remove the element and re-add it at the target index
-			list.add(targetIndex, list.remove(sourceIndex));
-		}
-		return list;
-	}
-
-	/**
-	 * Move elements from the specified source index to the specified target
-	 * index. Return the altered list.
-	 * <p>
-	 * <code>List.move(int targetIndex, int sourceIndex, int length)</code>
-	 */
-	public static <E> List<E> move(List<E> list, int targetIndex, int sourceIndex, int length) {
-		if ((targetIndex == sourceIndex) || (length == 0)) {
-			return list;
-		}
-		if (length == 1) {
-			return move_(list, targetIndex, sourceIndex);
-		}
-		if (list instanceof RandomAccess) {
-			// move elements, leaving the list in place
-			ArrayList<E> temp = new ArrayList<E>(list.subList(sourceIndex, sourceIndex + length));
-			if (targetIndex < sourceIndex) {
-				for (int i = sourceIndex; i-- > targetIndex; ) {
-					list.set(i + length, list.get(i));
-				}
-			} else {
-				for (int i = sourceIndex; i < targetIndex; i++) {
-					list.set(i, list.get(i + length));
-				}
-			}
-			for (int i = 0; i < length; i++) {
-				list.set(targetIndex + i, temp.get(i));
-			}
-		} else {
-			// remove the elements and re-add them at the target index
-			list.addAll(targetIndex, removeElementsAtIndex(list, sourceIndex, length));
-		}
-		return list;
-	}
-
-
-	// ********** remove all **********
-
-	/**
-	 * Remove all the elements returned by the specified iterable
-	 * from the specified collection.
-	 * Return whether the collection changed as a result.
-	 * <p>
-	 * <code>Collection.removeAll(Iterable iterable)</code>
-	 */
-	public static boolean removeAll(Collection<?> collection, Iterable<?> iterable) {
-		return removeAll(collection, iterable.iterator());
-	}
-
-	/**
-	 * Remove all the elements returned by the specified iterable
-	 * from the specified collection.
-	 * Return whether the collection changed as a result.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Collection.removeAll(Iterable iterable)</code>
-	 */
-	public static boolean removeAll(Collection<?> collection, Iterable<?> iterable, int iterableSize) {
-		return removeAll(collection, iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Remove all the elements returned by the specified iterator
-	 * from the specified collection.
-	 * Return whether the collection changed as a result.
-	 * <p>
-	 * <code>Collection.removeAll(Iterator iterator)</code>
-	 */
-	public static boolean removeAll(Collection<?> collection, Iterator<?> iterator) {
-		return iterator.hasNext() ? collection.removeAll(set(iterator)) : false;
-	}
-
-	/**
-	 * Remove all the elements returned by the specified iterator
-	 * from the specified collection.
-	 * Return whether the collection changed as a result.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Collection.removeAll(Iterator iterator)</code>
-	 */
-	public static boolean removeAll(Collection<?> collection, Iterator<?> iterator, int iteratorSize) {
-		return iterator.hasNext() ? collection.removeAll(set(iterator, iteratorSize)) : false;
-	}
-
-	/**
-	 * Remove all the elements in the specified array
-	 * from the specified collection.
-	 * Return whether the collection changed as a result.
-	 * <p>
-	 * <code>Collection.removeAll(Object[] array)</code>
-	 */
-	public static boolean removeAll(Collection<?> collection, Object... array) {
-		return (array.length == 0) ? false : collection.removeAll(set(array));
-	}
-
-
-	// ********** remove all occurrences **********
-
-	/**
-	 * Remove all occurrences of the specified element
-	 * from the specified collection.
-	 * Return whether the collection changed as a result.
-	 * <p>
-	 * <code>Collection.removeAllOccurrences(Object value)</code>
-	 */
-	public static boolean removeAllOccurrences(Collection<?> collection, Object value) {
-		boolean modified = false;
-		Iterator<?> stream = collection.iterator();
-		if (value == null) {
-			while (stream.hasNext()) {
-				if (stream.next() == null) {
-					stream.remove();
-					modified = true;
-				}
-			}
-		} else {
-			while (stream.hasNext()) {
-				if (value.equals(stream.next())) {
-					stream.remove();
-					modified = true;
-				}
-			}
-		}
-		return modified;
-	}
-
-
-	// ********** remove elements at index **********
-
-	/**
-	 * Remove the elements at the specified index.
-	 * Return the removed elements.
-	 * <p>
-	 * <code>List.remove(int index, int length)</code>
-	 */
-	public static <E> ArrayList<E> removeElementsAtIndex(List<E> list, int index, int length) {
-		List<E> subList = list.subList(index, index + length);
-		ArrayList<E> result = new ArrayList<E>(subList);
-		subList.clear();
-		return result;
-	}
-
-
-	// ********** remove duplicate elements **********
-
-	/**
-	 * Remove any duplicate elements from the specified list,
-	 * while maintaining the order.
-	 * Return whether the list changed as a result.
-	 */
-	public static <E> boolean removeDuplicateElements(List<E> list) {
-		int size = list.size();
-		if ((size == 0) || (size == 1)) {
-			return false;
-		}
-		return removeDuplicateElements(list, size);
-	}
-
-	/**
-	 * assume list is non-empty
-	 */
-	static <E> boolean removeDuplicateElements(List<E> list, int size) {
-		LinkedHashSet<E> temp = new LinkedHashSet<E>(size);		// take advantage of hashed look-up
-		boolean modified = false;
-		for (E item : list) {
-			if ( ! temp.add(item)) {
-				modified = true;  // duplicate item
-			}
-		}
-		if (modified) {
-			int i = 0;
-			for (E e : temp) {
-				list.set(i, e);
-				i++;
-			}
-			int tempSize = temp.size();
-			for (i = list.size(); i-- > tempSize; ) {
-				list.remove(i);  // pull off the end
-			}
-		}
-		return modified;
-	}
-
-
-	// ********** retain all **********
-
-	/**
-	 * Retain only the elements in the specified iterable
-	 * in the specified collection.
-	 * Return whether the collection changed as a result.
-	 * <p>
-	 * <code>Collection.retainAll(Iterable iterable)</code>
-	 */
-	public static boolean retainAll(Collection<?> collection, Iterable<?> iterable) {
-		return retainAll(collection, iterable.iterator());
-	}
-
-	/**
-	 * Retain only the elements in the specified iterable
-	 * in the specified collection.
-	 * Return whether the collection changed as a result.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Collection.retainAll(Iterable iterable)</code>
-	 */
-	public static boolean retainAll(Collection<?> collection, Iterable<?> iterable, int iterableSize) {
-		return retainAll(collection, iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Retain only the elements in the specified iterator
-	 * in the specified collection.
-	 * Return whether the collection changed as a result.
-	 * <p>
-	 * <code>Collection.retainAll(Iterator iterator)</code>
-	 */
-	public static boolean retainAll(Collection<?> collection, Iterator<?> iterator) {
-		if (iterator.hasNext()) {
-			return collection.retainAll(set(iterator));
-		}
-		if (collection.isEmpty()) {
-			return false;
-		}
-		collection.clear();
-		return true;
-	}
-
-	/**
-	 * Retain only the elements in the specified iterator
-	 * in the specified collection.
-	 * Return whether the collection changed as a result.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Collection.retainAll(Iterator iterator)</code>
-	 */
-	public static boolean retainAll(Collection<?> collection, Iterator<?> iterator, int iteratorSize) {
-		if (iterator.hasNext()) {
-			return collection.retainAll(set(iterator, iteratorSize));
-		}
-		if (collection.isEmpty()) {
-			return false;
-		}
-		collection.clear();
-		return true;
-	}
-
-	/**
-	 * Retain only the elements in the specified array
-	 * in the specified collection.
-	 * Return whether the collection changed as a result.
-	 * <p>
-	 * <code>Collection.retainAll(Object[] array)</code>
-	 */
-	public static boolean retainAll(Collection<?> collection, Object... array) {
-		if (array.length > 0) {
-			return collection.retainAll(set(array));
-		}
-		if (collection.isEmpty()) {
-			return false;
-		}
-		collection.clear();
-		return true;
-	}
-
-
-	// ********** reverse list **********
-
-	/**
-	 * Return a list with entries in reverse order from those
-	 * returned by the specified iterable.
-	 * <p>
-	 * <code>Iterable.reverseList()</code>
-	 */
-	public static <E> List<E> reverseList(Iterable<? extends E> iterable) {
-		return reverseList(iterable.iterator());
-	}
-
-	/**
-	 * Return a list with entries in reverse order from those
-	 * returned by the specified iterable.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Iterable.reverseList()</code>
-	 */
-	public static <E> List<E> reverseList(Iterable<? extends E> iterable, int iterableSize) {
-		return reverseList(iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Return a list with entries in reverse order from those
-	 * returned by the specified iterator.
-	 * <p>
-	 * <code>Iterator.reverseList()</code>
-	 */
-	public static <E> List<E> reverseList(Iterator<? extends E> iterator) {
-		return reverse(list(iterator));
-	}
-
-	/**
-	 * Return a list with entries in reverse order from those
-	 * returned by the specified iterator.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Iterator.reverseList()</code>
-	 */
-	public static <E> List<E> reverseList(Iterator<? extends E> iterator, int size) {
-		return reverse(list(iterator, size));
-	}
-
-
-	// ********** rotate **********
-
-	/**
-	 * Return the list after it has been "rotated" by one position.
-	 * <p>
-	 * <code>List.rotate()</code>
-	 */
-	public static <E> List<E> rotate(List<E> list) {
-		return rotate(list, 1);
-	}
-
-
-	// ********** set **********
-
-	/**
-	 * Return a set corresponding to the specified iterable.
-	 * <p>
-	 * <code>HashSet(Iterable iterable)</code>
-	 */
-	public static <E> HashSet<E> set(Iterable<? extends E> iterable) {
-		return set(iterable.iterator());
-	}
-
-	/**
-	 * Return a set corresponding to the specified iterable.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>HashSet(Iterable iterable)</code>
-	 */
-	public static <E> HashSet<E> set(Iterable<? extends E> iterable, int iterableSize) {
-		return set(iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Return a set corresponding to the specified iterator.
-	 * <p>
-	 * <code>HashSet(Iterator iterator)</code>
-	 */
-	public static <E> HashSet<E> set(Iterator<? extends E> iterator) {
-		return set(iterator, new HashSet<E>());
-	}
-
-	/**
-	 * Return a set corresponding to the specified iterator.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>HashSet(Iterator iterator)</code>
-	 */
-	public static <E> HashSet<E> set(Iterator<? extends E> iterator, int iteratorSize) {
-		return set(iterator, new HashSet<E>(iteratorSize));
-	}
-
-	private static <E> HashSet<E> set(Iterator<? extends E> iterator, HashSet<E> set) {
-		while (iterator.hasNext()) {
-			set.add(iterator.next());
-		}
-		return set;
-	}
-
-	/**
-	 * Return a set corresponding to the specified array.
-	 * <p>
-	 * <code>HashSet(Object[] array)</code>
-	 */
-	public static <E> HashSet<E> set(E... array) {
-		HashSet<E> set = new HashSet<E>(array.length);
-		for (int i = array.length; i-- > 0;) {
-			set.add(array[i]);
-		}
-		return set;
-	}
-
-
-	// ********** singleton iterator **********
-
-	/**
-	 * Return an iterator that returns only the single,
-	 * specified object.
-	 * <p>
-	 * <code>Object.toIterator()</code>
-	 */
-	public static <E> Iterator<E> singletonIterator(E value) {
-		return new SingleElementIterator<E>(value);
-	}
-
-	/**
-	 * Return a list iterator that returns only the single,
-	 * specified object.
-	 * <p>
-	 * <code>Object.toListIterator()</code>
-	 */
-	public static <E> ListIterator<E> singletonListIterator(E value) {
-		return new SingleElementListIterator<E>(value);
-	}
-
-
-	// ********** size **********
-
-	/**
-	 * Return the number of elements returned by the specified iterable.
-	 * <p>
-	 * <code>Iterable.size()</code>
-	 */
-	public static int size(Iterable<?> iterable) {
-		return size(iterable.iterator());
-	}
-
-	/**
-	 * Return the number of elements returned by the specified iterator.
-	 * <p>
-	 * <code>Iterator.size()</code>
-	 */
-	public static int size(Iterator<?> iterator) {
-		int size = 0;
-		while (iterator.hasNext()) {
-			iterator.next();
-			size++;
-		}
-		return size;
-	}
-	
-	/**
-	 * Return whether the specified iterable is empty
-	 * (Shortcuts the iterator rather than calculating the entire size)
-	 */
-	public static boolean isEmpty(Iterable<?> iterable) {
-		return isEmpty(iterable.iterator());
-	}
-	
-	/**
-	 * Return whether the specified iterator is empty
-	 * (Shortcuts the iterator rather than calculating the entire size)
-	 */
-	public static boolean isEmpty(Iterator<?> iterator) {
-		return ! iterator.hasNext();
-	}
-	
-	
-	// ********** sort **********
-
-	/**
-	 * Return an iterable containing the sorted elements of the specified iterable.
-	 * <p>
-	 * <code>Iterable.sort()</code>
-	 */
-	public static <E extends Comparable<? super E>> Iterable<E> sort(Iterable<E> iterable) {
-		return sort(iterable, null);
-	}
-
-	/**
-	 * Return an iterable containing the sorted elements of the specified iterable.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Iterable.sort()</code>
-	 */
-	public static <E extends Comparable<? super E>> Iterable<E> sort(Iterable<E> iterable, int iterableSize) {
-		return sort(iterable, null, iterableSize);
-	}
-
-	/**
-	 * Return an iterable containing the sorted elements of the specified iterable.
-	 * <p>
-	 * <code>Iterable.sort(Comparator comparator)</code>
-	 */
-	public static <E> Iterable<E> sort(Iterable<E> iterable, Comparator<? super E> comparator) {
-		return sort(list(iterable), comparator);
-	}
-
-	/**
-	 * Return an iterable containing the sorted elements of the specified iterable.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>Iterable.sort(Comparator comparator)</code>
-	 */
-	public static <E> Iterable<E> sort(Iterable<E> iterable, Comparator<? super E> comparator, int iterableSize) {
-		return sort(list(iterable, iterableSize), comparator);
-	}
-
-	/**
-	 * Return the iterator after it has been "sorted".
-	 * <p>
-	 * <code>Iterator.sort()</code>
-	 */
-	public static <E extends Comparable<? super E>> ListIterator<E> sort(Iterator<? extends E> iterator) {
-		return sort(iterator, null);
-	}
-
-	/**
-	 * Return the iterator after it has been "sorted".
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Iterator.sort()</code>
-	 */
-	public static <E extends Comparable<? super E>> ListIterator<E> sort(Iterator<? extends E> iterator, int iteratorSize) {
-		return sort(iterator, null, iteratorSize);
-	}
-
-	/**
-	 * Return the iterator after it has been "sorted".
-	 * <p>
-	 * <code>Iterator.sort(Comparator comparator)</code>
-	 */
-	public static <E> ListIterator<E> sort(Iterator<? extends E> iterator, Comparator<? super E> comparator) {
-		return sort(list(iterator), comparator).listIterator();
-	}
-
-	/**
-	 * Return the iterator after it has been "sorted".
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>Iterator.sort(Comparator comparator)</code>
-	 */
-	public static <E> ListIterator<E> sort(Iterator<? extends E> iterator, Comparator<? super E> comparator, int iteratorSize) {
-		return sort(list(iterator, iteratorSize), comparator).listIterator();
-	}
-
-
-	// ********** sorted set **********
-
-	/**
-	 * Return a sorted set corresponding to the specified iterable.
-	 * <p>
-	 * <code>TreeSet(Iterable iterable)</code>
-	 */
-	public static <E extends Comparable<? super E>> TreeSet<E> sortedSet(Iterable<? extends E> iterable) {
-		return sortedSet(iterable.iterator());
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified iterable.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>TreeSet(Iterable iterable)</code>
-	 */
-	public static <E extends Comparable<? super E>> TreeSet<E> sortedSet(Iterable<? extends E> iterable, int iterableSize) {
-		return sortedSet(iterable.iterator(), iterableSize);
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified iterable
-	 * and comparator.
-	 * <p>
-	 * <code>TreeSet(Iterable iterable, Comparator c)</code>
-	 */
-	public static <E> TreeSet<E> sortedSet(Iterable<? extends E> iterable, Comparator<? super E> comparator) {
-		return sortedSet(iterable.iterator(), comparator);
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified iterable
-	 * and comparator.
-	 * The specified iterable size is a performance hint.
-	 * <p>
-	 * <code>TreeSet(Iterable iterable, Comparator c)</code>
-	 */
-	public static <E> TreeSet<E> sortedSet(Iterable<? extends E> iterable, Comparator<? super E> comparator, int iterableSize) {
-		return sortedSet(iterable.iterator(), comparator, iterableSize);
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified iterator.
-	 * <p>
-	 * <code>TreeSet(Iterator iterator)</code>
-	 */
-	public static <E extends Comparable<? super E>> TreeSet<E> sortedSet(Iterator<? extends E> iterator) {
-		return sortedSet(iterator, null);
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified iterator.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>TreeSet(Iterator iterator)</code>
-	 */
-	public static <E extends Comparable<? super E>> TreeSet<E> sortedSet(Iterator<? extends E> iterator, int iteratorSize) {
-		return sortedSet(iterator, null, iteratorSize);
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified iterator
-	 * and comparator.
-	 * <p>
-	 * <code>TreeSet(Iterator iterator, Comparator c)</code>
-	 */
-	public static <E> TreeSet<E> sortedSet(Iterator<? extends E> iterator, Comparator<? super E> comparator) {
-		return sortedSet(list(iterator), comparator);
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified iterator
-	 * and comparator.
-	 * The specified iterator size is a performance hint.
-	 * <p>
-	 * <code>TreeSet(Iterator iterator, Comparator c)</code>
-	 */
-	public static <E> TreeSet<E> sortedSet(Iterator<? extends E> iterator, Comparator<? super E> comparator, int iteratorSize) {
-		return sortedSet(list(iterator, iteratorSize), comparator);
-	}
-
-	private static <E> TreeSet<E> sortedSet(List<E> list, Comparator<? super E> comparator) {
-		TreeSet<E> sortedSet = new TreeSet<E>(comparator);
-		sortedSet.addAll(list);
-		return sortedSet;
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified array.
-	 * <p>
-	 * <code>TreeSet(Object[] array)</code>
-	 */
-	public static <E extends Comparable<? super E>> TreeSet<E> sortedSet(E... array) {
-		return sortedSet(array, null);
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified array
-	 * and comparator.
-	 * <p>
-	 * <code>TreeSet(Object[] array, Comparator c)</code>
-	 */
-	public static <E> TreeSet<E> sortedSet(E[] array, Comparator<? super E> comparator) {
-		TreeSet<E> sortedSet = new TreeSet<E>(comparator);
-		sortedSet.addAll(Arrays.asList(array));
-		return sortedSet;
-	}
-
-
-	// ********** Old School Vector **********
-
-	/**
-	 * Return a vector corresponding to the specified iterable.
-	 * This is useful for legacy code that requires a {@link Vector}.
-	 * <p>
-	 * <code>Vector(Iterable iterable)</code>
-	 */
-	public static <E> Vector<E> vector(Iterable<? extends E> iterable) {
-		return vector(iterable.iterator());
-	}
-
-	/**
-	 * Return a vector corresponding to the specified iterable.
-	 * This is useful for legacy code that requires a {@link Vector}.
-	 * <p>
-	 * <code>Vector(Iterable iterable, int size)</code>
-	 */
-	public static <E> Vector<E> vector(Iterable<? extends E> iterable, int size) {
-		return vector(iterable.iterator(), size);
-	}
-
-	/**
-	 * Return a vector corresponding to the specified iterator.
-	 * This is useful for legacy code that requires a {@link Vector}.
-	 * <p>
-	 * <code>Vector(Iterator iterator)</code>
-	 */
-	public static <E> Vector<E> vector(Iterator<? extends E> iterator) {
-		return vector(iterator, new Vector<E>());
-	}
-
-	/**
-	 * Return a vector corresponding to the specified iterator.
-	 * This is useful for legacy code that requires a {@link Vector}.
-	 * <p>
-	 * <code>Vector(Iterator iterator, int size)</code>
-	 */
-	public static <E> Vector<E> vector(Iterator<? extends E> iterator, int size) {
-		return vector(iterator, new Vector<E>(size));
-	}
-
-	private static <E> Vector<E> vector(Iterator<? extends E> iterator, Vector<E> v) {
-		while (iterator.hasNext()) {
-			v.addElement(iterator.next());
-		}
-		return v;
-	}
-
-	/**
-	 * Return a vector corresponding to the specified array.
-	 * This is useful for legacy code that requires a {@link Vector}.
-	 * <p>
-	 * <code>Vector(Object... array)</code>
-	 */
-	public static <E> Vector<E> vector(E... array) {
-		Vector<E> v = new Vector<E>(array.length);
-		for (E item : array) {
-			v.addElement(item);
-		}
-		return v;
-	}
-
-
-	// ********** single-use Iterable **********
-
-	/**
-	 * Return a one-use {@link Iterable} for the specified {@link Iterator}.
-	 * Throw an {@link IllegalStateException} if {@link Iterable#iterator()}
-	 * is called more than once.
-	 * As such, this utility should only be used in one-use situations, such as
-	 * a foreach loop.
-	 */
-	public static <E> Iterable<E> iterable(Iterator<? extends E> iterator) {
-		return new SingleUseIterable<E>(iterator);
-	}
-
-	/**
-	 * This is a one-time use iterable that can return a single iterator.
-	 * Once the iterator is returned the iterable is no longer valid.
-	 * As such, this utility should only be used in one-time use situations,
-	 * such as a 'for-each' loop.
-	 */
-	public static class SingleUseIterable<E> implements Iterable<E> {
-		private Iterator<E> iterator;
-
-		public SingleUseIterable(Iterator<? extends E> iterator) {
-			super();
-			if (iterator == null) {
-				throw new NullPointerException();
-			}
-			this.iterator = new SuperIteratorWrapper<E>(iterator);
-		}
-
-		public Iterator<E> iterator() {
-			if (this.iterator == null) {
-				throw new IllegalStateException("This method has already been called."); //$NON-NLS-1$
-			}
-			Iterator<E> result = this.iterator;
-			this.iterator = null;
-			return result;
-		}
-
-		@Override
-		public String toString() {
-			return StringTools.buildToStringFor(this, this.iterator);
-		}
-
-	}
-
-
-	// ********** java.util.Collections enhancements **********
-
-	/**
-	 * Return the destination list after the source list has been copied into it.
-	 * @see Collections#copy(List, List)
-	 */
-	public static <E> List<E> copy(List<E> dest, List<? extends E> src) {
-		Collections.copy(dest, src);
-		return dest;
-	}
-
-	/**
-	 * Return the list after it has been "filled".
-	 * @see Collections#fill(List, Object)
-	 */
-	public static <E> List<E> fill(List<E> list, E value) {
-		Collections.fill(list, value);
-		return list;
-	}
-
-	/**
-	 * Return the list after it has been "reversed".
-	 * @see Collections#reverse(List)
-	 */
-	public static <E> List<E> reverse(List<E> list) {
-		Collections.reverse(list);
-		return list;
-	}
-
-	/**
-	 * Return the list after it has been "rotated".
-	 * @see Collections#rotate(List, int)
-	 */
-	public static <E> List<E> rotate(List<E> list, int distance) {
-		Collections.rotate(list, distance);
-		return list;
-	}
-
-	/**
-	 * Return the list after it has been "shuffled".
-	 * @see Collections#shuffle(List)
-	 */
-	public static <E> List<E> shuffle(List<E> list) {
-		Collections.shuffle(list);
-		return list;
-	}
-
-	/**
-	 * Return the list after it has been "shuffled".
-	 * @see Collections#shuffle(List, Random)
-	 */
-	public static <E> List<E> shuffle(List<E> list, Random random) {
-		Collections.shuffle(list, random);
-		return list;
-	}
-
-	/**
-	 * Return the list after it has been "sorted".
-	 * NB: The list is sorted in place as a side-effect.
-	 * @see Collections#sort(List)
-	 */
-	public static <E extends Comparable<? super E>> List<E> sort(List<E> list) {
-		Collections.sort(list);
-		return list;
-	}
-
-	/**
-	 * Return the list after it has been "sorted".
-	 * NB: The list is sorted in place as a side-effect.
-	 * @see Collections#sort(List, Comparator)
-	 */
-	public static <E> List<E> sort(List<E> list, Comparator<? super E> comparator) {
-		Collections.sort(list, comparator);
-		return list;
-	}
-
-	/**
-	 * Return the list after the specified elements have been "swapped".
-	 * @see Collections#swap(List, int, int)
-	 */
-	public static <E> List<E> swap(List<E> list, int i, int j) {
-		Collections.swap(list, i, j);
-		return list;
-	}
-
-
-	// ********** constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private CollectionTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CommandRunnable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CommandRunnable.java
deleted file mode 100644
index c2bd4e2..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CommandRunnable.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import org.eclipse.jpt.utility.Command;
-
-/**
- * Wrap a Command so it can be used as a Runnable.
- */
-public class CommandRunnable implements Runnable {
-	protected final Command command;
-
-	public CommandRunnable(Command command) {
-		super();
-		if (command == null) {
-			throw new NullPointerException();
-		}
-		this.command = command;
-	}
-
-	public void run() {
-		this.command.execute();
-	}
-
-	@Override
-	public String toString() {
-		return "Runnable[" + this.command.toString() +']'; //$NON-NLS-1$
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CompositeCommand.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CompositeCommand.java
deleted file mode 100644
index cfea4d3..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CompositeCommand.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-
-/**
- * <code>CompositeCommand</code> provides support for treating a collection of
- * {@link Command}s as a single command.
- */
-public class CompositeCommand
-	implements Command
-{
-	private final Iterable<Command> commands;
-
-	public CompositeCommand(Command... commands) {
-		this(new ArrayIterable<Command>(commands));
-	}
-
-	public CompositeCommand(Iterable<Command> commands) {
-		super();
-		this.commands = commands;
-	}
-
-	public void execute() {
-		for (Command command : this.commands) {
-			command.execute();
-		}
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.commands);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CompositeException.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CompositeException.java
deleted file mode 100644
index 5407997..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CompositeException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.util.Collection;
-
-/**
- * Provide a way for multiple exceptions to be packaged and reported.
- */
-public class CompositeException
-	extends RuntimeException
-{
-	private final Throwable[] exceptions;
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * The specified exceptions list must not be empty.
-	 */
-	public CompositeException(Collection<Throwable> exceptions) {
-		this(exceptions.toArray(new Throwable[exceptions.size()]));
-	}
-
-	/**
-	 * The specified exceptions list must not be empty.
-	 */
-	public CompositeException(Throwable[] exceptions) {
-		// grab the first exception and make it the "cause"
-		super(exceptions[0]);
-		this.exceptions = exceptions;
-	}
-
-	public Throwable[] getExceptions() {
-		return this.exceptions;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ConsumerThreadCoordinator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ConsumerThreadCoordinator.java
deleted file mode 100644
index 6ffe878..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ConsumerThreadCoordinator.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.util.Vector;
-import java.util.concurrent.ThreadFactory;
-
-/**
- * A <code>ConsumerThreadCoordinator</code> controls the creation,
- * starting, and stopping of a general purpose "consumer" thread. Construct
- * the coordinator with a {@link Consumer} that both waits for the producer
- * to "produce" something to "consume" and, once the wait is over,
- * "consumes" whatever is available.
- * <p>
- * <strong>NB:</strong> The client-supplied consumer should handle any
- * exception appropriately (e.g. log the exception and return gracefully) so
- * the thread can continue executing.
- */
-public class ConsumerThreadCoordinator {
-	/**
-	 * The runnable passed to the consumer thread each time it is built.
-	 */
-	private final Runnable runnable;
-
-	/**
-	 * Client-supplied thread factory. Defaults to a straightforward
-	 * implementation.
-	 */
-	private final ThreadFactory threadFactory;
-
-	/**
-	 * Optional, client-supplied name for the consumer thread.
-	 * If null, the JDK assigns a name.
-	 */
-	private final String threadName;
-
-	/**
-	 * The consumer is executed on this thread. A new thread is built
-	 * for every start/stop cycle (since a thread cannot be started more than
-	 * once).
-	 */
-	private volatile Thread thread;
-
-	/**
-	 * A list of the uncaught exceptions thrown by the consumer
-	 * during the current start/stop cycle.
-	 */
-	final Vector<Throwable> exceptions = new Vector<Throwable>();
-
-
-	// ********** construction **********
-
-	/**
-	 * Construct a consumer thread coordinator for the specified consumer.
-	 * Use simple JDK thread(s) for the consumer thread(s).
-	 * Allow the consumer thread(s) to be assigned JDK-generated names.
-	 */
-	public ConsumerThreadCoordinator(Consumer consumer) {
-		this(consumer, SimpleThreadFactory.instance());
-	}
-
-	/**
-	 * Construct a consumer thread coordinator for the specified consumer.
-	 * Use the specified thread factory to construct the consumer thread(s).
-	 * Allow the consumer thread(s) to be assigned JDK-generated names.
-	 */
-	public ConsumerThreadCoordinator(Consumer consumer, ThreadFactory threadFactory) {
-		this(consumer, threadFactory, null);
-	}
-
-	/**
-	 * Construct a consumer thread coordinator for the specified consumer.
-	 * Assign the consumer thread(s) the specified name.
-	 * Use simple JDK thread(s) for the consumer thread(s).
-	 */
-	public ConsumerThreadCoordinator(Consumer consumer, String threadName) {
-		this(consumer, SimpleThreadFactory.instance(), threadName);
-	}
-
-	/**
-	 * Construct a consumer thread coordinator for the specified consumer.
-	 * Use the specified thread factory to construct the consumer thread(s).
-	 * Assign the consumer thread(s) the specified name.
-	 */
-	public ConsumerThreadCoordinator(Consumer consumer, ThreadFactory threadFactory, String threadName) {
-		super();
-		this.runnable = this.buildRunnable(consumer);
-		this.threadFactory = threadFactory;
-		this.threadName = threadName;
-	}
-
-	private Runnable buildRunnable(Consumer consumer) {
-		return new RunnableConsumer(consumer);
-	}
-
-
-	// ********** Lifecycle support **********
-
-	/**
-	 * Build and start the consumer thread.
-	 */
-	public synchronized void start() {
-		if (this.thread != null) {
-			throw new IllegalStateException("Not stopped."); //$NON-NLS-1$
-		}
-		this.thread = this.buildThread();
-		this.thread.start();
-	}
-
-	private Thread buildThread() {
-		Thread t = this.threadFactory.newThread(this.runnable);
-		if (this.threadName != null) {
-			t.setName(this.threadName);
-		}
-		return t;
-	}
-
-	/**
-	 * Interrupt the consumer thread so that it stops executing at the
-	 * end of its current iteration. Suspend the current thread until
-	 * the consumer thread is finished executing. If any uncaught
-	 * exceptions were thrown while the consumer thread was executing,
-	 * wrap them in a composite exception and throw the composite exception.
-	 */
-	public synchronized void stop() {
-		if (this.thread == null) {
-			throw new IllegalStateException("Not started."); //$NON-NLS-1$
-		}
-		this.thread.interrupt();
-		try {
-			this.thread.join();
-		} catch (InterruptedException ex) {
-			// the thread that called #stop() was interrupted while waiting to
-			// join the consumer thread - ignore;
-			// 'thread' is still "interrupted", so its #run() loop will still stop
-			// after its current execution - we just won't wait around for it...
-		}
-		this.thread = null;
-
-		if (this.exceptions.size() > 0) {
-			Throwable[] temp = this.exceptions.toArray(new Throwable[this.exceptions.size()]);
-			this.exceptions.clear();
-			throw new CompositeException(temp);
-		}
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.thread);
-	}
-
-
-	// ********** consumer thread runnable **********
-
-	/**
-	 * This implementation of {@link Runnable} is a long-running consumer that
-	 * will repeatedly execute the consumer {@link Consumer#execute()} method.
-	 * With each iteration, the consumer thread will wait
-	 * until the other consumer method, {@link Consumer#waitForProducer()}, allows the
-	 * consumer thread to proceed (i.e. there is something for the consumer to
-	 * consume). Once {@link Consumer#execute()} is finished, the thread will quiesce
-	 * until {@link Consumer#waitForProducer()} returns again.
-	 * Stop the thread by calling {@link Thread#interrupt()}.
-	 */
-	private class RunnableConsumer
-		implements Runnable
-	{
-		/**
-		 * Client-supplied consumer that controls waiting for something to consume
-		 * and the consuming itself.
-		 */
-		private final Consumer consumer;
-
-		RunnableConsumer(Consumer consumer) {
-			super();
-			this.consumer = consumer;
-		}
-
-		/**
-		 * Loop while this thread has not been interrupted by another thread.
-		 * In each loop: Pause execution until {@link Consumer#waitForProducer()}
-		 * allows us to proceed.
-		 * <p>
-		 * If this thread is interrupted <em>during</em> {@link Consumer#execute()},
-		 * the call to {@link Thread#interrupted()} will stop the loop. If this thread is
-		 * interrupted during the call to {@link Consumer#waitForProducer()},
-		 * we will catch the {@link InterruptedException} and stop the loop also.
-		 */
-		public void run() {
-			while ( ! Thread.interrupted()) {
-				try {
-					this.consumer.waitForProducer();
-				} catch (InterruptedException ex) {
-					// we were interrupted while waiting, must be Quittin' Time
-					return;
-				}
-				this.execute();
-			}
-		}
-
-		/**
-		 * Execute the consumer {@link Consumer#execute()} method.
-		 * Do not allow any unhandled exceptions to kill the thread.
-		 * Store them up for later pain.
-		 * @see ConsumerThreadCoordinator#stop()
-		 */
-		private void execute() {
-			try {
-				this.execute_();
-			} catch (Throwable ex) {
-				ConsumerThreadCoordinator.this.exceptions.add(ex);
-			}
-		}
-
-		/**
-		 * Subclass-implemented behavior: consume stuff.
-		 */
-		private void execute_() {
-			this.consumer.execute();
-		}
-
-	}
-
-
-	// ********** consumer interface **********
-
-	/**
-	 * Interface implemented by clients that controls:<ul>
-	 * <li>when the consumer thread suspends, waiting for something to consume
-	 * <li>the consuming of whatever is being produced
-	 * </ul>
-	 */
-	public interface Consumer {
-		/**
-		 * Wait for something to consume.
-		 * Throw an {@link InterruptedException} if the thread is interrupted.
-		 */
-		void waitForProducer() throws InterruptedException;
-
-		/**
-		 * Consume whatever is currently available.
-		 */
-		void execute();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ExceptionHandler.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ExceptionHandler.java
deleted file mode 100644
index 28bda10..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ExceptionHandler.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-/**
- * Simple interface for allowing clients to pass an exception handler to a
- * service (e.g. to log the exception). This is particularly helpful if the
- * service executes on another, possibly inaccessible, thread.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface ExceptionHandler {
-
-	/**
-	 * The specified exception was thrown. Handle it appropriately.
-	 */
-	void handleException(Throwable t);
-
-	/**
-	 * Singleton implementation of the exception handler interface that does
-	 * nothing with the exception.
-	 */
-	final class Null implements ExceptionHandler, Serializable {
-		public static final ExceptionHandler INSTANCE = new Null();
-		public static ExceptionHandler instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Null() {
-			super();
-		}
-		public void handleException(Throwable t) {
-			// do nothing
-		}
-		@Override
-		public String toString() {
-			return "ExceptionHandler.Null"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-	/**
-	 * Singleton implementation of the exception handler interface that
-	 * wraps the exception in a runtime exception and throws it.
-	 */
-	final class Runtime implements ExceptionHandler, Serializable {
-		public static final ExceptionHandler INSTANCE = new Runtime();
-		public static ExceptionHandler instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Runtime() {
-			super();
-		}
-		public void handleException(Throwable t) {
-			// re-throw the exception unchecked
-			throw new RuntimeException(t);
-		}
-		@Override
-		public String toString() {
-			return "ExceptionHandler.Runtime"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/FileTools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/FileTools.java
deleted file mode 100644
index 788bc0a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/FileTools.java
+++ /dev/null
@@ -1,1002 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.nio.channels.FileChannel;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
-import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-/**
- * Assorted file tools:
- * - delete entire trees of directories and files
- * - build iterators on entire trees of directories and files
- * - build a temporary directory
- * - "canonize" files
- */
-public final class FileTools {
-
-	public static final String USER_HOME_DIRECTORY_NAME = System.getProperty("user.home"); //$NON-NLS-1$
-	public static final String USER_TEMPORARY_DIRECTORY_NAME = System.getProperty("java.io.tmpdir"); //$NON-NLS-1$
-	public static String DEFAULT_TEMPORARY_DIRECTORY_NAME = "tmpdir"; //$NON-NLS-1$
-	public static final String CURRENT_WORKING_DIRECTORY_NAME = System.getProperty("user.dir"); //$NON-NLS-1$
-
-    /** A list of some invalid file name characters.
-				: is the filename separator in MacOS and the drive indicator in DOS
-				* is a DOS wildcard character
-				| is a DOS redirection character
-				& is our own escape character
-				/ is the filename separator in Unix and the command option tag in DOS
-				\ is the filename separator in DOS/Windows and the escape character in Unix
-				; is ???
-				? is a DOS wildcard character
-				[ is ???
-				] is ???
-				= is ???
-				+ is ???
-				< is a DOS redirection character
-				> is a DOS redirection character
-				" is used by DOS to delimit file names with spaces
-				, is ???
-     */
-	public static final char[] INVALID_FILENAME_CHARACTERS = { ':', '*', '|', '&', '/', '\\', ';', '?', '[', ']', '=', '+', '<', '>', '"', ',' };
-
-	/** This encoder will convert strings into valid file names. */
-	public static final XMLStringEncoder FILE_NAME_ENCODER = new XMLStringEncoder(INVALID_FILENAME_CHARACTERS);
-
-	/** Windows files that are redirected to devices etc. */
-	@SuppressWarnings("nls")
-	private static final String[] WINDOWS_RESERVED_FILE_NAMES = {
-		"con",
-		"aux",
-		"com1", "com2", "com3", "com4", "com5", "com6", "com7", "com8", "com9",
-		"lpt1", "lpt2", "lpt3", "lpt4", "lpt5", "lpt6", "lpt7", "lpt8", "lpt9",
-		"prn",
-		"nul"
-	};
-
-	/** The default length of a shortened file name. */
-	public static final int MAXIMUM_SHORTENED_FILE_NAME_LENGTH = 60;
-
-
-	// ********** deleting directories **********
-
-	/**
-	 * Delete the specified directory and all of its contents.
-	 * <em>USE WITH CARE.</em>
-	 * File#deleteAll()?
-	 */
-	public static void deleteDirectory(String directoryName) {
-		deleteDirectory(new File(directoryName));
-	}
-	
-	/**
-	 * Delete the specified directory and all of its contents.
-	 * <em>USE WITH CARE.</em>
-	 * File#deleteAll()?
-	 */
-	public static void deleteDirectory(File directory) {
-		deleteDirectoryContents(directory);
-		if ( ! directory.delete()) {
-			throw new RuntimeException("unable to delete directory: " + directory.getAbsolutePath()); //$NON-NLS-1$
-		}
-	}
-	
-	/**
-	 * Delete the contents of the specified directory
-	 * (but not the directory itself).
-	 * <em>USE WITH CARE.</em>
-	 * File#deleteFiles()
-	 */
-	public static void deleteDirectoryContents(String directoryName) {
-		deleteDirectoryContents(new File(directoryName));
-	}
-	
-	/**
-	 * Delete the contents of the specified directory
-	 * (but not the directory itself).
-	 * <em>USE WITH CARE.</em>
-	 * File#deleteFiles()
-	 */
-	public static void deleteDirectoryContents(File directory) {
-		for (File file : directory.listFiles()) {
-			if (file.isDirectory()) {
-				deleteDirectory(file);	// recurse through subdirectories
-			} else {
-				if ( ! file.delete()) {
-					throw new RuntimeException("unable to delete file: " + file.getAbsolutePath()); //$NON-NLS-1$
-				}
-			}
-		}
-	}
-	
-
-	// ********** copying files **********
-
-	/**
-	 * Copies the content of the source file to the destination file.
-	 * File#copy(File destinationFile)
-	 */
-	public static void copyToFile(File sourceFile, File destinationFile)
-		throws IOException
-	{
-		FileChannel sourceChannel = new FileInputStream(sourceFile).getChannel();
-		FileChannel destinationChannel = new FileOutputStream(destinationFile).getChannel();
-		try {
-			destinationChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
-		} finally {
-			sourceChannel.close();
-			destinationChannel.close();
-		}
-	}
-	
-	/**
-	 * Copies the content of the source file to a file by
-	 * the same name in the destination directory.
-	 * File#copyToDirectory(File destinationDirectory)
-	 */
-	public static void copyToDirectory(File sourceFile, File destinationDirectory)
-		throws IOException
-	{
-		File destinationFile = new File(destinationDirectory, sourceFile.getName());
-		if ( ! destinationFile.exists() && ! destinationFile.createNewFile()) {
-			throw new RuntimeException("createNewFile() failed: " + destinationFile); //$NON-NLS-1$
-		}
-		copyToFile(sourceFile, destinationFile);
-	}
-	
-
-	// ********** iteratoring over files and directories **********
-
-	/**
-	 * Return an iterator on all the files in the specified directory.
-	 * The iterator will skip over subdirectories.
-	 * File#files()
-	 */
-	public static Iterator<File> filesIn(String directoryName) {
-		return filesIn(new File(directoryName));
-	}
-	
-	/**
-	 * Return an iterator on all the files in the specified directory.
-	 * The iterator will skip over subdirectories.
-	 * File#files()
-	 */
-	public static Iterator<File> filesIn(File directory) {
-		return filesIn(directory.listFiles());
-	}
-	
-	private static Iterator<File> filesIn(File[] files) {
-		return new FilteringIterator<File>(new ArrayIterator<File>(files)) {
-			@Override
-			protected boolean accept(File next) {
-				return next.isFile();
-			}
-		};
-	}
-	
-	/**
-	 * Return an iterator on all the subdirectories
-	 * in the specified directory.
-	 * File#subDirectories()
-	 */
-	public static Iterator<File> directoriesIn(String directoryName) {
-		return directoriesIn(new File(directoryName));
-	}
-	
-	/**
-	 * Return an iterator on all the subdirectories
-	 * in the specified directory.
-	 * File#subDirectories()
-	 */
-	public static Iterator<File> directoriesIn(File directory) {
-		return directoriesIn(directory.listFiles());
-	}
-	
-	private static Iterator<File> directoriesIn(File[] files) {
-		return new FilteringIterator<File>(new ArrayIterator<File>(files)) {
-			@Override
-			protected boolean accept(File next) {
-				return next.isDirectory();
-			}
-		};
-	}
-	
-	/**
-	 * Return an iterator on all the files under the specified
-	 * directory, recursing into subdirectories.
-	 * The iterator will skip over the subdirectories themselves.
-	 * File#filesRecurse()
-	 */
-	public static Iterator<File> filesInTree(String directoryName) {
-		return filesInTree(new File(directoryName));
-	}
-	
-	/**
-	 * Return an iterator on all the files under the specified
-	 * directory, recursing into subdirectories.
-	 * The iterator will skip over the subdirectories themselves.
-	 * File#filesRecurse()
-	 */
-	public static Iterator<File> filesInTree(File directory) {
-		return filesInTreeAsSet(directory).iterator();
-	}
-
-	private static Set<File> filesInTreeAsSet(File directory) {
-		Set<File> files = new HashSet<File>(10000);
-		addFilesInTreeTo(directory, files);
-		return files;
-	}
-
-	private static void addFilesInTreeTo(File directory, Collection<File> allFiles) {
-		for (File file : directory.listFiles()) {
-			if (file.isFile()) {
-				allFiles.add(file);
-			} else if (file.isDirectory()) {
-				addFilesInTreeTo(file, allFiles);
-			}
-		}
-	}
-
-	/**
-	 * Return an iterator on all the directories under the specified
-	 * directory, recursing into subdirectories.
-	 * File#subDirectoriesRecurse()
-	 */
-	public static Iterator<File> directoriesInTree(String directoryName) {
-		return directoriesInTree(new File(directoryName));
-	}
-	
-	/**
-	 * Return an iterator on all the directories under the specified
-	 * directory, recursing into subdirectories.
-	 * File#subDirectoriesRecurse()
-	 */
-	@SuppressWarnings("unchecked")
-	public static Iterator<File> directoriesInTree(File directory) {
-		File[] files = directory.listFiles();
-		return new CompositeIterator<File>(directoriesIn(files), directoriesInTrees(directoriesIn(files)));
-	}
-	
-	private static Iterator<File> directoriesInTrees(Iterator<File> directories) {
-		return new CompositeIterator<File>(
-			new TransformationIterator<File, Iterator<File>>(directories) {
-				@Override
-				protected Iterator<File> transform(File next) {
-					return FileTools.directoriesInTree(next);
-				}
-			}
-		);
-	}
-	
-
-	// ********** short file name manipulation **********
-
-	/**
-	 * Strip the extension from the specified file name
-	 * and return the result. If the file name has no
-	 * extension, it is returned unchanged
-	 * File#basePath()
-	 */
-	public static String stripExtension(String fileName) {
-		int index = fileName.lastIndexOf('.');
-		if (index == -1) {
-			return fileName;
-		}
-		return fileName.substring(0, index);
-	}
-	
-	/**
-	 * Strip the extension from the specified file's name
-	 * and return the result. If the file's name has no
-	 * extension, it is returned unchanged
-	 * File#basePath()
-	 */
-	public static String stripExtension(File file) {
-		return stripExtension(file.getPath());
-	}
-
-	/**
-	 * Return the extension, including the dot, of the specified file name.
-	 * If the file name has no extension, return an empty string.
-	 * File#extension()
-	 */
-	public static String extension(String fileName) {
-		int index = fileName.lastIndexOf('.');
-		if (index == -1) {
-			return ""; //$NON-NLS-1$
-		}
-		return fileName.substring(index);
-	}
-	
-	/**
-	 * Return the extension, including the dot, of the specified file's name.
-	 * If the file's name has no extension, return an empty string.
-	 * File#extension()
-	 */
-	public static String extension(File file) {
-		return extension(file.getPath());
-	}
-
-
-	// ********** temporary directories **********
-
-	/**
-	 * Build and return an empty temporary directory with the specified
-	 * name. If the directory already exists, it will be cleared out.
-	 * This directory will be a subdirectory of the Java temporary directory,
-	 * as indicated by the System property "java.io.tmpdir".
-	 */
-	public static File emptyTemporaryDirectory(String name) {
-		File dir = new File(userTemporaryDirectory(), name);
-		if (dir.exists()) {
-			deleteDirectoryContents(dir);
-		} else {
-			mkdirs(dir);
-		}
-		return dir;
-	}
-
-	private static void mkdirs(File dir) {
-		if ( ! dir.mkdirs()) {
-			throw new RuntimeException("mkdirs() failed: " + dir); //$NON-NLS-1$
-		}
-	}
-	
-	/**
-	 * Build and return an empty temporary directory with a
-	 * name of "tmpdir". If the directory already exists, it will be cleared out.
-	 * This directory will be a subdirectory of the Java temporary directory,
-	 * as indicated by the System property "java.io.tmpdir".
-	 */
-	public static File emptyTemporaryDirectory() {
-		return emptyTemporaryDirectory(DEFAULT_TEMPORARY_DIRECTORY_NAME);
-	}
-	
-	/**
-	 * Build and return a temporary directory with the specified
-	 * name. If the directory already exists, it will be left unchanged;
-	 * if it does not already exist, it will be created.
-	 * This directory will be a subdirectory of the Java temporary directory,
-	 * as indicated by the System property "java.io.tmpdir".
-	 */
-	public static File temporaryDirectory(String name) {
-		File dir = new File(userTemporaryDirectory(), name);
-		if ( ! dir.exists()) {
-			mkdirs(dir);
-		}
-		return dir;
-	}
-	
-	/**
-	 * Build and return a temporary directory with a name of
-	 * "tmpdir". If the directory already exists, it will be left unchanged;
-	 * if it does not already exist, it will be created.
-	 * This directory will be a subdirectory of the Java temporary directory,
-	 * as indicated by the System property "java.io.tmpdir".
-	 */
-	public static File temporaryDirectory() {
-		return temporaryDirectory(DEFAULT_TEMPORARY_DIRECTORY_NAME);
-	}
-	
-	/**
-	 * Build and return a *new* temporary directory with the specified
-	 * prefix. The prefix will be appended with a number that
-	 * is incremented, starting with 1, until a non-pre-existing directory
-	 * is found and successfully created. This directory will be a
-	 * subdirectory of the Java temporary directory, as indicated by
-	 * the System property "java.io.tmpdir".
-	 */
-	public static File newTemporaryDirectory(String prefix) {
-		if ( ! prefix.endsWith(".")) { //$NON-NLS-1$
-			prefix = prefix + '.';
-		}
-		File dir;
-		int i = 0;
-		do {
-			i++;
-			dir = new File(userTemporaryDirectory(), prefix + i);
-		} while ( ! dir.mkdirs());
-		return dir;
-	}
-	
-	/**
-	 * Build and return a *new* temporary directory with a
-	 * prefix of "tmpdir". This prefix will be appended with a number that
-	 * is incremented, starting with 1, until a non-pre-existing directory
-	 * is found and successfully created. This directory will be a
-	 * subdirectory of the Java temporary directory, as indicated by
-	 * the System property "java.io.tmpdir".
-	 */
-	public static File newTemporaryDirectory() {
-		return newTemporaryDirectory(DEFAULT_TEMPORARY_DIRECTORY_NAME);
-	}
-	
-
-	// ********** resource files **********
-
-	/**
-	 * Build and return a file for the specified resource.
-	 * The resource name must be fully-qualified, i.e. it cannot be relative
-	 * to the package name/directory.
-	 * NB: There is a bug in jdk1.4.x the prevents us from getting
-	 * a resource that has spaces (or other special characters) in
-	 * its name.... (see Sun's Java bug 4466485)
-	 */
-	public static File resourceFile(String resourceName) throws URISyntaxException {
-		if ( ! resourceName.startsWith("/")) { //$NON-NLS-1$
-			throw new IllegalArgumentException(resourceName);
-		}
-		return resourceFile(resourceName, FileTools.class);
-	}
-	
-	/**
-	 * Build and return a file for the specified resource.
-	 * NB: There is a bug in jdk1.4.x the prevents us from getting
-	 * a resource that has spaces (or other special characters) in
-	 * its name.... (see Sun's Java bug 4466485)
-	 */
-	public static File resourceFile(String resourceName, Class<?> javaClass) throws URISyntaxException {
-		URL url = javaClass.getResource(resourceName);
-		return buildFile(url);
-	}
-	
-	/**
-	 * Build and return a file for the specified URL.
-	 * NB: There is a bug in jdk1.4.x the prevents us from getting
-	 * a resource that has spaces (or other special characters) in
-	 * its name.... (see Sun's Java bug 4466485)
-	 */
-	public static File buildFile(URL url) throws URISyntaxException {
-		return buildFile(url.getFile());
-	}
-	
-	/**
-	 * Build and return a file for the specified file name.
-	 * NB: There is a bug in jdk1.4.x the prevents us from getting
-	 * a resource that has spaces (or other special characters) in
-	 * its name.... (see Sun's Java bug 4466485)
-	 */
-	public static File buildFile(String fileName) throws URISyntaxException {
-		URI uri = new URI(fileName);
-		File file = new File(uri.getPath());
-		return file;
-	}
-	
-
-	// ********** "canonical" files **********
-
-	/**
-	 * Convert the specified file into a "canonical" file.
-	 */
-	public static File canonicalFile(File file) {
-		try {
-			return file.getCanonicalFile();
-		} catch (IOException ioexception) {
-			// settle for the absolute file
-			return file.getAbsoluteFile();
-		}
-	}
-	
-	/**
-	 * Build an iterator that will convert the specified files
-	 * into "canonical" files.
-	 */
-	public static Iterator<File> canonicalFiles(Iterator<File> files) {
-		return new TransformationIterator<File, File>(files) {
-			@Override
-			protected File transform(File next) {
-				return canonicalFile(next);
-			}
-		};
-	}
-	
-	/**
-	 * Build an iterator that will convert the specified files
-	 * into "canonical" files.
-	 */
-	public static Iterator<File> canonicalFiles(Collection<File> files) {
-		return canonicalFiles(files.iterator());
-	}
-	
-	/**
-	 * Convert the specified file name into a "canonical" file name.
-	 */
-	public static String canonicalFileName(String fileName) {
-		return canonicalFile(new File(fileName)).getAbsolutePath();
-	}
-	
-	/**
-	 * Build an iterator that will convert the specified file names
-	 * into "canonical" file names.
-	 */
-	public static Iterator<String> canonicalFileNames(Iterator<String> fileNames) {
-		return new TransformationIterator<String, String>(fileNames) {
-			@Override
-			protected String transform(String next) {
-				return canonicalFileName(next);
-			}
-		};
-	}
-	
-	/**
-	 * Build an iterator that will convert the specified file names
-	 * into "canonical" file names.
-	 */
-	public static Iterator<String> canonicalFileNames(Collection<String> fileNames) {
-		return canonicalFileNames(fileNames.iterator());
-	}
-	
-
-	// ********** file name validation **********
-
-	/**
-	 * Return whether the specified file name is invalid.
-	 */
-	public static boolean fileNameIsInvalid(String filename) {
-		return ! fileNameIsValid(filename);
-	}
-
-	/**
-	 * Return whether the specified file name is valid.
-	 */
-	public static boolean fileNameIsValid(String filename) {
-		int len = filename.length();
-		for (int i = 0; i < len; i++) {
-			char filenameChar = filename.charAt(i);
-			if (ArrayTools.contains(INVALID_FILENAME_CHARACTERS, filenameChar)) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Convert the illegal characters in the specified file name to
-	 * the specified character and return the result.
-	 */
-	public static String convertToValidFileName(String filename, char replacementChar) {
-		int len = filename.length();
-		StringBuilder sb = new StringBuilder(len);
-		for (int i = 0; i < len; i++) {
-			char filenameChar = filename.charAt(i);
-			if (ArrayTools.contains(INVALID_FILENAME_CHARACTERS, filenameChar)) {
-				sb.append(replacementChar);
-			} else {
-				sb.append(filenameChar);
-			}
-		}
-		return sb.toString();
-	}
-
-	/**
-	 * Convert the illegal characters in the specified file name to
-	 * periods ('.') and return the result.
-	 */
-	public static String convertToValidFileName(String filename) {
-		return convertToValidFileName(filename, '.');
-	}
-
-	/**
-	 * Return whether the specified file name is "reserved"
-	 * (i.e. it cannot be used for "user" files). Windows reserves
-	 * a number of file names (e.g. CON, AUX, PRN).
-	 */
-	public static boolean fileNameIsReserved(String fileName) {
-		// Unix/Linux does not have any "reserved" file names (I think...)
-		return Tools.osIsWindows() && ArrayTools.contains(WINDOWS_RESERVED_FILE_NAMES, fileName.toLowerCase());
-	}
-
-	/**
-	 * Return whether the specified file contains any "reserved"
-	 * components.
-	 * Windows reserves a number of file names (e.g. CON, AUX, PRN);
-	 * and these file names cannot be used for either the names of
-	 * files or directories.
-	 */
-	public static boolean fileHasAnyReservedComponents(File file) {
-		File temp = file;
-		while (temp != null) {
-			if (fileNameIsReserved(temp.getName())) {
-				return true;
-			}
-			temp = temp.getParentFile();
-		}
-		return false;
-	}
-
-
-	// ********** shortened file names **********
-
-	/**
-	 * Return a shorter version of the absolute file name for the specified file.
-	 * The shorter version will not be longer than the maximum length.
-	 * The first directory (usually the drive letter) and the file name or the
-	 * last directory will always be added to the generated string regardless of
-	 * the maximum length allowed.
-	 */
-	public static String shortenFileName(URL url) {
-		return shortenFileName(url, MAXIMUM_SHORTENED_FILE_NAME_LENGTH);
-	}
-
-	/**
-	 * Return a shorter version of the absolute file name for the specified file.
-	 * The shorter version will not be longer than the maximum length.
-	 * The first directory (usually the drive letter) and the file name or the
-	 * last directory will always be added to the generated string regardless of
-	 * the maximum length allowed.
-	 */
-	public static String shortenFileName(URL url, int maxLength) {
-		File file;
-		try {
-			file = buildFile(url);
-		} catch (URISyntaxException e) {
-			file = new File(url.getFile());
-		}
-		return shortenFileName(file, maxLength);
-	}
-
-	/**
-	 * Return a shorter version of the absolute file name for the specified file.
-	 * The shorter version will not be longer than the maximum length.
-	 * The first directory (usually the drive letter) and the file name or the
-	 * last directory will always be added to the generated string regardless of
-	 * the maximum length allowed.
-	 */
-	public static String shortenFileName(File file) {
-		return shortenFileName(file, MAXIMUM_SHORTENED_FILE_NAME_LENGTH);
-	}
-
-	/**
-	 * Return a shorter version of the absolute file name for the specified file.
-	 * The shorter version will not be longer than the maximum length.
-	 * The first directory (usually the drive letter) and the file name or the
-	 * last directory will always be added to the generated string regardless of
-	 * the maximum length allowed.
-	 */
-	public static String shortenFileName(File file, int maxLength) {
-		String absoluteFileName = canonicalFile(file).getAbsolutePath();
-		if (absoluteFileName.length() <= maxLength) {
-			// no need to shorten
-			return absoluteFileName;
-		}
-
-		// break down the path into its components
-		String fs = File.separator;
-		String[] paths = absoluteFileName.split('\\' + fs);
-
-		if (paths.length <= 1) {
-			// e.g. "C:\"
-			return paths[0];
-		}
-
-		if (paths.length == 2) {
-			// e.g. "C:\MyReallyLongFileName.ext" or "C:\MyReallyLongDirectoryName"
-			// return the complete file name since this is a minimum requirement,
-			// regardless of the maximum length allowed
-			return absoluteFileName;
-		}
-
-		StringBuilder sb = new StringBuilder();
-		sb.append(paths[0]);		// always add the first directory, which is usually the drive letter
-
-		// Keep the index of insertion into the string buffer
-		int insertIndex = sb.length();
-
-		sb.append(fs);
-		sb.append(paths[paths.length - 1]);		// append the file name or the last directory
-
-		maxLength -= 4;                      // -4 for "/..."
-
-		int currentLength = sb.length() - 4; // -4 for "/..."
-		int leftIndex = 1;                   //  1 to skip the root directory
-		int rightIndex = paths.length - 2;   // -1 for the file name or the last directory
-
-		boolean canAddFromLeft = true;
-		boolean canAddFromRight = true;
-
-		// Add each directory, the insertion is going in both direction: left and
-		// right, once a side can't be added, the other side is still continuing
-		// until both can't add anymore
-		while (true) {
-			if (!canAddFromLeft && !canAddFromRight)
-				break;
-
-			if (canAddFromRight) {
-				String rightDirectory = paths[rightIndex];
-				int rightLength = rightDirectory.length();
-
-				// Add the directory on the right side of the loop
-				if (currentLength + rightLength + 1 <= maxLength) {
-					sb.insert(insertIndex,     fs);
-					sb.insert(insertIndex + 1, rightDirectory);
-
-					currentLength += rightLength + 1;
-					rightIndex--;
-
-					// The right side is now overlapping the left side, that means
-					// we can't add from the right side anymore
-					if (leftIndex >= rightIndex) {
-						canAddFromRight = false;
-					}
-				} else {
-					canAddFromRight = false;
-				}
-			}
-
-			if (canAddFromLeft) {
-				String leftDirectory = paths[leftIndex];
-				int leftLength = leftDirectory.length();
-
-				// Add the directory on the left side of the loop
-				if (currentLength + leftLength + 1 <= maxLength) {
-					sb.insert(insertIndex,     fs);
-					sb.insert(insertIndex + 1, leftDirectory);
-
-					insertIndex += leftLength + 1;
-					currentLength += leftLength + 1;
-					leftIndex++;
-
-					// The left side is now overlapping the right side, that means
-					// we can't add from the left side anymore
-					if (leftIndex >= rightIndex) {
-						canAddFromLeft = false;
-					}
-				} else {
-					canAddFromLeft = false;
-				}
-			}
-		}
-
-		if (leftIndex <= rightIndex) {
-			sb.insert(insertIndex, fs);
-			sb.insert(insertIndex + 1, "..."); //$NON-NLS-1$
-		}
-
-		return sb.toString();
-	}
-
-
-	// ********** system properties **********
-
-	/**
-	 * Return a file representing the user's home directory.
-	 */
-	public static File userHomeDirectory() {
-		return new File(USER_HOME_DIRECTORY_NAME);
-	}
-	
-	/**
-	 * Return a file representing the user's temporary directory.
-	 */
-	public static File userTemporaryDirectory() {
-		return new File(USER_TEMPORARY_DIRECTORY_NAME);
-	}
-	
-	/**
-	 * Return a file representing the current working directory.
-	 */
-	public static File currentWorkingDirectory() {
-		return new File(CURRENT_WORKING_DIRECTORY_NAME);
-	}
-	
-
-	// ********** miscellaneous **********
-
-	/**
-	 * Return only the files that fit the filter.
-	 * File#files(FileFilter fileFilter)
-	 */
-	public static Iterator<File> filter(Iterator<File> files, final FileFilter fileFilter) {
-		return new FilteringIterator<File>(files) {
-			@Override
-			protected boolean accept(File next) {
-				return fileFilter.accept(next);
-			}
-		};
-	}
-
-	/**
-	 * Return a file that is a re-specification of the specified
-	 * file, relative to the specified directory.
-	 *     Linux/Unix/Mac:
-	 *         convertToRelativeFile(/foo/bar/baz.java, /foo)
-	 *             => bar/baz.java
-	 *     Windows:
-	 *         convertToRelativeFile(C:\foo\bar\baz.java, C:\foo)
-	 *             => bar/baz.java
-	 * The file can be either a file or a directory; the directory
-	 * *should* be a directory.
-	 * If the file is already relative or it cannot be made relative
-	 * to the directory, it will be returned unchanged.
-	 * 
-	 * NB: This method has been tested on Windows and Linux,
-	 * but not Mac (but the Mac is Unix-based these days, so
-	 * it shouldn't be a problem...).
-	 */
-	public static File convertToRelativeFile(final File file, final File dir) {
-		// check whether the file is already relative
-		if ( ! file.isAbsolute()) {
-			return file;		// return unchanged
-		}
-
-		File cFile = canonicalFile(file);
-		File cDir = canonicalFile(dir);
-
-		// the two are the same directory
-		if (cFile.equals(cDir)) {
-			return new File("."); //$NON-NLS-1$
-		}
-
-		File[] filePathFiles = pathFiles(cFile);
-		File[] dirPathFiles = pathFiles(cDir);
-
-		// Windows only (?): the roots are different - e.g. D:\ vs. C:\
-		if ( ! dirPathFiles[0].equals(filePathFiles[0])) {
-			return file;		// return unchanged
-		}
-
-		// at this point we know the root is the same, now find how much is in common
-		int i = 0;		// this will point at the first miscompare
-		while ((i < dirPathFiles.length) && (i < filePathFiles.length)) {
-			if (dirPathFiles[i].equals(filePathFiles[i])) {
-				i++;
-			} else {
-				break;
-			}
-		}
-		// save our current position
-		int firstMismatch = i;
-
-		// check whether the file is ABOVE the directory: ../..
-		if (firstMismatch == filePathFiles.length) {
-			return relativeParentFile(dirPathFiles.length - firstMismatch);
-		}
-
-		// build a new file from the path beyond the matching portions
-		File diff = new File(filePathFiles[i].getName());
-		while (++i < filePathFiles.length) {
-			diff = new File(diff, filePathFiles[i].getName());
-		}
-
-		// check whether the file is BELOW the directory: subdir1/subdir2/file.ext
-		if (firstMismatch == dirPathFiles.length) {
-			return diff;
-		}
-
-		// the file must be a PEER of the directory: ../../subdir1/subdir2/file.ext
-		return new File(relativeParentFile(dirPathFiles.length - firstMismatch), diff.getPath());
-	}
-
-	/**
-	 * Return a file that is a re-specification of the specified
-	 * file, relative to the current working directory.
-	 *     Linux/Unix/Mac (CWD = /foo):
-	 *         convertToRelativeFile(/foo/bar/baz.java)
-	 *             => bar/baz.java
-	 *     Windows (CWD = C:\foo):
-	 *         convertToRelativeFile(C:\foo\bar\baz.java)
-	 *             => bar/baz.java
-	 * The file can be either a file or a directory.
-	 * If the file is already relative or it cannot be made relative
-	 * to the directory, it will be returned unchanged.
-	 * 
-	 * NB: This method has been tested on Windows and Linux,
-	 * but not Mac (but the Mac is Unix-based these days, so
-	 * it shouldn't be a problem...).
-	 */
-	public static File convertToRelativeFile(final File file) {
-		return convertToRelativeFile(file, currentWorkingDirectory());
-	}
-
-	/**
-	 * Return an array of files representing the path to the specified
-	 * file. For example:
-	 *     C:/foo/bar/baz.txt =>
-	 *     { C:/, C:/foo, C:/foo/bar, C:/foo/bar/baz.txt }
-	 */
-	private static File[] pathFiles(File file) {
-		List<File> path = new ArrayList<File>();
-		for (File f = file; f != null; f = f.getParentFile()) {
-			path.add(f);
-		}
-		Collections.reverse(path);
-		return path.toArray(new File[path.size()]);
-	}
-
-	/**
-	 * Return a file with the specified (non-zero) number of relative
-	 * file names, e.g. xxx(3) => ../../..
-	 */
-	private static File relativeParentFile(int len) {
-		if (len <= 0) {
-			throw new IllegalArgumentException("length must be greater than zero: " + len); //$NON-NLS-1$
-		}
-		File result = new File(".."); //$NON-NLS-1$
-		for (int i = len - 1; i-- > 0; ) {
-			result = new File(result, ".."); //$NON-NLS-1$
-		}
-		return result;
-	}
-
-	/**
-	 * Return a file that is a re-specification of the specified
-	 * file, absolute to the specified directory.
-	 *     Linux/Unix/Mac:
-	 *         convertToAbsoluteFile(bar/baz.java, /foo)
-	 *             => /foo/bar/baz.java
-	 *     Windows:
-	 *         convertToAbsoluteFile(bar/baz.java, C:\foo)
-	 *             => C:\foo\bar\baz.java
-	 * The file can be either a file or a directory; the directory
-	 * *should* be a directory.
-	 * If the file is already absolute, it will be returned unchanged.
-	 * 
-	 * NB: This method has been tested on Windows and Linux,
-	 * but not Mac (but the Mac is Unix-based these days, so
-	 * it shouldn't be a problem...).
-	 */
-	public static File convertToAbsoluteFile(final File file, final File dir) {
-		// check whether the file is already absolute
-		if (file.isAbsolute()) {
-			return file;		// return unchanged
-		}
-		return canonicalFile(new File(dir, file.getPath()));
-	}
-
-	/**
-	 * Return a file that is a re-specification of the specified
-	 * file, absolute to the current working directory.
-	 *     Linux/Unix/Mac (CWD = /foo):
-	 *         convertToAbsoluteFile(bar/baz.java)
-	 *             => /foo/bar/baz.java
-	 *     Windows (CWD = C:\foo):
-	 *         convertToAbsoluteFile(bar/baz.java)
-	 *             => C:\foo\bar\baz.java
-	 * The file can be either a file or a directory.
-	 * If the file is already absolute, it will be returned unchanged.
-	 * 
-	 * NB: This method has been tested on Windows and Linux,
-	 * but not Mac (but the Mac is Unix-based these days, so
-	 * it shouldn't be a problem...).
-	 */
-	public static File convertToAbsoluteFile(final File file) {
-		return convertToAbsoluteFile(file, currentWorkingDirectory());
-	}
-
-
-	// ********** constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private FileTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/HashBag.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/HashBag.java
deleted file mode 100644
index 7be6149..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/HashBag.java
+++ /dev/null
@@ -1,877 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.AbstractCollection;
-import java.util.Collection;
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * This class implements the {@link Bag} interface, backed by a
- * hash table. It makes no guarantees as to the iteration order of
- * the bag's elements; in particular, it does not guarantee the order
- * will remain constant over time. This class permits the <code>null</code>
- * element.
- * <p>
- * This class offers constant time performance for the basic operations
- * (<code>add</code>, <code>remove</code>, <code>contains</code> and
- * <code>size</code>), assuming the hash function disperses the elements
- * properly among the buckets. Iterating over this bag requires time
- * proportional to the sum of the bag's size (the number of elements) plus the
- * "capacity" of the backing hash table (the number of buckets). Thus, it is
- * important not to set the initial capacity too high (or the load factor too
- * low) if iteration performance is important.
- * <p>
- * <strong>Note that this implementation is not synchronized.</strong> If multiple
- * threads access a bag concurrently, and at least one of the threads modifies
- * the bag, it <em>must</em> be synchronized externally. This is typically
- * accomplished by synchronizing on some object that naturally encapsulates
- * the bag. If no such object exists, the bag should be "wrapped" using the
- * <code>Collections.synchronizedCollection</code> method. This is
- * best done at creation time, to prevent accidental unsynchronized access
- * to the bag:
- * <pre>
- * Collection c = Collections.synchronizedCollection(new HashBag(...));
- * </pre>
- * <p>
- * The iterators returned by this class's <code>iterator</code> method are
- * <em>fail-fast</em>: if the bag is modified at any time after the iterator is
- * created, in any way except through the iterator's own <code>remove</code>
- * method, the iterator throws a {@link ConcurrentModificationException}.
- * Thus, in the face of concurrent modification, the iterator fails quickly
- * and cleanly, rather than risking arbitrary, non-deterministic behavior at
- * an undetermined time in the future.
- * <p>
- * Note that the fail-fast behavior of an iterator cannot be guaranteed
- * as it is, generally speaking, impossible to make any hard guarantees in the
- * presence of unsynchronized concurrent modification. Fail-fast iterators
- * throw <code>ConcurrentModificationException</code> on a best-effort basis.
- * Therefore, it would be wrong to write a program that depended on this
- * exception for its correctness: <em>the fail-fast behavior of iterators
- * should be used only to detect bugs.</em>
- * 
- * @param <E> the type of elements maintained by the bag
- * 
- * @see Collection
- * @see Bag
- * @see SynchronizedBag
- * @see	Collections#synchronizedCollection(Collection)
- * @see IdentityHashBag
- */
-public class HashBag<E>
-	extends AbstractCollection<E>
-	implements Bag<E>, Cloneable, Serializable
-{
-	/** The hash table. Resized as necessary. Length MUST Always be a power of two. */
-	transient Entry<E>[] table;
-
-	/** The total number of entries in the bag. */
-	transient int size = 0;
-
-	/** The number of UNIQUE entries in the bag. */
-	transient int uniqueCount = 0;
-
-	/**
-	 * The hash table is rehashed when its size exceeds this threshold. (The
-	 * value of this field is <code>(int) (capacity * loadFactor)</code>.)
-	 *
-	 * @serial
-	 */
-	private int threshold;
-
-	/**
-	 * The load factor for the hash table.
-	 *
-	 * @serial
-	 */
-	private final float loadFactor;
-
-	/**
-	 * The number of times this bag has been structurally modified.
-	 * Structural modifications are those that change the number of entries in
-	 * the bag or otherwise modify its internal structure (e.g. rehash).
-	 * This field is used to make iterators on this bag fail-fast.
-	 *
-	 * @see java.util.ConcurrentModificationException
-	 */
-	transient int modCount = 0;
-
-	/**
-	 * The default initial capacity - MUST be a power of two.
-	 */
-	private static final int DEFAULT_INITIAL_CAPACITY = 16;
-
-	/**
-	 * The maximum capacity, used if a higher value is implicitly specified
-	 * by either of the constructors with arguments.
-	 * MUST be a power of two <= (1 << 30).
-	 */
-	private static final int MAXIMUM_CAPACITY = 1 << 30;
-
-	/**
-	 * The load factor used when none specified in constructor.
-	 */
-	private static final float DEFAULT_LOAD_FACTOR = 0.75f;
-
-	/**
-	 * Construct a new, empty bag with the
-	 * default capacity, which is 16, and load factor, which is 0.75.
-	 */
-	public HashBag() {
-		this(DEFAULT_INITIAL_CAPACITY);
-	}
-
-	/**
-	 * Construct a new, empty bag with the specified initial capacity
-	 * and the default load factor, which is 0.75.
-	 *
-	 * @param initialCapacity the initial capacity
-	 * @throws IllegalArgumentException if the initial capacity is less
-	 *     than zero
-	 */
-	public HashBag(int initialCapacity) {
-		this(initialCapacity, DEFAULT_LOAD_FACTOR, false);  // false = do not validate parms
-	}
-
-	/**
-	 * Construct a new, empty bag with
-	 * the specified initial capacity and load factor.
-	 *
-	 * @param initialCapacity the initial capacity
-	 * @param loadFactor the load factor
-	 * @throws IllegalArgumentException if the initial capacity is less
-	 *     than zero or if the load factor is non-positive
-	 */
-	public HashBag(int initialCapacity, float loadFactor) {
-		this(initialCapacity, loadFactor, true);  // true = validate parms
-	}
-
-	private HashBag(int initialCapacity, float loadFactor, boolean validateParms) {
-		super();
-		int capacity = initialCapacity;
-		if (validateParms) {
-			if (capacity < 0) {
-				throw new IllegalArgumentException("Illegal Initial Capacity: " + capacity); //$NON-NLS-1$
-			}
-			if (capacity > MAXIMUM_CAPACITY) {
-				capacity = MAXIMUM_CAPACITY;
-			}
-			if (loadFactor <= 0 || Float.isNaN(loadFactor)) {
-				throw new IllegalArgumentException("Illegal Load factor: " + loadFactor); //$NON-NLS-1$
-			}
-	
-			// find a power of 2 >= 'initialCapacity'
-			capacity = 1;
-			while (capacity < initialCapacity) {
-				capacity <<= 1;
-			}
-		}
-
-		this.loadFactor = loadFactor;
-		this.table = this.buildTable(capacity);
-		this.threshold = (int) (capacity * loadFactor);
-	}
-
-	/**
-	 * Construct a new bag containing the elements in the specified
-	 * collection. The bag's load factor will be the default, which is 0.75,
-	 * and its initial capacity will be sufficient to hold all the elements in
-	 * the specified collection.
-	 * 
-	 * @param c the collection whose elements are to be placed into this bag.
-	 */
-	public HashBag(Collection<? extends E> c) {
-		this(Math.max((int) (c.size() / DEFAULT_LOAD_FACTOR) + 1, DEFAULT_INITIAL_CAPACITY), DEFAULT_LOAD_FACTOR);
-		this.addAll_(c);
-	}
-
-	/**
-	 * Return a hash for the specified object.
-	 */
-	private int hash(Object o) {
-		return (o == null) ? 0 : this.tweakHash(o.hashCode());
-	}
-
-	/**
-	 * Tweak the specified hash, to defend against poor implementations
-	 * of {@link Object#hashCode()}.
-	 */
-	private int tweakHash(int h) {
-		h ^= (h >>> 20) ^ (h >>> 12);
-		return h ^ (h >>> 7) ^ (h >>> 4);
-	}
-
-	/**
-	 * Return the index for the specified hash.
-	 */
-	private int index(int hash) {
-		return this.index(hash, this.table.length);
-	}
-
-	/**
-	 * Return the index for the specified hash
-	 * within a table with the specified length.
-	 */
-	int index(int hash, int length) {
-		return hash & (length - 1);
-	}
-
-	/**
-	 * Internal {@link #addAll(Collection)} for construction and cloning.
-	 * (No check for re-hash; no change to mod count; no return value.)
-	 */
-	private void addAll_(Iterable<? extends E> c) {
-		for (E e : c) {
-			this.add_(e);
-		}
-	}
-
-	/**
-	 * Internal {@link #add(Object)} for construction and cloning.
-	 * (No check for re-hash; no change to mod count; no return value.)
-	 */
-	private void add_(E o) {
-		this.add_(o, 1);
-	}
-
-	/**
-	 * Internal {@link #add(Object, int)} for construction, cloning, and serialization.
-	 * (No check for re-hash; no change to mod count; no return value.)
-	 */
-	private void add_(E o, int cnt) {
-		int hash = this.hash(o);
-		int index = this.index(hash);
-		for (Entry<E> e = this.table[index]; e != null; e = e.next) {
-			Object eo;
-			if ((e.hash == hash) && (((eo = e.object) == o) || ((o != null) && o.equals(eo)))) {
-				e.count += cnt;
-				this.size += cnt;
-				return;
-			}
-		}
-
-		// create the new entry and put it in the table
-		Entry<E> e = this.buildEntry(hash, o, cnt, this.table[index]);
-		this.table[index] = e;
-		this.size += cnt;
-		this.uniqueCount++;
-	}
-
-	/**
-	 * This implementation simply returns the maintained size.
-	 */
-	@Override
-	public int size() {
-		return this.size;
-	}
-
-	/**
-	 * This implementation simply compares the maintained size to zero.
-	 */
-	@Override
-	public boolean isEmpty() {
-		return this.size == 0;
-	}
-
-	/**
-	 * Search for the object's entry in the hash table by calculating
-	 * the object's hash code and examining the entries in the corresponding hash
-	 * table bucket.
-	 */
-	private Entry<E> getEntry(Object o) {
-		int hash = this.hash(o);
-		for (Entry<E> e = this.table[this.index(hash)]; e != null; e = e.next) {
-			Object eo;
-			if ((e.hash == hash) && (((eo = e.object) == o) || ((o != null) && o.equals(eo)))) {
-				return e;
-			}
-		}
-		return null;
-	}
-
-	@Override
-	public boolean contains(Object o) {
-		return this.getEntry(o) != null;
-	}
-
-	public int count(Object o) {
-		Entry<E> e = this.getEntry(o);
-		return (e == null) ? 0 : e.count;
-	}
-
-	/**
-	 * Rehash the contents of the bag into a new hash table
-	 * with a larger capacity. This method is called when the
-	 * number of different elements in the bag exceeds its
-	 * capacity and load factor.
-	 */
-	private void rehash() {
-		Entry<E>[] oldTable = this.table;
-		int oldCapacity = oldTable.length;
-
-		if (oldCapacity == MAXIMUM_CAPACITY) {
-			this.threshold = Integer.MAX_VALUE;
-			return;
-		}
-
-		int newCapacity = 2 * oldCapacity;
-		Entry<E>[] newTable = this.buildTable(newCapacity);
-
-		for (int i = oldCapacity; i-- > 0; ) {
-			for (Entry<E> old = oldTable[i]; old != null; ) {
-				Entry<E> e = old;
-				old = old.next;
-
-				int index = this.index(e.hash, newCapacity);
-				e.next = newTable[index];
-				newTable[index] = e;
-			}
-		}
-
-		this.table = newTable;
-		this.threshold = (int) (newCapacity * this.loadFactor);
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	private Entry<E>[] buildTable(int capacity) {
-		return new Entry[capacity];
-	}
-
-	/**
-	 * This implementation searches for the object in the hash table by calculating
-	 * the object's hash code and examining the entries in the corresponding hash
-	 * table bucket.
-	 */
-	@Override
-	public boolean add(E o) {
-		return this.add(o, 1);
-	}
-
-	/**
-	 * This implementation searches for the object in the hash table by calculating
-	 * the object's hash code and examining the entries in the corresponding hash
-	 * table bucket.
-	 */
-	public boolean add(E o, int cnt) {
-		if (cnt <= 0) {
-			return false;
-		}
-		this.modCount++;
-		int hash = this.hash(o);
-		int index = this.index(hash);
-
-		// if the object is already in the bag, simply bump its count
-		for (Entry<E> e = this.table[index]; e != null; e = e.next) {
-			Object eo;
-			if ((e.hash == hash) && (((eo = e.object) == o) || ((o != null) && o.equals(eo)))) {
-				e.count += cnt;
-				this.size += cnt;
-				return true;
-			}
-		}
-
-		// rehash the table if we are going to exceed the threshold
-		if (this.uniqueCount >= this.threshold) {
-			this.rehash();
-			index = this.index(hash);  // need to re-calculate the index
-		}
-
-		// create the new entry and put it in the table
-		Entry<E> e = this.buildEntry(hash, o, cnt, this.table[index]);
-		this.table[index] = e;
-		this.size += cnt;
-		this.uniqueCount++;
-		return true;
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings({ "rawtypes", "unchecked" } )
-	private Entry<E> buildEntry(int hash, Object o, int cnt, Entry next) {
-		return new Entry<E>(hash, (E) o, cnt, (Entry<E>) next);
-	}
-
-	/**
-	 * This implementation searches for the object in the hash table by calculating
-	 * the object's hash code and examining the entries in the corresponding hash
-	 * table bucket.
-	 */
-	@Override
-	public boolean remove(Object o) {
-		return this.remove(o, 1);
-	}
-
-	/**
-	 * This implementation searches for the object in the hash table by calculating
-	 * the object's hash code and examining the entries in the corresponding hash
-	 * table bucket.
-	 */
-	public boolean remove(Object o, int cnt) {
-		if (cnt <= 0) {
-			return false;
-		}
-		int hash = this.hash(o);
-		int index = this.index(hash);
-
-		for (Entry<E> e = this.table[index], prev = null; e != null; prev = e, e = e.next) {
-			Object eo;
-			if ((e.hash == hash) && (((eo = e.object) == o) || ((o != null) && o.equals(eo)))) {
-				this.modCount++;
-				cnt = (cnt < e.count) ? cnt : e.count;
-				e.count -= cnt;
-				// if we are removing the last element(s), remove the entry from the table
-				if (e.count == 0) {
-					if (prev == null) {
-						this.table[index] = e.next;
-					} else {
-						prev.next = e.next;
-					}
-					this.uniqueCount--;
-				}
-				this.size -= cnt;
-				return true;
-			}
-		}
-
-		return false;
-	}
-
-	/**
-	 * This implementation simply clears out all of the hash table buckets.
-	 */
-	@Override
-	public void clear() {
-		Entry<E>[] tab = this.table;
-		this.modCount++;
-		for (int i = tab.length; i-- > 0; ) {
-			tab[i] = null;
-		}
-		this.size = 0;
-		this.uniqueCount = 0;
-	}
-
-	/**
-	 * Returns a shallow copy of this bag: the elements
-	 * themselves are not cloned.
-	 *
-	 * @return a shallow copy of this bag.
-	 */
-	@Override
-	public HashBag<E> clone() {
-		try {
-			@SuppressWarnings("unchecked")
-			HashBag<E> clone = (HashBag<E>) super.clone();
-			clone.table = this.buildTable(this.table.length);
-			clone.size = 0;
-			clone.uniqueCount = 0;
-			clone.modCount = 0;
-			clone.addAll_(this);
-			return clone;
-		} catch (CloneNotSupportedException e) {
-			throw new InternalError();
-		}
-	}
-
-
-	/**
-	 * Hash table collision list entry.
-	 */
-	private static class Entry<E> implements Bag.Entry<E> {
-		final int hash;
-		final E object;
-		int count;
-		Entry<E> next;
-
-		Entry(int hash, E object, int count, Entry<E> next) {
-			this.hash = hash;
-			this.object = object;
-			this.count = count;
-			this.next = next;
-		}
-
-		// ***** Bag.Entry implementation
-		public E getElement() {
-			return this.object;
-		}
-
-		public int getCount() {
-			return this.count;
-		}
-
-		public int setCount(int count) {
-			if (count <= 0) {
-				throw new IllegalArgumentException("count must be greater than zero: " + count); //$NON-NLS-1$
-			}
-			int old = this.count;
-			this.count = count;
-			return old;
-		}
-
-		@Override
-		public boolean equals(Object o) {
-			if ( ! (o instanceof Bag.Entry<?>)) {
-				return false;
-			}
-			@SuppressWarnings("rawtypes")
-			Bag.Entry e = (Bag.Entry) o;
-			return (this.count == e.getCount()) &&
-					Tools.valuesAreEqual(this.object, e.getElement());
-		}
-
-		@Override
-		public int hashCode() {
-			E o = this.object;
-			return (o == null) ? 0 : (this.count * o.hashCode());
-		}
-
-		@Override
-		public String toString() {
-			return this.object + "=>" + this.count; //$NON-NLS-1$
-		}
-	}
-
-
-	@Override
-	@SuppressWarnings("unchecked")
-	public Iterator<E> iterator() {
-		return (this.size == 0) ? EMPTY_ITERATOR : new HashIterator();
-	}
-
-	@SuppressWarnings("unchecked")
-	public Iterator<E> uniqueIterator() {
-		return (this.size == 0) ? EMPTY_ITERATOR : new UniqueIterator();
-	}
-
-	public int uniqueCount() {
-		return this.uniqueCount;
-	}
-
-	@SuppressWarnings("unchecked")
-	public Iterator<Bag.Entry<E>> entries() {
-		return (this.size == 0) ? EMPTY_ITERATOR : new EntryIterator();
-	}
-
-
-	/**
-	 * Empty iterator that does just about nothing.
-	 */
-	@SuppressWarnings("rawtypes")
-	private static final Iterator EMPTY_ITERATOR = new EmptyIterator();
-
-	@SuppressWarnings("rawtypes")
-	private static class EmptyIterator implements Iterator {
-
-		EmptyIterator() {
-			super();
-		}
-
-		public boolean hasNext() {
-			return false;
-		}
-
-		public Object next() {
-			throw new NoSuchElementException();
-		}
-
-		public void remove() {
-			throw new IllegalStateException();
-		}
-	}
-
-
-	private class HashIterator implements Iterator<E> {
-		private int index = HashBag.this.table.length;	// start at the end of the table
-		private Entry<E> nextEntry = null;
-		private int nextEntryCount = 0;
-		private Entry<E> lastReturnedEntry = null;
-
-		/**
-		 * The modCount value that the iterator believes that the backing
-		 * bag should have. If this expectation is violated, the iterator
-		 * has detected a concurrent modification.
-		 */
-		private int expectedModCount = HashBag.this.modCount;
-
-		HashIterator() {
-			super();
-		}
-
-		public boolean hasNext() {
-			Entry<E> e = this.nextEntry;
-			int i = this.index;
-			Entry<E>[] tab = HashBag.this.table;
-			// Use locals for faster loop iteration
-			while ((e == null) && (i > 0)) {
-				e = tab[--i];		// move backwards through the table
-			}
-			this.nextEntry = e;
-			this.index = i;
-			return e != null;
-		}
-
-		public E next() {
-			if (HashBag.this.modCount != this.expectedModCount) {
-				throw new ConcurrentModificationException();
-			}
-			Entry<E> et = this.nextEntry;
-			int i = this.index;
-			Entry<E>[] tab = HashBag.this.table;
-			// Use locals for faster loop iteration
-			while ((et == null) && (i > 0)) {
-				et = tab[--i];		// move backwards through the table
-			}
-			this.nextEntry = et;
-			this.index = i;
-			if (et == null) {
-				throw new NoSuchElementException();
-			}
-			Entry<E> e = this.lastReturnedEntry = this.nextEntry;
-			this.nextEntryCount++;
-			if (this.nextEntryCount == e.count) {
-				this.nextEntry = e.next;
-				this.nextEntryCount = 0;
-			}
-			return e.object;
-		}
-
-		public void remove() {
-			if (this.lastReturnedEntry == null) {
-				throw new IllegalStateException();
-			}
-			if (HashBag.this.modCount != this.expectedModCount) {
-				throw new ConcurrentModificationException();
-			}
-			int slot = HashBag.this.index(this.lastReturnedEntry.hash, HashBag.this.table.length);
-			for (Entry<E> e = HashBag.this.table[slot], prev = null; e != null; prev = e, e = e.next) {
-				if (e == this.lastReturnedEntry) {
-					HashBag.this.modCount++;
-					this.expectedModCount++;
-					e.count--;
-					if (e.count == 0) {
-						// if we are removing the last one, remove the entry from the table
-						if (prev == null) {
-							HashBag.this.table[slot] = e.next;
-						} else {
-							prev.next = e.next;
-						}
-						HashBag.this.uniqueCount--;
-					} else {
-						// slide back the count to account for the just-removed element
-						this.nextEntryCount--;
-					}
-					HashBag.this.size--;
-					this.lastReturnedEntry = null;	// it cannot be removed again
-					return;
-				}
-			}
-			throw new ConcurrentModificationException();
-		}
-
-	}
-
-
-	private class EntryIterator implements Iterator<Entry<E>> {
-		private int index = HashBag.this.table.length;	// start at the end of the table
-		private Entry<E> nextEntry = null;
-		private Entry<E> lastReturnedEntry = null;
-
-		/**
-		 * The modCount value that the iterator believes that the backing
-		 * bag should have. If this expectation is violated, the iterator
-		 * has detected a concurrent modification.
-		 */
-		private int expectedModCount = HashBag.this.modCount;
-
-		EntryIterator() {
-			super();
-		}
-
-		public boolean hasNext() {
-			Entry<E> e = this.nextEntry;
-			int i = this.index;
-			Entry<E>[] tab = HashBag.this.table;
-			// Use locals for faster loop iteration
-			while ((e == null) && (i > 0)) {
-				e = tab[--i];		// move backwards through the table
-			}
-			this.nextEntry = e;
-			this.index = i;
-			return e != null;
-		}
-
-		public Entry<E> next() {
-			if (HashBag.this.modCount != this.expectedModCount) {
-				throw new ConcurrentModificationException();
-			}
-			Entry<E> et = this.nextEntry;
-			int i = this.index;
-			Entry<E>[] tab = HashBag.this.table;
-			// Use locals for faster loop iteration
-			while ((et == null) && (i > 0)) {
-				et = tab[--i];		// move backwards through the table
-			}
-			this.nextEntry = et;
-			this.index = i;
-			if (et == null) {
-				throw new NoSuchElementException();
-			}
-			Entry<E> e = this.lastReturnedEntry = this.nextEntry;
-			this.nextEntry = e.next;
-			return e;
-		}
-
-		public void remove() {
-			if (this.lastReturnedEntry == null) {
-				throw new IllegalStateException();
-			}
-			if (HashBag.this.modCount != this.expectedModCount) {
-				throw new ConcurrentModificationException();
-			}
-			int slot = HashBag.this.index(this.lastReturnedEntry.hash, HashBag.this.table.length);
-			for (Entry<E> e = HashBag.this.table[slot], prev = null; e != null; prev = e, e = e.next) {
-				if (e == this.lastReturnedEntry) {
-					HashBag.this.modCount++;
-					this.expectedModCount++;
-					// remove the entry from the table
-					if (prev == null) {
-						HashBag.this.table[slot] = e.next;
-					} else {
-						prev.next = e.next;
-					}
-					HashBag.this.uniqueCount--;
-					HashBag.this.size -= this.lastReturnedEntry.count;
-					this.lastReturnedEntry = null;	// it cannot be removed again
-					return;
-				}
-			}
-			throw new ConcurrentModificationException();
-		}
-
-	}
-
-
-	private class UniqueIterator implements Iterator<E> {
-		private EntryIterator entryIterator = new EntryIterator();
-		
-		UniqueIterator() {
-			super();
-		}
-
-		public boolean hasNext() {
-			return this.entryIterator.hasNext();
-		}
-
-		public E next() {
-			return this.entryIterator.next().object;
-		}
-
-		public void remove() {
-			this.entryIterator.remove();
-		}
-
-	}
-
-
-	@Override
-	public boolean equals(Object o) {
-		if (o == this) {
-			return true;
-		}
-		if ( ! (o instanceof Bag<?>)) {
-			return false;
-		}
-		@SuppressWarnings("unchecked")
-		Bag<E> b = (Bag<E>) o;
-		if (b.size() != this.size()) {
-			return false;
-		}
-		if (b.uniqueCount() != this.uniqueCount()) {
-			return false;
-		}
-		for (Iterator<Bag.Entry<E>> stream = b.entries(); stream.hasNext(); ) {
-			Bag.Entry<E> entry = stream.next();
-			if (entry.getCount() != this.count(entry.getElement())) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	@Override
-	public int hashCode() {
-		int h = 0;
-		for (E o : this) {
-			if (o != null) {
-				h += o.hashCode();
-			}
-		}
-		return h;
-	}
-
-	/**
-	 * Save the state of this bag to a stream (i.e. serialize it).
-	 *
-	 * @serialData Emit the capacity of the bag (int),
-	 *     followed by the number of unique elements in the bag (int),
-	 *     followed by all of the bag's elements (each an Object) and
-	 *     their counts (each an int), in no particular order.
-	 */
-	private void writeObject(java.io.ObjectOutputStream s)
-				throws java.io.IOException {
-		// write out the threshold, load factor, and any hidden stuff
-		s.defaultWriteObject();
-
-		// write out number of buckets
-		s.writeInt(this.table.length);
-
-		// write out number of unique elements
-		s.writeInt(this.uniqueCount);
-
-		// write out elements and counts (alternating)
-		if (this.uniqueCount > 0) {
-			for (Entry<E> entry : this.table) {
-				while (entry != null) {
-					s.writeObject(entry.object);
-					s.writeInt(entry.count);
-					entry = entry.next;
-				}
-			}
-		}
-	}
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Reconstitute the bag from a stream (i.e. deserialize it).
-	 */
-	private void readObject(java.io.ObjectInputStream s)
-				throws java.io.IOException, ClassNotFoundException {
-		// read in the threshold, loadfactor, and any hidden stuff
-		s.defaultReadObject();
-
-		// read in number of buckets and allocate the bucket array
-		this.table = this.buildTable(s.readInt());
-
-		// read in number of unique elements
-		int unique = s.readInt();
-
-		// read the elements and counts, and put the elements in the bag
-		for (int i = 0; i < unique; i++) {
-			@SuppressWarnings("unchecked")
-			E element = (E) s.readObject();
-			int elementCount = s.readInt();
-			this.add_(element, elementCount);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/IdentityHashBag.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/IdentityHashBag.java
deleted file mode 100644
index ca10caa..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/IdentityHashBag.java
+++ /dev/null
@@ -1,924 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.AbstractCollection;
-import java.util.Collection;
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * This class implements the {@link Bag} interface with a
- * hash table, using object-identity in place of object-equality when
- * comparing elements. In other words, in an <code>IdentityHashBag</code>,
- * two objects <code>o1</code> and <code>o2</code> are considered
- * equal if and only if <code>(o1 == o2)</code>. (In normal {@link Bag}
- * implementations (like {@link HashBag}) two objects <code>o1</code>
- * and <code>o2</code> are considered equal if and only if
- * <code>(o1 == null ? o2 == null : o1.equals(o2))</code>.)
- * <p>
- * <strong>
- * This class is <em>not</em> a general-purpose {@link Bag}
- * implementation! While this class implements the {@link Bag} interface, it
- * intentionally violates {@link Bag}'s general contract, which mandates the
- * use of the <code>equals</code> method when comparing objects. This class is
- * designed for use only in the rare cases wherein object-identity
- * semantics are required.
- * </strong>
- * <p>
- * This class makes no guarantees as to the iteration order of
- * the bag's elements; in particular, it does not guarantee that the order
- * will remain constant over time. This class permits the <code>null</code>
- * element.
- * <p>
- * This class offers constant time performance for the basic operations
- * (<code>add</code>, <code>remove</code>, <code>contains</code> and
- * <code>size</code>), assuming the system identity hash function
- * ({@link System#identityHashCode(Object)}) disperses elements properly
- * among the buckets. Iterating over this bag requires time
- * proportional to the sum of the bag's size (the number of elements) plus the
- * "capacity" of the backing hash table (the number of buckets). Thus, it is
- * important not to set the initial capacity too high (or the load factor too
- * low) if iteration performance is important.
- * <p>
- * <strong>Note that this implementation is not synchronized.</strong> If multiple
- * threads access a bag concurrently, and at least one of the threads modifies
- * the bag, it <em>must</em> be synchronized externally. This is typically
- * accomplished by synchronizing on some object that naturally encapsulates
- * the bag. If no such object exists, the bag should be "wrapped" using the
- * <code>Collections.synchronizedCollection</code> method. This is
- * best done at creation time, to prevent accidental unsynchronized access
- * to the bag:
- * <pre>
- * Collection c = Collections.synchronizedCollection(new IdentityHashBag(...));
- * </pre>
- * <p>
- * The iterators returned by this class's <code>iterator</code> method are
- * <em>fail-fast</em>: if the bag is modified at any time after the iterator is
- * created, in any way except through the iterator's own <code>remove</code>
- * method, the iterator throws a {@link ConcurrentModificationException}.
- * Thus, in the face of concurrent modification, the iterator fails quickly
- * and cleanly, rather than risking arbitrary, non-deterministic behavior at
- * an undetermined time in the future.
- * <p>
- * Note that the fail-fast behavior of an iterator cannot be guaranteed
- * as it is, generally speaking, impossible to make any hard guarantees in the
- * presence of unsynchronized concurrent modification. Fail-fast iterators
- * throw <code>ConcurrentModificationException</code> on a best-effort basis.
- * Therefore, it would be wrong to write a program that depended on this
- * exception for its correctness: <em>the fail-fast behavior of iterators
- * should be used only to detect bugs.</em>
- * 
- * @param <E> the type of elements maintained by the bag
- * 
- * @see Collection
- * @see Bag
- * @see SynchronizedBag
- * @see	Collections#synchronizedCollection(Collection)
- * @see HashBag
- */
-public class IdentityHashBag<E>
-	extends AbstractCollection<E>
-	implements Bag<E>, Cloneable, Serializable
-{
-	/** The hash table. Resized as necessary. Length MUST Always be a power of two. */
-	transient Entry<E>[] table;
-
-	/** The total number of entries in the bag. */
-	transient int size = 0;
-
-	/** The number of UNIQUE entries in the bag. */
-	transient int uniqueCount = 0;
-
-	/**
-	 * The hash table is rehashed when its size exceeds this threshold. (The
-	 * value of this field is <code>(int) (capacity * loadFactor)</code>.)
-	 *
-	 * @serial
-	 */
-	private int threshold;
-
-	/**
-	 * The load factor for the hash table.
-	 *
-	 * @serial
-	 */
-	private final float loadFactor;
-
-	/**
-	 * The number of times this bag has been structurally modified.
-	 * Structural modifications are those that change the number of entries in
-	 * the bag or otherwise modify its internal structure (e.g. rehash).
-	 * This field is used to make iterators on this bag fail-fast.
-	 *
-	 * @see java.util.ConcurrentModificationException
-	 */
-	transient int modCount = 0;
-
-	/**
-	 * The default initial capacity - MUST be a power of two.
-	 */
-	private static final int DEFAULT_INITIAL_CAPACITY = 16;
-
-	/**
-	 * The maximum capacity, used if a higher value is implicitly specified
-	 * by either of the constructors with arguments.
-	 * MUST be a power of two <= (1 << 30).
-		 */
-	private static final int MAXIMUM_CAPACITY = 1 << 30;
-
-	/**
-	 * The load factor used when none specified in constructor.
-	 */
-	private static final float DEFAULT_LOAD_FACTOR = 0.75f;
-
-	/**
-	 * Construct a new, empty bag with the
-	 * default capacity, which is 16, and load factor, which is 0.75.
-	 */
-	public IdentityHashBag() {
-		this(DEFAULT_INITIAL_CAPACITY);
-	}
-
-	/**
-	 * Construct a new, empty bag with the specified initial capacity
-	 * and the default load factor, which is 0.75.
-	 *
-	 * @param initialCapacity the initial capacity
-	 * @throws IllegalArgumentException if the initial capacity is less
-	 *     than zero
-	 */
-	public IdentityHashBag(int initialCapacity) {
-		this(initialCapacity, DEFAULT_LOAD_FACTOR, false);  // false = do not validate parms
-	}
-
-	/**
-	 * Construct a new, empty bag with
-	 * the specified initial capacity and load factor.
-	 *
-	 * @param initialCapacity the initial capacity
-	 * @param loadFactor the load factor
-	 * @throws IllegalArgumentException if the initial capacity is less
-	 *     than zero or if the load factor is non-positive
-	 */
-	public IdentityHashBag(int initialCapacity, float loadFactor) {
-		this(initialCapacity, loadFactor, true);  // true = validate parms
-	}
-
-	private IdentityHashBag(int initialCapacity, float loadFactor, boolean validateParms) {
-		super();
-		int capacity = initialCapacity;
-		if (validateParms) {
-			if (capacity < 0) {
-				throw new IllegalArgumentException("Illegal Initial Capacity: " + capacity); //$NON-NLS-1$
-			}
-			if (capacity > MAXIMUM_CAPACITY) {
-				capacity = MAXIMUM_CAPACITY;
-			}
-			if (loadFactor <= 0 || Float.isNaN(loadFactor)) {
-				throw new IllegalArgumentException("Illegal Load factor: " + loadFactor); //$NON-NLS-1$
-			}
-	
-			// find a power of 2 >= 'initialCapacity'
-			capacity = 1;
-			while (capacity < initialCapacity) {
-				capacity <<= 1;
-			}
-		}
-
-		this.loadFactor = loadFactor;
-		this.table = this.buildTable(capacity);
-		this.threshold = (int) (capacity * loadFactor);
-	}
-
-	/**
-	 * Construct a new bag containing the elements in the specified
-	 * collection. The bag's load factor will be the default, which is 0.75,
-	 * and its initial capacity will be sufficient to hold all the elements in
-	 * the specified collection.
-	 * 
-	 * @param c the collection whose elements are to be placed into this bag.
-	 */
-	public IdentityHashBag(Collection<? extends E> c) {
-		this(Math.max((int) (c.size() / DEFAULT_LOAD_FACTOR) + 1, DEFAULT_INITIAL_CAPACITY), DEFAULT_LOAD_FACTOR);
-		this.addAll_(c);
-	}
-
-	/**
-	 * Return a index for the specified object.
-	 */
-	private int index(Object o) {
-		return this.index(this.hash(o));
-	}
-
-	/**
-	 * Return a hash for the specified object.
-	 */
-	private int hash(Object o) {
-		return (o == null) ? 0 : this.tweakHash(System.identityHashCode(o));
-	}
-
-	/**
-	 * Tweak the specified hash.
-	 */
-	private int tweakHash(int h) {
-		return h;
-//		h ^= (h >>> 20) ^ (h >>> 12);
-//		return h ^ (h >>> 7) ^ (h >>> 4);
-	}
-
-	/**
-	 * Return the index for the specified hash.
-	 */
-	private int index(int hash) {
-		return this.index(hash, this.table.length);
-	}
-
-	/**
-	 * Return the index for the specified hash
-	 * within a table with the specified length.
-	 */
-	int index(int hash, int length) {
-		return hash & (length - 1);
-	}
-
-	/**
-	 * Internal {@link #addAll(Collection)} for construction and cloning.
-	 * (No check for re-hash; no change to mod count; no return value.)
-	 */
-	private void addAll_(Iterable<? extends E> c) {
-		for (E e : c) {
-			this.add_(e);
-		}
-	}
-
-	/**
-	 * Internal {@link #add(Object)} for construction and cloning.
-	 * (No check for re-hash; no change to mod count; no return value.)
-	 */
-	private void add_(E o) {
-		this.add_(o, 1);
-	}
-
-	/**
-	 * Internal {@link #add(Object, int)} for construction, cloning, and serialization.
-	 * (No check for re-hash; no change to mod count; no return value.)
-	 */
-	private void add_(E o, int cnt) {
-		int hash = this.hash(o);
-		int index = this.index(hash);
-		for (Entry<E> e = this.table[index]; e != null; e = e.next) {
-			if (e.object == o) {
-				e.count += cnt;
-				this.size += cnt;
-				return;
-			}
-		}
-
-		// create the new entry and put it in the table
-		Entry<E> e = this.buildEntry(hash, o, cnt, this.table[index]);
-		this.table[index] = e;
-		this.size += cnt;
-		this.uniqueCount++;
-	}
-
-	/**
-	 * This implementation simply returns the maintained size.
-	 */
-	@Override
-	public int size() {
-		return this.size;
-	}
-
-	/**
-	 * This implementation simply compares the maintained size to zero.
-	 */
-	@Override
-	public boolean isEmpty() {
-		return this.size == 0;
-	}
-
-	/**
-	 * Search for the object's entry in the hash table by calculating
-	 * the object's identity hash code and examining the entries in the corresponding hash
-	 * table bucket.
-	 */
-	private Entry<E> getEntry(Object o) {
-		for (Entry<E> e = this.table[this.index(o)]; e != null; e = e.next) {
-			if (e.object == o) {
-				return e;
-			}
-		}
-		return null;
-	}
-
-	@Override
-	public boolean contains(Object o) {
-		return this.getEntry(o) != null;
-	}
-
-	public int count(Object o) {
-		Entry<E> e = this.getEntry(o);
-		return (e == null) ? 0 : e.count;
-	}
-
-	/**
-	 * Rehash the contents of the bag into a new hash table
-	 * with a larger capacity. This method is called when the
-	 * number of different elements in the bag exceeds its
-	 * capacity and load factor.
-	 */
-	private void rehash() {
-		Entry<E>[] oldTable = this.table;
-		int oldCapacity = oldTable.length;
-
-		if (oldCapacity == MAXIMUM_CAPACITY) {
-			this.threshold = Integer.MAX_VALUE;
-			return;
-		}
-
-		int newCapacity = 2 * oldCapacity;
-		Entry<E>[] newTable = this.buildTable(newCapacity);
-
-		for (int i = oldCapacity; i-- > 0; ) {
-			for (Entry<E> old = oldTable[i]; old != null; ) {
-				Entry<E> e = old;
-				old = old.next;
-
-				int index = this.index(e.hash, newCapacity);
-				e.next = newTable[index];
-				newTable[index] = e;
-			}
-		}
-
-		this.table = newTable;
-		this.threshold = (int) (newCapacity * this.loadFactor);
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	private Entry<E>[] buildTable(int capacity) {
-		return new Entry[capacity];
-	}
-
-	/**
-	 * This implementation searches for the object in the hash table by calculating
-	 * the object's identity hash code and examining the entries in the corresponding hash
-	 * table bucket.
-	 */
-	@Override
-	public boolean add(E o) {
-		return this.add(o, 1);
-	}
-
-	/**
-	 * This implementation searches for the object in the hash table by calculating
-	 * the object's identity hash code and examining the entries in the corresponding hash
-	 * table bucket.
-	 */
-	public boolean add(E o, int cnt) {
-		if (cnt <= 0) {
-			return false;
-		}
-		this.modCount++;
-		int hash = this.hash(o);
-		int index = this.index(hash);
-
-		// if the object is already in the bag, simply bump its count
-		for (Entry<E> e = this.table[index]; e != null; e = e.next) {
-			if (e.object == o) {
-				e.count += cnt;
-				this.size += cnt;
-				return true;
-			}
-		}
-
-		// rehash the table if we are going to exceed the threshold
-		if (this.uniqueCount >= this.threshold) {
-			this.rehash();
-			index = this.index(hash);  // need to re-calculate the index
-		}
-
-		// create the new entry and put it in the table
-		Entry<E> e = this.buildEntry(hash, o, cnt, this.table[index]);
-		this.table[index] = e;
-		this.size += cnt;
-		this.uniqueCount++;
-		return true;
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings({ "unchecked", "rawtypes" })
-	private Entry<E> buildEntry(int hash, Object o, int cnt, Entry next) {
-		return new Entry<E>(hash, (E) o, cnt, (Entry<E>) next);
-	}
-
-	/**
-	 * This implementation searches for the object in the hash table by calculating
-	 * the object's identity hash code and examining the entries in the corresponding hash
-	 * table bucket.
-	 */
-	@Override
-	public boolean remove(Object o) {
-		return this.remove(o, 1);
-	}
-
-	/**
-	 * This implementation searches for the object in the hash table by calculating
-	 * the object's identity hash code and examining the entries in the corresponding hash
-	 * table bucket.
-	 */
-	public boolean remove(Object o, int cnt) {
-		if (cnt <= 0) {
-			return false;
-		}
-		int index = this.index(o);
-
-		for (Entry<E> e = this.table[index], prev = null; e != null; prev = e, e = e.next) {
-			if (e.object == o) {
-				this.modCount++;
-				cnt = (cnt < e.count) ? cnt : e.count;
-				e.count -= cnt;
-				// if we are removing the last element(s), remove the entry from the table
-				if (e.count == 0) {
-					if (prev == null) {
-						this.table[index] = e.next;
-					} else {
-						prev.next = e.next;
-					}
-					this.uniqueCount--;
-				}
-				this.size -= cnt;
-				return true;
-			}
-		}
-
-		return false;
-	}
-
-	/**
-	 * This implementation uses object-identity to determine whether the
-	 * specified collection contains a particular element.
-	 */
-	@Override
-	public boolean removeAll(Collection<?> c) {
-		return super.removeAll(new IdentityHashBag<Object>(c));
-	}
-
-	/**
-	 * This implementation uses object-identity to determine whether the
-	 * specified collection contains a particular element.
-	 */
-	@Override
-	public boolean retainAll(Collection<?> c) {
-		return super.retainAll(new IdentityHashBag<Object>(c));
-	}
-
-	/**
-	 * This implementation simply clears out all of the hash table buckets.
-	 */
-	@Override
-	public void clear() {
-		Entry<E>[] tab = this.table;
-		this.modCount++;
-		for (int i = tab.length; i-- > 0; ) {
-			tab[i] = null;
-		}
-		this.size = 0;
-		this.uniqueCount = 0;
-	}
-
-	/**
-	 * Returns a shallow copy of this bag: the elements
-	 * themselves are not cloned.
-	 *
-	 * @return a shallow copy of this bag.
-	 */
-	@Override
-	public IdentityHashBag<E> clone() {
-		try {
-			@SuppressWarnings("unchecked")
-			IdentityHashBag<E> clone = (IdentityHashBag<E>) super.clone();
-			clone.table = this.buildTable(this.table.length);
-			clone.size = 0;
-			clone.uniqueCount = 0;
-			clone.modCount = 0;
-			clone.addAll_(this);
-			return clone;
-		} catch (CloneNotSupportedException e) {
-			throw new InternalError();
-		}
-	}
-
-
-	/**
-	 * Hash table collision list entry.
-	 */
-	private static class Entry<E> implements Bag.Entry<E> {
-		final int hash;  // cache the hash for re-hashes
-		final E object;
-		int count;
-		Entry<E> next;
-
-		Entry(int hash, E object, int count, Entry<E> next) {
-			this.hash = hash;
-			this.object = object;
-			this.count = count;
-			this.next = next;
-		}
-
-		// ***** Bag.Entry implementation
-		public E getElement() {
-			return this.object;
-		}
-
-		public int getCount() {
-			return this.count;
-		}
-
-		public int setCount(int count) {
-			if (count <= 0) {
-				throw new IllegalArgumentException("count must be greater than zero: " + count); //$NON-NLS-1$
-			}
-			int old = this.count;
-			this.count = count;
-			return old;
-		}
-
-		@Override
-		public boolean equals(Object o) {
-			if ( ! (o instanceof Bag.Entry<?>)) {
-				return false;
-			}
-			@SuppressWarnings("rawtypes")
-			Bag.Entry e = (Bag.Entry) o;
-			return (this.object == e.getElement())
-					&& (this.count == e.getCount());
-		}
-
-		@Override
-		public int hashCode() {
-			E o = this.object;
-			return (o == null) ? 0 : (this.count * o.hashCode());
-		}
-
-		@Override
-		public String toString() {
-			return this.object + "=>" + this.count; //$NON-NLS-1$
-		}
-	}
-
-
-	@Override
-	@SuppressWarnings("unchecked")
-	public Iterator<E> iterator() {
-		return (this.size == 0) ? EMPTY_ITERATOR : new HashIterator();
-	}
-
-	@SuppressWarnings("unchecked")
-	public Iterator<E> uniqueIterator() {
-		return (this.size == 0) ? EMPTY_ITERATOR : new UniqueIterator();
-	}
-
-	public int uniqueCount() {
-		return this.uniqueCount;
-	}
-
-	@SuppressWarnings("unchecked")
-	public Iterator<Bag.Entry<E>> entries() {
-		return (this.size == 0) ? EMPTY_ITERATOR : new EntryIterator();
-	}
-
-
-	/**
-	 * Empty iterator that does just about nothing.
-	 */
-	@SuppressWarnings("rawtypes")
-	private static final Iterator EMPTY_ITERATOR = new EmptyIterator();
-
-	@SuppressWarnings("rawtypes")
-	private static class EmptyIterator implements Iterator {
-
-		EmptyIterator() {
-			super();
-		}
-
-		public boolean hasNext() {
-			return false;
-		}
-
-		public Object next() {
-			throw new NoSuchElementException();
-		}
-
-		public void remove() {
-			throw new IllegalStateException();
-		}
-	}
-
-
-	private class HashIterator implements Iterator<E> {
-		private int index = IdentityHashBag.this.table.length;	// start at the end of the table
-		private Entry<E> nextEntry = null;
-		private int nextEntryCount = 0;
-		private Entry<E> lastReturnedEntry = null;
-
-		/**
-		 * The modCount value that the iterator believes that the backing
-		 * bag should have. If this expectation is violated, the iterator
-		 * has detected a concurrent modification.
-		 */
-		private int expectedModCount = IdentityHashBag.this.modCount;
-
-		HashIterator() {
-			super();
-		}
-
-		public boolean hasNext() {
-			Entry<E> e = this.nextEntry;
-			int i = this.index;
-			Entry<E>[] tab = IdentityHashBag.this.table;
-			// Use locals for faster loop iteration
-			while ((e == null) && (i > 0)) {
-				e = tab[--i];		// move backwards through the table
-			}
-			this.nextEntry = e;
-			this.index = i;
-			return e != null;
-		}
-
-		public E next() {
-			if (IdentityHashBag.this.modCount != this.expectedModCount) {
-				throw new ConcurrentModificationException();
-			}
-			Entry<E> et = this.nextEntry;
-			int i = this.index;
-			Entry<E>[] tab = IdentityHashBag.this.table;
-			// Use locals for faster loop iteration
-			while ((et == null) && (i > 0)) {
-				et = tab[--i];		// move backwards through the table
-			}
-			this.nextEntry = et;
-			this.index = i;
-			if (et == null) {
-				throw new NoSuchElementException();
-			}
-			Entry<E> e = this.lastReturnedEntry = this.nextEntry;
-			this.nextEntryCount++;
-			if (this.nextEntryCount == e.count) {
-				this.nextEntry = e.next;
-				this.nextEntryCount = 0;
-			}
-			return e.object;
-		}
-
-		public void remove() {
-			if (this.lastReturnedEntry == null) {
-				throw new IllegalStateException();
-			}
-			if (IdentityHashBag.this.modCount != this.expectedModCount) {
-				throw new ConcurrentModificationException();
-			}
-			int slot = IdentityHashBag.this.index(this.lastReturnedEntry.hash, IdentityHashBag.this.table.length);
-			for (Entry<E> e = IdentityHashBag.this.table[slot], prev = null; e != null; prev = e, e = e.next) {
-				if (e == this.lastReturnedEntry) {
-					IdentityHashBag.this.modCount++;
-					this.expectedModCount++;
-					e.count--;
-					if (e.count == 0) {
-						// if we are removing the last one, remove the entry from the table
-						if (prev == null) {
-							IdentityHashBag.this.table[slot] = e.next;
-						} else {
-							prev.next = e.next;
-						}
-						IdentityHashBag.this.uniqueCount--;
-					} else {
-						// slide back the count to account for the just-removed element
-						this.nextEntryCount--;
-					}
-					IdentityHashBag.this.size--;
-					this.lastReturnedEntry = null;	// it cannot be removed again
-					return;
-				}
-			}
-			throw new ConcurrentModificationException();
-		}
-
-	}
-
-
-	private class EntryIterator implements Iterator<Entry<E>> {
-		private int index = IdentityHashBag.this.table.length;	// start at the end of the table
-		private Entry<E> nextEntry = null;
-		private Entry<E> lastReturnedEntry = null;
-
-		/**
-		 * The modCount value that the iterator believes that the backing
-		 * bag should have. If this expectation is violated, the iterator
-		 * has detected a concurrent modification.
-		 */
-		private int expectedModCount = IdentityHashBag.this.modCount;
-
-		EntryIterator() {
-			super();
-		}
-
-		public boolean hasNext() {
-			Entry<E> e = this.nextEntry;
-			int i = this.index;
-			Entry<E>[] tab = IdentityHashBag.this.table;
-			// Use locals for faster loop iteration
-			while ((e == null) && (i > 0)) {
-				e = tab[--i];		// move backwards through the table
-			}
-			this.nextEntry = e;
-			this.index = i;
-			return e != null;
-		}
-
-		public Entry<E> next() {
-			if (IdentityHashBag.this.modCount != this.expectedModCount) {
-				throw new ConcurrentModificationException();
-			}
-			Entry<E> et = this.nextEntry;
-			int i = this.index;
-			Entry<E>[] tab = IdentityHashBag.this.table;
-			// Use locals for faster loop iteration
-			while ((et == null) && (i > 0)) {
-				et = tab[--i];		// move backwards through the table
-			}
-			this.nextEntry = et;
-			this.index = i;
-			if (et == null) {
-				throw new NoSuchElementException();
-			}
-			Entry<E> e = this.lastReturnedEntry = this.nextEntry;
-			this.nextEntry = e.next;
-			return e;
-		}
-
-		public void remove() {
-			if (this.lastReturnedEntry == null) {
-				throw new IllegalStateException();
-			}
-			if (IdentityHashBag.this.modCount != this.expectedModCount) {
-				throw new ConcurrentModificationException();
-			}
-			int slot = IdentityHashBag.this.index(this.lastReturnedEntry.hash, IdentityHashBag.this.table.length);
-			for (Entry<E> e = IdentityHashBag.this.table[slot], prev = null; e != null; prev = e, e = e.next) {
-				if (e == this.lastReturnedEntry) {
-					IdentityHashBag.this.modCount++;
-					this.expectedModCount++;
-					// remove the entry from the table
-					if (prev == null) {
-						IdentityHashBag.this.table[slot] = e.next;
-					} else {
-						prev.next = e.next;
-					}
-					IdentityHashBag.this.uniqueCount--;
-					IdentityHashBag.this.size -= this.lastReturnedEntry.count;
-					this.lastReturnedEntry = null;	// it cannot be removed again
-					return;
-				}
-			}
-			throw new ConcurrentModificationException();
-		}
-
-	}
-
-
-	private class UniqueIterator implements Iterator<E> {
-		private EntryIterator entryIterator = new EntryIterator();
-		
-		UniqueIterator() {
-			super();
-		}
-
-		public boolean hasNext() {
-			return this.entryIterator.hasNext();
-		}
-
-		public E next() {
-			return this.entryIterator.next().object;
-		}
-
-		public void remove() {
-			this.entryIterator.remove();
-		}
-
-	}
-
-
-	@Override
-	public boolean equals(Object o) {
-		if (o == this) {
-			return true;
-		} else if (o instanceof IdentityHashBag<?>) {
-			@SuppressWarnings("unchecked")
-			IdentityHashBag<E> b = (IdentityHashBag<E>) o;
-			if (b.size() != this.size()) {
-				return false;
-			}
-			if (b.uniqueCount() != this.uniqueCount()) {
-				return false;
-			}
-			for (Iterator<Bag.Entry<E>> stream = b.entries(); stream.hasNext(); ) {
-				Bag.Entry<E> entry = stream.next();
-				if (entry.getCount() != this.count(entry.getElement())) {
-					return false;
-				}
-			}
-			return true;
-		} else {
-			return this.equals_(o);
-		}
-//		} else if (o instanceof Bag<?>) {
-//			// hmmm...
-//			return new HashBag<Object>(this).equals(o);
-//		} else {
-//			return false;
-//		}
-	}
-
-	private boolean equals_(Object o) {
-		// hmmm...
-		return (o instanceof Bag<?>) && 
-				new HashBag<Object>(this).equals(o);
-	}
-
-	@Override
-	public int hashCode() {
-		int h = 0;
-		for (E o : this) {
-			h += System.identityHashCode(o);
-		}
-		return h;
-	}
-
-	/**
-	 * Save the state of this bag to a stream (i.e. serialize it).
-	 *
-	 * @serialData Emit the capacity of the bag (int),
-	 *     followed by the number of unique elements in the bag (int),
-	 *     followed by all of the bag's elements (each an Object) and
-	 *     their counts (each an int), in no particular order.
-	 */
-	private void writeObject(java.io.ObjectOutputStream s)
-				throws java.io.IOException {
-		// write out the threshold, load factor, and any hidden stuff
-		s.defaultWriteObject();
-
-		// write out number of buckets
-		s.writeInt(this.table.length);
-
-		// write out number of unique elements
-		s.writeInt(this.uniqueCount);
-
-		// write out elements and counts (alternating)
-		if (this.uniqueCount > 0) {
-			for (Entry<E> entry : this.table) {
-				while (entry != null) {
-					s.writeObject(entry.object);
-					s.writeInt(entry.count);
-					entry = entry.next;
-				}
-			}
-		}
-	}
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Reconstitute the bag from a stream (i.e. deserialize it).
-	 */
-	private void readObject(java.io.ObjectInputStream s)
-				throws java.io.IOException, ClassNotFoundException {
-		// read in the threshold, loadfactor, and any hidden stuff
-		s.defaultReadObject();
-
-		// read in number of buckets and allocate the bucket array
-		this.table = this.buildTable(s.readInt());
-
-		// read in number of unique elements
-		int unique = s.readInt();
-
-		// read the elements and counts, and put the elements in the bag
-		for (int i = 0; i < unique; i++) {
-			@SuppressWarnings("unchecked")
-			E element = (E) s.readObject();
-			int elementCount = s.readInt();
-			this.add_(element, elementCount);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/IntReference.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/IntReference.java
deleted file mode 100644
index f3bf9df..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/IntReference.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-/**
- * This class can be used wherever a mutable integer object is needed.
- * It is a cross between an <code>int</code> and an {@link Integer}.
- * It can be stored in a standard container (e.g. {@link java.util.Collection})
- * but can be modified. It is also useful passing a value that can be changed
- * by the recipient.
- * 
- * @see SynchronizedInt
- */
-public final class IntReference
-	implements Comparable<IntReference>, Cloneable, Serializable
-{
-	/** Backing <code>int</code>. */
-	private volatile int value = 0;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a <code>int</code> reference with the specified initial value.
-	 */
-	public IntReference(int count) {
-		super();
-		this.value = count;
-	}
-
-	/**
-	 * Construct a <code>int</code> reference with an initial value of zero.
-	 */
-	public IntReference() {
-		this(0);
-	}
-
-
-	// ********** methods **********
-
-	/**
-	 * Return the current value.
-	 */
-	public int getValue() {
-		return this.value;
-	}
-
-	/**
-	 * Return whether the current value is equal to the specified value.
-	 */
-	public boolean equals(int v) {
-		return this.value == v;
-	}
-
-	/**
-	 * Return whether the current value is not equal to the specified value.
-	 */
-	public boolean notEquals(int v) {
-		return this.value != v;
-	}
-
-	/**
-	 * Return whether the current value is zero.
-	 */
-	public boolean isZero() {
-		return this.value == 0;
-	}
-
-	/**
-	 * Return whether the current value is not zero.
-	 */
-	public boolean isNotZero() {
-		return this.value != 0;
-	}
-
-	/**
-	 * Return whether the current value is greater than the specified value.
-	 */
-	public boolean isGreaterThan(int v) {
-		return this.value > v;
-	}
-
-	/**
-	 * Return whether the current value is greater than or equal to the
-	 * specified value.
-	 */
-	public boolean isGreaterThanOrEqual(int v) {
-		return this.value >= v;
-	}
-
-	/**
-	 * Return whether the current value is less than the specified value.
-	 */
-	public boolean isLessThan(int v) {
-		return this.value < v;
-	}
-
-	/**
-	 * Return whether the current value is less than or equal to the
-	 * specified value.
-	 */
-	public boolean isLessThanOrEqual(int v) {
-		return this.value <= v;
-	}
-
-	/**
-	 * Return whether the current value is positive.
-	 */
-	public boolean isPositive() {
-		return this.isGreaterThan(0);
-	}
-
-	/**
-	 * Return whether the current value is not positive
-	 * (i.e. negative or zero).
-	 */
-	public boolean isNotPositive() {
-		return this.isLessThanOrEqual(0);
-	}
-
-	/**
-	 * Return whether the current value is negative.
-	 */
-	public boolean isNegative() {
-		return this.isLessThan(0);
-	}
-
-	/**
-	 * Return whether the current value is not negative
-	 * (i.e. zero or positive).
-	 */
-	public boolean isNotNegative() {
-		return this.isGreaterThanOrEqual(0);
-	}
-
-	/**
-	 * Set the value. If the value changes, all waiting
-	 * threads are notified. Return the previous value.
-	 */
-	public int setValue(int value) {
-		int old = this.value;
-		this.value = value;
-		return old;
-	}
-
-	/**
-	 * Set the value to the absolute value of the current value.
-	 * Return the new value.
-	 */
-	public int abs() {
-		return this.value = Math.abs(this.value);
-	}
-
-	/**
-	 * Set the value to the negative value of the current value.
-	 * Return the new value.
-	 */
-	public int neg() {
-		return this.value = -this.value;
-	}
-
-	/**
-	 * Set the value to zero. If the value changes, all waiting
-	 * threads are notified. Return the previous value.
-	 */
-	public int setZero() {
-		return this.setValue(0);
-	}
-
-	/**
-	 * Set the value to the current value plus the specified value.
-	 * Return the new value.
-	 */
-	public int add(int v) {
-		return this.value += v;
-	}
-
-	/**
-	 * Increment and return the value.
-	 */
-	public int increment() {
-		return ++this.value;
-	}
-
-	/**
-	 * Set the value to the current value minus the specified value.
-	 * Return the new value.
-	 */
-	public int subtract(int v) {
-		return this.value -= v;
-	}
-
-	/**
-	 * Decrement and return the value.
-	 */
-	public int decrement() {
-		return --this.value;
-	}
-
-	/**
-	 * Set the value to the current value times the specified value.
-	 * Return the new value.
-	 */
-	public int multiply(int v) {
-		return this.value *= v;
-	}
-
-	/**
-	 * Set the value to the current value divided by the specified value.
-	 * Return the new value.
-	 */
-	public int divide(int v) {
-		return this.value /= v;
-	}
-
-	/**
-	 * Set the value to the remainder of the current value divided by the
-	 * specified value.
-	 * Return the new value.
-	 */
-	public int remainder(int v) {
-		return this.value %= v;
-	}
-
-	/**
-	 * Set the value to the minimum of the current value and the specified value.
-	 * Return the new value.
-	 */
-	public int min(int v) {
-		return this.value = Math.min(this.value, v);
-	}
-
-	/**
-	 * Set the value to the maximum of the current value and the specified value.
-	 * Return the new value.
-	 */
-	public int max(int v) {
-		return this.value = Math.max(this.value, v);
-	}
-
-	/**
-	 * Set the value to the current value raised to the power of the'
-	 * specified value.
-	 * Return the new value.
-	 */
-	public int pow(int v) {
-		return this.value = (int) Math.pow(this.value, v);
-	}
-
-
-	// ********** Comparable implementation **********
-
-	public int compareTo(IntReference ir) {
-		int v = ir.getValue();
-		return this.value < v ? -1 : (this.value == v ? 0 : 1);
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public Object clone() {
-		try {
-			return super.clone();
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-	@Override
-	public boolean equals(Object o) {
-		return (o instanceof IntReference) &&
-			(this.value == ((IntReference) o).value);
-	}
-
-	@Override
-	public int hashCode() {
-		return this.value;
-	}
-
-	@Override
-	public String toString() {
-		return '[' + String.valueOf(this.value) + ']';
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/JDBCTools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/JDBCTools.java
deleted file mode 100644
index f8e92ad..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/JDBCTools.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.sql.Types;
-import java.util.HashMap;
-import org.eclipse.jpt.utility.JavaType;
-
-/**
- * Helper methods for dealing with the JDBC API.
- */
-public final class JDBCTools {
-
-
-	/**
-	 * Return the JDBC type corresponding to the specified class.
-	 * @see java.sql.Types
-	 */
-	public static JDBCType jdbcTypeForClassNamed(String className) {
-		JavaToJDBCTypeMapping mapping = javaToJDBCTypeMapping(className);
-		return (mapping == null) ? DEFAULT_JDBC_TYPE : mapping.getJDBCType();
-	}
-
-	/**
-	 * Return the JDBC type corresponding to the specified class.
-	 * @see java.sql.Types
-	 */
-	public static JDBCType jdbcTypeFor(Class<?> javaClass) {
-		return jdbcTypeForClassNamed(javaClass.getName());
-	}
-
-	/**
-	 * Return the JDBC type corresponding to the specified class.
-	 * @see java.sql.Types
-	 */
-	public static JDBCType jdbcTypeFor(JavaType javaType) {
-		return jdbcTypeForClassNamed(javaType.getJavaClassName());
-	}
-
-	/**
-	 * Return the Java type corresponding to the specified JDBC type.
-	 * @see java.sql.Types
-	 */
-	public static JavaType javaTypeForJDBCTypeNamed(String jdbcTypeName) {
-		JDBCToJavaTypeMapping mapping = jdbcToJavaTypeMapping(jdbcTypeName);
-		return (mapping == null) ? DEFAULT_JAVA_TYPE : mapping.getJavaType();
-	}
-
-	/**
-	 * Return the Java type corresponding to the specified JDBC type.
-	 * @see java.sql.Types
-	 */
-	public static JavaType javaTypeFor(JDBCType jdbcType) {
-		return javaTypeForJDBCTypeNamed(jdbcType.name());
-	}
-
-	/**
-	 * Return the Java type corresponding to the specified JDBC type.
-	 * @see java.sql.Types
-	 */
-	public static JavaType javaTypeForJDBCTypeCode(int jdbcTypeCode) {
-		return javaTypeFor(JDBCType.type(jdbcTypeCode));
-	}
-
-
-	// ********** internal stuff **********
-
-
-	// ********** JDBC => Java **********
-
-	/**
-	 * JDBC => Java type mappings, keyed by JDBC type name (e.g. "VARCHAR")
-	 */
-	private static HashMap<String, JDBCToJavaTypeMapping> JDBC_TO_JAVA_TYPE_MAPPINGS;  // pseudo 'final' - lazy-initialized
-	private static final JavaType DEFAULT_JAVA_TYPE = new SimpleJavaType(java.lang.Object.class);  // TODO Object is the default?
-
-
-	private static JDBCToJavaTypeMapping jdbcToJavaTypeMapping(String jdbcTypeName) {
-		return jdbcToJavaTypeMappings().get(jdbcTypeName);
-	}
-
-	private static synchronized HashMap<String, JDBCToJavaTypeMapping> jdbcToJavaTypeMappings() {
-		if (JDBC_TO_JAVA_TYPE_MAPPINGS == null) {
-			JDBC_TO_JAVA_TYPE_MAPPINGS = buildJDBCToJavaTypeMappings();
-		}
-		return JDBC_TO_JAVA_TYPE_MAPPINGS;
-	}
-
-	private static HashMap<String, JDBCToJavaTypeMapping> buildJDBCToJavaTypeMappings() {
-		HashMap<String, JDBCToJavaTypeMapping> mappings = new HashMap<String, JDBCToJavaTypeMapping>();
-		addJDBCToJavaTypeMappingsTo(mappings);
-		return mappings;
-	}
-
-	/**
-	 * hard code the default mappings from the JDBC types to the
-	 * appropriate Java types
-	 * @see java.sql.Types
-	 * see "JDBC 3.0 Specification" Appendix B
-	 */
-	private static void addJDBCToJavaTypeMappingsTo(HashMap<String, JDBCToJavaTypeMapping> mappings) {
-		addJDBCToJavaTypeMappingTo(Types.ARRAY, java.sql.Array.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.BIGINT, long.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.BINARY, byte[].class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.BIT, boolean.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.BLOB, java.sql.Blob.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.BOOLEAN, boolean.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.CHAR, java.lang.String.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.CLOB, java.sql.Clob.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.DATALINK, java.net.URL.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.DATE, java.sql.Date.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.DECIMAL, java.math.BigDecimal.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.DISTINCT, java.lang.Object.class, mappings);  // ???
-		addJDBCToJavaTypeMappingTo(Types.DOUBLE, double.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.FLOAT, double.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.INTEGER, int.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.JAVA_OBJECT, java.lang.Object.class, mappings);  // ???
-		addJDBCToJavaTypeMappingTo(Types.LONGVARBINARY, byte[].class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.LONGVARCHAR, java.lang.String.class, mappings);
-		// not sure why this is defined in java.sql.Types
-//		addJDBCToJavaTypeMappingTo(Types.NULL, java.lang.Object.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.NUMERIC, java.math.BigDecimal.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.OTHER, java.lang.Object.class, mappings);	// ???
-		addJDBCToJavaTypeMappingTo(Types.REAL, float.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.REF, java.sql.Ref.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.SMALLINT, short.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.STRUCT, java.sql.Struct.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.TIME, java.sql.Time.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.TIMESTAMP, java.sql.Timestamp.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.TINYINT, byte.class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.VARBINARY, byte[].class, mappings);
-		addJDBCToJavaTypeMappingTo(Types.VARCHAR, java.lang.String.class, mappings);
-	}
-
-	private static void addJDBCToJavaTypeMappingTo(int jdbcTypeCode, Class<?> javaClass, HashMap<String, JDBCToJavaTypeMapping> mappings) {
-		// check for duplicates
-		JDBCType jdbcType = JDBCType.type(jdbcTypeCode);
-		Object prev = mappings.put(jdbcType.name(), buildJDBCToJavaTypeMapping(jdbcType, javaClass));
-		if (prev != null) {
-			throw new IllegalArgumentException("duplicate JDBC type: " + jdbcType.name()); //$NON-NLS-1$
-		}
-	}
-
-	private static JDBCToJavaTypeMapping buildJDBCToJavaTypeMapping(JDBCType jdbcType, Class<?> javaClass) {
-		return new JDBCToJavaTypeMapping(jdbcType, new SimpleJavaType(javaClass));
-	}
-
-
-	// ********** Java => JDBC **********
-
-	/**
-	 * Java => JDBC type mappings, keyed by Java class name (e.g. "java.lang.Object")
-	 */
-	private static HashMap<String, JavaToJDBCTypeMapping> JAVA_TO_JDBC_TYPE_MAPPINGS;  // pseudo 'final' - lazy-initialized
-	private static final JDBCType DEFAULT_JDBC_TYPE = JDBCType.type(Types.VARCHAR);  // TODO VARCHAR is the default?
-
-
-	private static JavaToJDBCTypeMapping javaToJDBCTypeMapping(String className) {
-		return javaToJDBCTypeMappings().get(className);
-	}
-
-	private static synchronized HashMap<String, JavaToJDBCTypeMapping> javaToJDBCTypeMappings() {
-		if (JAVA_TO_JDBC_TYPE_MAPPINGS == null) {
-			JAVA_TO_JDBC_TYPE_MAPPINGS = buildJavaToJDBCTypeMappings();
-		}
-		return JAVA_TO_JDBC_TYPE_MAPPINGS;
-	}
-
-	private static HashMap<String, JavaToJDBCTypeMapping> buildJavaToJDBCTypeMappings() {
-		HashMap<String, JavaToJDBCTypeMapping> mappings = new HashMap<String, JavaToJDBCTypeMapping>();
-		addJavaToJDBCTypeMappingsTo(mappings);
-		return mappings;
-	}
-
-	/**
-	 * hard code the default mappings from the Java types to the
-	 * appropriate JDBC types
-	 * @see java.sql.Types
-	 * see "JDBC 3.0 Specification" Appendix B
-	 */
-	private static void addJavaToJDBCTypeMappingsTo(HashMap<String, JavaToJDBCTypeMapping> mappings) {
-		// primitives
-		addJavaToJDBCTypeMappingTo(boolean.class, Types.BIT, mappings);
-		addJavaToJDBCTypeMappingTo(byte.class, Types.TINYINT, mappings);
-		addJavaToJDBCTypeMappingTo(double.class, Types.DOUBLE, mappings);
-		addJavaToJDBCTypeMappingTo(float.class, Types.REAL, mappings);
-		addJavaToJDBCTypeMappingTo(int.class, Types.INTEGER, mappings);
-		addJavaToJDBCTypeMappingTo(long.class, Types.BIGINT, mappings);
-		addJavaToJDBCTypeMappingTo(short.class, Types.SMALLINT, mappings);
-
-		// reference classes
-		addJavaToJDBCTypeMappingTo(java.lang.Boolean.class, Types.BIT, mappings);
-		addJavaToJDBCTypeMappingTo(java.lang.Byte.class, Types.TINYINT, mappings);
-		addJavaToJDBCTypeMappingTo(java.lang.Double.class, Types.DOUBLE, mappings);
-		addJavaToJDBCTypeMappingTo(java.lang.Float.class, Types.REAL, mappings);
-		addJavaToJDBCTypeMappingTo(java.lang.Integer.class, Types.INTEGER, mappings);
-		addJavaToJDBCTypeMappingTo(java.lang.Long.class, Types.BIGINT, mappings);
-		addJavaToJDBCTypeMappingTo(java.lang.Short.class, Types.SMALLINT, mappings);
-		addJavaToJDBCTypeMappingTo(java.lang.String.class, Types.VARCHAR, mappings);
-		addJavaToJDBCTypeMappingTo(java.math.BigDecimal.class, Types.NUMERIC, mappings);
-		addJavaToJDBCTypeMappingTo(java.net.URL.class, Types.DATALINK, mappings);
-		addJavaToJDBCTypeMappingTo(java.sql.Array.class, Types.ARRAY, mappings);
-		addJavaToJDBCTypeMappingTo(java.sql.Blob.class, Types.BLOB, mappings);
-		addJavaToJDBCTypeMappingTo(java.sql.Clob.class, Types.CLOB, mappings);
-		addJavaToJDBCTypeMappingTo(java.sql.Date.class, Types.DATE, mappings);
-		addJavaToJDBCTypeMappingTo(java.sql.Ref.class, Types.REF, mappings);
-		addJavaToJDBCTypeMappingTo(java.sql.Struct.class, Types.STRUCT, mappings);
-		addJavaToJDBCTypeMappingTo(java.sql.Time.class, Types.TIME, mappings);
-		addJavaToJDBCTypeMappingTo(java.sql.Timestamp.class, Types.TIMESTAMP, mappings);
-
-		// arrays
-		addJavaToJDBCTypeMappingTo(byte[].class, Types.VARBINARY, mappings);
-		addJavaToJDBCTypeMappingTo(java.lang.Byte[].class, Types.VARBINARY, mappings);
-	}
-
-	private static void addJavaToJDBCTypeMappingTo(Class<?> javaClass, int jdbcTypeCode, HashMap<String, JavaToJDBCTypeMapping> mappings) {
-		// check for duplicates
-		Object prev = mappings.put(javaClass.getName(), buildJavaToJDBCTypeMapping(javaClass, jdbcTypeCode));
-		if (prev != null) {
-			throw new IllegalArgumentException("duplicate Java class: " + ((JavaToJDBCTypeMapping) prev).getJavaType().declaration()); //$NON-NLS-1$
-		}
-	}
-
-	private static JavaToJDBCTypeMapping buildJavaToJDBCTypeMapping(Class<?> javaClass, int jdbcTypeCode) {
-		return new JavaToJDBCTypeMapping(new SimpleJavaType(javaClass), JDBCType.type(jdbcTypeCode));
-	}
-
-
-	// ********** constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private JDBCTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-
-	// ********** member classes **********
-
-	/**
-	 * JDBC => Java
-	 */
-	static class JDBCToJavaTypeMapping {
-		private final JDBCType jdbcType;
-		private final JavaType javaType;
-
-		JDBCToJavaTypeMapping(JDBCType jdbcType, JavaType javaType) {
-			super();
-			this.jdbcType = jdbcType;
-			this.javaType = javaType;
-		}
-
-		public JDBCType getJDBCType() {
-			return this.jdbcType;
-		}
-
-		public JavaType getJavaType() {
-			return this.javaType;
-		}
-
-		public boolean maps(int jdbcTypeCode) {
-			return this.jdbcType.code() == jdbcTypeCode;
-		}
-
-		public boolean maps(String jdbcTypeName) {
-			return this.jdbcType.name().equals(jdbcTypeName);
-		}
-
-		public boolean maps(JDBCType type) {
-			return this.jdbcType == type;
-		}
-
-		@Override
-		public String toString() {
-			StringBuilder sb = new StringBuilder();
-			this.appendTo(sb);
-			return sb.toString();
-		}
-
-		public void appendTo(StringBuilder sb) {
-			this.jdbcType.appendTo(sb);
-			sb.append(" => "); //$NON-NLS-1$
-			this.javaType.appendDeclarationTo(sb);
-		}
-
-	}
-
-	/**
-	 * Java => JDBC
-	 */
-	static class JavaToJDBCTypeMapping {
-		private final JavaType javaType;
-		private final JDBCType jdbcType;
-
-		JavaToJDBCTypeMapping(JavaType javaType, JDBCType jdbcType) {
-			super();
-			this.javaType = javaType;
-			this.jdbcType = jdbcType;
-		}
-
-		public JavaType getJavaType() {
-			return this.javaType;
-		}
-
-		public JDBCType getJDBCType() {
-			return this.jdbcType;
-		}
-
-		public boolean maps(JavaType jt) {
-			return this.javaType.equals(jt);
-		}
-
-		public boolean maps(String elementTypeName, int arrayDepth) {
-			return this.javaType.equals(elementTypeName, arrayDepth);
-		}
-
-		public boolean maps(String javaClassName) {
-			return this.javaType.describes(javaClassName);
-		}
-
-		public boolean maps(Class<?> javaClass) {
-			return this.javaType.describes(javaClass);
-		}
-
-		@Override
-		public String toString() {
-			StringBuilder sb = new StringBuilder();
-			this.appendTo(sb);
-			return sb.toString();
-		}
-
-		public void appendTo(StringBuilder sb) {
-			this.javaType.appendDeclarationTo(sb);
-			sb.append(" => "); //$NON-NLS-1$
-			this.jdbcType.appendTo(sb);
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/JDBCType.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/JDBCType.java
deleted file mode 100644
index 4a15651..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/JDBCType.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.sql.Types;
-
-/**
- * Associate the Java constant and the JDBC type name.
- * These are derived from java.sql.Types.
- * 
- * @see java.sql.Types
- */
-public final class JDBCType
-	implements Cloneable, Serializable
-{
-
-	/**
-	 * the constant name (e.g. VARCHAR)
-	 */
-	private final String name;
-
-	/**
-	 * the JDBC code used by JDBC drivers
-	 */
-	private final int code;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a JDBC type with the specified name and type code.
-	 * This is private because all the possible JDBC types are built and
-	 * stored in the static array TYPES.
-	 * @see #types()
-	 */
-	private JDBCType(String name, int code) {
-		super();
-		this.name = name;
-		this.code = code;
-	}
-
-
-	// ********** accessors **********
-
-	/**
-	 * Return the name of the type, as defined in java.sql.Types.
-	 */
-	public String name() {
-		return this.name;
-	}
-
-
-	/**
-	 * Return the type code, as defined in java.sql.Types.
-	 */
-	public int code() {
-		return this.code;
-	}
-
-
-	// ********** printing and displaying **********
-
-	public void appendTo(StringBuilder sb) {
-		sb.append(this.name);
-	}
-
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append(this.getClass().getSimpleName());
-		sb.append('(');
-		this.appendTo(sb);
-		sb.append(')');
-		return sb.toString();
-	}
-
-	@Override
-	public JDBCType clone() {
-		try {
-			return (JDBCType) super.clone();
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-
-	// ********** static stuff **********
-
-	/**
-	 * all the JDBC type defined in java.sql.Types
-	 */
-	private static JDBCType[] TYPES;		// pseudo 'final' - lazy-initialized
-
-
-	public synchronized static JDBCType[] types() {
-		if (TYPES == null) {
-			TYPES = buildTypes();
-		}
-		return TYPES;
-	}
-
-	/**
-	 * Return the JDBC type for the specified type code (e.g. Types.VARCHAR).
-	 * @see java.sql.Types
-	 */
-	public static JDBCType type(int code) {
-		JDBCType[] types = types();
-		for (int i = types.length; i-- > 0; ) {
-			if (types[i].code() == code) {
-				return types[i];
-			}
-		}
-		throw new IllegalArgumentException("invalid JDBC type code: " + code); //$NON-NLS-1$
-	}
-
-	/**
-	 * Return the JDBC type for the specified type name (e.g. "VARCHAR").
-	 * @see java.sql.Types
-	 */
-	public static JDBCType type(String name) {
-		JDBCType[] types = types();
-		for (int i = types.length; i-- > 0; ) {
-			if (types[i].name().equals(name)) {
-				return types[i];
-			}
-		}
-		throw new IllegalArgumentException("invalid JDBC type name: " + name); //$NON-NLS-1$
-	}
-
-	/**
-	 * build up the JDBC types via reflection
-	 * @see java.sql.Types
-	 */
-	private static JDBCType[] buildTypes() {
-		Field[] fields = Types.class.getDeclaredFields();
-		int len = fields.length;
-		JDBCType[] types = new JDBCType[len];
-		for (int i = len; i-- > 0; ) {
-			String name = fields[i].getName();
-			int code;
-			try {
-				code = ((Integer) fields[i].get(null)).intValue();
-			} catch (IllegalAccessException ex) {
-				throw new RuntimeException(ex);	// shouldn't happen...
-			}
-			types[i] = new JDBCType(name, code);
-		}
-		return types;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ListenerList.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ListenerList.java
deleted file mode 100644
index e93b78c..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ListenerList.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.lang.reflect.Array;
-import java.util.Arrays;
-import java.util.EventListener;
-
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-
-/**
- * Maintain a thread-safe list of listeners that does not allow adding
- * duplicate listeners or removing non-listeners.
- */
-public class ListenerList<L extends EventListener>
-	implements Serializable
-{
-	/**
-	 * We can mark this volatile and not synchronize the read methods because
-	 * we never change the <em>contents</em> of the array.
-	 */
-	private transient volatile L[] listeners;
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * Construct a listener list for listeners of the specified type.
-	 */
-	public ListenerList(Class<L> listenerClass) {
-		super();
-		this.listeners = this.buildListenerArray(listenerClass, 0);
-	}
-
-	/**
-	 * Construct a listener list for listeners of the specified type.
-	 * Add the specified listener to the list.
-	 */
-	public ListenerList(Class<L> listenerClass, L listener) {
-		super();
-		if (listener == null) {
-			throw new NullPointerException();
-		}
-		this.listeners = this.buildListenerArray(listenerClass, 1);
-		this.listeners[0] = listener;
-	}
-
-	@SuppressWarnings("unchecked")
-	private L[] buildListenerArray(Class<L> listenerClass, int length) {
-		return (L[]) Array.newInstance(listenerClass, length);
-	}
-
-	/**
-	 * Return the listeners.
-	 */
-	public Iterable<L> getListeners() {
-		return new ArrayIterable<L>(this.listeners);
-	}
-
-	/**
-	 * Return the number of listeners.
-	 */
-	public int size() {
-		return this.listeners.length;
-	}
-
-	/**
-	 * Return whether the listener list has no listeners.
-	 */
-	public boolean isEmpty() {
-		return this.listeners.length == 0;
-	}
-
-	/**
-	 * Add the specified listener to the listener list.
-	 * Duplicate listeners are not allowed.
-	 */
-	public synchronized void add(L listener) {
-		if (listener == null) {
-			throw new NullPointerException();
-		}
-		if (ArrayTools.contains(this.listeners, listener)) {
-			throw new IllegalArgumentException("duplicate listener: " + listener); //$NON-NLS-1$
-		}
-		this.listeners = ArrayTools.add(this.listeners, listener);
-	}
-
-	/**
-	 * Remove the specified listener from the listener list.
-	 * Removing a listener that is not on the list is not allowed.
-	 */
-	public synchronized void remove(L listener) {
-		if (listener == null) {
-			throw new NullPointerException();
-		}
-		int index = ArrayTools.indexOf(this.listeners, listener);
-		if (index == -1) {
-			throw new IllegalArgumentException("unregistered listener: " + listener); //$NON-NLS-1$
-		}
-		this.listeners = ArrayTools.removeElementAtIndex(this.listeners, index);
-	}
-
-	/**
-	 * Clear the listener list.
-	 */
-	public synchronized void clear() {
-		this.listeners = ArrayTools.clear(this.listeners);
-	}
-
-	/**
-	 * Return the type of listeners held by the listener list.
-	 */
-	@SuppressWarnings("unchecked")
-	public Class<L> getListenerType() {
-		return (Class<L>) this.listeners.getClass().getComponentType();
-	}
-
-	@Override
-	public String toString() {
-		return Arrays.toString(this.listeners);
-	}
-
-
-	// ********** serialization **********
-
-	/**
-	 * Silently drop any non-serializable listeners.
-	 */
-	private synchronized void writeObject(ObjectOutputStream s) throws IOException {
-		// write out any hidden stuff
-		s.defaultWriteObject();
-
-		@SuppressWarnings("unchecked")
-		Class<L> listenerClass = (Class<L>) this.listeners.getClass().getComponentType();
-		s.writeObject(listenerClass);
-
-		// only write out serializable listeners
-		for (L listener : this.listeners) {
-			if (listener instanceof Serializable) {
-				s.writeObject(listener);
-			}
-		}
-
-		s.writeObject(null);
-    }
-
-	@SuppressWarnings("unchecked")
-	private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException {
-		// read in any hidden stuff
-		s.defaultReadObject();
-
-		Class<L> listenerClass = (Class<L>) s.readObject();
-		this.listeners = this.buildListenerArray(listenerClass, 0);
-		Object o;
-		while ((o = s.readObject()) != null) {
-			this.listeners = ArrayTools.add(this.listeners, (L) o);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NameTools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NameTools.java
deleted file mode 100644
index 7f1a7c7..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NameTools.java
+++ /dev/null
@@ -1,374 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.beans.Introspector;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.SortedSet;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-
-/**
- * Various helper methods for generating names.
- */
-public final class NameTools {
-
-	/**
-	 * Given a "root" name and a set of existing names, generate a unique
-	 * name that is either the "root" name or some variation on the "root"
-	 * name (e.g. "root2", "root3",...). The names are case-sensitive
-	 * (i.e. "Root" and "root" are both allowed).
-	 */
-	public static String uniqueNameFor(String rootName, Iterator<String> existingNames) {
-		return uniqueNameFor(rootName, CollectionTools.set(existingNames));
-	}
-	
-	/**
-	 * Given a "root" name and a set of existing names, generate a unique
-	 * name that is either the "root" name or some variation on the "root"
-	 * name (e.g. "root2", "root3",...). The names are case-sensitive
-	 * (i.e. "Root" and "root" are both allowed).
-	 */
-	public static String uniqueNameFor(String rootName, Collection<String> existingNames) {
-		return uniqueNameFor(rootName, existingNames, rootName);
-	}
-
-	/**
-	 * Given a "root" name and a set of existing names, generate a unique
-	 * name that is either the "root" name or some variation on the "root"
-	 * name (e.g. "root2", "root3",...). The names are NOT case-sensitive
-	 * (i.e. "Root" and "root" are NOT both allowed).
-	 */
-	public static String uniqueNameForIgnoreCase(String rootName, Iterator<String> existingNames) {
-		return uniqueNameForIgnoreCase(rootName, CollectionTools.set(existingNames));
-	}
-
-	/**
-	 * Given a "root" name and a set of existing names, generate a unique
-	 * name that is either the "root" name or some variation on the "root"
-	 * name (e.g. "root2", "root3",...). The names are NOT case-sensitive
-	 * (i.e. "Root" and "root" are NOT both allowed).
-	 */
-	public static String uniqueNameForIgnoreCase(String rootName, Collection<String> existingNames) {
-		return uniqueNameFor(rootName, convertToLowerCase(existingNames), rootName.toLowerCase());
-	}
-
-	/**
-	 * use the suffixed "template" name to perform the comparisons, but RETURN
-	 * the suffixed "root" name; this allows case-insensitive comparisons
-	 * (i.e. the "template" name has been morphed to the same case as
-	 * the "existing" names, while the "root" name has not, but the "root" name
-	 * is what the client wants morphed to be unique)
-	 */
-	private static String uniqueNameFor(String rootName, Collection<String> existingNames, String templateName) {
-		if ( ! existingNames.contains(templateName)) {
-			return rootName;
-		}
-		String uniqueName = templateName;
-		for (int suffix = 2; true; suffix++) {
-			if ( ! existingNames.contains(uniqueName + suffix)) {
-				return rootName.concat(String.valueOf(suffix));
-			}
-		}
-	}
-
-	/**
-	 * Convert the specified collection of strings to a collection of the same
-	 * strings converted to lower case.
-	 */
-	private static HashSet<String> convertToLowerCase(Collection<String> strings) {
-		HashSet<String> result = new HashSet<String>(strings.size());
-		for (String string : strings) {
-			result.add(string.toLowerCase());
-		}
-		return result;
-	}
-
-	/**
-	 * Build a fully-qualified name for the specified database object.
-	 * Variations:
-	 *     catalog.schema.name
-	 *     catalog..name
-	 *     schema.name
-	 *     name
-	 */
-	public static String buildQualifiedDatabaseObjectName(String catalog, String schema, String name) {
-		if (name == null) {
-			return null;
-		}
-		if ((catalog == null) && (schema == null)) {
-			return name;
-		}
-
-		StringBuilder sb = new StringBuilder(100);
-		if (catalog != null) {
-			sb.append(catalog);
-			sb.append('.');
-		}
-		if (schema != null) {
-			sb.append(schema);
-		}
-		sb.append('.');
-		sb.append(name);
-		return sb.toString();
-	}
-
-	/**
-	 * The set of reserved words in the Java programming language.
-	 * These words cannot be used as identifiers (i.e. names).
-	 * http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
-	 */
-	@SuppressWarnings("nls")
-	public static final String[] JAVA_RESERVED_WORDS = new String[] {
-				"abstract",
-				"assert",  // jdk 1.4
-				"boolean",
-				"break",
-				"byte",
-				"case",
-				"catch",
-				"char",
-				"class",
-				"const",  // unused
-				"continue",
-				"default",
-				"do",
-				"double",
-				"else",
-				"enum",  // jdk 1.5
-				"extends",
-				"false",
-				"final",
-				"finally",
-				"float",
-				"for",
-				"goto",  // unused
-				"if",
-				"implements",
-				"import",
-				"instanceof",
-				"int",
-				"interface",
-				"long",
-				"native",
-				"new",
-				"null",
-				"package",
-				"private",
-				"protected",
-				"public",
-				"return",
-				"short",
-				"static",
-				"strictfp",  // jdk 1.2
-				"super",
-				"switch",
-				"synchronized",
-				"this",
-				"throw",
-				"throws",
-				"transient",
-				"true",
-				"try",
-				"void",
-				"volatile",
-				"while"
-			};
-
-	/**
-	 * The set of reserved words in the Java programming language.
-	 * These words cannot be used as identifiers (i.e. names).
-	 * http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
-	 */
-	public static final SortedSet<String> JAVA_RESERVED_WORDS_SET = 
-		Collections.unmodifiableSortedSet(CollectionTools.sortedSet(JAVA_RESERVED_WORDS));
-
-	/**
-	 * Return the set of Java programming language reserved words.
-	 * These words cannot be used as identifiers (i.e. names).
-	 * http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
-	 */
-	public static Iterator<String> javaReservedWords() {
-		return new ArrayIterator<String>(JAVA_RESERVED_WORDS);
-	}
-
-	/**
-	 * Return whether the specified string consists of Java identifier
-	 * characters (but may be a reserved word).
-	 */
-	public static boolean stringConsistsOfJavaIdentifierCharacters(String string) {
-		if (string.length() == 0) {
-			return false;
-		}
-		return stringConsistsOfJavaIdentifierCharacters_(string.toCharArray());
-	}
-
-	/**
-	 * Return whether the specified string consists of Java identifier
-	 * characters (but may be a reserved word).
-	 */
-	public static boolean stringConsistsOfJavaIdentifierCharacters(char[] string) {
-		if (string.length == 0) {
-			return false;
-		}
-		return stringConsistsOfJavaIdentifierCharacters_(string);
-	}
-
-	/**
-	 * The specified string must not be empty.
-	 */
-	private static boolean stringConsistsOfJavaIdentifierCharacters_(char[] string) {
-		if ( ! Character.isJavaIdentifierStart(string[0])) {
-			return false;
-		}
-		for (int i = string.length; i-- > 1; ) {  // NB: end with 1
-			if ( ! Character.isJavaIdentifierPart(string[i])) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Return whether the specified string is a valid Java identifier.
-	 */
-	public static boolean stringIsLegalJavaIdentifier(String string) {
-		return stringConsistsOfJavaIdentifierCharacters(string)
-				&& ! JAVA_RESERVED_WORDS_SET.contains(string);
-	}
-
-	/**
-	 * Return whether the specified string is a valid Java identifier.
-	 */
-	public static boolean stringIsLegalJavaIdentifier(char[] string) {
-		return stringConsistsOfJavaIdentifierCharacters(string)
-				&& ! JAVA_RESERVED_WORDS_SET.contains(new String(string));
-	}
-
-	/**
-	 * Convert the specified string to a valid Java identifier
-	 * by substituting an underscore '_' for any invalid characters
-	 * in the string and appending an underscore '_' to the string if
-	 * it is a Java reserved word.
-	 */
-	public static String convertToJavaIdentifier(String string) {
-		return convertToJavaIdentifier(string, '_');
-	}
-
-	/**
-	 * Convert the specified string to a valid Java identifier
-	 * by substituting the specified character for any invalid characters
-	 * in the string and, if necessary, appending the specified character
-	 * to the string until it is not a Java reserved word.
-	 */
-	public static String convertToJavaIdentifier(String string, char c) {
-		if (string.length() == 0) {
-			return string;
-		}
-		if (JAVA_RESERVED_WORDS_SET.contains(string)) {
-			// a reserved word is a valid identifier, we just need to tweak it a bit
-			checkCharIsJavaIdentifierPart(c);
-			return convertToJavaIdentifier(string + c, c);
-		}
-		char[] array = string.toCharArray();
-		return convertToJavaIdentifier_(array, c) ? new String(array) : string;
-	}
-
-	/**
-	 * Convert the specified string to a valid Java identifier
-	 * by substituting an underscore '_' for any invalid characters
-	 * in the string and appending an underscore '_' to the string if
-	 * it is a Java reserved word.
-	 */
-	public static char[] convertToJavaIdentifier(char[] string) {
-		return convertToJavaIdentifier(string, '_');
-	}
-
-	/**
-	 * Convert the specified string to a valid Java identifier
-	 * by substituting the specified character for any invalid characters
-	 * in the string and, if necessary, appending the specified character
-	 * to the string until it is not a Java reserved word.
-	 */
-	public static char[] convertToJavaIdentifier(char[] string, char c) {
-		if (string.length == 0) {
-			return string;
-		}
-		if (JAVA_RESERVED_WORDS_SET.contains(new String(string))) {
-			// a reserved word is a valid identifier, we just need to tweak it a bit
-			checkCharIsJavaIdentifierPart(c);
-			return convertToJavaIdentifier(ArrayTools.add(string, c), c);
-		}
-		convertToJavaIdentifier_(string, c);
-		return string;
-	}
-
-	/**
-	 * The specified string must not be empty.
-	 * Return whether the string was modified.
-	 */
-	private static boolean convertToJavaIdentifier_(char[] string, char c) {
-		boolean mod = false;
-		if ( ! Character.isJavaIdentifierStart(string[0])) {
-			checkCharIsJavaIdentifierStart(c);
-			string[0] = c;
-			mod = true;
-		}
-		checkCharIsJavaIdentifierPart(c);
-		for (int i = string.length; i-- > 1; ) {  // NB: end with 1
-			if ( ! Character.isJavaIdentifierPart(string[i])) {
-				string[i] = c;
-				mod = true;
-			}
-		}
-		return mod;
-	}
-
-	private static void checkCharIsJavaIdentifierStart(char c) {
-		if ( ! Character.isJavaIdentifierStart(c)) {
-			throw new IllegalArgumentException("invalid Java identifier start char: '" + c + '\'');  //$NON-NLS-1$
-		}
-	}
-
-	private static void checkCharIsJavaIdentifierPart(char c) {
-		if ( ! Character.isJavaIdentifierPart(c)) {
-			throw new IllegalArgumentException("invalid Java identifier part char: '" + c + '\'');  //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * Convert the specified method name to a property name.
-	 */
-	public static String convertGetterMethodNameToPropertyName(String methodName) {
-		int beginIndex = 0;
-		if (methodName.startsWith("get")) { //$NON-NLS-1$
-			beginIndex = 3;
-		} else if (methodName.startsWith("is")) { //$NON-NLS-1$
-			beginIndex = 2;
-		} else {
-			return methodName;  // return method name unchanged?
-		}
-		return Introspector.decapitalize(methodName.substring(beginIndex));
-	}
-
-
-	// ********** constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private NameTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NonNullBooleanTransformer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NonNullBooleanTransformer.java
deleted file mode 100644
index dcb59b9..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NonNullBooleanTransformer.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-/**
- * A <code>NonNullBooleanTransformer</code> will transform a possibly-null
- * {@link Boolean} to a non-null {@link Boolean}:<ul>
- * <li>When the original {@link Boolean} is <em>not</em> <code>null</code>,
- * the transformer will return it unchanged.
- * <li>When the original {@link Boolean} is <code>null</code>,
- * the transformer will return its client-specified "null value"
- * ({@link Boolean#TRUE} or {@link Boolean#FALSE}).
- * </ul>
- */
-public final class NonNullBooleanTransformer
-	implements Transformer<Boolean, Boolean>
-{
-	// not null
-	private final Boolean nullValue;
-
-	/**
-	 * A {@link Transformer} that will return the original {@link Boolean} when
-	 * it is non-<code>null</code>; otherwise the {@link Transformer} will return
-	 * {@link Boolean#TRUE}.
-	 */
-	public static final Transformer<Boolean, Boolean> TRUE = new NonNullBooleanTransformer(Boolean.TRUE);
-
-	/**
-	 * A {@link Transformer} that will return the original {@link Boolean} when
-	 * it is non-<code>null</code>; otherwise the {@link Transformer} will return
-	 * {@link Boolean#FALSE}.
-	 */
-	public static final Transformer<Boolean, Boolean> FALSE = new NonNullBooleanTransformer(Boolean.FALSE);
-
-	/**
-	 * Return a transformer that will return the specified value if the original
-	 * value is <code>null</code>. Throw a {@link NullPointerException} if the
-	 * specified value is <code>null</code>.
-	 */
-	public Transformer<Boolean, Boolean> valueOf(Boolean b) {
-		return valueOf(b.booleanValue());
-	}
-
-	/**
-	 * Return a transformer that will return the {@link Boolean} corresponding
-	 * to the specified value if the original value is <code>null</code>.
-	 */
-	public Transformer<Boolean, Boolean> valueOf(boolean b) {
-		return b ? TRUE : FALSE;
-	}
-
-	/**
-	 * Ensure only 2 constant versions.
-	 */
-	private NonNullBooleanTransformer(Boolean nullValue) {
-		super();
-		if (nullValue == null) {
-			throw new NullPointerException();
-		}
-		this.nullValue = nullValue;
-	}
-
-	public Boolean transform(Boolean b) {
-		return (b != null) ? b : this.nullValue;
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.nullValue);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NotBooleanTransformer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NotBooleanTransformer.java
deleted file mode 100644
index 998f22a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NotBooleanTransformer.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-/**
- * A <code>NotBooleanTransformer</code> will transform a
- * {@link Boolean} to its NOT value:<ul>
- * <li>If the original {@link Boolean} is {@link Boolean#TRUE},
- * the transformer will return {@link Boolean#FALSE}.
- * <li>If the original {@link Boolean} is {@link Boolean#FALSE},
- * the transformer will return {@link Boolean#TRUE}.
- * <li>If the original {@link Boolean} is <code>null</code>,
- * the transformer will return <code>null</code>.
- * </ul>
- */
-public class NotBooleanTransformer
-	implements BidiTransformer<Boolean, Boolean>
-{
-	public static final BidiTransformer<Boolean, Boolean> INSTANCE = new NotBooleanTransformer();
-
-	public static BidiTransformer<Boolean, Boolean> instance() {
-		return INSTANCE;
-	}
-
-	// ensure single instance
-	private NotBooleanTransformer() {
-		super();
-	}
-
-	public Boolean transform(Boolean b) {
-		return (b == null) ? null : BooleanTools.not(b);
-	}
-
-	public Boolean reverseTransform(Boolean b) {
-		return (b == null) ? null : BooleanTools.not(b);
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getSimpleName();
-	}
-
-	private static final long serialVersionUID = 1L;
-	private Object readResolve() {
-		// replace this object with the singleton
-		return INSTANCE;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NotNullFilter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NotNullFilter.java
deleted file mode 100644
index 386325b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NotNullFilter.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-import org.eclipse.jpt.utility.Filter;
-
-/**
- * This filter accepts only non-null objects.
- */
-public final class NotNullFilter<T>
-	implements Filter<T>, Serializable
-{
-	@SuppressWarnings("rawtypes")
-	public static final Filter INSTANCE = new NotNullFilter();
-
-	@SuppressWarnings("unchecked")
-	public static <R> Filter<R> instance() {
-		return INSTANCE;
-	}
-
-	// ensure single instance
-	private NotNullFilter() {
-		super();
-	}
-
-	// accept only non-null objects
-	public boolean accept(T o) {
-		return o != null;
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getSimpleName();
-	}
-
-	private static final long serialVersionUID = 1L;
-	private Object readResolve() {
-		// replace this object with the singleton
-		return INSTANCE;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NullList.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NullList.java
deleted file mode 100644
index 457485e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NullList.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-import org.eclipse.jpt.utility.internal.iterators.EmptyListIterator;
-
-/**
- * A "null" list is a bit different from an "empty" list: it allows clients to
- * add/remove elements to/from it but never changes. This is useful
- * for passing to methods that require a "collecting parameter" but the
- * client will ignore the resulting "collection".
- */
-public final class NullList<E>
-	implements List<E>, Serializable
-{
-
-	// singleton
-	@SuppressWarnings("rawtypes")
-	private static final NullList INSTANCE = new NullList();
-
-	/**
-	 * Return the singleton.
-	 */
-	@SuppressWarnings("unchecked")
-	public static <E> List<E> instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private NullList() {
-		super();
-	}
-
-	public boolean add(E o) {
-		return false;  // the list did not change
-	}
-
-	public void add(int index, E element) {
-		// ignore
-	}
-
-	public boolean addAll(Collection<? extends E> c) {
-		return false;  // the list did not change
-	}
-
-	public boolean addAll(int index, Collection<? extends E> c) {
-		return false;  // the list did not change
-	}
-
-	public void clear() {
-		// ignore
-	}
-
-	public boolean contains(Object o) {
-		return false;
-	}
-
-	public boolean containsAll(Collection<?> c) {
-		return c.isEmpty();
-	}
-
-	public E get(int index) {
-		throw new IndexOutOfBoundsException("Index: " + index + ", Size: 0"); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	public int indexOf(Object o) {
-		return -1;
-	}
-
-	public boolean isEmpty() {
-		return true;
-	}
-
-	public Iterator<E> iterator() {
-		return EmptyIterator.instance();
-	}
-
-	public int lastIndexOf(Object o) {
-		return -1;
-	}
-
-	public ListIterator<E> listIterator() {
-		return EmptyListIterator.instance();
-	}
-
-	public ListIterator<E> listIterator(int index) {
-		return EmptyListIterator.instance();
-	}
-
-	public boolean remove(Object o) {
-		return false;  // the list did not change
-	}
-
-	public E remove(int index) {
-		throw new IndexOutOfBoundsException("Index: " + index + ", Size: 0"); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	public boolean removeAll(Collection<?> c) {
-		return false;  // the list did not change
-	}
-
-	public boolean retainAll(Collection<?> c) {
-		return false;  // the list did not change
-	}
-
-	public E set(int index, E element) {
-		throw new IndexOutOfBoundsException("Index: " + index + ", Size: 0"); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	public int size() {
-		return 0;
-	}
-
-	public List<E> subList(int fromIndex, int toIndex) {
-		return this;
-	}
-
-	private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
-	public Object[] toArray() {
-		return EMPTY_OBJECT_ARRAY;
-	}
-
-	public <T> T[] toArray(T[] a) {
-		return a;
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this);
-	}
-
-	private static final long serialVersionUID = 1L;
-	private Object readResolve() {
-		// replace this object with the singleton
-		return INSTANCE;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ObjectReference.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ObjectReference.java
deleted file mode 100644
index e294cc1..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ObjectReference.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-/**
- * Provide a container for passing an object that can be changed by the recipient.
- * 
- * @see SynchronizedObject
- */
-public class ObjectReference<V>
-	implements Cloneable, Serializable
-{
-	/** Backing value. */
-	private volatile V value;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Create an object reference with the specified initial value.
-	 */
-	public ObjectReference(V value) {
-		super();
-		this.value = value;
-	}
-
-	/**
-	 * Create an object reference with an initial value of
-	 * <code>null</code>.
-	 */
-	public ObjectReference() {
-		this(null);
-	}
-
-
-	// ********** accessors **********
-
-	/**
-	 * Return the current value.
-	 */
-	public V getValue() {
-		return this.value;
-	}
-
-	/**
-	 * Return whether the current value is equal to the specified value.
-	 */
-	public boolean valueEquals(V v) {
-		return Tools.valuesAreEqual(this.value, v);
-	}
-
-	/**
-	 * Return whether the current value is not equal to the specified value.
-	 */
-	public boolean valueNotEqual(V v) {
-		return Tools.valuesAreDifferent(this.value, v);
-	}
-
-	/**
-	 * Return whether the current value is <code>null</code>.
-	 */
-	public boolean isNull() {
-		return this.value == null;
-	}
-
-	/**
-	 * Return whether the current value is not <code>null</code>.
-	 */
-	public boolean isNotNull() {
-		return this.value != null;
-	}
-
-	/**
-	 * Set the value.
-	 * Return the previous value.
-	 */
-	public V setValue(V value) {
-		V old = this.value;
-		this.value = value;
-		return old;
-	}
-
-	/**
-	 * Set the value to <code>null</code>.
-	 * Return the previous value.
-	 */
-	public V setNull() {
-		return this.setValue(null);
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public ObjectReference<V> clone() {
-		try {
-			@SuppressWarnings("unchecked")
-			ObjectReference<V> clone = (ObjectReference<V>) super.clone();
-			return clone;
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		return (obj instanceof ObjectReference<?>) &&
-			Tools.valuesAreEqual(this.value, ((ObjectReference<?>) obj).value);
-	}
-
-	@Override
-	public int hashCode() {
-		return (this.value == null) ? 0 : this.value.hashCode();
-	}
-
-	@Override
-	public String toString() {
-		return '[' + String.valueOf(this.value) + ']';
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Queue.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Queue.java
deleted file mode 100644
index 43dc547..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Queue.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.NoSuchElementException;
-
-/**
- * Interface defining the classic queue behavior,
- * without the backdoors allowed by {@link java.util.Queue}.
- * 
- * @param <E> the type of elements contained by the queue
- */
-public interface Queue<E> {
-
-	/**
-	 * "Enqueue" the specified item to the tail of the queue.
-	 */
-	void enqueue(E o);
-
-	/**
-	 * "Dequeue" an item from the head of the queue.
-	 */
-	E dequeue();
-
-	/**
-	 * Return the item on the head of the queue
-	 * without removing it from the queue.
-	 */
-	E peek();
-
-	/**
-	 * Return whether the queue is empty.
-	 */
-	boolean isEmpty();
-
-
-	final class Empty<E> implements Queue<E>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final Queue INSTANCE = new Empty();
-		@SuppressWarnings("unchecked")
-		public static <T> Queue<T> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Empty() {
-			super();
-		}
-		public void enqueue(E o) {
-			throw new UnsupportedOperationException();
-		}
-		public E dequeue() {
-			throw new NoSuchElementException();
-		}
-		public E peek() {
-			throw new NoSuchElementException();
-		}
-		public boolean isEmpty() {
-			return true;
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Range.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Range.java
deleted file mode 100644
index 9173ad9..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Range.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-/**
- * This simple container class simply puts a bit of semantics
- * around a pair of numbers.
- */
-public class Range
-	implements Cloneable, Serializable
-{
-	/** The starting index of the range. */
-	public final int start;
-
-	/** The ending index of the range. */
-	public final int end;
-
-	/**
-	 * The size can be negative if the ending index
-	 * is less than the starting index.
-	 */
-	public final int size;
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * Construct with the specified start and end,
-	 * both of which are immutable.
-	 */
-	public Range(int start, int end) {
-		super();
-		this.start = start;
-		this.end = end;
-		this.size = end - start + 1;
-	}
-
-	/**
-	 * Return whether the range includes the specified
-	 * index.
-	 */
-	public boolean includes(int index) {
-		return (this.start <= index) && (index <= this.end);
-	}
-
-	@Override
-	public boolean equals(Object o) {
-		if (this == o) {
-			return true;
-		}
-		if ( ! (o instanceof Range)) {
-			return false;
-		}
-		Range otherRange = (Range) o;
-		return (this.start == otherRange.start)
-			&& (this.end == otherRange.end);
-	}
-
-	@Override
-	public int hashCode() {
-		return this.start ^ this.end;
-	}
-
-	@Override
-	public Range clone() {
-		try {
-			return (Range) super.clone();
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-	@Override
-	public String toString() {
-		return '[' + this.start + ", " + this.end + ']'; //$NON-NLS-1$
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ReflectionTools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ReflectionTools.java
deleted file mode 100644
index 22bb534..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ReflectionTools.java
+++ /dev/null
@@ -1,1544 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-
-/**
- * Convenience methods related to the <code>java.lang.reflect</code> package.
- * These methods provide shortcuts for manipulating objects via
- * reflection; particularly when dealing with fields and/or methods that
- * are not publicly accessible or are inherited.
- * <p>
- * In most cases, all exceptions are handled and wrapped in
- * {@link java.lang.RuntimeException}s; so these methods should
- * be used when there should be no problems using reflection (i.e.
- * the referenced members are presumably present etc.).
- * <p>
- * There are also a number of methods whose names
- * end with an underscore. These methods declare the expected checked
- * exceptions (e.g. {@link NoSuchMethodException}, {@link NoSuchFieldException}).
- * These methods can be used to probe
- * for methods, fields, etc. that should be present but might not be.
- */
-public final class ReflectionTools {
-
-	public static final Class<?>[] ZERO_PARAMETER_TYPES = new Class[0];
-	public static final Object[] ZERO_ARGUMENTS = new Object[0];
-	private static final String CR = StringTools.CR;
-
-	public static final Class<?> VOID_CLASS = void.class;
-	public static final Class<java.lang.Void> VOID_WRAPPER_CLASS = java.lang.Void.class;
-
-
-	// ********** fields **********
-
-	/**
-	 * Get a field value, given the containing object and field name.
-	 * Return its result.
-	 * Useful for accessing private, package, or protected fields.
-	 * <p>
-	 * <code>Object.getFieldValue(String fieldName)</code>
-	 */
-	public static Object getFieldValue(Object object, String fieldName) {
-		try {
-			return getFieldValue_(object, fieldName);
-		} catch (NoSuchFieldException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedFieldName(object, fieldName), ex);
-		} catch (IllegalAccessException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedFieldName(object, fieldName), ex);
-		}
-	}
-
-	/**
-	 * Get a field value, given the containing object and field name.
-	 * Return its result.
-	 * Useful for accessing private, package, or protected fields.
-	 * <p>
-	 * <code>Object.getFieldValue(String fieldName)</code>
-	 */
-	public static Object getFieldValue_(Object object, String fieldName)
-		throws NoSuchFieldException, IllegalAccessException
-	{
-		return getField_(object, fieldName).get(object);
-	}
-
-	/**
-	 * Get a static field value, given the containing class and field name.
-	 * Return its result.
-	 * Useful for accessing private, package, or protected fields.
-	 * <p>
-	 * <code>Class.getStaticFieldValue(String fieldName)</code>
-	 */
-	public static Object getStaticFieldValue(Class<?> javaClass, String fieldName) {
-		try {
-			return getStaticFieldValue_(javaClass, fieldName);
-		} catch (NoSuchFieldException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedFieldName(javaClass, fieldName), ex);
-		} catch (IllegalAccessException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedFieldName(javaClass, fieldName), ex);
-		}
-	}
-
-	/**
-	 * Get a static field value, given the containing class and field name.
-	 * Return its result.
-	 * Useful for accessing private, package, or protected fields.
-	 * <p>
-	 * <code>Class.getStaticFieldValue(String fieldName)</code>
-	 */
-	public static Object getStaticFieldValue_(Class<?> javaClass, String fieldName)
-		throws NoSuchFieldException, IllegalAccessException
-	{
-		return getField_(javaClass, fieldName).get(null);
-	}
-
-	/**
-	 * Set a field value, given the containing object, field name, and new value.
-	 * Useful for accessing private, package, or protected fields.
-	 * <p>
-	 * <code>Object.setFieldValue(String fieldName, Object value)</code>
-	 */
-	public static void setFieldValue(Object object, String fieldName, Object value) {
-		try {
-			setFieldValue_(object, fieldName, value);
-		} catch (NoSuchFieldException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedFieldName(object, fieldName), ex);
-		} catch (IllegalAccessException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedFieldName(object, fieldName), ex);
-		}
-	}
-
-	/**
-	 * Set a field value, given the containing object, field name, and new value.
-	 * Useful for accessing private, package, or protected fields.
-	 * <p>
-	 * <code>Object.setFieldValue(String fieldName, Object value)</code>
-	 */
-	public static void setFieldValue_(Object object, String fieldName, Object value)
-		throws NoSuchFieldException, IllegalAccessException
-	{
-		getField_(object, fieldName).set(object, value);
-	}
-
-	/**
-	 * Set a static field value, given the containing class, field name, and new value.
-	 * Useful for accessing private, package, or protected fields.
-	 * <p>
-	 * <code>Class.setStaticFieldValue(String fieldName, Object value)</code>
-	 */
-	public static void setStaticFieldValue(Class<?> javaClass, String fieldName, Object value) {
-		try {
-			setStaticFieldValue_(javaClass, fieldName, value);
-		} catch (NoSuchFieldException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedFieldName(javaClass, fieldName), ex);
-		} catch (IllegalAccessException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedFieldName(javaClass, fieldName), ex);
-		}
-	}
-
-	/**
-	 * Set a static field value, given the containing class, field name, and new value.
-	 * Useful for accessing private, package, or protected fields.
-	 * <p>
-	 * <code>Class.setStaticFieldValue(String fieldName, Object value)</code>
-	 */
-	public static void setStaticFieldValue_(Class<?> javaClass, String fieldName, Object value)
-		throws NoSuchFieldException, IllegalAccessException
-	{
-		getField_(javaClass, fieldName).set(null, value);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a field for the specified object and field name.
-	 * If the object's class does not directly
-	 * define the field, look for it in the class's superclasses.
-	 * Make any private/package/protected field accessible.
-	 * <p>
-	 * <code>Object.getField(String fieldName)</code>
-	 */
-	public static Field getField(Object object, String fieldName) {
-		try {
-			return getField_(object, fieldName);
-		} catch (NoSuchFieldException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedFieldName(object, fieldName), ex);
-		}
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a field for the specified object and field name.
-	 * If the object's class does not directly
-	 * define the field, look for it in the class's superclasses.
-	 * Make any private/package/protected field accessible.
-	 * <p>
-	 * <code>Object.getField(String fieldName)</code>
-	 */
-	public static Field getField_(Object object, String fieldName)
-		throws NoSuchFieldException
-	{
-		return getField_(object.getClass(), fieldName);
-	}
-
-	/**
-	 * Return a field for the specified class and field name.
-	 * If the class does not directly
-	 * define the field, look for it in the class's superclasses.
-	 * Make any private/package/protected field accessible.
-	 */
-	public static Field getField(Class<?> javaClass, String fieldName) {
-		try {
-			return getField_(javaClass, fieldName);
-		} catch (NoSuchFieldException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedFieldName(javaClass, fieldName), ex);
-		}
-	}
-
-	/**
-	 * Return a field for the specified class and field name.
-	 * If the class does not directly
-	 * define the field, look for it in the class's superclasses.
-	 * Make any private/package/protected field accessible.
-	 */
-	public static Field getField_(Class<?> javaClass, String fieldName)
-		throws NoSuchFieldException
-	{
-		Field field = null;
-		try {
-			field = javaClass.getDeclaredField(fieldName);
-		} catch (NoSuchFieldException ex) {
-			Class<?> superclass = javaClass.getSuperclass();
-			if (superclass == null) {
-				throw ex;
-			}
-			return getField_(superclass, fieldName);  // recurse
-		}
-		field.setAccessible(true);
-		return field;
-	}
-
-	/**
-	 * Return all the fields for the
-	 * specified class, including inherited fields.
-	 * Make any private/package/protected fields accessible.
-	 * <p>
-	 * <code>Class.getAllFields()</code>
-	 */
-	public static Iterable<Field> getAllFields(Class<?> javaClass) {
-		ArrayList<Field> fields = new ArrayList<Field>();
-		for (Class<?> tempClass = javaClass; tempClass != null; tempClass = tempClass.getSuperclass()) {
-			addDeclaredFieldsTo(tempClass, fields);
-		}
-		return fields;
-	}
-
-	/*
-	 * Add the declared fields for the specified class
-	 * to the specified list.
-	 */
-	private static void addDeclaredFieldsTo(Class<?> javaClass, ArrayList<Field> fields) {
-		for (Field field : getDeclaredFields(javaClass)) {
-			fields.add(field);
-		}
-	}
-
-	/**
-	 * Return the declared fields for the specified class.
-	 * Make any private/package/protected fields accessible.
-	 * <p>
-	 * <code>Class.getAccessibleDeclaredFields()</code>
-	 */
-	public static Iterable<Field> getDeclaredFields(Class<?> javaClass) {
-		Field[] fields = javaClass.getDeclaredFields();
-		for (Field field : fields) {
-			field.setAccessible(true);
-		}
-		return new ArrayIterable<Field>(fields);
-	}
-
-
-	// ********** methods **********
-
-	/**
-	 * Convenience method.
-	 * Execute a zero-argument method, given the receiver and method name.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * <p>
-	 * <code>Object.execute(String methodName)</code>
-	 */
-	public static Object executeMethod(Object receiver, String methodName) {
-		return executeMethod(receiver, methodName, ZERO_PARAMETER_TYPES, ZERO_ARGUMENTS);
-	}
-
-	/**
-	 * Convenience method.
-	 * Execute a one-argument method, given the receiver,
-	 * method name, parameter type, and argument.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * <p>
-	 * <code>Object.execute(String methodName, Class<?> parameterType, Object argument)</code>
-	 */
-	public static Object executeMethod(Object receiver, String methodName, Class<?> parameterType, Object argument) {
-		return executeMethod(receiver, methodName, new Class[] {parameterType}, new Object[] {argument});
-	}
-
-	/**
-	 * Execute a method, given the receiver,
-	 * method name, parameter types, and arguments.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * <p>
-	 * <code>Object.execute(String methodName, Class<?>[] parameterTypes, Object[] arguments)</code>
-	 */
-	public static Object executeMethod(Object receiver, String methodName, Class<?>[] parameterTypes, Object[] arguments) {
-		return executeMethod(getMethod(receiver, methodName, parameterTypes), receiver, arguments);
-	}
-
-	/**
-	 * Execute the specified method, given the receiver and arguments.
-	 * Return its result.
-	 * Useful for invoking cached methods.
-	 */
-	public static Object executeMethod(Method method, Object receiver, Object[] arguments) {
-		try {
-			return method.invoke(receiver, arguments);
-		} catch (IllegalAccessException ex) {
-			throw new RuntimeException(ex + CR + method, ex);
-		} catch (InvocationTargetException ex) {
-			throw new RuntimeException(method + CR + ex.getTargetException(), ex);
-		}
-	}
-
-	/**
-	 * Convenience method.
-	 * Execute a zero-argument method,
-	 * given the receiver and method name.
-	 * Return its result.
-	 * Throw an exception if the method is not defined.
-	 * Useful for invoking private, package, or protected methods.
-	 * <p>
-	 * <code>Object.execute(String methodName)</code>
-	 */
-	public static Object executeMethod_(Object receiver, String methodName)
-		throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
-	{
-		return executeMethod_(receiver, methodName, ZERO_PARAMETER_TYPES, ZERO_ARGUMENTS);
-	}
-
-	/**
-	 * Convenience method.
-	 * Execute a method, given the receiver,
-	 * method name, parameter type, and argument.
-	 * Return its result.
-	 * Throw an exception if the method is not defined.
-	 * Useful for invoking private, package, or protected methods.
-	 * <p>
-	 * <code>Object.execute(String methodName, Class<?> parameterType, Object argument)</code>
-	 */
-	public static Object executeMethod_(Object receiver, String methodName, Class<?> parameterType, Object argument)
-		throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
-	{
-		return executeMethod_(receiver, methodName, new Class[] {parameterType}, new Object[] {argument});
-	}
-
-	/**
-	 * Execute a method, given the receiver,
-	 * method name, parameter types, and arguments.
-	 * Return its result.
-	 * Throw an exception if the method is not defined.
-	 * Useful for invoking private, package, or protected methods.
-	 * <p>
-	 * <code>Object.execute(String methodName, Class<?>[] parameterTypes, Object[] arguments)</code>
-	 */
-	public static Object executeMethod_(Object receiver, String methodName, Class<?>[] parameterTypes, Object[] arguments)
-		throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
-	{
-		return getMethod_(receiver, methodName, parameterTypes).invoke(receiver, arguments);
-	}
-
-	/**
-	 * Convenience method.
-	 * Execute a zero-argument static method,
-	 * given the class and method name.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * <p>
-	 * <code>Class.executeStaticMethod(String methodName)</code>
-	 */
-	public static Object executeStaticMethod(Class<?> javaClass, String methodName) {
-		return executeStaticMethod(javaClass, methodName, ZERO_PARAMETER_TYPES, ZERO_ARGUMENTS);
-	}
-
-	/**
-	 * Convenience method.
-	 * Execute a static method, given the class,
-	 * method name, parameter type, and argument.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * <p>
-	 * <code>Class.executeStaticMethod(String methodName, Class<?> parameterType, Object argument)</code>
-	 */
-	public static Object executeStaticMethod(Class<?> javaClass, String methodName, Class<?> parameterType, Object argument) {
-		return executeStaticMethod(javaClass, methodName, new Class[] {parameterType}, new Object[] {argument});
-	}
-
-	/**
-	 * Execute a static method, given the class,
-	 * method name, parameter types, and arguments.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * <p>
-	 * <code>Class.executeStaticMethod(String methodName, Class<?>[] parameterTypes, Object[] arguments)</code>
-	 */
-	public static Object executeStaticMethod(Class<?> javaClass, String methodName, Class<?>[] parameterTypes, Object[] arguments) {
-		try {
-			return executeStaticMethod_(javaClass, methodName, parameterTypes, arguments);
-		} catch (NoSuchMethodException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedMethodSignature(javaClass, methodName, parameterTypes), ex);
-		} catch (IllegalAccessException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedMethodSignature(javaClass, methodName, parameterTypes), ex);
-		} catch (InvocationTargetException ex) {
-			throw new RuntimeException(buildFullyQualifiedMethodSignature(javaClass, methodName, parameterTypes) + CR + ex.getTargetException(), ex);
-		}
-	}
-
-	/**
-	 * Convenience method.
-	 * Execute a zero-argument static method,
-	 * given the class and method name.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * <p>
-	 * <code>Class.executeStaticMethod(String methodName)</code>
-	 */
-	public static Object executeStaticMethod_(Class<?> javaClass, String methodName)
-		throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
-	{
-		return executeStaticMethod_(javaClass, methodName, ZERO_PARAMETER_TYPES, ZERO_ARGUMENTS);
-	}
-
-	/**
-	 * Convenience method.
-	 * Execute a static method, given the class,
-	 * method name, parameter type, and argument.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * <p>
-	 * <code>Class.executeStaticMethod(String methodName, Class<?> parameterType, Object argument)</code>
-	 */
-	public static Object executeStaticMethod_(Class<?> javaClass, String methodName, Class<?> parameterType, Object argument)
-		throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
-	{
-		return executeStaticMethod_(javaClass, methodName, new Class[] {parameterType}, new Object[] {argument});
-	}
-
-	/**
-	 * Execute a static method, given the class,
-	 * method name, parameter types, and arguments.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * <p>
-	 * <code>Class.executeStaticMethod(String methodName, Class<?>[] parameterTypes, Object[] arguments)</code>
-	 */
-	public static Object executeStaticMethod_(Class<?> javaClass, String methodName, Class<?>[] parameterTypes, Object[] arguments)
-		throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
-	{
-		return getStaticMethod_(javaClass, methodName, parameterTypes).invoke(null, arguments);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a zero-argument method for the specified class
-	 * and method name. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getMethod(Class<?> javaClass, String methodName) {
-		return getMethod(javaClass, methodName, ZERO_PARAMETER_TYPES);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a zero-argument method for the specified class
-	 * and method name. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getMethod_(Class<?> javaClass, String methodName)
-		throws NoSuchMethodException
-	{
-		return getMethod_(javaClass, methodName, ZERO_PARAMETER_TYPES);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a method for the specified class, method name,
-	 * and formal parameter type. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getMethod(Class<?> javaClass, String methodName, Class<?> parameterType) {
-		return getMethod(javaClass, methodName, new Class[] {parameterType});
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a method for the specified class, method name,
-	 * and formal parameter type. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getMethod_(Class<?> javaClass, String methodName, Class<?> parameterType)
-		throws NoSuchMethodException
-	{
-		return getMethod_(javaClass, methodName, new Class[] {parameterType});
-	}
-
-	/**
-	 * Return a method for the specified class, method name,
-	 * and formal parameter types. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getMethod(Class<?> javaClass, String methodName, Class<?>[] parameterTypes) {
-		try {
-			return getMethod_(javaClass, methodName, parameterTypes);
-		} catch (NoSuchMethodException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedMethodSignature(javaClass, methodName, parameterTypes), ex);
-		}
-	}
-
-	/**
-	 * Return a method for the specified class, method name,
-	 * and formal parameter types. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getMethod_(Class<?> javaClass, String methodName, Class<?>[] parameterTypes)
-		throws NoSuchMethodException
-	{
-		Method method = null;
-		try {
-			method = javaClass.getDeclaredMethod(methodName, parameterTypes);
-		} catch (NoSuchMethodException ex) {
-			Class<?> superclass = javaClass.getSuperclass();
-			if (superclass == null) {
-				throw ex;
-			}
-			// recurse
-			return getMethod_(superclass, methodName, parameterTypes);
-		}
-		method.setAccessible(true);
-		return method;
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a zero-argument method for the specified object
-	 * and method name. If the object's class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getMethod(Object object, String methodName) {
-		return getMethod(object.getClass(), methodName);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a zero-argument method for the specified object
-	 * and method name. If the object's class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getMethod_(Object object, String methodName)
-		throws NoSuchMethodException
-	{
-		return getMethod_(object.getClass(), methodName);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a method for the specified object, method name,
-	 * and formal parameter types. If the object's class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getMethod(Object object, String methodName, Class<?>[] parameterTypes) {
-		return getMethod(object.getClass(), methodName, parameterTypes);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a method for the specified object, method name,
-	 * and formal parameter types. If the object's class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getMethod_(Object object, String methodName, Class<?>[] parameterTypes)
-		throws NoSuchMethodException
-	{
-		return getMethod_(object.getClass(), methodName, parameterTypes);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a method for the specified object, method name,
-	 * and formal parameter type. If the object's class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getMethod(Object object, String methodName, Class<?> parameterType) {
-		return getMethod(object.getClass(), methodName, parameterType);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a method for the specified object, method name,
-	 * and formal parameter type. If the object's class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getMethod_(Object object, String methodName, Class<?> parameterType)
-		throws NoSuchMethodException
-	{
-		return getMethod_(object.getClass(), methodName, parameterType);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a zero-argument static method for the specified class
-	 * and method name. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getStaticMethod(Class<?> javaClass, String methodName) {
-		return getStaticMethod(javaClass, methodName, ZERO_PARAMETER_TYPES);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a static method for the specified class, method name,
-	 * and formal parameter type. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getStaticMethod(Class<?> javaClass, String methodName, Class<?> parameterTypes) {
-		return getStaticMethod(javaClass, methodName, new Class[] {parameterTypes});
-	}
-
-	/**
-	 * Return a static method for the specified class, method name,
-	 * and formal parameter types. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getStaticMethod(Class<?> javaClass, String methodName, Class<?>[] parameterTypes) {
-		try {
-			return getStaticMethod_(javaClass, methodName, parameterTypes);
-		} catch (NoSuchMethodException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedMethodSignature(javaClass, methodName, parameterTypes), ex);
-		}
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a zero-argument static method for the specified class
-	 * and method name. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getStaticMethod_(Class<?> javaClass, String methodName)
-		throws NoSuchMethodException
-	{
-		return getStaticMethod_(javaClass, methodName, ZERO_PARAMETER_TYPES);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a static method for the specified class, method name,
-	 * and formal parameter type. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getStaticMethod_(Class<?> javaClass, String methodName, Class<?> parameterTypes)
-		throws NoSuchMethodException
-	{
-		return getStaticMethod_(javaClass, methodName, new Class[] {parameterTypes});
-	}
-
-	/**
-	 * Return a static method for the specified class, method name,
-	 * and formal parameter types. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Make any private/package/protected method accessible.
-	 */
-	public static Method getStaticMethod_(Class<?> javaClass, String methodName, Class<?>[] parameterTypes)
-		throws NoSuchMethodException
-	{
-		Method method = getMethod_(javaClass, methodName, parameterTypes);
-		if (Modifier.isStatic(method.getModifiers())) {
-			return method;
-		}
-		throw new NoSuchMethodException(buildFullyQualifiedMethodSignature(javaClass, methodName, parameterTypes));
-	}
-
-	/**
-	 * Return all the methods for the
-	 * specified class, including inherited methods.
-	 * Make any private/package/protected methods accessible.
-	 * <p>
-	 * <code>Class.getAllMethods()</code>
-	 */
-	public static Iterable<Method> getAllMethods(Class<?> javaClass) {
-		ArrayList<Method> methods = new ArrayList<Method>();
-		for (Class<?> tempClass = javaClass; tempClass != null; tempClass = tempClass.getSuperclass()) {
-			addDeclaredMethodsTo(tempClass, methods);
-		}
-		return methods;
-	}
-
-	/*
-	 * Add the declared methods for the specified class
-	 * to the specified list.
-	 */
-	private static void addDeclaredMethodsTo(Class<?> javaClass, ArrayList<Method> methods) {
-		for (Method method : getDeclaredMethods(javaClass)) {
-			methods.add(method);
-		}
-	}
-
-	/**
-	 * Return the declared methods for the specified class.
-	 * Make any private/package/protected methods accessible.
-	 * <p>
-	 * <code>Class.getAccessibleDeclaredMethods()</code>
-	 */
-	public static Iterable<Method> getDeclaredMethods(Class<?> javaClass) {
-		Method[] methods = javaClass.getDeclaredMethods();
-		for (Method method : methods) {
-			method.setAccessible(true);
-		}
-		return new ArrayIterable<Method>(methods);
-	}
-
-
-	// ********** constructors **********
-
-	/**
-	 * Return the default (zero-argument) constructor
-	 * for the specified class.
-	 * Make any private/package/protected constructor accessible.
-	 * <p>
-	 * <code>Class.getDefaultConstructor()</code>
-	 */
-	public static <T> Constructor<T> getDefaultConstructor(Class<T> javaClass) {
-		return getConstructor(javaClass);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return the default (zero-argument) constructor
-	 * for the specified class.
-	 * Make any private/package/protected constructor accessible.
-	 * <p>
-	 * <code>Class.getConstructor()</code>
-	 */
-	public static <T> Constructor<T> getConstructor(Class<T> javaClass) {
-		return getConstructor(javaClass, ZERO_PARAMETER_TYPES);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return the constructor for the specified class
-	 * and formal parameter type.
-	 * Make any private/package/protected constructor accessible.
-	 * <p>
-	 * <code>Class.getConstructor(Class<?> parameterType)</code>
-	 */
-	public static <T> Constructor<T> getConstructor(Class<T> javaClass, Class<?> parameterType) {
-		return getConstructor(javaClass, new Class[] {parameterType});
-	}
-
-	/**
-	 * Return the constructor for the specified class
-	 * and formal parameter types.
-	 * Make any private/package/protected constructor accessible.
-	 * <p>
-	 * <code>Class.getConstructor(Class<?>[] parameterTypes)</code>
-	 */
-	public static <T> Constructor<T> getConstructor(Class<T> javaClass, Class<?>[] parameterTypes) {
-		try {
-			return getConstructor_(javaClass, parameterTypes);
-		} catch (NoSuchMethodException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedConstructorSignature(javaClass, parameterTypes), ex);
-		}
-	}
-
-	/**
-	 * Return the default (zero-argument) constructor
-	 * for the specified class.
-	 * Make any private/package/protected constructor accessible.
-	 * <p>
-	 * <code>Class.getDefaultConstructor()</code>
-	 */
-	public static <T> Constructor<T> getDefaultConstructor_(Class<T> javaClass)
-		throws NoSuchMethodException
-	{
-		return getConstructor_(javaClass);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return the default (zero-argument) constructor
-	 * for the specified class.
-	 * Make any private/package/protected constructor accessible.
-	 * <p>
-	 * <code>Class.getConstructor()</code>
-	 */
-	public static <T> Constructor<T> getConstructor_(Class<T> javaClass)
-		throws NoSuchMethodException
-	{
-		return getConstructor_(javaClass, ZERO_PARAMETER_TYPES);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return the constructor for the specified class
-	 * and formal parameter type.
-	 * Make any private/package/protected constructor accessible.
-	 * <p>
-	 * <code>Class.getConstructor(Class<?> parameterType)</code>
-	 */
-	public static <T> Constructor<T> getConstructor_(Class<T> javaClass, Class<?> parameterType)
-		throws NoSuchMethodException
-	{
-		return getConstructor_(javaClass, new Class[] {parameterType});
-	}
-
-	/**
-	 * Return the constructor for the specified class
-	 * and formal parameter types.
-	 * Make any private/package/protected constructor accessible.
-	 * <p>
-	 * <code>Class.getConstructor(Class<?>[] parameterTypes)</code>
-	 */
-	public static <T> Constructor<T> getConstructor_(Class<T> javaClass, Class<?>[] parameterTypes)
-		throws NoSuchMethodException
-	{
-		Constructor<T> constructor = javaClass.getDeclaredConstructor(parameterTypes);
-		constructor.setAccessible(true);
-		return constructor;
-	}
-
-	/**
-	 * Return the declared constructors for the specified class.
-	 * Make any private/package/protected constructors accessible.
-	 * <p>
-	 * <code>Class.getAccessibleDeclaredConstructors()</code>
-	 */
-	public static <T> Iterable<Constructor<T>> getDeclaredConstructors(Class<T> javaClass) {
-		@SuppressWarnings("unchecked")
-		Constructor<T>[] constructors = (Constructor<T>[]) javaClass.getDeclaredConstructors();
-		for (Constructor<T> constructor : constructors) {
-			constructor.setAccessible(true);
-		}
-		return new ArrayIterable<Constructor<T>>(constructors);
-	}
-
-
-	// ********** classes **********
-
-	/**
-	 * Convenience method.
-	 * Return the specified class (without the checked exception).
-	 */
-	public static Class<?> classForName(String className) {
-		try {
-			return Class.forName(className);
-		} catch (ClassNotFoundException ex) {
-			throw new RuntimeException(className, ex);
-		}
-	}
-
-	/**
-	 * Convenience method.
-	 * Return the specified class (without the checked exception).
-	 */
-	public static Class<?> classForName(String className, boolean initialize, ClassLoader classLoader) {
-		try {
-			return Class.forName(className, initialize, classLoader);
-		} catch (ClassNotFoundException ex) {
-			throw new RuntimeException(className, ex);
-		}
-	}
-
-	/**
-	 * Return the "array depth" of the specified class.
-	 * The depth is the number of dimensions for an array type.
-	 * Non-array types have a depth of zero.
-	 * <p>
-	 * <code>Class.getArrayDepth()</code>
-	 */
-	public static int getArrayDepth(Class<?> javaClass) {
-		int depth = 0;
-		while (javaClass.isArray()) {
-			depth++;
-			javaClass = javaClass.getComponentType();
-		}
-		return depth;
-	}
-
-	/**
-	 * Return the "element type" of the specified class.
-	 * The element type is the base type held by an array type.
-	 * A non-array type simply returns itself.
-	 * <p>
-	 * <code>Class.getElementType()</code>
-	 */
-	public static Class<?> getElementType(Class<?> javaClass) {
-		while (javaClass.isArray()) {
-			javaClass = javaClass.getComponentType();
-		}
-		return javaClass;
-	}
-
-	/**
-	 * Return the wrapper class corresponding to the specified
-	 * primitive class. Return <code>null</code> if the specified class
-	 * is not a primitive class.
-	 * <p>
-	 * <code>Class.getWrapperClass()</code>
-	 */
-	public static Class<?> getWrapperClass(Class<?> primitiveClass) {
-		for (Primitive primitive : PRIMITIVES) {
-			if (primitive.javaClass == primitiveClass) {
-				return primitive.wrapperClass;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Return whether the specified class is a primitive wrapper
-	 * class (i.e. <code>java.lang.Void</code> or one of the primitive
-	 * variable wrapper classes, <code>java.lang.Boolean</code>,
-	 * <code>java.lang.Integer</code>, <code>java.lang.Float</code>, etc.).
-	 * <p>
-	 * <strong>NB:</strong> <code>void.class.isPrimitive() == true</code>
-	 * <p>
-	 * <code>Class.isPrimitiveWrapper()</code>
-	 */
-	public static boolean classIsPrimitiveWrapper(Class<?> javaClass) {
-		if (javaClass.isArray() || (javaClass.getName().length() > MAX_PRIMITIVE_WRAPPER_CLASS_NAME_LENGTH)) {
-			return false;  // performance tweak
-		}
-		for (Primitive primitive : PRIMITIVES) {
-			if (javaClass == primitive.wrapperClass) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified class is a "variable" primitive wrapper
-	 * class (i.e. <code>java.lang.Boolean</code>,
-	 * <code>java.lang.Integer</code>, <code>java.lang.Float</code>, etc.,
-	 * but not <code>java.lang.Void</code>).
-	 * <p>
-	 * <strong>NB:</strong> <code>void.class.isPrimitive() == true</code>
-	 * <p>
-	 * <code>Class.isVariablePrimitiveWrapper()</code>
-	 */
-	public static boolean classIsVariablePrimitiveWrapper(Class<?> javaClass) {
-		return classIsPrimitiveWrapper(javaClass)
-			&& (javaClass != VOID_WRAPPER_CLASS);
-	}
-
-	/**
-	 * Return whether the specified class is a "variable" primitive
-	 * class (i.e. <code>boolean</code>, <code>int</code>,
-	 * <code>float</code>, etc., but not <code>void</code>).
-	 * <p>
-	 * <strong>NB:</strong> <code>void.class.isPrimitive() == true</code>
-	 * <p>
-	 * <code>Class.isVariablePrimitive()</code>
-	 */
-	public static boolean classIsVariablePrimitive(Class<?> javaClass) {
-		return javaClass.isPrimitive() && (javaClass != VOID_CLASS);
-	}
-
-	/**
-	 * Return the primitive class for the specified primitive class code.
-	 * Return <code>null</code> if the specified code
-	 * is not a primitive class code.
-	 * @see java.lang.Class#getName()
-	 */
-	public static Class<?> getClassForCode(int classCode) {
-		return getClassForCode((char) classCode);
-	}
-
-	/**
-	 * Return the primitive class for the specified primitive class code.
-	 * Return <code>null</code> if the specified code
-	 * is not a primitive class code.
-	 * @see java.lang.Class#getName()
-	 */
-	public static Class<?> getClassForCode(char classCode) {
-		for (Primitive primitive : PRIMITIVES) {
-			if (primitive.code == classCode) {
-				return primitive.javaClass;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Return the class code for the specified primitive class.
-	 * Return <code>0</code> if the specified class
-	 * is not a primitive class.
-	 * @see java.lang.Class#getName()
-	 */
-	public static char getCodeForClass(Class<?> primitiveClass) {
-		if (( ! primitiveClass.isArray()) && (primitiveClass.getName().length() <= MAX_PRIMITIVE_CLASS_NAME_LENGTH)) {
-			for (Primitive primitive : PRIMITIVES) {
-				if (primitive.javaClass == primitiveClass) {
-					return primitive.code;
-				}
-			}
-		}
-		return 0;
-	}
-
-
-	// ********** instantiation **********
-
-	/**
-	 * Convenience method.
-	 * Return a new instance of the specified class,
-	 * using the class's default (zero-argument) constructor.
-	 * <p>
-	 * <code>Class.newInstance()</code>
-	 */
-	public static Object newInstance(String className) {
-		return newInstance(className, null);
-	}
-
-	/**
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter type and argument.
-	 * <p>
-	 * <code>Class.newInstance(Class<?> parameterType, Object argument)</code>
-	 */
-	public static Object newInstance(String className, Class<?> parameterType, Object argument) {
-		return newInstance(className, parameterType, argument, null);
-	}
-
-	/**
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter types and arguments.
-	 * <p>
-	 * <code>Class.newInstance(Class<?>[] parameterTypes, Object[] arguments)</code>
-	 */
-	public static Object newInstance(String className, Class<?>[] parameterTypes, Object[] arguments) {
-		return newInstance(className, parameterTypes, arguments, null);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a new instance of the specified class,
-	 * using the class's default (zero-argument) constructor.
-	 * Use the specified class loader to load the class.
-	 * <p>
-	 * <code>Class.newInstance()</code>
-	 */
-	public static Object newInstance(String className, ClassLoader classLoader) {
-		return newInstance(classForName(className, false, classLoader));
-	}
-
-	/**
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter type and argument.
-	 * <p>
-	 * <code>Class.newInstance(Class<?> parameterType, Object argument)</code>
-	 */
-	public static Object newInstance(String className, Class<?> parameterType, Object argument, ClassLoader classLoader) {
-		return newInstance(classForName(className, false, classLoader), parameterType, argument);
-	}
-
-	/**
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter types and arguments.
-	 * <p>
-	 * <code>Class.newInstance(Class<?>[] parameterTypes, Object[] arguments)</code>
-	 */
-	public static Object newInstance(String className, Class<?>[] parameterTypes, Object[] arguments, ClassLoader classLoader) {
-		return newInstance(classForName(className, false, classLoader), parameterTypes, arguments);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a new instance of the specified class,
-	 * using the class's default (zero-argument) constructor.
-	 * <p>
-	 * <code>Class.newInstance()</code>
-	 */
-	public static <T> T newInstance(Class<T> javaClass) {
-		return newInstance(javaClass, ZERO_PARAMETER_TYPES, ZERO_ARGUMENTS);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter type and argument.
-	 * <p>
-	 * <code>Class.newInstance(Class<?> parameterType, Object argument)</code>
-	 */
-	public static <T> T newInstance(Class<T> javaClass, Class<?> parameterType, Object argument) {
-		return newInstance(javaClass, new Class[] {parameterType}, new Object[] {argument});
-	}
-
-	/**
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter types and arguments.
-	 * <p>
-	 * <code>Class.newInstance(Class<?>[] parameterTypes, Object[] arguments)</code>
-	 */
-	public static <T> T newInstance(Class<T> javaClass, Class<?>[] parameterTypes, Object[] arguments) {
-		try {
-			return newInstance_(javaClass, parameterTypes, arguments);
-		} catch (InstantiationException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedConstructorSignature(javaClass, parameterTypes), ex);
-		} catch (IllegalAccessException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedConstructorSignature(javaClass, parameterTypes), ex);
-		} catch (InvocationTargetException ex) {
-			throw new RuntimeException(buildFullyQualifiedConstructorSignature(javaClass, parameterTypes) + CR + ex.getTargetException(), ex);
-		} catch (NoSuchMethodException ex) {
-			throw new RuntimeException(ex + CR + buildFullyQualifiedConstructorSignature(javaClass, parameterTypes), ex);
-		}
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a new instance of the specified class,
-	 * using the class's default (zero-argument) constructor.
-	 * <p>
-	 * <code>Class.newInstance()</code>
-	 */
-	public static <T> T newInstance_(Class<T> javaClass)
-		throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException
-	{
-		return newInstance_(javaClass, ZERO_PARAMETER_TYPES, ZERO_ARGUMENTS);
-	}
-
-	/**
-	 * Convenience method.
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter type and argument.
-	 * <p>
-	 * <code>Class.newInstance(Class<?> parameterType, Object argument)</code>
-	 */
-	public static <T> T newInstance_(Class<T> javaClass, Class<?> parameterType, Object argument)
-		throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException
-	{
-		return newInstance_(javaClass, new Class[] {parameterType}, new Object[] {argument});
-	}
-
-	/**
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter types and arguments.
-	 * <p>
-	 * <code>Class.newInstance(Class<?>[] parameterTypes, Object[] arguments)</code>
-	 */
-	public static <T> T newInstance_(Class<T> javaClass, Class<?>[] parameterTypes, Object[] arguments)
-		throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException
-	{
-		return getConstructor_(javaClass, parameterTypes).newInstance(arguments);
-	}
-
-
-	// ********** type declarations **********
-
-	/**
-	 * Return the class for the specified "type declaration".
-	 */
-	public static Class<?> getClassForTypeDeclaration(String typeDeclaration) {
-		return getClassForTypeDeclaration(typeDeclaration, null);
-	}
-
-	/**
-	 * Return the class for the specified "type declaration".
-	 */
-	public static Class<?> getClassForTypeDeclaration_(String typeDeclaration)
-		throws ClassNotFoundException
-	{
-		return getClassForTypeDeclaration_(typeDeclaration, null);
-	}
-
-	/**
-	 * Return the class for the specified "type declaration",
-	 * using the specified class loader.
-	 */
-	public static Class<?> getClassForTypeDeclaration(String typeDeclaration, ClassLoader classLoader) {
-		TypeDeclaration td = buildTypeDeclaration(typeDeclaration);
-		return getClassForTypeDeclaration(td.elementTypeName, td.arrayDepth, classLoader);
-	}
-
-	/**
-	 * Return the class for the specified "type declaration",
-	 * using the specified class loader.
-	 */
-	public static Class<?> getClassForTypeDeclaration_(String typeDeclaration, ClassLoader classLoader)
-		throws ClassNotFoundException
-	{
-		TypeDeclaration td = buildTypeDeclaration(typeDeclaration);
-		return getClassForTypeDeclaration_(td.elementTypeName, td.arrayDepth, classLoader);
-	}
-
-	private static TypeDeclaration buildTypeDeclaration(String typeDeclaration) {
-		typeDeclaration = StringTools.removeAllWhitespace(typeDeclaration);
-		int arrayDepth = getArrayDepthForTypeDeclaration_(typeDeclaration);
-		String elementTypeName = getElementTypeNameForTypeDeclaration_(typeDeclaration, arrayDepth);
-		return new TypeDeclaration(elementTypeName, arrayDepth);
-	}
-
-	/**
-	 * Return the array depth for the specified "type declaration"; e.g.<ul>
-	 * <li><code>"int[]"</code> returns <code>1</code>
-	 * <li><code>"java.lang.String[][][]"</code> returns <code>3</code>
-	 * </ul>
-	 */
-	public static int getArrayDepthForTypeDeclaration(String typeDeclaration) {
-		return getArrayDepthForTypeDeclaration_(StringTools.removeAllWhitespace(typeDeclaration));
-	}
-
-	/**
-	 * pre-condition: no whitespace in the type declaration.
-	 */
-	private static int getArrayDepthForTypeDeclaration_(String typeDeclaration) {
-		int last = typeDeclaration.length() - 1;
-		int depth = 0;
-		int close = last;
-		while (typeDeclaration.charAt(close) == ']') {
-			if (typeDeclaration.charAt(close - 1) == '[') {
-				depth++;
-			} else {
-				throw new IllegalArgumentException("invalid type declaration: " + typeDeclaration); //$NON-NLS-1$
-			}
-			close = last - (depth * 2);
-		}
-		return depth;
-	}
-
-	/**
-	 * Return the element type name for the specified "type declaration"; e.g.<ul>
-	 * <li><code>"int[]"</code> returns <code>"int"</code>
-	 * <li><code>"java.lang.String[][][]"</code> returns <code>"java.lang.String"</code>
-	 * </ul>
-	 */
-	public static String getElementTypeNameForTypeDeclaration(String typeDeclaration) {
-		typeDeclaration = StringTools.removeAllWhitespace(typeDeclaration);
-		return getElementTypeNameForTypeDeclaration_(typeDeclaration, getArrayDepthForTypeDeclaration_(typeDeclaration));
-	}
-
-	/**
-	 * Return the element type name for the specified "type declaration"; e.g.<ul>
-	 * <li><code>"int[]"</code> returns <code>"int"</code>
-	 * <li><code>"java.lang.String[][][]"</code> returns <code>"java.lang.String"</code>
-	 * </ul>
-	 * Useful for clients that have already queried the type declaration's array depth.
-	 */
-	public static String getElementTypeNameForTypeDeclaration(String typeDeclaration, int arrayDepth) {
-		return getElementTypeNameForTypeDeclaration_(StringTools.removeAllWhitespace(typeDeclaration), arrayDepth);
-	}
-
-	/**
-	 * pre-condition: no whitespace in the type declaration.
-	 */
-	private static String getElementTypeNameForTypeDeclaration_(String typeDeclaration, int arrayDepth) {
-		return typeDeclaration.substring(0, typeDeclaration.length() - (arrayDepth * 2));
-	}
-
-	/**
-	 * Return the class for the specified "type declaration".
-	 */
-	public static Class<?> getClassForTypeDeclaration(String elementTypeName, int arrayDepth) {
-		return getClassForTypeDeclaration(elementTypeName, arrayDepth, null);
-	}
-
-	/**
-	 * Return the class for the specified "type declaration".
-	 */
-	public static Class<?> getClassForTypeDeclaration_(String elementTypeName, int arrayDepth)
-		throws ClassNotFoundException
-	{
-		return getClassForTypeDeclaration_(elementTypeName, arrayDepth, null);
-	}
-
-	/**
-	 * Return the class for the specified "type declaration",
-	 * using the specified class loader.
-	 */
-	public static Class<?> getClassForTypeDeclaration(String elementTypeName, int arrayDepth, ClassLoader classLoader) {
-		try {
-			return getClassForTypeDeclaration_(elementTypeName, arrayDepth, classLoader);
-		} catch (ClassNotFoundException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	/**
-	 * Return the class for the specified "type declaration",
-	 * using the specified class loader.
-	 */
-	// see the "Evaluation" of JDK bug 6446627 for a discussion of loading classes
-	public static Class<?> getClassForTypeDeclaration_(String elementTypeName, int arrayDepth, ClassLoader classLoader)
-		throws ClassNotFoundException
-	{
-		// primitives cannot be loaded via Class.forName(),
-		// so check for a primitive class name first
-		Primitive pcc = null;
-		if (elementTypeName.length() <= MAX_PRIMITIVE_CLASS_NAME_LENGTH) {  // performance tweak
-			for (Primitive primitive : PRIMITIVES) {
-				if (primitive.javaClass.getName().equals(elementTypeName)) {
-					pcc = primitive;
-					break;
-				}
-			}
-		}
-
-		// non-array
-		if (arrayDepth == 0) {
-			return (pcc == null) ? Class.forName(elementTypeName, false, classLoader) : pcc.javaClass;
-		}
-
-		// array
-		StringBuilder sb = new StringBuilder(100);
-		for (int i = arrayDepth; i-- > 0; ) {
-			sb.append('[');
-		}
-		if (pcc == null) {
-			ClassName.append(elementTypeName, sb);
-		} else {
-			sb.append(pcc.code);
-		}
-		return Class.forName(sb.toString(), false, classLoader);
-	}
-
-	/**
-	 * Return the class name for the specified "type declaration"; e.g.<ul>
-	 * <li><code>"int"</code> returns <code>"int"</code>
-	 * <li><code>"int[]"</code> returns <code>"[I"</code>
-	 * <li><code>"java.lang.String"</code> returns <code>"java.lang.String"</code>
-	 * <li><code>"java.lang.String[][][]"</code> returns <code>"[[[Ljava.lang.String;"</code>
-	 * </ul>
-	 * @see java.lang.Class#getName()
-	 */
-	public static String getClassNameForTypeDeclaration(String typeDeclaration) {
-		TypeDeclaration td = buildTypeDeclaration(typeDeclaration);
-		return getClassNameForTypeDeclaration(td.elementTypeName, td.arrayDepth);
-	}
-
-	/**
-	 * Return the class name for the specified "type declaration".
-	 * @see java.lang.Class#getName()
-	 */
-	public static String getClassNameForTypeDeclaration(String elementTypeName, int arrayDepth) {
-		// non-array
-		if (arrayDepth == 0) {
-			return elementTypeName;
-		}
-
-		if (elementTypeName.equals(ClassName.VOID_CLASS_NAME)) {
-			throw new IllegalArgumentException('\'' + ClassName.VOID_CLASS_NAME + "' must have an array depth of zero: " + arrayDepth + '.'); //$NON-NLS-1$
-		}
-		// array
-		StringBuilder sb = new StringBuilder(100);
-		for (int i = arrayDepth; i-- > 0; ) {
-			sb.append('[');
-		}
-
-		// look for a primitive first
-		Primitive pcc = null;
-		if (elementTypeName.length() <= MAX_PRIMITIVE_CLASS_NAME_LENGTH) {  // performance tweak
-			for (Primitive primitive : PRIMITIVES) {
-				if (primitive.javaClass.getName().equals(elementTypeName)) {
-					pcc = primitive;
-					break;
-				}
-			}
-		}
-
-		if (pcc == null) {
-			ClassName.append(elementTypeName, sb);
-		} else {
-			sb.append(pcc.code);
-		}
-
-		return sb.toString();
-	}
-
-
-	// ********** exception messages **********
-
-	/**
-	 * Return a string representation of the specified constructor.
-	 */
-	private static String buildFullyQualifiedConstructorSignature(Class<?> javaClass, Class<?>[] parameterTypes) {
-		return buildFullyQualifiedMethodSignature(javaClass, null, parameterTypes);
-	}
-
-	/**
-	 * Return a string representation of the specified field.
-	 */
-	private static String buildFullyQualifiedFieldName(Class<?> javaClass, String fieldName) {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append(javaClass.getName());
-		sb.append('.');
-		sb.append(fieldName);
-		return sb.toString();
-	}
-
-	/**
-	 * Return a string representation of the specified field.
-	 */
-	private static String buildFullyQualifiedFieldName(Object object, String fieldName) {
-		return buildFullyQualifiedFieldName(object.getClass(), fieldName);
-	}
-
-	/**
-	 * Return a string representation of the specified method.
-	 */
-	private static String buildFullyQualifiedMethodSignature(Class<?> javaClass, String methodName, Class<?>[] parameterTypes) {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append(javaClass.getName());
-		// this check allows us to use this code for constructors, where the methodName is null
-		if (methodName != null) {
-			sb.append('.');
-			sb.append(methodName);
-		}
-		sb.append('(');
-		int max = parameterTypes.length - 1;
-		if (max != -1) {
-			// stop one short of the end of the array
-			for (int i = 0; i < max; i++) {
-				sb.append(parameterTypes[i].getName());
-				sb.append(", "); //$NON-NLS-1$
-			}
-			sb.append(parameterTypes[max].getName());
-		}
-		sb.append(')');
-		return sb.toString();
-	}
-
-
-	// ********** primitive constants **********
-
-	static final Iterable<Primitive> PRIMITIVES = buildPrimitives();
-
-	public static final char BYTE_CODE = 'B';
-	public static final char CHAR_CODE = 'C';
-	public static final char DOUBLE_CODE = 'D';
-	public static final char FLOAT_CODE = 'F';
-	public static final char INT_CODE = 'I';
-	public static final char LONG_CODE = 'J';
-	public static final char SHORT_CODE = 'S';
-	public static final char BOOLEAN_CODE = 'Z';
-	public static final char VOID_CODE = 'V';
-
-	static final int MAX_PRIMITIVE_CLASS_NAME_LENGTH = calculateMaxPrimitiveClassNameLength();
-	static final int MAX_PRIMITIVE_WRAPPER_CLASS_NAME_LENGTH = calculateMaxPrimitiveWrapperClassNameLength();
-
-	private static int calculateMaxPrimitiveClassNameLength() {
-		int max = -1;
-		for (Primitive primitive : PRIMITIVES) {
-			int len = primitive.javaClass.getName().length();
-			if (len > max) {
-				max = len;
-			}
-		}
-		return max;
-	}
-
-	private static int calculateMaxPrimitiveWrapperClassNameLength() {
-		int max = -1;
-		for (Primitive primitive : PRIMITIVES) {
-			int len = primitive.wrapperClass.getName().length();
-			if (len > max) {
-				max = len;
-			}
-		}
-		return max;
-	}
-
-	/**
-	 * <strong>NB:</strong> <code>void.class.isPrimitive() == true</code>
-	 */
-	private static Iterable<Primitive> buildPrimitives() {
-		Primitive[] array = new Primitive[9];
-		array[0] = new Primitive(BYTE_CODE, java.lang.Byte.class);
-		array[1] = new Primitive(CHAR_CODE, java.lang.Character.class);
-		array[2] = new Primitive(DOUBLE_CODE, java.lang.Double.class);
-		array[3] = new Primitive(FLOAT_CODE, java.lang.Float.class);
-		array[4] = new Primitive(INT_CODE, java.lang.Integer.class);
-		array[5] = new Primitive(LONG_CODE, java.lang.Long.class);
-		array[6] = new Primitive(SHORT_CODE, java.lang.Short.class);
-		array[7] = new Primitive(BOOLEAN_CODE, java.lang.Boolean.class);
-		array[8] = new Primitive(VOID_CODE, java.lang.Void.class);
-		return new ArrayIterable<Primitive>(array);
-	}
-
-
-	// ********** member classes **********
-
-	static class Primitive {
-		final char code;
-		final Class<?> javaClass;
-		final Class<?> wrapperClass;
-		private static final String WRAPPER_CLASS_TYPE_FIELD_NAME = "TYPE"; //$NON-NLS-1$
-		// e.g. java.lang.Boolean.TYPE => boolean.class
-		Primitive(char code, Class<?> wrapperClass) {
-			this.code = code;
-			this.wrapperClass = wrapperClass;
-			this.javaClass = (Class<?>) getStaticFieldValue(wrapperClass, WRAPPER_CLASS_TYPE_FIELD_NAME);
-		}
-	}
-
-	private static class TypeDeclaration {
-		final String elementTypeName;
-		final int arrayDepth;
-		TypeDeclaration(String elementTypeName, int arrayDepth) {
-			this.elementTypeName = elementTypeName;
-			this.arrayDepth = arrayDepth;
-		}
-	}
-
-
-	// ********** suppressed constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private ReflectionTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ReverseComparator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ReverseComparator.java
deleted file mode 100644
index 10c01f8..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ReverseComparator.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * This comparator will reverse the order of the specified comparator.
- * If the comparator is null, the natural ordering of the objects will be used.
- */
-public class ReverseComparator<E extends Comparable<? super E>>
-	implements Comparator<E>, Serializable
-{
-	private final Comparator<E> comparator;
-
-	public ReverseComparator() {
-		this(null);
-	}
-
-	public ReverseComparator(Comparator<E> comparator) {
-		super();
-		this.comparator = comparator;
-	}
-
-	public int compare(E e1, E e2) {
-		return (this.comparator == null) ?
-			e2.compareTo(e1)
-		:
-			this.comparator.compare(e2, e1);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/RunnableCommand.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/RunnableCommand.java
deleted file mode 100644
index 5b15ee0..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/RunnableCommand.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import org.eclipse.jpt.utility.Command;
-
-/**
- * Wrap a Runnable so it can be used as a Command.
- */
-public class RunnableCommand implements Command {
-	protected final Runnable runnable;
-
-	public RunnableCommand(Runnable runnable) {
-		super();
-		if (runnable == null) {
-			throw new NullPointerException();
-		}
-		this.runnable = runnable;
-	}
-
-	public void execute() {
-		this.runnable.run();
-	}
-
-	@Override
-	public String toString() {
-		return "Command[" + this.runnable.toString() +']'; //$NON-NLS-1$
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleAssociation.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleAssociation.java
deleted file mode 100644
index 6e05103..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleAssociation.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-/**
- * Straightforward implementation of {@ link Association}.
- */
-public class SimpleAssociation<K, V>
-	extends AbstractAssociation<K, V>
-	implements Cloneable, Serializable
-{
-	private final K key;
-	private V value;
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * Construct an association with the specified key
-	 * and a null value.
-	 */
-	public SimpleAssociation(K key) {
-		super();
-		this.key = key;
-	}
-
-	/**
-	 * Construct an association with the specified key and value.
-	 */
-	public SimpleAssociation(K key, V value) {
-		this(key);
-		this.value = value;
-	}
-
-
-	public K key() {
-		return this.key;
-	}
-
-	public synchronized V value() {
-		return this.value;
-	}
-
-	public synchronized V setValue(V value) {
-		V old = this.value;
-		this.value = value;
-		return old;
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	public synchronized SimpleAssociation<K, V> clone() {
-		try {
-			return (SimpleAssociation<K, V>) super.clone();
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleCommandExecutor.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleCommandExecutor.java
deleted file mode 100644
index bac600b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleCommandExecutor.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import org.eclipse.jpt.utility.Command;
-
-/**
- * Straightforward implementation of {@link StatefulCommandExecutor}.
- */
-public class SimpleCommandExecutor
-	implements StatefulCommandExecutor
-{
-	private boolean active = false;
-
-	public SimpleCommandExecutor() {
-		super();
-	}
-
-	public void start() {
-		if (this.active) {
-			throw new IllegalStateException("Not stopped."); //$NON-NLS-1$
-		}
-		this.active = true;
-	}
-
-	public void execute(Command command) {
-		if (this.active) {
-			command.execute();
-		}
-	}
-
-	public void stop() {
-		if ( ! this.active) {
-			throw new IllegalStateException("Not started."); //$NON-NLS-1$
-		}
-		this.active = false;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleFilter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleFilter.java
deleted file mode 100644
index 9477c0f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleFilter.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import org.eclipse.jpt.utility.Filter;
-
-/**
- * Simple, abstract implementation of <code>Filter</code>
- * that holds on to a criterion object that can be used in the
- * <code>accept(Object)</code> or <code>reject(Object)</code>
- * methods. Subclasses can override either of these methods,
- * depending on which is easier to implement. Note that at least
- * one of these methods <em>must</em> be overridden or
- * an infinite loop will occur. If both of them are overridden,
- * only the <code>accept(Object)</code> method will be used.
- * <p>
- * Simplifies the implementation of straightforward inner classes.
- * Here is an example of a filter that can be used by a
- * <code>FilteringIterator</code> to return only those strings
- * in the nested iterator start with "prefix":
- * <pre>
- *	Filter<String> filter = new SimpleFilter<String>("prefix") {
- *		public boolean accept(String o) {
- *			return o.startsWith((String) criterion);
- *		}
- *	};
- * </pre>
- */
-public abstract class SimpleFilter<T, S>
-	implements Filter<T>, Cloneable, Serializable
-{
-	protected final S criterion;
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * More useful constructor. The specified criterion can
-	 * be used by a subclass to "accept" or "reject" objects.
-	 */
-	protected SimpleFilter(S criterion) {
-		super();
-		this.criterion = criterion;
-	}
-
-	/**
-	 * Construct a simple filter with a null criterion
-	 */
-	protected SimpleFilter() {
-		this(null);
-	}
-
-	/**
-	 * Return whether the the specified object should be "rejected".
-	 * The semantics of "rejected" is determined by the client.
-	 */
-	protected boolean reject(T o) {
-		return ! this.accept(o);
-	}
-
-	/**
-	 * Return whether the the specified object should be "accepted".
-	 * The semantics of "accepted" is determined by the client.
-	 */
-	public boolean accept(T o) {
-		return ! this.reject(o);
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	public SimpleFilter<T, S> clone() {
-		try {
-			return (SimpleFilter<T, S>) super.clone();
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-	@Override
-	public boolean equals(Object o) {
-		if ( ! (o instanceof SimpleFilter<?, ?>)) {
-			return false;
-		}
-		SimpleFilter<?, ?> other = (SimpleFilter<?, ?>) o;
-		return (this.criterion == null) ?
-			(other.criterion == null) : this.criterion.equals(other.criterion);
-	}
-
-	@Override
-	public int hashCode() {
-		return (this.criterion == null) ? 0 : this.criterion.hashCode();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.criterion);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleJavaType.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleJavaType.java
deleted file mode 100644
index 3a94ace..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleJavaType.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.PrintWriter;
-import java.io.Serializable;
-
-import org.eclipse.jpt.utility.JavaType;
-
-/**
- * Straightforward implementation of the {@link JavaType} interface.
- */
-public final class SimpleJavaType
-	implements JavaType, Cloneable, Serializable
-{
-
-	/**
-	 * store the type as a name, so we can reference classes
-	 * that are not loaded
-	 */
-	private final String elementTypeName;
-
-	/**
-	 * non-array types have an array depth of zero
-	 */
-	private final int arrayDepth;
-
-	private static final String BRACKETS = "[]"; //$NON-NLS-1$
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a Java type with the specified element type and array depth.
-	 */
-	public SimpleJavaType(String elementTypeName, int arrayDepth) {
-		super();
-		if ((elementTypeName == null) || (elementTypeName.length() == 0)) {
-			throw new IllegalArgumentException("The element type name is required."); //$NON-NLS-1$
-		}
-		if (ClassName.getArrayDepth(elementTypeName) != 0) {		// e.g. "[Ljava.lang.Object;"
-			throw new IllegalArgumentException("The element type must not be an array: " + elementTypeName + '.'); //$NON-NLS-1$
-		}
-		if (arrayDepth < 0) {
-			throw new IllegalArgumentException("The array depth must be greater than or equal to zero: " + arrayDepth + '.'); //$NON-NLS-1$
-		}
-		if (elementTypeName.equals(void.class.getName()) && (arrayDepth != 0)) {
-			throw new IllegalArgumentException("'void' must have an array depth of zero: " + arrayDepth + '.'); //$NON-NLS-1$
-		}
-		this.elementTypeName = elementTypeName;
-		this.arrayDepth = arrayDepth;
-	}
-
-	/**
-	 * Construct a Java type for the specified class.
-	 * The class name can be in one of the following forms:<ul><code>
-	 * <li>java.lang.Object
-	 * <li>int
-	 * <li>java.util.Map$Entry
-	 * <li>[Ljava.lang.Object;
-	 * <li>[I
-	 * <li>[Ljava.util.Map$Entry;
-	 * </code></ul>
-	 */
-	public SimpleJavaType(String javaClassName) {
-		this(ClassName.getElementTypeName(javaClassName), ClassName.getArrayDepth(javaClassName));
-	}
-
-	/**
-	 * Construct a Java type for the specified class.
-	 */
-	public SimpleJavaType(Class<?> javaClass) {
-		this(javaClass.getName());
-	}
-
-
-	// ********** accessors **********
-
-	public String getElementTypeName() {
-		return this.elementTypeName;
-	}
-
-	public int getArrayDepth() {
-		return this.arrayDepth;
-	}
-
-
-	// ********** queries **********
-
-	public boolean isArray() {
-		return this.arrayDepth > 0;
-	}
-
-	public boolean isPrimitive() {
-		return (this.arrayDepth == 0) && ClassName.isPrimitive(this.elementTypeName);
-	}
-
-	public boolean isPrimitiveWrapper() {
-		return (this.arrayDepth == 0) && ClassName.isPrimitiveWrapper(this.elementTypeName);
-	}
-
-	public boolean isVariablePrimitive() {
-		return (this.arrayDepth == 0) && ClassName.isVariablePrimitive(this.elementTypeName);
-	}
-
-	public boolean isVariablePrimitiveWrapper() {
-		return (this.arrayDepth == 0) && ClassName.isVariablePrimitiveWrapper(this.elementTypeName);
-	}
-
-	public Class<?> getJavaClass() throws ClassNotFoundException {
-		return ReflectionTools.getClassForTypeDeclaration(this.elementTypeName, this.arrayDepth);
-	}
-
-	public String getJavaClassName() {
-		return ReflectionTools.getClassNameForTypeDeclaration(this.elementTypeName, this.arrayDepth);
-	}
-
-
-	// ********** comparison **********
-
-	public boolean equals(String otherElementTypeName, int otherArrayDepth) {
-		return (this.arrayDepth == otherArrayDepth)
-			&& this.elementTypeName.equals(otherElementTypeName);
-	}
-
-	public boolean describes(String className) {
-		return this.equals(ClassName.getElementTypeName(className), ClassName.getArrayDepth(className));
-	}
-
-	public boolean describes(Class<?> javaClass) {
-		return this.describes(javaClass.getName());
-	}
-
-	public boolean equals(JavaType other) {
-		return this.equals(other.getElementTypeName(), other.getArrayDepth());
-	}
-
-	@Override
-	public boolean equals(Object o) {
-		return (this == o) ? true : (o instanceof JavaType) ? this.equals((JavaType) o) : false;
-	}
-
-	@Override
-	public int hashCode() {
-		return this.elementTypeName.hashCode() ^ this.arrayDepth;
-	}
-
-
-	// ********** printing and displaying **********
-
-	public String declaration() {
-		if (this.arrayDepth == 0) {
-			return this.getElementTypeNameDeclaration();
-		}
-		StringBuilder sb = new StringBuilder(this.elementTypeName.length() + (2 * this.arrayDepth));
-		this.appendDeclarationTo(sb);
-		return sb.toString();
-	}
-
-	public void appendDeclarationTo(StringBuilder sb) {
-		sb.append(this.getElementTypeNameDeclaration());
-		for (int i = this.arrayDepth; i-- > 0; ) {
-			sb.append(BRACKETS);
-		}
-	}
-
-	public void printDeclarationOn(PrintWriter pw) {
-		pw.print(this.getElementTypeNameDeclaration());
-		for (int i = this.arrayDepth; i-- > 0; ) {
-			pw.print(BRACKETS);
-		}
-	}
-
-	/**
-	 * The <code>'$'</code> version of the name is used in {@link Class#forName(String)},
-	 * but the <code>'.'</code> version of the name is used in source code.
-	 * Very irritating....
-	 */
-	private String getElementTypeNameDeclaration() {
-		return this.elementTypeName.replace('$', '.');
-	}
-
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append(this.getClass().getSimpleName());
-		sb.append('(');
-		this.appendDeclarationTo(sb);
-		sb.append(')');
-		return sb.toString();
-	}
-
-
-	// ********** cloning **********
-
-	@Override
-	public Object clone() {
-		try {
-			return super.clone();
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleMethodSignature.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleMethodSignature.java
deleted file mode 100644
index 9145f47..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleMethodSignature.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.PrintWriter;
-import java.io.Serializable;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-
-import org.eclipse.jpt.utility.JavaType;
-import org.eclipse.jpt.utility.MethodSignature;
-
-/**
- * Straightforward implementation of the MethodSignature interface.
- */
-public final class SimpleMethodSignature
-	implements MethodSignature, Cloneable, Serializable
-{
-	private final String name;
-
-	/**
-	 * store the parameter types as names, so we can reference classes
-	 * that are not loaded
-	 */
-	private final JavaType[] parameterTypes;
-
-	public static final JavaType[] EMPTY_PARAMETER_TYPES = new JavaType[0];
-
-	private static final String PARAMETER_SEPARATOR = ", "; //$NON-NLS-1$
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a method signature with the specified name and
-	 * no parameter types.
-	 */
-	public SimpleMethodSignature(String name) {
-		this(name, EMPTY_PARAMETER_TYPES);
-	}
-
-	/**
-	 * Construct a method signature with the specified name and parameter
-	 * types.
-	 */
-	public SimpleMethodSignature(String name, JavaType... parameterTypes) {
-		super();
-		if ((name == null) || (name.length() == 0)) {
-			throw new IllegalArgumentException("The name is required."); //$NON-NLS-1$
-		}
-		if (parameterTypes == null) {
-			throw new IllegalArgumentException("The parameter types are required."); //$NON-NLS-1$
-		}
-		checkParameterTypes(parameterTypes);
-		this.name = name;
-		this.parameterTypes = parameterTypes;
-	}
-
-	private static void checkParameterTypes(JavaType[] parameterTypes) {
-		for (int i = 0; i < parameterTypes.length; i++) {
-			if (parameterTypes[i] == null) {
-				throw new IllegalArgumentException("Missing parameter type: " + i); //$NON-NLS-1$
-			}
-			if (parameterTypes[i].getElementTypeName().equals(void.class.getName())) {
-				throw new IllegalArgumentException("A parameter type of 'void' is not allowed: " + i); //$NON-NLS-1$
-			}
-		}
-	}
-
-	/**
-	 * Construct a method signature with the specified name and parameter
-	 * types.
-	 */
-	public SimpleMethodSignature(String name, String... parameterTypeNames) {
-		this(name, buildParameterTypes(parameterTypeNames));
-	}
-
-	private static JavaType[] buildParameterTypes(String[] parameterTypeNames) {
-		if (parameterTypeNames == null) {
-			throw new IllegalArgumentException("The parameter type names are required."); //$NON-NLS-1$
-		}
-		JavaType[] parameterTypes = new JavaType[parameterTypeNames.length];
-		for (int i = 0; i < parameterTypeNames.length; i++) {
-			if (parameterTypeNames[i] == null) {
-				throw new IllegalArgumentException("Missing parameter type name: " + i); //$NON-NLS-1$
-			}
-			parameterTypes[i] = new SimpleJavaType(parameterTypeNames[i]);
-		}
-		return parameterTypes;
-	}
-
-	/**
-	 * Construct a method signature with the specified name and parameter
-	 * types.
-	 */
-	public SimpleMethodSignature(String name, Class<?>... parameterJavaClasses) {
-		this(name, buildParameterTypeNames(parameterJavaClasses));
-	}
-
-	private static String[] buildParameterTypeNames(Class<?>[] parameterJavaClasses) {
-		if (parameterJavaClasses == null) {
-			throw new IllegalArgumentException("The parameter Java classes are required."); //$NON-NLS-1$
-		}
-		String[] parameterTypeNames = new String[parameterJavaClasses.length];
-		for (int i = 0; i < parameterJavaClasses.length; i++) {
-			if (parameterJavaClasses[i] == null) {
-				throw new IllegalArgumentException("Missing parameter Java class: " + i); //$NON-NLS-1$
-			}
-			parameterTypeNames[i] = parameterJavaClasses[i].getName();
-		}
-		return parameterTypeNames;
-	}
-
-	/**
-	 * Construct a method signature for the specified Java method.
-	 */
-	public SimpleMethodSignature(Method method) {
-		this(method.getName(), method.getParameterTypes());
-	}
-
-
-	// ********** accessors **********
-
-	public String getName() {
-		return this.name;
-	}
-
-	public JavaType[] getParameterTypes() {
-		return this.parameterTypes;
-	}
-
-
-	// ********** comparison **********
-
-	public boolean describes(Method method) {
-		return this.name.equals(method.getName())
-				&& this.parameterTypesDescribe(method.getParameterTypes());
-	}
-
-	private boolean parameterTypesDescribe(Class<?>[] otherParameterTypes) {
-		JavaType[] localParameterTypes = this.parameterTypes;
-		int len = localParameterTypes.length;
-		if (otherParameterTypes.length != len) {
-			return false;
-		}
-		for (int i = len; i-- > 0; ) {
-			if ( ! localParameterTypes[i].describes(otherParameterTypes[i])) {
-				return false;
-			}
-		}
-        return true;
-	}
-
-	public boolean equals(String otherName, JavaType[] otherParameterTypes) {
-		return this.name.equals(otherName)
-				&& Arrays.equals(this.parameterTypes, otherParameterTypes);
-	}
-
-	public boolean equals(MethodSignature other) {
-		return this.equals(other.getName(), other.getParameterTypes());
-	}
-
-	@Override
-	public boolean equals(Object o) {
-		return (this == o) ? true : (o instanceof MethodSignature) ? this.equals((MethodSignature) o) : false;
-	}
-
-	@Override
-	public int hashCode() {
-		return this.name.hashCode() ^ Arrays.hashCode(this.parameterTypes);
-	}
-
-
-	// ********** printing and displaying **********
-
-	public String getSignature() {
-		StringBuilder sb = new StringBuilder(200);
-		this.appendSignatureTo(sb);
-		return sb.toString();
-	}
-
-	public void appendSignatureTo(StringBuilder sb) {
-		sb.append(this.name);
-		sb.append('(');
-		JavaType[] localParameterTypes = this.parameterTypes;
-		int len = localParameterTypes.length;
-		for (int i = 0; i < len; i++) {
-			if (i != 0) {
-				sb.append(PARAMETER_SEPARATOR);
-			}
-			localParameterTypes[i].appendDeclarationTo(sb);
-		}
-		sb.append(')');
-	}
-
-	public void printSignatureOn(PrintWriter pw) {
-		pw.print(this.name);
-		pw.print('(');
-		JavaType[] localParameterTypes = this.parameterTypes;
-		int len = localParameterTypes.length;
-		for (int i = 0; i < len; i++) {
-			if (i != 0) {
-				pw.print(PARAMETER_SEPARATOR);
-			}
-			localParameterTypes[i].printDeclarationOn(pw);
-		}
-		pw.print(')');
-	}
-
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append(this.getClass().getSimpleName());
-		sb.append('(');
-		this.appendSignatureTo(sb);
-		sb.append(')');
-		return sb.toString();
-	}
-
-
-	// ********** cloning **********
-
-	@Override
-	public Object clone() {
-		try {
-			return super.clone();
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleQueue.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleQueue.java
deleted file mode 100644
index 89a73e1..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleQueue.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.LinkedList;
-
-/**
- * Straightforward implementation of the {@link Queue} interface.
- */
-public class SimpleQueue<E>
-	implements Queue<E>, Cloneable, Serializable
-{
-	private LinkedList<E> elements;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an empty queue.
-	 */
-	public SimpleQueue() {
-		super();
-		this.elements = new LinkedList<E>();
-	}
-
-	/**
-	 * Construct a queue containing the elements of the specified
-	 * collection. The queue will dequeue its elements in the same
-	 * order they are returned by the collection's iterator (i.e. the
-	 * first element returned by the collection's iterator will be the
-	 * first element returned by {@link #dequeue()}).
-	 */
-	public SimpleQueue(Collection<? extends E> c) {
-		super();
-		this.elements = new LinkedList<E>(c);
-	}
-
-
-	// ********** Queue implementation **********
-
-	public void enqueue(E o) {
-		this.elements.addLast(o);
-	}
-
-	public E dequeue() {
-		return this.elements.removeFirst();
-	}
-
-	public E peek() {
-		return this.elements.getFirst();
-	}
-
-	public boolean isEmpty() {
-		return this.elements.isEmpty();
-	}
-
-
-	// ********** Cloneable implementation **********
-
-	@Override
-	public SimpleQueue<E> clone() {
-		try {
-			@SuppressWarnings("unchecked")
-			SimpleQueue<E> clone = (SimpleQueue<E>) super.clone();
-			@SuppressWarnings("unchecked")
-			LinkedList<E> ll = (LinkedList<E>) this.elements.clone();
-			clone.elements = ll;
-			return clone;
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.peek());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleStack.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleStack.java
deleted file mode 100644
index ffdea0c..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleStack.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.EmptyStackException;
-import java.util.LinkedList;
-import java.util.NoSuchElementException;
-
-/**
- * Straightforward implementation of the {@link Stack} interface.
- */
-public class SimpleStack<E>
-	implements Stack<E>, Cloneable, Serializable
-{
-	private LinkedList<E> elements;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an empty stack.
-	 */
-	public SimpleStack() {
-		super();
-		this.elements = new LinkedList<E>();
-	}
-
-	/**
-	 * Construct a stack containing the elements of the specified
-	 * collection. The stack will pop its elements in reverse of the
-	 * order they are returned by the collection's iterator (i.e. the
-	 * last element returned by the collection's iterator will be the
-	 * first element returned by {@link #pop()}).
-	 */
-	public SimpleStack(Collection<? extends E> collection) {
-		super();
-		this.elements = new LinkedList<E>(collection);
-	}
-
-
-	// ********** Stack implementation **********
-
-	public void push(E element) {
-		this.elements.addLast(element);
-	}
-
-	public E pop() {
-		try {
-			return this.elements.removeLast();
-		} catch (NoSuchElementException ex) {
-			throw new EmptyStackException();
-		}
-	}
-
-	public E peek() {
-		try {
-			return this.elements.getLast();
-		} catch (NoSuchElementException ex) {
-			throw new EmptyStackException();
-		}
-	}
-
-	public boolean isEmpty() {
-		return this.elements.isEmpty();
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public SimpleStack<E> clone() {
-		try {
-			@SuppressWarnings("unchecked")
-			SimpleStack<E> clone = (SimpleStack<E>) super.clone();
-			@SuppressWarnings("unchecked")
-			LinkedList<E> ll = (LinkedList<E>) this.elements.clone();
-			clone.elements = ll;
-			return clone;
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.peek());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleStringMatcher.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleStringMatcher.java
deleted file mode 100644
index 0992387..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleStringMatcher.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.regex.Pattern;
-import org.eclipse.jpt.utility.Filter;
-
-// TODO the regex code is not very fast - we could probably do better,
-// hand-coding the matching algorithm (eclipse StringMatcher?)
-/**
- * This class implements a simple string-matching algorithm that is a little
- * more user-friendly than standard regular expressions. Instantiate a
- * string matcher with a filter pattern and then you can use the matcher
- * to determine whether another string (or object) matches the pattern.
- * You can also specify whether the matching should be case-sensitive.
- * 
- * The pattern can contain two "meta-characters":
- * 	'*' will match any set of zero or more characters
- * 	'?' will match any single character
- * 
- * Subclasses can override #prefix() and/or #suffix() to change what
- * strings are prepended or appended to the original pattern string.
- * This can offer a slight performance improvement over concatenating
- * strings before calling #setPatternString(String).
- * By default, a '*' is appended to every string.
- * 
- * This class also uses the string-matching algorithm to "filter" objects
- * (and, as a result, also implements the Filter interface).
- * A string converter is used to determine what string aspect of the
- * object is compared to the pattern. By default the string returned
- * by the object's #toString() method is passed to the pattern matcher.
- */
-public class SimpleStringMatcher<T>
-	implements StringMatcher, Filter<T>, Serializable
-{
-
-	/** An adapter that converts the objects into strings to be matched with the pattern. */
-	private StringConverter<T> stringConverter;
-
-	/** The string used to construct the regular expression pattern. */
-	private String patternString;
-
-	/** Whether the matcher ignores case - the default is true. */
-	private boolean ignoresCase;
-
-	/** The regular expression pattern built from the pattern string. */
-	private Pattern pattern;
-
-	/** A list of the meta-characters we need to escape if found in the pattern string. */
-	public static final char[] REG_EX_META_CHARS = { '(', '[', '{', '\\', '^', '$', '|', ')', '?', '*', '+', '.' };
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a string matcher with an pattern that will match
-	 * any string and ignore case.
-	 */
-	public SimpleStringMatcher() {
-		this("*"); //$NON-NLS-1$
-	}
-
-	/**
-	 * Construct a string matcher with the specified pattern
-	 * that will ignore case.
-	 */
-	public SimpleStringMatcher(String patternString) {
-		this(patternString, true);
-	}
-
-	/**
-	 * Construct a string matcher with the specified pattern that will
-	 * ignore case as specified.
-	 */
-	public SimpleStringMatcher(String patternString, boolean ignoresCase) {
-		super();
-		this.patternString = patternString;
-		this.ignoresCase = ignoresCase;
-		this.initialize();
-	}
-
-
-	// ********** initialization **********
-
-	protected void initialize() {
-		this.stringConverter = StringConverter.Default.instance();
-		this.rebuildPattern();
-	}
-
-	/**
-	 * Given the current pattern string and case-sensitivity setting,
-	 * re-build the regular expression pattern.
-	 */
-	protected synchronized void rebuildPattern() {
-		this.pattern = this.buildPattern();
-	}
-
-	/**
-	 * Given the current pattern string and case-sensitivity setting,
-	 * build and return a regular expression pattern that can be used
-	 * to match strings.
-	 */
-	protected Pattern buildPattern() {
-		int patternFlags = 0x0;
-		if (this.ignoresCase) {
-			patternFlags = Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE;
-		}
-		return Pattern.compile(this.convertToRegEx(this.patternString), patternFlags);
-	}
-
-
-	// ********** StringMatcher implementation **********
-
-	public synchronized void setPatternString(String patternString) {
-		this.patternString = patternString;
-		this.rebuildPattern();
-	}
-
-	/**
-	 * Return whether the specified string matches the pattern.
-	 */
-	public synchronized boolean matches(String string) {
-		return this.pattern.matcher(string).matches();
-	}
-
-
-	// ********** Filter implementation **********
-
-	public synchronized boolean accept(T o) {
-		return this.matches(this.stringConverter.convertToString(o));
-	}
-
-
-	// ********** accessors **********
-
-	/**
-	 * Return the string converter used to convert the objects
-	 * passed to the matcher into strings.
-	 */
-	public synchronized StringConverter<T> stringConverter() {
-		return this.stringConverter;
-	}
-
-	/**
-	 * Set the string converter used to convert the objects
-	 * passed to the matcher into strings.
-	 */
-	public synchronized void setStringConverter(StringConverter<T> stringConverter) {
-		this.stringConverter = stringConverter;
-	}
-
-	/**
-	 * Return the original pattern string.
-	 */
-	public synchronized String patternString() {
-		return this.patternString;
-	}
-
-	/**
-	 * Return whether the matcher ignores case.
-	 */
-	public synchronized boolean ignoresCase() {
-		return this.ignoresCase;
-	}
-
-	/**
-	 * Set whether the matcher ignores case.
-	 */
-	public synchronized void setIgnoresCase(boolean ignoresCase) {
-		this.ignoresCase = ignoresCase;
-		this.rebuildPattern();
-	}
-
-	/**
-	 * Return the regular expression pattern.
-	 */
-	public synchronized Pattern pattern() {
-		return this.pattern;
-	}
-
-
-	// ********** other public API **********
-
-	/**
-	 * Return the regular expression corresponding to
-	 * the original pattern string.
-	 */
-	public synchronized String regularExpression() {
-		return this.convertToRegEx(this.patternString);
-	}
-
-
-	// ********** converting **********
-
-	/**
-	 * Convert the specified string to a regular expression.
-	 */
-	protected String convertToRegEx(String string) {
-		StringBuffer sb = new StringBuffer(string.length() + 10);
-		this.convertToRegExOn(this.prefix(), sb);
-		this.convertToRegExOn(string, sb);
-		this.convertToRegExOn(this.suffix(), sb);
-		return sb.toString();
-	}
-
-	/**
-	 * Return any prefix that should be prepended to the original
-	 * string. By default, there is no prefix.
-	 */
-	protected String prefix() {
-		return ""; //$NON-NLS-1$
-	}
-
-	/**
-	 * Return any suffix that should be appended to the original
-	 * string. Since this class is typically used in UI situation where
-	 * the user is typing in a pattern used to filter a list, the default
-	 * suffix is a wildcard character.
-	 */
-	protected String suffix() {
-		return "*"; //$NON-NLS-1$
-	}
-
-	/**
-	 * Convert the specified string to a regular expression.
-	 */
-	protected void convertToRegExOn(String string, StringBuffer sb) {
-		char[] charArray = string.toCharArray();
-		int length = charArray.length;
-		for (int i = 0; i < length; i++) {
-			char c = charArray[i];
-			// convert user-friendly meta-chars into regex meta-chars
-			if (c == '*') {
-				sb.append(".*"); //$NON-NLS-1$
-				continue;
-			}
-			if (c == '?') {
-				sb.append('.');
-				continue;
-			}
-			// escape regex meta-chars
-			if (ArrayTools.contains(REG_EX_META_CHARS, c)) {
-				sb.append('\\');
-			}
-			sb.append(c);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleThreadFactory.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleThreadFactory.java
deleted file mode 100644
index ce3600f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleThreadFactory.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.util.concurrent.ThreadFactory;
-
-/**
- * A <code>SimpleThreadFactory</code> is a straightforward implementation of
- * the JDK {@link ThreadFactory}.
- */
-public class SimpleThreadFactory
-	implements ThreadFactory
-{
-	// singleton
-	private static final SimpleThreadFactory INSTANCE = new SimpleThreadFactory();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static ThreadFactory instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private SimpleThreadFactory() {
-		super();
-	}
-
-	public Thread newThread(Runnable r) {
-		return new Thread(r);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this);
-	}
-
-	private static final long serialVersionUID = 1L;
-	private Object readResolve() {
-		// replace this object with the singleton
-		return INSTANCE;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Stack.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Stack.java
deleted file mode 100644
index 765c10e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Stack.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.EmptyStackException;
-
-/**
- * Interface defining the classic stack behavior,
- * without the backdoors allowed by {@link java.util.Stack}.
- * 
- * @param <E> the type of elements contained by the stack
- */
-public interface Stack<E> {
-
-	/**
-	 * "Push" the specified item on to the top of the stack.
-	 */
-	void push(E element);
-
-	/**
-	 * "Pop" an item from the top of the stack.
-	 */
-	E pop();
-
-	/**
-	 * Return the item on the top of the stack
-	 * without removing it from the stack.
-	 */
-	E peek();
-
-	/**
-	 * Return whether the stack is empty.
-	 */
-	boolean isEmpty();
-
-
-	final class Empty<E> implements Stack<E>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final Stack INSTANCE = new Empty();
-		@SuppressWarnings("unchecked")
-		public static <T> Stack<T> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Empty() {
-			super();
-		}
-		public void push(E element) {
-			throw new UnsupportedOperationException();
-		}
-		public E pop() {
-			throw new EmptyStackException();
-		}
-		public E peek() {
-			throw new EmptyStackException();
-		}
-		public boolean isEmpty() {
-			return true;
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StatefulCommandExecutor.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StatefulCommandExecutor.java
deleted file mode 100644
index d4fd37a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StatefulCommandExecutor.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import org.eclipse.jpt.utility.CommandExecutor;
-
-/**
- * This interface allows clients to control how a command is executed.
- * This is useful when the server provides the command but the client provides
- * the context (e.g. the client would like to dispatch the command to the UI
- * thread).
- */
-public interface StatefulCommandExecutor
-	extends CommandExecutor
-{
-	/**
-	 * Start the command executor.
-	 */
-	void start();
-
-	/**
-	 * Stop the command executor.
-	 */
-	void stop();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StringConverter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StringConverter.java
deleted file mode 100644
index de981a3..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StringConverter.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-/**
- * Used by various "pluggable" classes to transform objects
- * into strings.
- */
-public interface StringConverter<T> {
-
-	/**
-	 * Convert the specified object into a string.
-	 * The semantics of "convert" is determined by the
-	 * contract between the client and the server.
-	 */
-	String convertToString(T o);
-
-
-	final class Default<S> implements StringConverter<S>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final StringConverter INSTANCE = new Default();
-		@SuppressWarnings("unchecked")
-		public static <R> StringConverter<R> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Default() {
-			super();
-		}
-		// simply return the object's #toString() result
-		public String convertToString(S o) {
-			return (o == null) ? null : o.toString();
-		}
-		@Override
-		public String toString() {
-			return "StringConverter.Default"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-	final class Disabled<S> implements StringConverter<S>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final StringConverter INSTANCE = new Disabled();
-		@SuppressWarnings("unchecked")
-		public static <R> StringConverter<R> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Disabled() {
-			super();
-		}
-		// throw an exception
-		public String convertToString(S o) {
-			throw new UnsupportedOperationException();
-		}
-		@Override
-		public String toString() {
-			return "StringConverter.Disabled"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StringMatcher.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StringMatcher.java
deleted file mode 100644
index 7b12900..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StringMatcher.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-/**
- * This interface defines a simple API for allowing "pluggable"
- * string matchers that can be configured with a pattern string
- * then used to determine what strings match the pattern.
- */
-public interface StringMatcher {
-
-	/**
-	 * Set the pattern string used to determine future
-	 * matches. The format and semantics of the pattern
-	 * string are determined by the contract between the
-	 * client and the server.
-	 */
-	void setPatternString(String patternString);
-
-	/**
-	 * Return whether the specified string matches the
-	 * established pattern string. The semantics of a match
-	 * is determined by the contract between the
-	 * client and the server.
-	 */
-	boolean matches(String string);
-
-
-	final class Null implements StringMatcher, Serializable {
-		public static final StringMatcher INSTANCE = new Null();
-		public static StringMatcher instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Null() {
-			super();
-		}
-		public void setPatternString(String patternString) {
-			// ignore the pattern string
-		}
-		public boolean matches(String string) {
-			// everything is a match
-			return true;
-		}
-		@Override
-		public String toString() {
-			return "StringMatcher.Null"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StringTools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StringTools.java
deleted file mode 100644
index 71beb43..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StringTools.java
+++ /dev/null
@@ -1,4485 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Arrays;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
-import org.eclipse.jpt.utility.internal.iterators.ArrayListIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-/**
- * Convenience methods related to the java.lang.String class.
- * 
- * As of jdk 1.5, it's tempting to convert all of these methods to use
- * java.lang.Appendable (instead of StringBuffer, StringBuilder, and Writer);
- * but all the Appendable methods throw java.io.IOException (yech) and we
- * [might?] get a bit better performance invoking methods on classes than
- * we get on interfaces. :-)
- */
-public final class StringTools {
-
-	/** carriage return */
-	public static final String CR = System.getProperty("line.separator");  //$NON-NLS-1$
-
-	/** double quote */
-	public static final char QUOTE = '"';
-
-	/** parenthesis */
-	public static final char OPEN_PARENTHESIS = '(';
-	public static final char CLOSE_PARENTHESIS = ')';
-
-	/** brackets */
-	public static final char OPEN_BRACKET = '[';
-	public static final char CLOSE_BRACKET = ']';
-
-	/** brackets */
-	public static final char OPEN_BRACE = '{';
-	public static final char CLOSE_BRACE = '}';
-
-	/** brackets */
-	public static final char OPEN_CHEVRON = '<';
-	public static final char CLOSE_CHEVRON = '>';
-
-	/** empty string */
-	public static final String EMPTY_STRING = ""; //$NON-NLS-1$
-
-	/** empty char array */
-	public static final char[] EMPTY_CHAR_ARRAY = new char[0];
-
-
-
-	// ********** padding/truncating **********
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#pad(int)
-	 */
-	public static String pad(String string, int length) {
-		return pad(string, length, ' ');
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOn(int, Writer)
-	 */
-	public static void padOn(String string, int length, Writer writer) {
-		padOn(string, length, ' ', writer);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOn(int, StringBuffer)
-	 */
-	public static void padOn(String string, int length, StringBuffer sb) {
-		padOn(string, length, ' ', sb);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOn(int, StringBuilder)
-	 */
-	public static void padOn(String string, int length, StringBuilder sb) {
-		padOn(string, length, ' ', sb);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#pad(int, char)
-	 */
-	public static String pad(String string, int length, char c) {
-		int stringLength = string.length();
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			return string;
-		}
-		return pad_(string, length, c);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOn(int, char, Writer)
-	 */
-	public static void padOn(String string, int length, char c, Writer writer) {
-		int stringLength = string.length();
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			writeStringOn(string, writer);
-		} else {
-			padOn_(string, length, c, writer);
-		}
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOn(int, char, StringBuffer)
-	 */
-	public static void padOn(String string, int length, char c, StringBuffer sb) {
-		int stringLength = string.length();
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			sb.append(string);
-		} else {
-			padOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOn(int, char, StringBuilder)
-	 */
-	public static void padOn(String string, int length, char c, StringBuilder sb) {
-		int stringLength = string.length();
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			sb.append(string);
-		} else {
-			padOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#pad(int)
-	 */
-	public static char[] pad(char[] string, int length) {
-		return pad(string, length, ' ');
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOn(int, writer)
-	 */
-	public static void padOn(char[] string, int length, Writer writer) {
-		padOn(string, length, ' ', writer);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOn(int, StringBuffer)
-	 */
-	public static void padOn(char[] string, int length, StringBuffer sb) {
-		padOn(string, length, ' ', sb);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOn(int, StringBuilder)
-	 */
-	public static void padOn(char[] string, int length, StringBuilder sb) {
-		padOn(string, length, ' ', sb);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#pad(int, char)
-	 */
-	public static char[] pad(char[] string, int length, char c) {
-		int stringLength = string.length;
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			return string;
-		}
-		return pad_(string, length, c);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOn(int, char, Writer)
-	 */
-	public static void padOn(char[] string, int length, char c, Writer writer) {
-		int stringLength = string.length;
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			writeStringOn(string, writer);
-		} else {
-			padOn_(string, length, c, writer);
-		}
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOn(int, char, StringBuffer)
-	 */
-	public static void padOn(char[] string, int length, char c, StringBuffer sb) {
-		int stringLength = string.length;
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			sb.append(string);
-		} else {
-			padOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOn(int, char, StringBuilder)
-	 */
-	public static void padOn(char[] string, int length, char c, StringBuilder sb) {
-		int stringLength = string.length;
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			sb.append(string);
-		} else {
-			padOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOrTruncate(int)
-	 */
-	public static String padOrTruncate(String string, int length) {
-		return padOrTruncate(string, length, ' ');
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOrTruncateOn(int, Writer)
-	 */
-	public static void padOrTruncateOn(String string, int length, Writer writer) {
-		padOrTruncateOn(string, length, ' ', writer);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOrTruncateOn(int, StringBuffer)
-	 */
-	public static void padOrTruncateOn(String string, int length, StringBuffer sb) {
-		padOrTruncateOn(string, length, ' ', sb);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOrTruncateOn(int, StringBuilder)
-	 */
-	public static void padOrTruncateOn(String string, int length, StringBuilder sb) {
-		padOrTruncateOn(string, length, ' ', sb);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOrTruncate(int, char)
-	 */
-	public static String padOrTruncate(String string, int length, char c) {
-		int stringLength = string.length();
-		if (stringLength == length) {
-			return string;
-		}
-		if (stringLength > length) {
-			return string.substring(0, length);
-		}
-		return pad_(string, length, c);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOrTruncateOn(int, char, Writer)
-	 */
-	public static void padOrTruncateOn(String string, int length, char c, Writer writer) {
-		int stringLength = string.length();
-		if (stringLength == length) {
-			writeStringOn(string, writer);
-		} else if (stringLength > length) {
-			writeStringOn(string.substring(0, length), writer);
-		} else {
-			padOn_(string, length, c, writer);
-		}
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOrTruncateOn(int, char, StringBuffer)
-	 */
-	public static void padOrTruncateOn(String string, int length, char c, StringBuffer sb) {
-		int stringLength = string.length();
-		if (stringLength == length) {
-			sb.append(string);
-		} else if (stringLength > length) {
-			sb.append(string.substring(0, length));
-		} else {
-			padOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOrTruncateOn(int, char, StringBuilder)
-	 */
-	public static void padOrTruncateOn(String string, int length, char c, StringBuilder sb) {
-		int stringLength = string.length();
-		if (stringLength == length) {
-			sb.append(string);
-		} else if (stringLength > length) {
-			sb.append(string.substring(0, length));
-		} else {
-			padOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOrTruncate(int)
-	 */
-	public static char[] padOrTruncate(char[] string, int length) {
-		return padOrTruncate(string, length, ' ');
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOrTruncateOn(int, Writer)
-	 */
-	public static void padOrTruncateOn(char[] string, int length, Writer writer) {
-		padOrTruncateOn(string, length, ' ', writer);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOrTruncateOn(int, StringBuffer)
-	 */
-	public static void padOrTruncate(char[] string, int length, StringBuffer sb) {
-		padOrTruncateOn(string, length, ' ', sb);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with spaces at the end.
-	 * String#padOrTruncateOn(int, StringBuilder)
-	 */
-	public static void padOrTruncate(char[] string, int length, StringBuilder sb) {
-		padOrTruncateOn(string, length, ' ', sb);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOrTruncate(int, char)
-	 */
-	public static char[] padOrTruncate(char[] string, int length, char c) {
-		int stringLength = string.length;
-		if (stringLength == length) {
-			return string;
-		}
-		if (stringLength > length) {
-			char[] result = new char[length];
-			System.arraycopy(string, 0, result, 0, length);
-			return result;
-		}
-		return pad_(string, length, c);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOrTruncateOn(int, char, Writer)
-	 */
-	public static void padOrTruncateOn(char[] string, int length, char c, Writer writer) {
-		int stringLength = string.length;
-		if (stringLength == length) {
-			writeStringOn(string, writer);
-		} else if (stringLength > length) {
-			writeStringOn(string, 0, length, writer);
-		} else {
-			padOn_(string, length, c, writer);
-		}
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOrTruncateOn(int, char, StringBuffer)
-	 */
-	public static void padOrTruncateOn(char[] string, int length, char c, StringBuffer sb) {
-		int stringLength = string.length;
-		if (stringLength == length) {
-			sb.append(string);
-		} else if (stringLength > length) {
-			sb.append(string, 0, length);
-		} else {
-			padOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, it is truncated.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the end.
-	 * String#padOrTruncateOn(int, char, StringBuilder)
-	 */
-	public static void padOrTruncateOn(char[] string, int length, char c, StringBuilder sb) {
-		int stringLength = string.length;
-		if (stringLength == length) {
-			sb.append(string);
-		} else if (stringLength > length) {
-			sb.append(string, 0, length);
-		} else {
-			padOn_(string, length, c, sb);
-		}
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static String pad_(String string, int length, char c) {
-		return new String(pad_(string.toCharArray(), length, c));
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void padOn_(String string, int length, char c, Writer writer) {
-		writeStringOn(string, writer);
-		fill_(string, length, c, writer);
-	}
-
-	/*
-	 * Add enough characters to the specified writer to compensate for
-	 * the difference between the specified string and specified length.
-	 */
-	private static void fill_(String string, int length, char c, Writer writer) {
-		fill_(string.length(), length, c, writer);
-	}
-
-	/*
-	 * Add enough characters to the specified writer to compensate for
-	 * the difference between the specified string and specified length.
-	 */
-	private static void fill_(char[] string, int length, char c, Writer writer) {
-		fill_(string.length, length, c, writer);
-	}
-
-	/*
-	 * Add enough characters to the specified writer to compensate for
-	 * the difference between the specified string and specified length.
-	 */
-	private static void fill_(int stringLength, int length, char c, Writer writer) {
-		writeStringOn(ArrayTools.fill(new char[length - stringLength], c), writer);
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void padOn_(String string, int length, char c, StringBuffer sb) {
-		sb.append(string);
-		fill_(string, length, c, sb);
-	}
-
-	/*
-	 * Add enough characters to the specified string buffer to compensate for
-	 * the difference between the specified string and specified length.
-	 */
-	private static void fill_(String string, int length, char c, StringBuffer sb) {
-		fill_(string.length(), length, c, sb);
-	}
-
-	/*
-	 * Add enough characters to the specified string buffer to compensate for
-	 * the difference between the specified string and specified length.
-	 */
-	private static void fill_(char[] string, int length, char c, StringBuffer sb) {
-		fill_(string.length, length, c, sb);
-	}
-
-	/*
-	 * Add enough characters to the specified string buffer to compensate for
-	 * the difference between the specified string and specified length.
-	 */
-	private static void fill_(int stringLength, int length, char c, StringBuffer sb) {
-		sb.append(ArrayTools.fill(new char[length - stringLength], c));
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void padOn_(String string, int length, char c, StringBuilder sb) {
-		sb.append(string);
-		fill_(string, length, c, sb);
-	}
-
-	/*
-	 * Add enough characters to the specified string builder to compensate for
-	 * the difference between the specified string and specified length.
-	 */
-	private static void fill_(String string, int length, char c, StringBuilder sb) {
-		fill_(string.length(), length, c, sb);
-	}
-
-	/*
-	 * Add enough characters to the specified string builder to compensate for
-	 * the difference between the specified string and specified length.
-	 */
-	private static void fill_(char[] string, int length, char c, StringBuilder sb) {
-		fill_(string.length, length, c, sb);
-	}
-
-	/*
-	 * Add enough characters to the specified string builder to compensate for
-	 * the difference between the specified string and specified length.
-	 */
-	private static void fill_(int stringLength, int length, char c, StringBuilder sb) {
-		sb.append(ArrayTools.fill(new char[length - stringLength], c));
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static char[] pad_(char[] string, int length, char c) {
-		char[] result = new char[length];
-		int stringLength = string.length;
-		System.arraycopy(string, 0, result, 0, stringLength);
-		Arrays.fill(result, stringLength, length, c);
-		return result;
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void padOn_(char[] string, int length, char c, Writer writer) {
-		writeStringOn(string, writer);
-		fill_(string, length, c, writer);
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void padOn_(char[] string, int length, char c, StringBuffer sb) {
-		sb.append(string);
-		fill_(string, length, c, sb);
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void padOn_(char[] string, int length, char c, StringBuilder sb) {
-		sb.append(string);
-		fill_(string, length, c, sb);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPad(int)
-	 */
-	public static String zeroPad(String string, int length) {
-		return frontPad(string, length, '0');
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOn(int, Writer)
-	 */
-	public static void zeroPadOn(String string, int length, Writer writer) {
-		frontPadOn(string, length, '0', writer);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOn(int, StringBuffer)
-	 */
-	public static void zeroPadOn(String string, int length, StringBuffer sb) {
-		frontPadOn(string, length, '0', sb);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOn(int, StringBuilder)
-	 */
-	public static void zeroPadOn(String string, int length, StringBuilder sb) {
-		frontPadOn(string, length, '0', sb);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the front.
-	 * String#frontPad(int, char)
-	 */
-	public static String frontPad(String string, int length, char c) {
-		int stringLength = string.length();
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			return string;
-		}
-		return frontPad_(string, length, c);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the front.
-	 * String#frontPadOn(int, char, Writer)
-	 */
-	public static void frontPadOn(String string, int length, char c, Writer writer) {
-		int stringLength = string.length();
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			writeStringOn(string, writer);
-		} else {
-			frontPadOn_(string, length, c, writer);
-		}
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the front.
-	 * String#frontPadOn(int, char, StringBuffer)
-	 */
-	public static void frontPadOn(String string, int length, char c, StringBuffer sb) {
-		int stringLength = string.length();
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			sb.append(string);
-		} else {
-			frontPadOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the front.
-	 * String#frontPadOn(int, char, StringBuilder)
-	 */
-	public static void frontPadOn(String string, int length, char c, StringBuilder sb) {
-		int stringLength = string.length();
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			sb.append(string);
-		} else {
-			frontPadOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPad(int)
-	 */
-	public static char[] zeroPad(char[] string, int length) {
-		return frontPad(string, length, '0');
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOn(int, Writer)
-	 */
-	public static void zeroPadOn(char[] string, int length, Writer writer) {
-		frontPadOn(string, length, '0', writer);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOn(int, StringBuffer)
-	 */
-	public static void zeroPadOn(char[] string, int length, StringBuffer sb) {
-		frontPadOn(string, length, '0', sb);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOn(int, StringBuilder)
-	 */
-	public static void zeroPadOn(char[] string, int length, StringBuilder sb) {
-		frontPadOn(string, length, '0', sb);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the front.
-	 * String#frontPad(int, char)
-	 */
-	public static char[] frontPad(char[] string, int length, char c) {
-		int stringLength = string.length;
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			return string;
-		}
-		return frontPad_(string, length, c);
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the front.
-	 * String#frontPadOn(int, char, Writer)
-	 */
-	public static void frontPadOn(char[] string, int length, char c, Writer writer) {
-		int stringLength = string.length;
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			writeStringOn(string, writer);
-		} else {
-			frontPadOn_(string, length, c, writer);
-		}
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the front.
-	 * String#frontPadOn(int, char, StringBuffer)
-	 */
-	public static void frontPadOn(char[] string, int length, char c, StringBuffer sb) {
-		int stringLength = string.length;
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			sb.append(string);
-		} else {
-			frontPadOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, an IllegalArgumentException is thrown.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the front.
-	 * String#frontPadOn(int, char, StringBuilder)
-	 */
-	public static void frontPadOn(char[] string, int length, char c, StringBuilder sb) {
-		int stringLength = string.length;
-		if (stringLength > length) {
-			throw new IllegalArgumentException("String is too long: " + stringLength + " > " + length);  //$NON-NLS-1$  //$NON-NLS-2$
-		}
-		if (stringLength == length) {
-			sb.append(string);
-		} else {
-			frontPadOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOrTruncate(int)
-	 */
-	public static String zeroPadOrTruncate(String string, int length) {
-		return frontPadOrTruncate(string, length, '0');
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOrTruncateOn(int, Writer)
-	 */
-	public static void zeroPadOrTruncateOn(String string, int length, Writer writer) {
-		frontPadOrTruncateOn(string, length, '0', writer);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOrTruncateOn(int, StringBuffer)
-	 */
-	public static void zeroPadOrTruncateOn(String string, int length, StringBuffer sb) {
-		frontPadOrTruncateOn(string, length, '0', sb);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOrTruncateOn(int, StringBuilder)
-	 */
-	public static void zeroPadOrTruncateOn(String string, int length, StringBuilder sb) {
-		frontPadOrTruncateOn(string, length, '0', sb);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the front.
-	 * String#frontPadOrTruncate(int, char)
-	 */
-	public static String frontPadOrTruncate(String string, int length, char c) {
-		int stringLength = string.length();
-		if (stringLength == length) {
-			return string;
-		}
-		if (stringLength > length) {
-			return string.substring(stringLength - length);
-		}
-		return frontPad_(string, length, c);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the front.
-	 * String#frontPadOrTruncateOn(int, char, Writer)
-	 */
-	public static void frontPadOrTruncateOn(String string, int length, char c, Writer writer) {
-		int stringLength = string.length();
-		if (stringLength == length) {
-			writeStringOn(string, writer);
-		} else if (stringLength > length) {
-			writeStringOn(string.substring(stringLength - length), writer);
-		} else {
-			frontPadOn_(string, length, c, writer);
-		}
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the front.
-	 * String#frontPadOrTruncateOn(int, char, StringBuffer)
-	 */
-	public static void frontPadOrTruncateOn(String string, int length, char c, StringBuffer sb) {
-		int stringLength = string.length();
-		if (stringLength == length) {
-			sb.append(string);
-		} else if (stringLength > length) {
-			sb.append(string.substring(stringLength - length));
-		} else {
-			frontPadOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with the
-	 * specified character at the front.
-	 * String#frontPadOrTruncateOn(int, char, StringBuilder)
-	 */
-	public static void frontPadOrTruncateOn(String string, int length, char c, StringBuilder sb) {
-		int stringLength = string.length();
-		if (stringLength == length) {
-			sb.append(string);
-		} else if (stringLength > length) {
-			sb.append(string.substring(stringLength - length));
-		} else {
-			frontPadOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOrTruncate(int)
-	 */
-	public static char[] zeroPadOrTruncate(char[] string, int length) {
-		return frontPadOrTruncate(string, length, '0');
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOrTruncateOn(int, Writer)
-	 */
-	public static void zeroPadOrTruncateOn(char[] string, int length, Writer writer) {
-		frontPadOrTruncateOn(string, length, '0', writer);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOrTruncateOn(int, StringBuffer)
-	 */
-	public static void zeroPadOrTruncateOn(char[] string, int length, StringBuffer sb) {
-		frontPadOrTruncateOn(string, length, '0', sb);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with zeros at the front.
-	 * String#zeroPadOrTruncateOn(int, StringBuilder)
-	 */
-	public static void zeroPadOrTruncateOn(char[] string, int length, StringBuilder sb) {
-		frontPadOrTruncateOn(string, length, '0', sb);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with the 
-	 * specified character at the front.
-	 * String#frontPadOrTruncate(int, char)
-	 */
-	public static char[] frontPadOrTruncate(char[] string, int length, char c) {
-		int stringLength = string.length;
-		if (stringLength == length) {
-			return string;
-		}
-		if (stringLength > length) {
-			char[] result = new char[length];
-			System.arraycopy(string, stringLength - length, result, 0, length);
-			return result;
-		}
-		return frontPad_(string, length, c);
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with the 
-	 * specified character at the front.
-	 * String#frontPadOrTruncateOn(int, char, Writer)
-	 */
-	public static void frontPadOrTruncateOn(char[] string, int length, char c, Writer writer) {
-		int stringLength = string.length;
-		if (stringLength == length) {
-			writeStringOn(string, writer);
-		} else if (stringLength > length) {
-			writeStringOn(string, stringLength - length, length, writer);
-		} else {
-			frontPadOn_(string, length, c, writer);
-		}
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with the 
-	 * specified character at the front.
-	 * String#frontPadOrTruncateOn(int, char, StringBuffer)
-	 */
-	public static void frontPadOrTruncateOn(char[] string, int length, char c, StringBuffer sb) {
-		int stringLength = string.length;
-		if (stringLength == length) {
-			sb.append(string);
-		} else if (stringLength > length) {
-			sb.append(string, stringLength - length, length);
-		} else {
-			frontPadOn_(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad or truncate the specified string to the specified length.
-	 * If the string is already the specified length, it is returned unchanged.
-	 * If it is longer than the specified length, only the last part of the string is returned.
-	 * If it is shorter than the specified length, it is padded with the 
-	 * specified character at the front.
-	 * String#frontPadOrTruncateOn(int, char, StringBuilder)
-	 */
-	public static void frontPadOrTruncateOn(char[] string, int length, char c, StringBuilder sb) {
-		int stringLength = string.length;
-		if (stringLength == length) {
-			sb.append(string);
-		} else if (stringLength > length) {
-			sb.append(string, stringLength - length, length);
-		} else {
-			frontPadOn_(string, length, c, sb);
-		}
-	}
-
-	/*
-	 * Front-pad the specified string without validating the parms.
-	 */
-	private static String frontPad_(String string, int length, char c) {
-		return new String(frontPad_(string.toCharArray(), length, c));
-	}
-
-	/*
-	 * Zero-pad the specified string without validating the parms.
-	 */
-	private static char[] frontPad_(char[] string, int length, char c) {
-		char[] result = new char[length];
-		int stringLength = string.length;
-		int padLength = length - stringLength;
-		System.arraycopy(string, 0, result, padLength, stringLength);
-		Arrays.fill(result, 0, padLength, c);
-		return result;
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void frontPadOn_(String string, int length, char c, Writer writer) {
-		fill_(string, length, c, writer);
-		writeStringOn(string, writer);
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void frontPadOn_(char[] string, int length, char c, Writer writer) {
-		fill_(string, length, c, writer);
-		writeStringOn(string, writer);
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void frontPadOn_(String string, int length, char c, StringBuffer sb) {
-		fill_(string, length, c, sb);
-		sb.append(string);
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void frontPadOn_(char[] string, int length, char c, StringBuffer sb) {
-		fill_(string, length, c, sb);
-		sb.append(string);
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void frontPadOn_(String string, int length, char c, StringBuilder sb) {
-		fill_(string, length, c, sb);
-		sb.append(string);
-	}
-
-	/*
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void frontPadOn_(char[] string, int length, char c, StringBuilder sb) {
-		fill_(string, length, c, sb);
-		sb.append(string);
-	}
-
-
-	// ********** delimiting/quoting **********
-
-	/**
-	 * Delimit the specified string with double quotes.
-	 * Escape any occurrences of a double quote in the string with another
-	 * double quote.
-	 */
-	public static String quote(String string) {
-		return delimit(string, QUOTE);
-	}
-
-	/**
-	 * Delimit the specified string with double quotes.
-	 * Escape any occurrences of a double quote in the string with another
-	 * double quote.
-	 */
-	public static void quoteOn(String string, Writer writer) {
-		delimitOn(string, QUOTE, writer);
-	}
-
-	/**
-	 * Delimit the specified string with double quotes.
-	 * Escape any occurrences of a double quote in the string with another
-	 * double quote.
-	 */
-	public static void quoteOn(String string, StringBuffer sb) {
-		delimitOn(string, QUOTE, sb);
-	}
-
-	/**
-	 * Delimit the specified string with double quotes.
-	 * Escape any occurrences of a double quote in the string with another
-	 * double quote.
-	 */
-	public static void quoteOn(String string, StringBuilder sb) {
-		delimitOn(string, QUOTE, sb);
-	}
-
-	/**
-	 * Delimit each of the specified strings with double quotes.
-	 * Escape any occurrences of a double quote in a string with another
-	 * double quote.
-	 */
-	public static Iterator<String> quote(Iterator<String> strings) {
-		return delimit(strings, QUOTE);
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of the delimiter in the string with another delimiter.
-	 */
-	public static String delimit(String string, char delimiter) {
-		return new String(delimit(string.toCharArray(), delimiter));
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of the delimiter in the string with another delimiter.
-	 */
-	public static void delimitOn(String string, char delimiter, Writer writer) {
-		delimitOn(string.toCharArray(), delimiter, writer);
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of the delimiter in the string with another delimiter.
-	 */
-	public static void delimitOn(String string, char delimiter, StringBuffer sb) {
-		delimitOn(string.toCharArray(), delimiter, sb);
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of the delimiter in the string with another delimiter.
-	 */
-	public static void delimitOn(String string, char delimiter, StringBuilder sb) {
-		delimitOn(string.toCharArray(), delimiter, sb);
-	}
-
-	/**
-	 * Delimit each of the specified strings with the specified delimiter; i.e. put a
-	 * copy of the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of the delimiter in a string with another delimiter.
-	 */
-	public static Iterable<String> delimit(Iterable<String> strings, char delimiter) {
-		return new TransformationIterable<String, String>(strings, new CharStringDelimiter(delimiter));
-	}
-
-	/**
-	 * Delimit each of the specified strings with the specified delimiter; i.e. put a
-	 * copy of the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of the delimiter in a string with another delimiter.
-	 */
-	public static Iterator<String> delimit(Iterator<String> strings, char delimiter) {
-		return new TransformationIterator<String, String>(strings, new CharStringDelimiter(delimiter));
-	}
-
-	private static class CharStringDelimiter implements Transformer<String, String> {
-		private char delimiter;
-		CharStringDelimiter(char delimiter) {
-			super();
-			this.delimiter = delimiter;
-		}
-		public String transform(String string) {
-			return StringTools.delimit(string, this.delimiter);
-		}
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of a single-character delimiter in the string with
-	 * another delimiter.
-	 */
-	public static String delimit(String string, String delimiter) {
-		if (delimiter.length() == 1) {
-			return delimit(string, delimiter.charAt(0));
-		}
-		return new String(delimit(string.toCharArray(), delimiter.toCharArray()));
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of a single-character delimiter in the string with
-	 * another delimiter.
-	 */
-	public static void delimitOn(String string, String delimiter, Writer writer) {
-		if (delimiter.length() == 1) {
-			delimitOn(string, delimiter.charAt(0), writer);
-		} else {
-			delimitOn(string.toCharArray(), delimiter.toCharArray(), writer);
-		}
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of a single-character delimiter in the string with
-	 * another delimiter.
-	 */
-	public static void delimitOn(String string, String delimiter, StringBuffer sb) {
-		if (delimiter.length() == 1) {
-			delimitOn(string, delimiter.charAt(0), sb);
-		} else {
-			delimitOn(string.toCharArray(), delimiter.toCharArray(), sb);
-		}
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of a single-character delimiter in the string with
-	 * another delimiter.
-	 */
-	public static void delimitOn(String string, String delimiter, StringBuilder sb) {
-		if (delimiter.length() == 1) {
-			delimitOn(string, delimiter.charAt(0), sb);
-		} else {
-			delimitOn(string.toCharArray(), delimiter.toCharArray(), sb);
-		}
-	}
-
-	/**
-	 * Delimit each of the specified strings with the specified delimiter; i.e. put a
-	 * copy of the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of a single-character delimiter in a string with
-	 * another delimiter.
-	 */
-	public static Iterable<String> delimit(Iterable<String> strings, String delimiter) {
-		return (delimiter.length() == 1) ?
-				delimit(strings, delimiter.charAt(0)) :
-				new TransformationIterable<String, String>(strings, new StringStringDelimiter(delimiter));
-	}
-
-	/**
-	 * Delimit each of the specified strings with the specified delimiter; i.e. put a
-	 * copy of the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of a single-character delimiter in a string with
-	 * another delimiter.
-	 */
-	public static Iterator<String> delimit(Iterator<String> strings, String delimiter) {
-		return (delimiter.length() == 1) ?
-				delimit(strings, delimiter.charAt(0)) :
-				new TransformationIterator<String, String>(strings, new StringStringDelimiter(delimiter));
-	}
-
-	private static class StringStringDelimiter implements Transformer<String, String> {
-		private String delimiter;
-		StringStringDelimiter(String delimiter) {
-			super();
-			this.delimiter = delimiter;
-		}
-		public String transform(String string) {
-			return StringTools.delimit(string, this.delimiter);
-		}
-	}
-
-	/**
-	 * Delimit the specified string with double quotes.
-	 * Escape any occurrences of a double quote in the string with another
-	 * double quote.
-	 */
-	public static char[] quote(char[] string) {
-		return delimit(string, QUOTE);
-	}
-
-	/**
-	 * Delimit the specified string with double quotes.
-	 * Escape any occurrences of a double quote in the string with another
-	 * double quote.
-	 */
-	public static void quoteOn(char[] string, Writer writer) {
-		delimitOn(string, QUOTE, writer);
-	}
-
-	/**
-	 * Delimit the specified string with double quotes.
-	 * Escape any occurrences of a double quote in the string with another
-	 * double quote.
-	 */
-	public static void quoteOn(char[] string, StringBuffer sb) {
-		delimitOn(string, QUOTE, sb);
-	}
-
-	/**
-	 * Delimit the specified string with double quotes.
-	 * Escape any occurrences of a double quote in the string with another
-	 * double quote.
-	 */
-	public static void quoteOn(char[] string, StringBuilder sb) {
-		delimitOn(string, QUOTE, sb);
-	}
-
-	/**
-	 * Delimit each of the specified strings with double quotes.
-	 * Escape any occurrences of a double quote in a string with another
-	 * double quote.
-	 */
-	// cannot name method simply 'quote' because of type-erasure...
-	public static Iterator<char[]> quoteCharArrays(Iterator<char[]> strings) {
-		return delimitCharArrays(strings, QUOTE);
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of the delimiter in the string with another delimiter.
-	 */
-	public static char[] delimit(char[] string, char delimiter) {
-		StringBuilder sb = new StringBuilder(string.length + 2);
-		delimitOn(string, delimiter, sb);
-		return convertToCharArray(sb);
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of the delimiter in the string with another delimiter.
-	 */
-	public static void delimitOn(char[] string, char delimiter, Writer writer) {
-		writeCharOn(delimiter, writer);
-		writeStringOn(string, delimiter, writer);
-		writeCharOn(delimiter, writer);
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of the delimiter in the string with another delimiter.
-	 */
-	public static void delimitOn(char[] string, char delimiter, StringBuffer sb) {
-		sb.append(delimiter);
-		for (char c : string) {
-			if (c == delimiter) {
-				sb.append(c);
-			}
-			sb.append(c);
-		}
-		sb.append(delimiter);
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of the delimiter in the string with another delimiter.
-	 */
-	public static void delimitOn(char[] string, char delimiter, StringBuilder sb) {
-		sb.append(delimiter);
-		for (char c : string) {
-			if (c == delimiter) {
-				sb.append(c);
-			}
-			sb.append(c);
-		}
-		sb.append(delimiter);
-	}
-
-	/**
-	 * Delimit each of the specified strings with the specified delimiter; i.e. put a
-	 * copy of the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of the delimiter in a string with another delimiter.
-	 */
-	// cannot name method simply 'delimit' because of type-erasure...
-	public static Iterable<char[]> delimitCharArrays(Iterable<char[]> strings, char delimiter) {
-		return new TransformationIterable<char[], char[]>(strings, new CharCharArrayDelimiter(delimiter));
-	}
-
-	/**
-	 * Delimit each of the specified strings with the specified delimiter; i.e. put a
-	 * copy of the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of the delimiter in a string with another delimiter.
-	 */
-	// cannot name method simply 'delimit' because of type-erasure...
-	public static Iterator<char[]> delimitCharArrays(Iterator<char[]> strings, char delimiter) {
-		return new TransformationIterator<char[], char[]>(strings, new CharCharArrayDelimiter(delimiter));
-	}
-
-	private static class CharCharArrayDelimiter implements Transformer<char[], char[]> {
-		private char delimiter;
-		CharCharArrayDelimiter(char delimiter) {
-			super();
-			this.delimiter = delimiter;
-		}
-		public char[] transform(char[] string) {
-			return StringTools.delimit(string, this.delimiter);
-		}
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of a single-character delimiter in the string with
-	 * another delimiter.
-	 */
-	public static char[] delimit(char[] string, char[] delimiter) {
-		int delimiterLength = delimiter.length;
-		if (delimiterLength == 1) {
-			return delimit(string, delimiter[0]);
-		}
-		int stringLength = string.length;
-		char[] result = new char[stringLength+(2*delimiterLength)];
-		System.arraycopy(delimiter, 0, result, 0, delimiterLength);
-		System.arraycopy(string, 0, result, delimiterLength, stringLength);
-		System.arraycopy(delimiter, 0, result, stringLength+delimiterLength, delimiterLength);
-		return result;
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of a single-character delimiter in the string with
-	 * another delimiter.
-	 */
-	public static void delimitOn(char[] string, char[] delimiter, Writer writer) {
-		if (delimiter.length == 1) {
-			delimitOn(string, delimiter[0], writer);
-		} else {
-			writeStringOn(delimiter, writer);
-			writeStringOn(string, writer);
-			writeStringOn(delimiter, writer);
-		}
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of a single-character delimiter in the string with
-	 * another delimiter.
-	 */
-	public static void delimitOn(char[] string, char[] delimiter, StringBuffer sb) {
-		if (delimiter.length == 1) {
-			delimitOn(string, delimiter[0], sb);
-		} else {
-			sb.append(delimiter);
-			sb.append(string);
-			sb.append(delimiter);
-		}
-	}
-
-	/**
-	 * Delimit the specified string with the specified delimiter; i.e. put a copy of
-	 * the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of a single-character delimiter in the string with
-	 * another delimiter.
-	 */
-	public static void delimitOn(char[] string, char[] delimiter, StringBuilder sb) {
-		if (delimiter.length == 1) {
-			delimitOn(string, delimiter[0], sb);
-		} else {
-			sb.append(delimiter);
-			sb.append(string);
-			sb.append(delimiter);
-		}
-	}
-
-	/**
-	 * Delimit each of the specified strings with the specified delimiter; i.e. put a
-	 * copy of the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of a single-character delimiter in a string with
-	 * another delimiter.
-	 */
-	// cannot name method simply 'delimit' because of type-erasure...
-	public static Iterable<char[]> delimitCharArrays(Iterable<char[]> strings, char[] delimiter) {
-		return new TransformationIterable<char[], char[]>(strings, new CharArrayCharArrayDelimiter(delimiter));
-	}
-
-	/**
-	 * Delimit each of the specified strings with the specified delimiter; i.e. put a
-	 * copy of the delimiter at the front and back of the resulting string.
-	 * Escape any occurrences of a single-character delimiter in a string with
-	 * another delimiter.
-	 */
-	// cannot name method simply 'delimit' because of type-erasure...
-	public static Iterator<char[]> delimitCharArrays(Iterator<char[]> strings, char[] delimiter) {
-		return new TransformationIterator<char[], char[]>(strings, new CharArrayCharArrayDelimiter(delimiter));
-	}
-
-	private static class CharArrayCharArrayDelimiter implements Transformer<char[], char[]> {
-		private char[] delimiter;
-		CharArrayCharArrayDelimiter(char[] delimiter) {
-			super();
-			this.delimiter = delimiter;
-		}
-		public char[] transform(char[] string) {
-			return StringTools.delimit(string, this.delimiter);
-		}
-	}
-
-
-	// ********** delimiting queries **********
-
-	/**
-	 * Return whether the specified string is quoted: "\"foo\"".
-	 */
-	public static boolean stringIsQuoted(String string) {
-		return stringIsDelimited(string, QUOTE);
-	}
-
-	/**
-	 * Return whether the specified string is parenthetical: "(foo)".
-	 */
-	public static boolean stringIsParenthetical(String string) {
-		return stringIsDelimited(string, OPEN_PARENTHESIS, CLOSE_PARENTHESIS);
-	}
-
-	/**
-	 * Return whether the specified string is bracketed: "[foo]".
-	 */
-	public static boolean stringIsBracketed(String string) {
-		return stringIsDelimited(string, OPEN_BRACKET, CLOSE_BRACKET);
-	}
-
-	/**
-	 * Return whether the specified string is braced: "{foo}".
-	 */
-	public static boolean stringIsBraced(String string) {
-		return stringIsDelimited(string, OPEN_BRACE, CLOSE_BRACE);
-	}
-
-	/**
-	 * Return whether the specified string is chevroned: "<foo>".
-	 */
-	public static boolean stringIsChevroned(String string) {
-		return stringIsDelimited(string, OPEN_CHEVRON, CLOSE_CHEVRON);
-	}
-
-	/**
-	 * Return whether the specified string is delimited by the specified
-	 * character.
-	 */
-	public static boolean stringIsDelimited(String string, char c) {
-		return stringIsDelimited(string, c, c);
-	}
-
-	/**
-	 * Return whether the specified string is delimited by the specified
-	 * characters.
-	 */
-	public static boolean stringIsDelimited(String string, char start, char end) {
-		int len = string.length();
-		if (len < 2) {
-			return false;
-		}
-		return stringIsDelimited(string.toCharArray(), start, end, len);
-	}
-
-	/**
-	 * Return whether the specified string is quoted: "\"foo\"".
-	 */
-	public static boolean stringIsQuoted(char[] string) {
-		return stringIsDelimited(string, QUOTE);
-	}
-
-	/**
-	 * Return whether the specified string is parenthetical: "(foo)".
-	 */
-	public static boolean stringIsParenthetical(char[] string) {
-		return stringIsDelimited(string, OPEN_PARENTHESIS, CLOSE_PARENTHESIS);
-	}
-
-	/**
-	 * Return whether the specified string is bracketed: "[foo]".
-	 */
-	public static boolean stringIsBracketed(char[] string) {
-		return stringIsDelimited(string, OPEN_BRACKET, CLOSE_BRACKET);
-	}
-
-	/**
-	 * Return whether the specified string is braced: "{foo}".
-	 */
-	public static boolean stringIsBraced(char[] string) {
-		return stringIsDelimited(string, OPEN_BRACE, CLOSE_BRACE);
-	}
-
-	/**
-	 * Return whether the specified string is chevroned: "<foo>".
-	 */
-	public static boolean stringIsChevroned(char[] string) {
-		return stringIsDelimited(string, OPEN_CHEVRON, CLOSE_CHEVRON);
-	}
-
-	/**
-	 * Return whether the specified string is delimited by the specified
-	 * character.
-	 */
-	public static boolean stringIsDelimited(char[] string, char c) {
-		return stringIsDelimited(string, c, c);
-	}
-
-	/**
-	 * Return whether the specified string is delimited by the specified
-	 * characters.
-	 */
-	public static boolean stringIsDelimited(char[] string, char start, char end) {
-		int len = string.length;
-		if (len < 2) {
-			return false;
-		}
-		return stringIsDelimited(string, start, end, len);
-	}
-
-	private static boolean stringIsDelimited(char[] s, char start, char end, int len) {
-		return (s[0] == start) && (s[len - 1] == end);
-	}
-
-
-	// ********** undelimiting **********
-
-	/**
-	 * Remove the delimiters from the specified string, removing any escape
-	 * characters. Throw an IllegalArgumentException if the string is too short
-	 * to undelimit (i.e. length < 2).
-	 */
-	public static String undelimit(String string) {
-		int len = string.length() - 2;
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + string + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return EMPTY_STRING;
-		}
-		return new String(undelimit_(string.toCharArray(), len));
-	}
-
-	/**
-	 * Remove the first and last count characters from the specified string.
-	 * If the string is too short to be undelimited, throw an
-	 * IllegalArgumentException.
-	 * Use this method to undelimit strings that do not escape embedded
-	 * delimiters.
-	 */
-	public static String undelimit(String string, int count) {
-		int len = string.length() - (2 * count);
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + string + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return EMPTY_STRING;
-		}
-		return new String(undelimit(string.toCharArray(), len, count));
-	}
-
-	/**
-	 * Remove the delimiters from the specified string, removing any escape
-	 * characters. Throw an IllegalArgumentException if the string is too short
-	 * to undelimit (i.e. length < 2).
-	 */
-	public static char[] undelimit(char[] string) {
-		int len = string.length - 2;
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + new String(string) + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return EMPTY_CHAR_ARRAY;
-		}
-		return undelimit_(string, len);
-	}
-
-	private static char[] undelimit_(char[] string, int length) {
-		StringBuilder sb = new StringBuilder(length);
-		undelimitOn_(string, sb);
-		return convertToCharArray(sb);
-	}
-
-	/**
-	 * Remove the first and last count characters from the specified string.
-	 * If the string is too short to be undelimited, throw an
-	 * IllegalArgumentException.
-	 * Use this method to undelimit strings that do not escape embedded
-	 * delimiters.
-	 */
-	public static char[] undelimit(char[] string, int count) {
-		int len = string.length - (2 * count);
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + new String(string) + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return EMPTY_CHAR_ARRAY;
-		}
-		return undelimit(string, len, count);
-	}
-
-	private static char[] undelimit(char[] string, int len, int count) {
-		char[] result = new char[len];
-		System.arraycopy(string, count, result, 0, len);
-		return result;
-	}
-
-	/**
-	 * Remove the delimiters from the specified string, removing any escape
-	 * characters. Throw an IllegalArgumentException if the string is too short
-	 * to undelimit (i.e. length < 2).
-	 */
-	public static void undelimitOn(String string, Writer writer) {
-		undelimitOn(string.toCharArray(), writer);
-	}
-
-	/**
-	 * Remove the first and last count characters from the specified string.
-	 * If the string is too short to be undelimited, throw an
-	 * IllegalArgumentException.
-	 * Use this method to undelimit strings that do not escape embedded
-	 * delimiters.
-	 */
-	public static void undelimitOn(String string, int count, Writer writer) {
-		int len = string.length() - (2 * count);
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + string + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return;
-		}
-		writeStringOn(string, count, len, writer);
-	}
-
-	/**
-	 * Remove the delimiters from the specified string, removing any escape
-	 * characters. Throw an IllegalArgumentException if the string is too short
-	 * to undelimit (i.e. length < 2).
-	 */
-	public static void undelimitOn(String string, StringBuffer sb) {
-		undelimitOn(string.toCharArray(), sb);
-	}
-
-	/**
-	 * Remove the first and last count characters from the specified string.
-	 * If the string is too short to be undelimited, throw an
-	 * IllegalArgumentException.
-	 * Use this method to undelimit strings that do not escape embedded
-	 * delimiters.
-	 */
-	public static void undelimitOn(String string, int count, StringBuffer sb) {
-		int len = string.length() - (2 * count);
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + string + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return;
-		}
-		sb.append(string, count, count + len);
-	}
-
-	/**
-	 * Remove the delimiters from the specified string, removing any escape
-	 * characters. Throw an IllegalArgumentException if the string is too short
-	 * to undelimit (i.e. length < 2).
-	 */
-	public static void undelimitOn(String string, StringBuilder sb) {
-		undelimitOn(string.toCharArray(), sb);
-	}
-
-	/**
-	 * Remove the first and last count characters from the specified string.
-	 * If the string is too short to be undelimited, throw an
-	 * IllegalArgumentException.
-	 * Use this method to undelimit strings that do not escape embedded
-	 * delimiters.
-	 */
-	public static void undelimitOn(String string, int count, StringBuilder sb) {
-		int len = string.length() - (2 * count);
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + string + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return;
-		}
-		sb.append(string, count, count + len);
-	}
-
-	/**
-	 * Remove the delimiters from the specified string, removing any escape
-	 * characters. Throw an IllegalArgumentException if the string is too short
-	 * to undelimit (i.e. length < 2).
-	 */
-	public static void undelimitOn(char[] string, Writer writer) {
-		int len = string.length - 2;
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + new String(string) + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return;
-		}
-		undelimitOn_(string, writer);
-	}
-
-	/**
-	 * pre-condition: string is at least 3 characters long
-	 */
-	private static void undelimitOn_(char[] string, Writer writer) {
-		char delimiter = string[0];  // the first char is the delimiter
-		char c = string[0];
-		char next = string[1];
-		int i = 1;
-		int last = string.length - 1;
-		do {
-			c = next;
-			writeCharOn(c, writer);
-			i++;
-			next = string[i];
-			if (c == delimiter) {
-				if ((next != delimiter) || (i == last)) {
-					// an embedded delimiter must be followed by another delimiter
-					return;
-				}
-				i++;
-				next = string[i];
-			}
-		} while (i != last);
-	}
-
-	/**
-	 * Remove the first and last count characters from the specified string.
-	 * If the string is too short to be undelimited, throw an
-	 * IllegalArgumentException.
-	 * Use this method to undelimit strings that do not escape embedded
-	 * delimiters.
-	 */
-	public static void undelimitOn(char[] string, int count, Writer writer) {
-		int len = string.length - (2 * count);
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + new String(string) + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return;
-		}
-		writeStringOn(string, count, len, writer);
-	}
-
-	/**
-	 * Remove the delimiters from the specified string, removing any escape
-	 * characters. Throw an IllegalArgumentException if the string is too short
-	 * to undelimit (i.e. length < 2).
-	 */
-	public static void undelimitOn(char[] string, StringBuffer sb) {
-		int len = string.length - 2;
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + new String(string) + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return;
-		}
-		undelimitOn_(string, sb);
-	}
-
-	/**
-	 * pre-condition: string is at least 3 characters long
-	 */
-	private static void undelimitOn_(char[] string, StringBuffer sb) {
-		char delimiter = string[0];  // the first char is the delimiter
-		char c = string[0];
-		char next = string[1];
-		int i = 1;
-		int last = string.length - 1;
-		do {
-			c = next;
-			sb.append(c);
-			i++;
-			next = string[i];
-			if (c == delimiter) {
-				if ((next != delimiter) || (i == last)) {
-					// an embedded delimiter must be followed by another delimiter
-					return;
-				}
-				i++;
-				next = string[i];
-			}
-		} while (i != last);
-	}
-
-	/**
-	 * Remove the first and last count characters from the specified string.
-	 * If the string is too short to be undelimited, throw an
-	 * IllegalArgumentException.
-	 * Use this method to undelimit strings that do not escape embedded
-	 * delimiters.
-	 */
-	public static void undelimitOn(char[] string, int count, StringBuffer sb) {
-		int len = string.length - (2 * count);
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + new String(string) + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return;
-		}
-		sb.append(string, count, len);
-	}
-
-	/**
-	 * Remove the delimiters from the specified string, removing any escape
-	 * characters. Throw an IllegalArgumentException if the string is too short
-	 * to undelimit (i.e. length < 2).
-	 */
-	public static void undelimitOn(char[] string, StringBuilder sb) {
-		int len = string.length - 2;
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + new String(string) + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return;
-		}
-		undelimitOn_(string, sb);
-	}
-
-	/**
-	 * pre-condition: string is at least 3 characters long
-	 */
-	private static void undelimitOn_(char[] string, StringBuilder sb) {
-		char delimiter = string[0];  // the first char is the delimiter
-		char c = string[0];
-		char next = string[1];
-		int i = 1;
-		int last = string.length - 1;
-		do {
-			c = next;
-			sb.append(c);
-			i++;
-			next = string[i];
-			if (c == delimiter) {
-				if ((next != delimiter) || (i == last)) {
-					// an embedded delimiter must be followed by another delimiter
-					return;
-				}
-				i++;
-				next = string[i];
-			}
-		} while (i != last);
-	}
-
-	/**
-	 * Remove the first and last count characters from the specified string.
-	 * If the string is too short to be undelimited, throw an
-	 * IllegalArgumentException.
-	 * Use this method to undelimit strings that do not escape embedded
-	 * delimiters.
-	 */
-	public static void undelimitOn(char[] string, int count, StringBuilder sb) {
-		int len = string.length - (2 * count);
-		if (len < 0) {
-			throw new IllegalArgumentException("invalid string: \"" + new String(string) + '"'); //$NON-NLS-1$
-		}
-		if (len == 0) {
-			return;
-		}
-		sb.append(string, count, len);
-	}
-
-
-	// ********** removing characters **********
-
-	/**
-	 * Remove the first occurrence of the specified character
-	 * from the specified string and return the result.
-	 * String#removeFirstOccurrence(char)
-	 */
-	public static String removeFirstOccurrence(String string, char c) {
-		int index = string.indexOf(c);
-		if (index == -1) {
-			// character not found
-			return string;
-		}
-		if (index == 0) {
-			// character found at the front of string
-			return string.substring(1);
-		}
-		int last = string.length() - 1;
-		if (index == last) {
-			// character found at the end of string
-			return string.substring(0, last);
-		}
-		// character found somewhere in the middle of the string
-		return string.substring(0, index).concat(string.substring(index + 1));
-	}
-
-	/**
-	 * Remove the first occurrence of the specified character
-	 * from the specified string and print the result on the specified stream.
-	 * String#removeFirstOccurrenceOn(char, Writer)
-	 */
-	public static void removeFirstOccurrenceOn(String string, char c, Writer writer) {
-		int index = string.indexOf(c);
-		if (index == -1) {
-			writeStringOn(string, writer);
-		} else {
-			removeCharAtIndexOn(string.toCharArray(), index, writer);
-		}
-	}
-
-	/**
-	 * Remove the first occurrence of the specified character
-	 * from the specified string and print the result on the specified stream.
-	 * String#removeFirstOccurrenceOn(char, StringBuffer)
-	 */
-	public static void removeFirstOccurrenceOn(String string, char c, StringBuffer sb) {
-		int index = string.indexOf(c);
-		if (index == -1) {
-			sb.append(string);
-		} else {
-			removeCharAtIndexOn(string.toCharArray(), index, sb);
-		}
-	}
-
-	/**
-	 * Remove the first occurrence of the specified character
-	 * from the specified string and print the result on the specified stream.
-	 * String#removeFirstOccurrenceOn(char, StringBuilder)
-	 */
-	public static void removeFirstOccurrenceOn(String string, char c, StringBuilder sb) {
-		int index = string.indexOf(c);
-		if (index == -1) {
-			sb.append(string);
-		} else {
-			removeCharAtIndexOn(string.toCharArray(), index, sb);
-		}
-	}
-
-	/**
-	 * Remove the first occurrence of the specified character
-	 * from the specified string and return the result.
-	 * String#removeFirstOccurrence(char)
-	 */
-	public static char[] removeFirstOccurrence(char[] string, char c) {
-		int index = ArrayTools.indexOf(string, c);
-		if (index == -1) {
-			// character not found
-			return string;
-		}
-		int last = string.length - 1;
-		char[] result = new char[last];
-		if (index == 0) {
-			// character found at the front of string
-			System.arraycopy(string, 1, result, 0, last);
-		} else if (index == last) {
-			// character found at the end of string
-			System.arraycopy(string, 0, result, 0, last);
-		} else {
-			// character found somewhere in the middle of the string
-			System.arraycopy(string, 0, result, 0, index);
-			System.arraycopy(string, index + 1, result, index, last - index);
-		}
-		return result;
-	}
-
-	/**
-	 * Remove the first occurrence of the specified character
-	 * from the specified string and print the result on the specified stream.
-	 * String#removeFirstOccurrenceOn(char, Writer)
-	 */
-	public static void removeFirstOccurrenceOn(char[] string, char c, Writer writer) {
-		int index = ArrayTools.indexOf(string, c);
-		if (index == -1) {
-			writeStringOn(string, writer);
-		} else {
-			removeCharAtIndexOn(string, index, writer);
-		}
-	}
-
-	private static void removeCharAtIndexOn(char[] string, int index, Writer writer) {
-		int last = string.length - 1;
-		if (index == 0) {
-			// character found at the front of string
-			writeStringOn(string, 1, last, writer);
-		} else if (index == last) {
-			// character found at the end of string
-			writeStringOn(string, 0, last, writer);
-		} else {
-			// character found somewhere in the middle of the string
-			writeStringOn(string, 0, index, writer);
-			writeStringOn(string, index + 1, last - index, writer);
-		}
-	}
-
-	/**
-	 * Remove the first occurrence of the specified character
-	 * from the specified string and print the result on the specified stream.
-	 * String#removeFirstOccurrenceOn(char, StringBuffer)
-	 */
-	public static void removeFirstOccurrenceOn(char[] string, char c, StringBuffer sb) {
-		int index = ArrayTools.indexOf(string, c);
-		if (index == -1) {
-			sb.append(string);
-		} else {
-			removeCharAtIndexOn(string, index, sb);
-		}
-	}
-
-	private static void removeCharAtIndexOn(char[] string, int index, StringBuffer sb) {
-		int last = string.length - 1;
-		if (index == 0) {
-			// character found at the front of string
-			sb.append(string, 1, last);
-		} else if (index == last) {
-			// character found at the end of string
-			sb.append(string, 0, last);
-		} else {
-			// character found somewhere in the middle of the string
-			sb.append(string, 0, index);
-			sb.append(string, index + 1, last - index);
-		}
-	}
-
-	/**
-	 * Remove the first occurrence of the specified character
-	 * from the specified string and print the result on the specified stream.
-	 * String#removeFirstOccurrenceOn(char, StringBuilder)
-	 */
-	public static void removeFirstOccurrenceOn(char[] string, char c, StringBuilder sb) {
-		int index = ArrayTools.indexOf(string, c);
-		if (index == -1) {
-			sb.append(string);
-		} else {
-			removeCharAtIndexOn(string, index, sb);
-		}
-	}
-
-	private static void removeCharAtIndexOn(char[] string, int index, StringBuilder sb) {
-		int last = string.length - 1;
-		if (index == 0) {
-			// character found at the front of string
-			sb.append(string, 1, last);
-		} else if (index == last) {
-			// character found at the end of string
-			sb.append(string, 0, last);
-		} else {
-			// character found somewhere in the middle of the string
-			sb.append(string, 0, index);
-			sb.append(string, index + 1, last - index);
-		}
-	}
-
-	/**
-	 * Remove all occurrences of the specified character
-	 * from the specified string and return the result.
-	 * String#removeAllOccurrences(char)
-	 */
-	public static String removeAllOccurrences(String string, char c) {
-		int first = string.indexOf(c);
-		return (first == -1) ? string : new String(removeAllOccurrences_(string.toCharArray(), c, first));
-	}
-
-	/**
-	 * Remove all occurrences of the specified character
-	 * from the specified string and write the result to the specified stream.
-	 * String#removeAllOccurrencesOn(char, Writer)
-	 */
-	public static void removeAllOccurrencesOn(String string, char c, Writer writer) {
-		int first = string.indexOf(c);
-		if (first == -1) {
-			writeStringOn(string, writer);
-		} else {
-			removeAllOccurrencesOn_(string.toCharArray(), c, first, writer);
-		}
-	}
-
-	/**
-	 * Remove all occurrences of the specified character
-	 * from the specified string and write the result to the specified stream.
-	 * String#removeAllOccurrencesOn(char, StringBuffer)
-	 */
-	public static void removeAllOccurrencesOn(String string, char c, StringBuffer sb) {
-		int first = string.indexOf(c);
-		if (first == -1) {
-			sb.append(string);
-		} else {
-			removeAllOccurrencesOn_(string.toCharArray(), c, first, sb);
-		}
-	}
-
-	/**
-	 * Remove all occurrences of the specified character
-	 * from the specified string and write the result to the specified stream.
-	 * String#removeAllOccurrencesOn(char, StringBuilder)
-	 */
-	public static void removeAllOccurrencesOn(String string, char c, StringBuilder sb) {
-		int first = string.indexOf(c);
-		if (first == -1) {
-			sb.append(string);
-		} else {
-			removeAllOccurrencesOn_(string.toCharArray(), c, first, sb);
-		}
-	}
-
-	/**
-	 * Remove all occurrences of the specified character
-	 * from the specified string and return the result.
-	 * String#removeAllOccurrences(char)
-	 */
-	public static char[] removeAllOccurrences(char[] string, char c) {
-		int first = ArrayTools.indexOf(string, c);
-		return (first == -1) ? string : removeAllOccurrences_(string, c, first);
-	}
-
-	/*
-	 * The index of the first matching character is passed in.
-	 */
-	private static char[] removeAllOccurrences_(char[] string, char c, int first) {
-		StringBuilder sb = new StringBuilder(string.length);
-		removeAllOccurrencesOn_(string, c, first, sb);
-		return convertToCharArray(sb);
-	}
-
-	/**
-	 * Remove all occurrences of the specified character
-	 * from the specified string and write the result to the
-	 * specified writer.
-	 * String#removeAllOccurrencesOn(char, Writer)
-	 */
-	public static void removeAllOccurrencesOn(char[] string, char c, Writer writer) {
-		int first = ArrayTools.indexOf(string, c);
-		if (first == -1) {
-			writeStringOn(string, writer);
-		} else {
-			removeAllOccurrencesOn_(string, c, first, writer);
-		}
-	}
-
-	/*
-	 * The index of the first matching character is passed in.
-	 */
-	private static void removeAllOccurrencesOn_(char[] string, char c, int first, Writer writer) {
-		writeStringOn(string, 0, first, writer);
-		int len = string.length;
-		for (int i = first; i < len; i++) {
-			char d = string[i];
-			if (d != c) {
-				writeCharOn(d, writer);
-			}
-		}
-	}
-
-	/**
-	 * Remove all occurrences of the specified character
-	 * from the specified string and append the result to the
-	 * specified string buffer.
-	 * String#removeAllOccurrencesOn(char, StringBuffer)
-	 */
-	public static void removeAllOccurrencesOn(char[] string, char c, StringBuffer sb) {
-		int first = ArrayTools.indexOf(string, c);
-		if (first == -1) {
-			sb.append(string);
-		} else {
-			removeAllOccurrencesOn_(string, c, first, sb);
-		}
-	}
-
-	/*
-	 * The index of the first matching character is passed in.
-	 */
-	private static void removeAllOccurrencesOn_(char[] string, char c, int first, StringBuffer sb) {
-		sb.append(string, 0, first);
-		int len = string.length;
-		for (int i = first; i < len; i++) {
-			char d = string[i];
-			if (d != c) {
-				sb.append(d);
-			}
-		}
-	}
-
-	/**
-	 * Remove all occurrences of the specified character
-	 * from the specified string and append the result to the
-	 * specified string builder.
-	 * String#removeAllOccurrencesOn(char, StringBuilder)
-	 */
-	public static void removeAllOccurrencesOn(char[] string, char c, StringBuilder sb) {
-		int first = ArrayTools.indexOf(string, c);
-		if (first == -1) {
-			sb.append(string);
-		} else {
-			removeAllOccurrencesOn_(string, c, first, sb);
-		}
-	}
-
-	/*
-	 * The index of the first matching character is passed in.
-	 */
-	private static void removeAllOccurrencesOn_(char[] string, char c, int first, StringBuilder sb) {
-		sb.append(string, 0, first);
-		int len = string.length;
-		for (int i = first; i < len; i++) {
-			char d = string[i];
-			if (d != c) {
-				sb.append(d);
-			}
-		}
-	}
-
-	/**
-	 * Remove all the spaces from the specified string and return the result.
-	 * String#removeAllSpaces()
-	 */
-	public static String removeAllSpaces(String string) {
-		return removeAllOccurrences(string, ' ');
-	}
-
-	/**
-	 * Remove all the spaces
-	 * from the specified string and write the result to the specified writer.
-	 * String#removeAllSpacesOn(Writer)
-	 */
-	public static void removeAllSpacesOn(String string, Writer writer) {
-		removeAllOccurrencesOn(string, ' ', writer);
-	}
-
-	/**
-	 * Remove all the spaces
-	 * from the specified string and write the result to the specified
-	 * string buffer.
-	 * String#removeAllSpacesOn(StringBuffer)
-	 */
-	public static void removeAllSpacesOn(String string, StringBuffer sb) {
-		removeAllOccurrencesOn(string, ' ', sb);
-	}
-
-	/**
-	 * Remove all the spaces
-	 * from the specified string and write the result to the specified
-	 * string builder.
-	 * String#removeAllSpacesOn(StringBuilder)
-	 */
-	public static void removeAllSpacesOn(String string, StringBuilder sb) {
-		removeAllOccurrencesOn(string, ' ', sb);
-	}
-
-	/**
-	 * Remove all the spaces from the specified string and return the result.
-	 * String#removeAllSpaces()
-	 */
-	public static char[] removeAllSpaces(char[] string) {
-		return removeAllOccurrences(string, ' ');
-	}
-
-	/**
-	 * Remove all the spaces
-	 * from the specified string and write the result to the
-	 * specified writer.
-	 * String#removeAllSpacesOn(Writer)
-	 */
-	public static void removeAllSpacesOn(char[] string, Writer writer) {
-		removeAllOccurrencesOn(string, ' ', writer);
-	}
-
-	/**
-	 * Remove all the spaces
-	 * from the specified string and append the result to the
-	 * specified string buffer.
-	 * String#removeAllSpacesOn(StringBuffer)
-	 */
-	public static void removeAllSpacesOn(char[] string, StringBuffer sb) {
-		removeAllOccurrencesOn(string, ' ', sb);
-	}
-
-	/**
-	 * Remove all the spaces
-	 * from the specified string and append the result to the
-	 * specified string builder.
-	 * String#removeAllSpacesOn(StringBuilder)
-	 */
-	public static void removeAllSpacesOn(char[] string, StringBuilder sb) {
-		removeAllOccurrencesOn(string, ' ', sb);
-	}
-
-	/**
-	 * Remove all the whitespace from the specified string and return the result.
-	 * String#removeAllWhitespace()
-	 */
-	public static String removeAllWhitespace(String string) {
-		char[] string2 = string.toCharArray();
-		int first = indexOfWhitespace_(string2);
-		return (first == -1) ? string : new String(removeAllWhitespace_(string2, first));
-	}
-
-	/**
-	 * Remove all the whitespace
-	 * from the specified string and append the result to the
-	 * specified writer.
-	 * String#removeAllWhitespaceOn(Writer)
-	 */
-	public static void removeAllWhitespaceOn(String string, Writer writer) {
-		char[] string2 = string.toCharArray();
-		int first = indexOfWhitespace_(string2);
-		if (first == -1) {
-			writeStringOn(string, writer);
-		} else {
-			removeAllWhitespaceOn_(string2, first, writer);
-		}
-	}
-
-	/**
-	 * Remove all the whitespace
-	 * from the specified string and append the result to the
-	 * specified string buffer.
-	 * String#removeAllWhitespaceOn(StringBuffer)
-	 */
-	public static void removeAllWhitespaceOn(String string, StringBuffer sb) {
-		char[] string2 = string.toCharArray();
-		int first = indexOfWhitespace_(string2);
-		if (first == -1) {
-			sb.append(string);
-		} else {
-			removeAllWhitespaceOn_(string2, first, sb);
-		}
-	}
-
-	/**
-	 * Remove all the whitespace
-	 * from the specified string and append the result to the
-	 * specified string builder.
-	 * String#removeAllWhitespaceOn(StringBuilder)
-	 */
-	public static void removeAllWhitespaceOn(String string, StringBuilder sb) {
-		char[] string2 = string.toCharArray();
-		int first = indexOfWhitespace_(string2);
-		if (first == -1) {
-			sb.append(string);
-		} else {
-			removeAllWhitespaceOn_(string2, first, sb);
-		}
-	}
-
-	/**
-	 * Remove all the whitespace from the specified string and return the result.
-	 * String#removeAllWhitespace()
-	 */
-	public static char[] removeAllWhitespace(char[] string) {
-		int first = indexOfWhitespace_(string);
-		return (first == -1) ? string : removeAllWhitespace_(string, first);
-	}
-
-	private static int indexOfWhitespace_(char[] string) {
-		int len = string.length;
-		for (int i = 0; i < len; i++) {
-			if (Character.isWhitespace(string[i])) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-	/*
-	 * The index of the first non-whitespace character is passed in.
-	 */
-	private static char[] removeAllWhitespace_(char[] string, int first) {
-		StringBuilder sb = new StringBuilder(string.length);
-		removeAllWhitespaceOn_(string, first, sb);
-		return convertToCharArray(sb);
-	}
-
-	/**
-	 * Remove all the whitespace
-	 * from the specified string and append the result to the
-	 * specified writer.
-	 * String#removeAllWhitespaceOn(Writer)
-	 */
-	public static void removeAllWhitespaceOn(char[] string, Writer writer) {
-		int first = indexOfWhitespace_(string);
-		if (first == -1) {
-			writeStringOn(string, writer);
-		} else {
-			removeAllWhitespaceOn_(string, first, writer);
-		}
-	}
-
-	/*
-	 * The index of the first whitespace character is passed in.
-	 */
-	private static void removeAllWhitespaceOn_(char[] string, int first, Writer writer) {
-		writeStringOn(string, 0, first, writer);
-		int len = string.length;
-		for (int i = first; i < len; i++) {
-			char c = string[i];
-			if ( ! Character.isWhitespace(c)) {
-				writeCharOn(c, writer);
-			}
-		}
-	}
-
-	/**
-	 * Remove all the whitespace
-	 * from the specified string and append the result to the
-	 * specified string buffer.
-	 * String#removeAllWhitespaceOn(StringBuffer)
-	 */
-	public static void removeAllWhitespaceOn(char[] string, StringBuffer sb) {
-		int first = indexOfWhitespace_(string);
-		if (first == -1) {
-			sb.append(string);
-		} else {
-			removeAllWhitespaceOn_(string, first, sb);
-		}
-	}
-
-	/*
-	 * The index of the first whitespace character is passed in.
-	 */
-	private static void removeAllWhitespaceOn_(char[] string, int first, StringBuffer sb) {
-		sb.append(string, 0, first);
-		int len = string.length;
-		for (int i = first; i < len; i++) {
-			char c = string[i];
-			if ( ! Character.isWhitespace(c)) {
-				sb.append(c);
-			}
-		}
-	}
-
-	/**
-	 * Remove all the whitespace
-	 * from the specified string and append the result to the
-	 * specified string builder.
-	 * String#removeAllWhitespaceOn(StringBuilder)
-	 */
-	public static void removeAllWhitespaceOn(char[] string, StringBuilder sb) {
-		int first = indexOfWhitespace_(string);
-		if (first == -1) {
-			sb.append(string);
-		} else {
-			removeAllWhitespaceOn_(string, first, sb);
-		}
-	}
-
-	/*
-	 * The index of the first whitespace character is passed in.
-	 */
-	private static void removeAllWhitespaceOn_(char[] string, int first, StringBuilder sb) {
-		sb.append(string, 0, first);
-		int len = string.length;
-		for (int i = first; i < len; i++) {
-			char c = string[i];
-			if ( ! Character.isWhitespace(c)) {
-				sb.append(c);
-			}
-		}
-	}
-//===============================
-	/**
-	 * Compress the whitespace in the specified string and return the result.
-	 * The whitespace is compressed by replacing any occurrence of one or more
-	 * whitespace characters with a single space.
-	 * String#compressWhitespace()
-	 */
-	public static String compressWhitespace(String string) {
-		char[] string2 = string.toCharArray();
-		int first = indexOfWhitespace_(string2);
-		return (first == -1) ? string : new String(compressWhitespace_(string2, first));
-	}
-
-	/**
-	 * Compress the whitespace
-	 * in the specified string and append the result to the
-	 * specified writer.
-	 * The whitespace is compressed by replacing any occurrence of one or more
-	 * whitespace characters with a single space.
-	 * String#compressWhitespaceOn(Writer)
-	 */
-	public static void compressWhitespaceOn(String string, Writer writer) {
-		char[] string2 = string.toCharArray();
-		int first = indexOfWhitespace_(string2);
-		if (first == -1) {
-			writeStringOn(string, writer);
-		} else {
-			compressWhitespaceOn_(string2, first, writer);
-		}
-	}
-
-	/**
-	 * Compress the whitespace
-	 * in the specified string and append the result to the
-	 * specified string buffer.
-	 * The whitespace is compressed by replacing any occurrence of one or more
-	 * whitespace characters with a single space.
-	 * String#compressWhitespaceOn(StringBuffer)
-	 */
-	public static void compressWhitespaceOn(String string, StringBuffer sb) {
-		char[] string2 = string.toCharArray();
-		int first = indexOfWhitespace_(string2);
-		if (first == -1) {
-			sb.append(string);
-		} else {
-			compressWhitespaceOn_(string2, first, sb);
-		}
-	}
-
-	/**
-	 * Compress the whitespace
-	 * in the specified string and append the result to the
-	 * specified string builder.
-	 * The whitespace is compressed by replacing any occurrence of one or more
-	 * whitespace characters with a single space.
-	 * String#compressWhitespaceOn(StringBuilder)
-	 */
-	public static void compressWhitespaceOn(String string, StringBuilder sb) {
-		char[] string2 = string.toCharArray();
-		int first = indexOfWhitespace_(string2);
-		if (first == -1) {
-			sb.append(string);
-		} else {
-			compressWhitespaceOn_(string2, first, sb);
-		}
-	}
-
-	/**
-	 * Compress the whitespace in the specified string and return the result.
-	 * The whitespace is compressed by replacing any occurrence of one or more
-	 * whitespace characters with a single space.
-	 * String#compressWhitespace()
-	 */
-	public static char[] compressWhitespace(char[] string) {
-		int first = indexOfWhitespace_(string);
-		return (first == -1) ? string : compressWhitespace_(string, first);
-	}
-
-	/*
-	 * The index of the first whitespace character is passed in.
-	 */
-	private static char[] compressWhitespace_(char[] string, int first) {
-		StringBuilder sb = new StringBuilder(string.length);
-		compressWhitespaceOn_(string, first, sb);
-		return convertToCharArray(sb);
-	}
-
-	/**
-	 * Compress the whitespace
-	 * in the specified string and append the result to the
-	 * specified writer.
-	 * The whitespace is compressed by replacing any occurrence of one or more
-	 * whitespace characters with a single space.
-	 * String#compressWhitespaceOn(Writer)
-	 */
-	public static void compressWhitespaceOn(char[] string, Writer writer) {
-		int first = indexOfWhitespace_(string);
-		if (first == -1) {
-			writeStringOn(string, writer);
-		} else {
-			compressWhitespaceOn_(string, first, writer);
-		}
-	}
-
-	/*
-	 * The index of the first whitespace character is passed in.
-	 */
-	private static void compressWhitespaceOn_(char[] string, int first, Writer writer) {
-		writeStringOn(string, 0, first, writer);
-		boolean spaceWritten = false;
-		int len = string.length;
-		for (int i = first; i < len; i++) {
-			char c = string[i];
-			if (Character.isWhitespace(c)) {
-				if (spaceWritten) {
-					// skip subsequent whitespace characters
-				} else {
-					// replace first whitespace character with a space
-					spaceWritten = true;
-					writeCharOn(' ', writer);
-				}
-			} else {
-				spaceWritten = false;
-				writeCharOn(c, writer);
-			}
-		}
-	}
-
-	/**
-	 * Compress the whitespace
-	 * in the specified string and append the result to the
-	 * specified string buffer.
-	 * The whitespace is compressed by replacing any occurrence of one or more
-	 * whitespace characters with a single space.
-	 * String#compressWhitespaceOn(StringBuffer)
-	 */
-	public static void compressWhitespaceOn(char[] string, StringBuffer sb) {
-		int first = indexOfWhitespace_(string);
-		if (first == -1) {
-			sb.append(string);
-		} else {
-			compressWhitespaceOn_(string, first, sb);
-		}
-	}
-
-	/*
-	 * The index of the first whitespace character is passed in.
-	 */
-	private static void compressWhitespaceOn_(char[] string, int first, StringBuffer sb) {
-		sb.append(string, 0, first);
-		boolean spaceWritten = false;
-		int len = string.length;
-		for (int i = first; i < len; i++) {
-			char c = string[i];
-			if (Character.isWhitespace(c)) {
-				if (spaceWritten) {
-					// skip subsequent whitespace characters
-				} else {
-					// replace first whitespace character with a space
-					spaceWritten = true;
-					sb.append(' ');
-				}
-			} else {
-				spaceWritten = false;
-				sb.append(c);
-			}
-		}
-	}
-
-	/**
-	 * Compress the whitespace
-	 * in the specified string and append the result to the
-	 * specified string builder.
-	 * The whitespace is compressed by replacing any occurrence of one or more
-	 * whitespace characters with a single space.
-	 * String#compressWhitespaceOn(StringBuilder)
-	 */
-	public static void compressWhitespaceOn(char[] string, StringBuilder sb) {
-		int first = indexOfWhitespace_(string);
-		if (first == -1) {
-			sb.append(string);
-		} else {
-			compressWhitespaceOn_(string, first, sb);
-		}
-	}
-
-	/*
-	 * The index of the first whitespace character is passed in.
-	 */
-	private static void compressWhitespaceOn_(char[] string, int first, StringBuilder sb) {
-		sb.append(string, 0, first);
-		boolean spaceWritten = false;
-		int len = string.length;
-		for (int i = first; i < len; i++) {
-			char c = string[i];
-			if (Character.isWhitespace(c)) {
-				if (spaceWritten) {
-					// skip subsequent whitespace characters
-				} else {
-					// replace first whitespace character with a space
-					spaceWritten = true;
-					sb.append(' ');
-				}
-			} else {
-				spaceWritten = false;
-				sb.append(c);
-			}
-		}
-	}
-
-
-	// ********** common prefix **********
-
-	/**
-	 * Return the length of the common prefix shared by the specified strings.
-	 * String#commonPrefixLength(String)
-	 */
-	public static int commonPrefixLength(String s1, String s2) {
-		return commonPrefixLength(s1.toCharArray(), s2.toCharArray());
-	}
-
-	/**
-	 * Return the length of the common prefix shared by the specified strings.
-	 */
-	public static int commonPrefixLength(char[] s1, char[] s2) {
-		return commonPrefixLength_(s1, s2, Math.min(s1.length, s2.length));
-	}
-
-	/**
-	 * Return the length of the common prefix shared by the specified strings;
-	 * but limit the length to the specified maximum.
-	 * String#commonPrefixLength(String, int)
-	 */
-	public static int commonPrefixLength(String s1, String s2, int max) {
-		return commonPrefixLength(s1.toCharArray(), s2.toCharArray(), max);
-	}
-
-	/**
-	 * Return the length of the common prefix shared by the specified strings;
-	 * but limit the length to the specified maximum.
-	 */
-	public static int commonPrefixLength(char[] s1, char[] s2, int max) {
-		return commonPrefixLength_(s1, s2, Math.min(max, Math.min(s1.length, s2.length)));
-	}
-
-	/*
-	 * Return the length of the common prefix shared by the specified strings;
-	 * but limit the length to the specified maximum. Assume the specified
-	 * maximum is less than the lengths of the specified strings.
-	 */
-	private static int commonPrefixLength_(char[] s1, char[] s2, int max) {
-		for (int i = 0; i < max; i++) {
-			if (s1[i] != s2[i]) {
-				return i;
-			}
-		}
-		return max;	// all the characters up to 'max' are the same
-	}
-
-
-	// ********** capitalization **********
-
-	/*
-	 * no zero-length check or lower case check
-	 */
-	private static char[] capitalize_(char[] string) {
-		string[0] = Character.toUpperCase(string[0]);
-		return string;
-	}
-
-	/**
-	 * Modify and return the specified string with
-	 * its first letter capitalized.
-	 */
-	public static char[] capitalize(char[] string) {
-		if ((string.length == 0) || Character.isUpperCase(string[0])) {
-			return string;
-		}
-		return capitalize_(string);
-	}
-
-	/**
-	 * Return the specified string with its first letter capitalized.
-	 * String#capitalize()
-	 */
-	public static String capitalize(String string) {
-		if ((string.length() == 0) || Character.isUpperCase(string.charAt(0))) {
-			return string;
-		}
-		return new String(capitalize_(string.toCharArray()));
-	}
-
-	/**
-	 * Modify each of the specified strings, capitalizing the first letter of
-	 * each.
-	 */
-	public static Iterable<String> capitalize(Iterable<String> strings) {
-		return new TransformationIterable<String, String>(strings, STRING_CAPITALIZER);
-	}
-
-	/**
-	 * Modify each of the specified strings, capitalizing the first letter of
-	 * each.
-	 */
-	public static Iterator<String> capitalize(Iterator<String> strings) {
-		return new TransformationIterator<String, String>(strings, STRING_CAPITALIZER);
-	}
-
-	private static final Transformer<String, String> STRING_CAPITALIZER = new Transformer<String, String>() {
-		public String transform(String string) {
-			return StringTools.capitalize(string);
-		}
-	};
-
-	/**
-	 * Modify each of the specified strings, capitalizing the first letter of
-	 * each.
-	 */
-	// cannot name method simply 'capitalize' because of type-erasure...
-	public static Iterable<char[]> capitalizeCharArrays(Iterable<char[]> strings) {
-		return new TransformationIterable<char[], char[]>(strings, CHAR_ARRAY_CAPITALIZER);
-	}
-
-	/**
-	 * Modify each of the specified strings, capitalizing the first letter of
-	 * each.
-	 */
-	// cannot name method simply 'capitalize' because of type-erasure...
-	public static Iterator<char[]> capitalizeCharArrays(Iterator<char[]> strings) {
-		return new TransformationIterator<char[], char[]>(strings, CHAR_ARRAY_CAPITALIZER);
-	}
-
-	private static final Transformer<char[], char[]> CHAR_ARRAY_CAPITALIZER = new Transformer<char[], char[]>() {
-		public char[] transform(char[] string) {
-			return StringTools.capitalize(string);
-		}
-	};
-
-	/*
-	 * no zero-length check or upper case check
-	 */
-	private static void capitalizeOn_(char[] string, StringBuffer sb) {
-		sb.append(Character.toUpperCase(string[0]));
-		sb.append(string, 1, string.length - 1);
-	}
-
-	/**
-	 * Append the specified string to the specified string buffer
-	 * with its first letter capitalized.
-	 */
-	public static void capitalizeOn(char[] string, StringBuffer sb) {
-		if (string.length == 0) {
-			return;
-		}
-		if (Character.isUpperCase(string[0])) {
-			sb.append(string);
-		} else {
-			capitalizeOn_(string, sb);
-		}
-	}
-
-	/**
-	 * Append the specified string to the specified string buffer
-	 * with its first letter capitalized.
-	 * String#capitalizeOn(StringBuffer)
-	 */
-	public static void capitalizeOn(String string, StringBuffer sb) {
-		if (string.length() == 0) {
-			return;
-		}
-		if (Character.isUpperCase(string.charAt(0))) {
-			sb.append(string);
-		} else {
-			capitalizeOn_(string.toCharArray(), sb);
-		}
-	}
-
-	/*
-	 * no zero-length check or upper case check
-	 */
-	private static void capitalizeOn_(char[] string, StringBuilder sb) {
-		sb.append(Character.toUpperCase(string[0]));
-		sb.append(string, 1, string.length - 1);
-	}
-
-	/**
-	 * Append the specified string to the specified string builder
-	 * with its first letter capitalized.
-	 */
-	public static void capitalizeOn(char[] string, StringBuilder sb) {
-		if (string.length == 0) {
-			return;
-		}
-		if (Character.isUpperCase(string[0])) {
-			sb.append(string);
-		} else {
-			capitalizeOn_(string, sb);
-		}
-	}
-
-	/**
-	 * Append the specified string to the specified string builder
-	 * with its first letter capitalized.
-	 * String#capitalizeOn(StringBuffer)
-	 */
-	public static void capitalizeOn(String string, StringBuilder sb) {
-		if (string.length() == 0) {
-			return;
-		}
-		if (Character.isUpperCase(string.charAt(0))) {
-			sb.append(string);
-		} else {
-			capitalizeOn_(string.toCharArray(), sb);
-		}
-	}
-
-	/*
-	 * no zero-length check or upper case check
-	 */
-	private static void capitalizeOn_(char[] string, Writer writer) {
-		writeCharOn(Character.toUpperCase(string[0]), writer);
-		writeStringOn(string, 1, string.length - 1, writer);
-	}
-
-	/**
-	 * Append the specified string to the specified string buffer
-	 * with its first letter capitalized.
-	 */
-	public static void capitalizeOn(char[] string, Writer writer) {
-		if (string.length == 0) {
-			return;
-		}
-		if (Character.isUpperCase(string[0])) {
-			writeStringOn(string, writer);
-		} else {
-			capitalizeOn_(string, writer);
-		}
-	}
-
-	/**
-	 * Append the specified string to the specified string buffer
-	 * with its first letter capitalized.
-	 * String#capitalizeOn(Writer)
-	 */
-	public static void capitalizeOn(String string, Writer writer) {
-		if (string.length() == 0) {
-			return;
-		}
-		if (Character.isUpperCase(string.charAt(0))) {
-			writeStringOn(string, writer);
-		} else {
-			capitalizeOn_(string.toCharArray(), writer);
-		}
-	}
-
-	/*
-	 * no zero-length check or lower case check
-	 */
-	private static char[] uncapitalize_(char[] string) {
-		string[0] = Character.toLowerCase(string[0]);
-		return string;
-	}
-
-	private static boolean stringNeedNotBeUncapitalized_(char[] string) {
-		if (string.length == 0) {
-			return true;
-		}
-		if (Character.isLowerCase(string[0])) {
-			return true;
-		}
-		// if both the first and second characters are capitalized,
-		// return the string unchanged
-		if ((string.length > 1)
-				&& Character.isUpperCase(string[1])
-				&& Character.isUpperCase(string[0])){
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Modify and return the specified string with its
-	 * first letter converted to lower case.
-	 * (Unless both the first and second letters are upper case,
-	 * in which case the string is returned unchanged.)
-	 */
-	public static char[] uncapitalize(char[] string) {
-		if (stringNeedNotBeUncapitalized_(string)) {
-			return string;
-		}
-		return uncapitalize_(string);
-	}
-
-	private static boolean stringNeedNotBeUncapitalized_(String string) {
-		if (string.length() == 0) {
-			return true;
-		}
-		if (Character.isLowerCase(string.charAt(0))) {
-			return true;
-		}
-		// if both the first and second characters are capitalized,
-		// return the string unchanged
-		if ((string.length() > 1)
-				&& Character.isUpperCase(string.charAt(1))
-				&& Character.isUpperCase(string.charAt(0))){
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Return the specified string with its first letter converted to lower case.
-	 * (Unless both the first and second letters are upper case,
-	 * in which case the string is returned unchanged.)
-	 * String#uncapitalize()
-	 */
-	public static String uncapitalize(String string) {
-		if (stringNeedNotBeUncapitalized_(string)) {
-			return string;
-		}
-		return new String(uncapitalize_(string.toCharArray()));
-	}
-
-	/*
-	 * no zero-length check or lower case check
-	 */
-	private static void uncapitalizeOn_(char[] string, StringBuffer sb) {
-		sb.append(Character.toLowerCase(string[0]));
-		sb.append(string, 1, string.length - 1);
-	}
-
-	/**
-	 * Append the specified string to the specified string buffer
-	 * with its first letter converted to lower case.
-	 * (Unless both the first and second letters are upper case,
-	 * in which case the string is returned unchanged.)
-	 */
-	public static void uncapitalizeOn(char[] string, StringBuffer sb) {
-		if (stringNeedNotBeUncapitalized_(string)) {
-			sb.append(string);
-		} else {
-			uncapitalizeOn_(string, sb);
-		}
-	}
-
-	/**
-	 * Append the specified string to the specified string buffer
-	 * with its first letter converted to lower case.
-	 * (Unless both the first and second letters are upper case,
-	 * in which case the string is returned unchanged.)
-	 * String#uncapitalizeOn(StringBuffer)
-	 */
-	public static void uncapitalizeOn(String string, StringBuffer sb) {
-		if (stringNeedNotBeUncapitalized_(string)) {
-			sb.append(string);
-		} else {
-			uncapitalizeOn_(string.toCharArray(), sb);
-		}
-	}
-
-	/*
-	 * no zero-length check or lower case check
-	 */
-	private static void uncapitalizeOn_(char[] string, StringBuilder sb) {
-		sb.append(Character.toLowerCase(string[0]));
-		sb.append(string, 1, string.length - 1);
-	}
-
-	/**
-	 * Append the specified string to the specified string builder
-	 * with its first letter converted to lower case.
-	 * (Unless both the first and second letters are upper case,
-	 * in which case the string is returned unchanged.)
-	 */
-	public static void uncapitalizeOn(char[] string, StringBuilder sb) {
-		if (stringNeedNotBeUncapitalized_(string)) {
-			sb.append(string);
-		} else {
-			uncapitalizeOn_(string, sb);
-		}
-	}
-
-	/**
-	 * Append the specified string to the specified string builder
-	 * with its first letter converted to lower case.
-	 * (Unless both the first and second letters are upper case,
-	 * in which case the string is returned unchanged.)
-	 * String#uncapitalizeOn(StringBuffer)
-	 */
-	public static void uncapitalizeOn(String string, StringBuilder sb) {
-		if (stringNeedNotBeUncapitalized_(string)) {
-			sb.append(string);
-		} else {
-			uncapitalizeOn_(string.toCharArray(), sb);
-		}
-	}
-
-	/*
-	 * no zero-length check or upper case check
-	 */
-	private static void uncapitalizeOn_(char[] string, Writer writer) {
-		writeCharOn(Character.toLowerCase(string[0]), writer);
-		writeStringOn(string, 1, string.length - 1, writer);
-	}
-
-	/**
-	 * Append the specified string to the specified string buffer
-	 * with its first letter converted to lower case.
-	 * (Unless both the first and second letters are upper case,
-	 * in which case the string is returned unchanged.)
-	 */
-	public static void uncapitalizeOn(char[] string, Writer writer) {
-		if (stringNeedNotBeUncapitalized_(string)) {
-			writeStringOn(string, writer);
-		} else {
-			uncapitalizeOn_(string, writer);
-		}
-	}
-
-	/**
-	 * Append the specified string to the specified string buffer
-	 * with its first letter converted to lower case.
-	 * (Unless both the first and second letters are upper case,
-	 * in which case the string is returned unchanged.)
-	 * String#uncapitalizeOn(Writer)
-	 */
-	public static void uncapitalizeOn(String string, Writer writer) {
-		if (stringNeedNotBeUncapitalized_(string)) {
-			writeStringOn(string, writer);
-		} else {
-			uncapitalizeOn_(string.toCharArray(), writer);
-		}
-	}
-
-
-	// ********** #toString() helper methods **********
-
-	/**
-	 * Build a "standard" #toString() result for the specified object
-	 * and additional information:
-	 * 	ClassName[00F3EE42] (add'l info)
-	 */
-	public static String buildToStringFor(Object o, Object additionalInfo) {
-		StringBuilder sb = new StringBuilder();
-		buildSimpleToStringOn(o, sb);
-		sb.append('(');
-		sb.append(additionalInfo);
-		sb.append(')');
-		return sb.toString();
-	}
-
-	/**
-	 * Build a "standard" simple #toString() result for the specified object:
-	 * 	ClassName[00F3EE42]
-	 */
-	public static String buildToStringFor(Object o) {
-		StringBuilder sb = new StringBuilder();
-		buildSimpleToStringOn(o, sb);
-		return sb.toString();
-	}
-
-	/**
-	 * Append a "standard" simple #toString() for the specified object to
-	 * the specified string buffer:
-	 * 	ClassName[00F3EE42]
-	 */
-	public static void buildSimpleToStringOn(Object o, StringBuffer sb) {
-		sb.append(buildToStringClassName(o.getClass()));
-		sb.append('[');
-		// use System#identityHashCode(Object), since Object#hashCode() may be overridden
-		sb.append(zeroPad(Integer.toHexString(System.identityHashCode(o)).toUpperCase(), 8));
-		sb.append(']');
-	}
-
-	/**
-	 * Append a "standard" simple #toString() for the specified object to
-	 * the specified string builder:
-	 * 	ClassName[00F3EE42]
-	 */
-	public static void buildSimpleToStringOn(Object o, StringBuilder sb) {
-		sb.append(buildToStringClassName(o.getClass()));
-		sb.append('[');
-		// use System#identityHashCode(Object), since Object#hashCode() may be overridden
-		sb.append(zeroPad(Integer.toHexString(System.identityHashCode(o)).toUpperCase(), 8));
-		sb.append(']');
-	}
-
-	/**
-	 * Return a name suitable for a <code>#toString()</code> implementation.
-	 * {@link Class#getSimpleName()} isn't quite good enough for anonymous
-	 * classes; since it returns an empty string. This method will return the
-	 * name of the anonymous class's super class, which is a bit more helpful.
-	 */
-	public static String buildToStringClassName(Class<?> javaClass) {
-		String simpleName = javaClass.getSimpleName();
-		return simpleName.equals("") ? //$NON-NLS-1$
-				buildToStringClassName(javaClass.getSuperclass()) :  // recurse
-				simpleName;
-	}
-
-	public static <T> String append(StringBuilder sb, T[] array) {
-		return append(sb, new ArrayListIterator<T>(array));
-	}
-
-	public static <T> String append(StringBuilder sb, Iterable<T> iterable) {
-		return append(sb, iterable.iterator());
-	}
-
-	public static <T> String append(StringBuilder sb, Iterator<T> iterator) {
-		sb.append('[');
-		while (iterator.hasNext()) {
-			sb.append(iterator.next());
-			if (iterator.hasNext()) {
-				sb.append(", "); //$NON-NLS-1$
-			}
-		}
-		sb.append(']');
-		return sb.toString();
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * Return whether the specified string is null, empty, or contains
-	 * only whitespace characters.
-	 */
-	public static boolean stringIsEmpty(String string) {
-		if (string == null) {
-			return true;
-		}
-		int len = string.length();
-		if (len == 0) {
-			return true;
-		}
-		return stringIsEmpty_(string.toCharArray(), len);
-	}
-
-	/**
-	 * Return whether the specified string is null, empty, or contains
-	 * only whitespace characters.
-	 */
-	public static boolean stringIsEmpty(char[] string) {
-		if (string == null) {
-			return true;
-		}
-		int len = string.length;
-		if (len == 0) {
-			return true;
-		}
-		return stringIsEmpty_(string, len);
-	}
-
-	private static boolean stringIsEmpty_(char[] s, int len) {
-		for (int i = len; i-- > 0; ) {
-			if ( ! Character.isWhitespace(s[i])) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Return whether the specified string is non-null, non-empty, and does
-	 * not contain only whitespace characters.
-	 */
-	public static boolean stringIsNotEmpty(String string) {
-		return ! stringIsEmpty(string);
-	}
-
-	/**
-	 * Return whether the specified string is non-null, non-empty, and does
-	 * not contain only whitespace characters.
-	 */
-	public static boolean stringIsNotEmpty(char[] string) {
-		return ! stringIsEmpty(string);
-	}
-	
-	/**
-	 * Return whether the specified strings are equal.
-	 * Check for nulls.
-	 */
-	public static boolean stringsAreEqual(String s1, String s2) {
-		if ((s1 == null) && (s2 == null)) {
-			return true;  // both are null
-		}
-		if ((s1 == null) || (s2 == null)) {
-			return false;  // one is null but the other is not
-		}
-		return s1.equals(s2);
-	}
-	
-	/**
-	 * Return whether the specified strings are equal.
-	 * Check for nulls.
-	 */
-	public static boolean stringsAreEqual(char[] s1, char[] s2) {
-		if ((s1 == null) && (s2 == null)) {
-			return true;  // both are null
-		}
-		if ((s1 == null) || (s2 == null)) {
-			return false;  // one is null but the other is not
-		}
-		int len = s1.length;
-		if (len != s2.length) {
-			return false;
-		}
-		for (int i = len; i-- > 0; ) {
-			if (s1[i] != s2[i]) {
-				return false;
-			}
-		}
-		return true;
-	}
-	
-	/**
-	 * Return whether the specified strings are equal, ignoring case.
-	 * Check for nulls.
-	 */
-	public static boolean stringsAreEqualIgnoreCase(String s1, String s2) {
-		if ((s1 == null) && (s2 == null)) {
-			return true;  // both are null
-		}
-		if ((s1 == null) || (s2 == null)) {
-			return false;  // one is null but the other is not
-		}
-		return s1.equalsIgnoreCase(s2);
-	}
-	
-	/**
-	 * Return whether the specified strings are equal, ignoring case.
-	 * Check for nulls.
-	 */
-	public static boolean stringsAreEqualIgnoreCase(char[] s1, char[] s2) {
-		if ((s1 == null) && (s2 == null)) {
-			return true;  // both are null
-		}
-		if ((s1 == null) || (s2 == null)) {
-			return false;  // one is null but the other is not
-		}
-		int len = s1.length;
-		if (len != s2.length) {
-			return false;
-		}
-		for (int i = len; i-- > 0; ) {
-			if ( ! charactersAreEqualIgnoreCase(s1[i], s2[i])) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Return whether the specified string starts with the specified prefix,
-	 * ignoring case.
-	 */
-	public static boolean stringStartsWithIgnoreCase(char[] string, char[] prefix) {
-		int prefixLength = prefix.length;
-		if (string.length < prefixLength) {
-			return false;
-		}
-		for (int i = prefixLength; i-- > 0; ) {
-			if ( ! charactersAreEqualIgnoreCase(string[i], prefix[i])) {
-				return false;
-			}
-		}
-		return true;
-	}
-	
-	/**
-	 * Return whether the specified string starts with the specified prefix,
-	 * ignoring case.
-	 */
-	public static boolean stringStartsWithIgnoreCase(String string, String prefix) {
-		return string.regionMatches(true, 0, prefix, 0, prefix.length());
-	}
-
-	/**
-	 * Return whether the specified characters are are equal, ignoring case.
-	 * @see java.lang.String#regionMatches(boolean, int, String, int, int)
-	 */
-	public static boolean charactersAreEqualIgnoreCase(char c1, char c2) {
-		//  something about the Georgian alphabet requires us to check lower case also
-		return (c1 == c2)
-				|| (Character.toUpperCase(c1) == Character.toUpperCase(c2))
-				|| (Character.toLowerCase(c1) == Character.toLowerCase(c2));
-	}
-
-	/**
-	 * Return whether the specified string is uppercase.
-	 */
-	public static boolean stringIsUppercase(String string) {
-		return (string.length() == 0) ? false : stringIsUppercase_(string);
-	}
-
-	/**
-	 * Return whether the specified string is uppercase.
-	 */
-	public static boolean stringIsUppercase(char[] string) {
-		return (string.length == 0) ? false : stringIsUppercase_(new String(string));
-	}
-
-	private static boolean stringIsUppercase_(String string) {
-		return string.equals(string.toUpperCase());
-	}
-
-	/**
-	 * Return whether the specified string is lowercase.
-	 */
-	public static boolean stringIsLowercase(String string) {
-		return (string.length() == 0) ? false : stringIsLowercase_(string);
-	}
-
-	/**
-	 * Return whether the specified string is lowercase.
-	 */
-	public static boolean stringIsLowercase(char[] string) {
-		return (string.length == 0) ? false : stringIsLowercase_(new String(string));
-	}
-
-	private static boolean stringIsLowercase_(String string) {
-		return string.equals(string.toLowerCase());
-	}
-
-
-	// ********** convert camel case to all caps **********
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 */
-	public static String convertCamelCaseToAllCaps(String camelCaseString) {
-		int len = camelCaseString.length();
-		if (len == 0) {
-			return camelCaseString;
-		}
-		return new String(convertCamelCaseToAllCaps_(camelCaseString.toCharArray(), len));
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 */
-	public static char[] convertCamelCaseToAllCaps(char[] camelCaseString) {
-		int len = camelCaseString.length;
-		if (len == 0) {
-			return camelCaseString;
-		}
-		return convertCamelCaseToAllCaps_(camelCaseString, len);
-	}
-
-	private static char[] convertCamelCaseToAllCaps_(char[] camelCaseString, int len) {
-		StringBuilder sb = new StringBuilder(len * 2);
-		convertCamelCaseToAllCapsOn_(camelCaseString, len, sb);
-		return convertToCharArray(sb);
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 */
-	public static void convertCamelCaseToAllCapsOn(String camelCaseString, StringBuffer sb) {
-		int len = camelCaseString.length();
-		if (len != 0) {
-			convertCamelCaseToAllCapsOn_(camelCaseString.toCharArray(), len, sb);
-		}
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 */
-	public static void convertCamelCaseToAllCapsOn(char[] camelCaseString, StringBuffer sb) {
-		int len = camelCaseString.length;
-		if (len != 0) {
-			convertCamelCaseToAllCapsOn_(camelCaseString, len, sb);
-		}
-	}
-
-	private static void convertCamelCaseToAllCapsOn_(char[] camelCaseString, int len, StringBuffer sb) {
-		char prev = 0;	// assume 0 is not a valid char
-		char c = 0;
-		char next = camelCaseString[0];
-		for (int i = 1; i <= len; i++) {	// NB: start at 1 and end at len!
-			c = next;
-			next = ((i == len) ? 0 : camelCaseString[i]);
-			if (camelCaseWordBreak_(prev, c, next)) {
-				sb.append('_');
-			}
-			sb.append(Character.toUpperCase(c));
-			prev = c;
-		}
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 */
-	public static void convertCamelCaseToAllCapsOn(String camelCaseString, StringBuilder sb) {
-		int len = camelCaseString.length();
-		if (len != 0) {
-			convertCamelCaseToAllCapsOn_(camelCaseString.toCharArray(), len, sb);
-		}
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 */
-	public static void convertCamelCaseToAllCapsOn(char[] camelCaseString, StringBuilder sb) {
-		int len = camelCaseString.length;
-		if (len != 0) {
-			convertCamelCaseToAllCapsOn_(camelCaseString, len, sb);
-		}
-	}
-
-	private static void convertCamelCaseToAllCapsOn_(char[] camelCaseString, int len, StringBuilder sb) {
-		char prev = 0;	// assume 0 is not a valid char
-		char c = 0;
-		char next = camelCaseString[0];
-		for (int i = 1; i <= len; i++) {	// NB: start at 1 and end at len!
-			c = next;
-			next = ((i == len) ? 0 : camelCaseString[i]);
-			if (camelCaseWordBreak_(prev, c, next)) {
-				sb.append('_');
-			}
-			sb.append(Character.toUpperCase(c));
-			prev = c;
-		}
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 */
-	public static void convertCamelCaseToAllCapsOn(String camelCaseString, Writer writer) {
-		int len = camelCaseString.length();
-		if (len != 0) {
-			convertCamelCaseToAllCapsOn_(camelCaseString.toCharArray(), len, writer);
-		}
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 */
-	public static void convertCamelCaseToAllCapsOn(char[] camelCaseString, Writer writer) {
-		int len = camelCaseString.length;
-		if (len != 0) {
-			convertCamelCaseToAllCapsOn_(camelCaseString, len, writer);
-		}
-	}
-
-	private static void convertCamelCaseToAllCapsOn_(char[] camelCaseString, int len, Writer writer) {
-		char prev = 0;	// assume 0 is not a valid char
-		char c = 0;
-		char next = camelCaseString[0];
-		for (int i = 1; i <= len; i++) {	// NB: start at 1 and end at len!
-			c = next;
-			next = ((i == len) ? 0 : camelCaseString[i]);
-			if (camelCaseWordBreak_(prev, c, next)) {
-				writeCharOn('_', writer);
-			}
-			writeCharOn(Character.toUpperCase(c), writer);
-			prev = c;
-		}
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 * Limit the resulting string to the specified maximum length.
-	 */
-	public static String convertCamelCaseToAllCaps(String camelCaseString, int maxLength) {
-		int len = camelCaseString.length();
-		if ((len == 0) || (maxLength == 0)) {
-			return camelCaseString;
-		}
-		return new String(convertCamelCaseToAllCaps_(camelCaseString.toCharArray(), maxLength, len));
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 * Limit the resulting string to the specified maximum length.
-	 */
-	public static char[] convertCamelCaseToAllCaps(char[] camelCaseString, int maxLength) {
-		int len = camelCaseString.length;
-		if ((len == 0) || (maxLength == 0)) {
-			return camelCaseString;
-		}
-		return convertCamelCaseToAllCaps_(camelCaseString, maxLength, len);
-	}
-
-	private static char[] convertCamelCaseToAllCaps_(char[] camelCaseString, int maxLength, int len) {
-		StringBuilder sb = new StringBuilder(maxLength);
-		convertCamelCaseToAllCapsOn_(camelCaseString, maxLength, len, sb);
-		return convertToCharArray(sb);
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 * Limit the resulting string to the specified maximum length.
-	 */
-	public static void convertCamelCaseToAllCapsOn(String camelCaseString, int maxLength, StringBuffer sb) {
-		int len = camelCaseString.length();
-		if ((len != 0) && (maxLength != 0)) {
-			convertCamelCaseToAllCapsOn_(camelCaseString.toCharArray(), maxLength, len, sb);
-		}
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 * Limit the resulting string to the specified maximum length.
-	 */
-	public static void convertCamelCaseToAllCapsOn(char[] camelCaseString, int maxLength, StringBuffer sb) {
-		int len = camelCaseString.length;
-		if ((len != 0) && (maxLength != 0)) {
-			convertCamelCaseToAllCapsOn_(camelCaseString, maxLength, len, sb);
-		}
-	}
-
-	private static void convertCamelCaseToAllCapsOn_(char[] camelCaseString, int maxLength, int len, StringBuffer sb) {
-		char prev = 0;	// assume 0 is not a valid char
-		char c = 0;
-		char next = camelCaseString[0];
-		for (int i = 1; i <= len; i++) {	// NB: start at 1 and end at len!
-			c = next;
-			next = ((i == len) ? 0 : camelCaseString[i]);
-			if (camelCaseWordBreak_(prev, c, next)) {
-				sb.append('_');
-				if (sb.length() == maxLength) {
-					return;
-				}
-			}
-			sb.append(Character.toUpperCase(c));
-			if (sb.length() == maxLength) {
-				return;
-			}
-			prev = c;
-		}
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 * Limit the resulting string to the specified maximum length.
-	 */
-	public static void convertCamelCaseToAllCapsOn(String camelCaseString, int maxLength, StringBuilder sb) {
-		int len = camelCaseString.length();
-		if ((len != 0) && (maxLength != 0)) {
-			convertCamelCaseToAllCapsOn_(camelCaseString.toCharArray(), maxLength, len, sb);
-		}
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 * Limit the resulting string to the specified maximum length.
-	 */
-	public static void convertCamelCaseToAllCapsOn(char[] camelCaseString, int maxLength, StringBuilder sb) {
-		int len = camelCaseString.length;
-		if ((len != 0) && (maxLength != 0)) {
-			convertCamelCaseToAllCapsOn_(camelCaseString, maxLength, len, sb);
-		}
-	}
-
-	private static void convertCamelCaseToAllCapsOn_(char[] camelCaseString, int maxLength, int len, StringBuilder sb) {
-		char prev = 0;	// assume 0 is not a valid char
-		char c = 0;
-		char next = camelCaseString[0];
-		for (int i = 1; i <= len; i++) {	// NB: start at 1 and end at len!
-			c = next;
-			next = ((i == len) ? 0 : camelCaseString[i]);
-			if (camelCaseWordBreak_(prev, c, next)) {
-				sb.append('_');
-				if (sb.length() == maxLength) {
-					return;
-				}
-			}
-			sb.append(Character.toUpperCase(c));
-			if (sb.length() == maxLength) {
-				return;
-			}
-			prev = c;
-		}
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 * Limit the resulting string to the specified maximum length.
-	 */
-	public static void convertCamelCaseToAllCapsOn(String camelCaseString, int maxLength, Writer writer) {
-		int len = camelCaseString.length();
-		if ((len != 0) && (maxLength != 0)) {
-			convertCamelCaseToAllCapsOn_(camelCaseString.toCharArray(), maxLength, len, writer);
-		}
-	}
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 * Limit the resulting string to the specified maximum length.
-	 */
-	public static void convertCamelCaseToAllCapsOn(char[] camelCaseString, int maxLength, Writer writer) {
-		int len = camelCaseString.length;
-		if ((len != 0) && (maxLength != 0)) {
-			convertCamelCaseToAllCapsOn_(camelCaseString, maxLength, len, writer);
-		}
-	}
-
-	private static void convertCamelCaseToAllCapsOn_(char[] camelCaseString, int maxLength, int len, Writer writer) {
-		char prev = 0;	// assume 0 is not a valid char
-		char c = 0;
-		char next = camelCaseString[0];
-		int writerLength = 0;
-		for (int i = 1; i <= len; i++) {	// NB: start at 1 and end at len!
-			c = next;
-			next = ((i == len) ? 0 : camelCaseString[i]);
-			if (camelCaseWordBreak_(prev, c, next)) {
-				writeCharOn('_', writer);
-				if (++writerLength == maxLength) {
-					return;
-				}
-			}
-			writeCharOn(Character.toUpperCase(c), writer);
-			if (++writerLength == maxLength) {
-				return;
-			}
-			prev = c;
-		}
-	}
-
-	/*
-	 * Return whether the specified series of characters occur at
-	 * a "camel case" work break:
-	 *     "*aa" -> false
-	 *     "*AA" -> false
-	 *     "*Aa" -> false
-	 *     "AaA" -> false
-	 *     "AAA" -> false
-	 *     "aa*" -> false
-	 *     "AaA" -> false
-	 *     "aAa" -> true
-	 *     "AA*" -> false
-	 *     "AAa" -> true
-	 * where '*' == any char
-	 */
-	private static boolean camelCaseWordBreak_(char prev, char c, char next) {
-		if (prev == 0) {	// start of string
-			return false;
-		}
-		if (Character.isLowerCase(c)) {
-			return false;
-		}
-		if (Character.isLowerCase(prev)) {
-			return true;
-		}
-		if (next == 0) {	// end of string
-			return false;
-		}
-		return Character.isLowerCase(next);
-	}
-
-
-	// ********** convert underscores to camel case **********
-
-	/**
-	 * Convert the specified "underscore" string to a "camel case" string:
-	 * "LARGE_PROJECT" -> "LargeProject"
-	 * Capitalize the first letter.
-	 */
-	public static String convertUnderscoresToCamelCase(String underscoreString) {
-		return convertUnderscoresToCamelCase(underscoreString, true);
-	}
-
-	/**
-	 * Convert the specified "underscore" string to a "camel case" string:
-	 * "LARGE_PROJECT" -> "LargeProject"
-	 * Capitalize the first letter.
-	 */
-	public static char[] convertUnderscoresToCamelCase(char[] underscoreString) {
-		return convertUnderscoresToCamelCase(underscoreString, true);
-	}
-
-	/**
-	 * Convert the specified "underscore" string to a "camel case" string:
-	 * "LARGE_PROJECT" -> "largeProject"
-	 * Optionally capitalize the first letter.
-	 */
-	public static String convertUnderscoresToCamelCase(String underscoreString, boolean capitalizeFirstLetter) {
-		int len = underscoreString.length();
-		if (len == 0) {
-			return underscoreString;
-		}
-		return new String(convertUnderscoresToCamelCase_(underscoreString.toCharArray(), capitalizeFirstLetter, len));
-	}
-
-	/**
-	 * Convert the specified "underscore" string to a "camel case" string:
-	 * "LARGE_PROJECT" -> "largeProject"
-	 * Optionally capitalize the first letter.
-	 */
-	public static char[] convertUnderscoresToCamelCase(char[] underscoreString, boolean capitalizeFirstLetter) {
-		int len = underscoreString.length;
-		if (len == 0) {
-			return underscoreString;
-		}
-		return convertUnderscoresToCamelCase_(underscoreString, capitalizeFirstLetter, len);
-	}
-
-	private static char[] convertUnderscoresToCamelCase_(char[] underscoreString, boolean capitalizeFirstLetter, int len) {
-		StringBuilder sb = new StringBuilder(len);
-		convertUnderscoresToCamelCaseOn_(underscoreString, capitalizeFirstLetter, len, sb);
-		return convertToCharArray(sb);
-	}
-
-	/**
-	 * Convert the specified "underscore" string to a "camel case" string:
-	 * "LARGE_PROJECT" -> "largeProject"
-	 * Optionally capitalize the first letter.
-	 */
-	public static void convertUnderscoresToCamelCaseOn(String underscoreString, boolean capitalizeFirstLetter, StringBuffer sb) {
-		int len = underscoreString.length();
-		if (len != 0) {
-			convertUnderscoresToCamelCaseOn_(underscoreString.toCharArray(), capitalizeFirstLetter, len, sb);
-		}
-	}
-
-	/**
-	 * Convert the specified "underscore" string to a "camel case" string:
-	 * "LARGE_PROJECT" -> "largeProject"
-	 * Optionally capitalize the first letter.
-	 */
-	public static void convertUnderscoresToCamelCaseOn(char[] underscoreString, boolean capitalizeFirstLetter, StringBuffer sb) {
-		int len = underscoreString.length;
-		if (len != 0) {
-			convertUnderscoresToCamelCaseOn_(underscoreString, capitalizeFirstLetter, len, sb);
-		}
-	}
-
-	private static void convertUnderscoresToCamelCaseOn_(char[] underscoreString, boolean capitalizeFirstLetter, int len, StringBuffer sb) {
-		char prev = 0;
-		char c = 0;
-		boolean first = true;
-		for (int i = 0; i < len; i++) {
-			prev = c;
-			c = underscoreString[i];
-			if (c == '_') {
-				continue;
-			}
-			if (first) {
-				first = false;
-				sb.append(capitalizeFirstLetter ? Character.toUpperCase(c) : Character.toLowerCase(c));
-			} else {
-				sb.append((prev == '_') ? Character.toUpperCase(c) : Character.toLowerCase(c));
-			}
-		}
-	}
-
-	/**
-	 * Convert the specified "underscore" string to a "camel case" string:
-	 * "LARGE_PROJECT" -> "largeProject"
-	 * Optionally capitalize the first letter.
-	 */
-	public static void convertUnderscoresToCamelCaseOn(String underscoreString, boolean capitalizeFirstLetter, StringBuilder sb) {
-		int len = underscoreString.length();
-		if (len != 0) {
-			convertUnderscoresToCamelCaseOn_(underscoreString.toCharArray(), capitalizeFirstLetter, len, sb);
-		}
-	}
-
-	/**
-	 * Convert the specified "underscore" string to a "camel case" string:
-	 * "LARGE_PROJECT" -> "largeProject"
-	 * Optionally capitalize the first letter.
-	 */
-	public static void convertUnderscoresToCamelCaseOn(char[] underscoreString, boolean capitalizeFirstLetter, StringBuilder sb) {
-		int len = underscoreString.length;
-		if (len != 0) {
-			convertUnderscoresToCamelCaseOn_(underscoreString, capitalizeFirstLetter, len, sb);
-		}
-	}
-
-	private static void convertUnderscoresToCamelCaseOn_(char[] underscoreString, boolean capitalizeFirstLetter, int len, StringBuilder sb) {
-		char prev = 0;
-		char c = 0;
-		boolean first = true;
-		for (int i = 0; i < len; i++) {
-			prev = c;
-			c = underscoreString[i];
-			if (c == '_') {
-				continue;
-			}
-			if (first) {
-				first = false;
-				sb.append(capitalizeFirstLetter ? Character.toUpperCase(c) : Character.toLowerCase(c));
-			} else {
-				sb.append((prev == '_') ? Character.toUpperCase(c) : Character.toLowerCase(c));
-			}
-		}
-	}
-
-	/**
-	 * Convert the specified "underscore" string to a "camel case" string:
-	 * "LARGE_PROJECT" -> "largeProject"
-	 * Optionally capitalize the first letter.
-	 */
-	public static void convertUnderscoresToCamelCaseOn(String underscoreString, boolean capitalizeFirstLetter, Writer writer) {
-		int len = underscoreString.length();
-		if (len != 0) {
-			convertUnderscoresToCamelCaseOn_(underscoreString.toCharArray(), capitalizeFirstLetter, len, writer);
-		}
-	}
-
-	/**
-	 * Convert the specified "underscore" string to a "camel case" string:
-	 * "LARGE_PROJECT" -> "largeProject"
-	 * Optionally capitalize the first letter.
-	 */
-	public static void convertUnderscoresToCamelCaseOn(char[] underscoreString, boolean capitalizeFirstLetter, Writer writer) {
-		int len = underscoreString.length;
-		if (len != 0) {
-			convertUnderscoresToCamelCaseOn_(underscoreString, capitalizeFirstLetter, len, writer);
-		}
-	}
-
-	private static void convertUnderscoresToCamelCaseOn_(char[] underscoreString, boolean capitalizeFirstLetter, int len, Writer writer) {
-		char prev = 0;
-		char c = 0;
-		boolean first = true;
-		for (int i = 0; i < len; i++) {
-			prev = c;
-			c = underscoreString[i];
-			if (c == '_') {
-				continue;
-			}
-			if (first) {
-				first = false;
-				writeCharOn(capitalizeFirstLetter ? Character.toUpperCase(c) : Character.toLowerCase(c), writer);
-			} else {
-				writeCharOn((prev == '_') ? Character.toUpperCase(c) : Character.toLowerCase(c), writer);
-			}
-		}
-	}
-
-
-	// ********** convert to Java string literal **********
-
-	public static final String EMPTY_JAVA_STRING_LITERAL = "\"\"";  //$NON-NLS-1$
-	public static final char[] EMPTY_JAVA_STRING_LITERAL_CHAR_ARRAY = EMPTY_JAVA_STRING_LITERAL.toCharArray();
-
-	public static String convertToJavaStringLiteral(String string) {
-		int len = string.length();
-		if (len == 0) {
-			return EMPTY_JAVA_STRING_LITERAL;
-		}
-		StringBuilder sb = new StringBuilder(len + 5);
-		convertToJavaStringLiteralOn_(string.toCharArray(), sb, len);
-		return sb.toString();
-	}
-
-	public static char[] convertToJavaStringLiteral(char[] string) {
-		int len = string.length;
-		if (len == 0) {
-			return EMPTY_JAVA_STRING_LITERAL_CHAR_ARRAY;
-		}
-		StringBuilder sb = new StringBuilder(len + 5);
-		convertToJavaStringLiteralOn_(string, sb, len);
-		len = sb.length();
-		char[] result = new char[len];
-		sb.getChars(0, len, result, 0);
-		return result;
-	}
-
-	public static Iterable<String> convertToJavaStringLiterals(Iterable<String> strings) {
-		return new TransformationIterable<String, String>(strings, STRING_TO_JAVA_STRING_LITERAL_TRANSFORMER);
-	}
-
-	public static Iterator<String> convertToJavaStringLiterals(Iterator<String> strings) {
-		return new TransformationIterator<String, String>(strings, STRING_TO_JAVA_STRING_LITERAL_TRANSFORMER);
-	}
-
-	private static final Transformer<String, String> STRING_TO_JAVA_STRING_LITERAL_TRANSFORMER = new Transformer<String, String>() {
-		public String transform(String string) {
-			return StringTools.convertToJavaStringLiteral(string);
-		}
-	};
-
-	// cannot name method simply 'convertToJavaStringLiterals' because of type-erasure...
-	public static Iterable<char[]> convertToJavaCharArrayLiterals(Iterable<char[]> strings) {
-		return new TransformationIterable<char[], char[]>(strings, CHAR_ARRAY_TO_JAVA_STRING_LITERAL_TRANSFORMER);
-	}
-
-	// cannot name method simply 'convertToJavaStringLiterals' because of type-erasure...
-	public static Iterator<char[]> convertToJavaCharArrayLiterals(Iterator<char[]> strings) {
-		return new TransformationIterator<char[], char[]>(strings, CHAR_ARRAY_TO_JAVA_STRING_LITERAL_TRANSFORMER);
-	}
-
-	private static final Transformer<char[], char[]> CHAR_ARRAY_TO_JAVA_STRING_LITERAL_TRANSFORMER = new Transformer<char[], char[]>() {
-		public char[] transform(char[] string) {
-			return StringTools.convertToJavaStringLiteral(string);
-		}
-	};
-
-	public static void convertToJavaStringLiteralOn(String string, StringBuffer sb) {
-		int len = string.length();
-		if (len == 0) {
-			sb.append(EMPTY_JAVA_STRING_LITERAL);
-		} else {
-			convertToJavaStringLiteralOn_(string.toCharArray(), sb, len);
-		}
-	}
-
-	public static void convertToJavaStringLiteralOn(char[] string, StringBuffer sb) {
-		int len = string.length;
-		if (len == 0) {
-			sb.append(EMPTY_JAVA_STRING_LITERAL);
-		} else {
-			convertToJavaStringLiteralOn_(string, sb, len);
-		}
-	}
-
-	/*
-	 * no length checks
-	 */
-	private static void convertToJavaStringLiteralOn_(char[] string, StringBuffer sb, int len) {
-		sb.ensureCapacity(sb.length() + len + 5);
-		sb.append(QUOTE);
-		for (char c : string) {
-			switch (c) {
-				case '\b':  // backspace
-					sb.append("\\b");  //$NON-NLS-1$
-					break;
-				case '\t':  // horizontal tab
-					sb.append("\\t");  //$NON-NLS-1$
-					break;
-				case '\n':  // line-feed LF
-					sb.append("\\n");  //$NON-NLS-1$
-					break;
-				case '\f':  // form-feed FF
-					sb.append("\\f");  //$NON-NLS-1$
-					break;
-				case '\r':  // carriage-return CR
-					sb.append("\\r");  //$NON-NLS-1$
-					break;
-				case '"':  // double-quote
-					sb.append("\\\"");  //$NON-NLS-1$
-					break;
-//				case '\'':  // single-quote
-//					sb.append("\\'");  //$NON-NLS-1$
-//					break;
-				case '\\':  // backslash
-					sb.append("\\\\");  //$NON-NLS-1$
-					break;
-				default:
-					sb.append(c);
-					break;
-			}
-		}
-		sb.append(QUOTE);
-	}
-
-	public static void convertToJavaStringLiteralOn(String string, StringBuilder sb) {
-		int len = string.length();
-		if (len == 0) {
-			sb.append(EMPTY_JAVA_STRING_LITERAL);
-		} else {
-			convertToJavaStringLiteralOn_(string.toCharArray(), sb, len);
-		}
-	}
-
-	public static void convertToJavaStringLiteralOn(char[] string, StringBuilder sb) {
-		int len = string.length;
-		if (len == 0) {
-			sb.append(EMPTY_JAVA_STRING_LITERAL);
-		} else {
-			convertToJavaStringLiteralOn_(string, sb, len);
-		}
-	}
-
-	/*
-	 * no length checks
-	 */
-	private static void convertToJavaStringLiteralOn_(char[] string, StringBuilder sb, int len) {
-		sb.ensureCapacity(sb.length() + len + 5);
-		sb.append(QUOTE);
-		for (char c : string) {
-			switch (c) {
-				case '\b':  // backspace
-					sb.append("\\b");  //$NON-NLS-1$
-					break;
-				case '\t':  // horizontal tab
-					sb.append("\\t");  //$NON-NLS-1$
-					break;
-				case '\n':  // line-feed LF
-					sb.append("\\n");  //$NON-NLS-1$
-					break;
-				case '\f':  // form-feed FF
-					sb.append("\\f");  //$NON-NLS-1$
-					break;
-				case '\r':  // carriage-return CR
-					sb.append("\\r");  //$NON-NLS-1$
-					break;
-				case '"':  // double-quote
-					sb.append("\\\"");  //$NON-NLS-1$
-					break;
-//				case '\'':  // single-quote
-//					sb.append("\\'");  //$NON-NLS-1$
-//					break;
-				case '\\':  // backslash
-					sb.append("\\\\");  //$NON-NLS-1$
-					break;
-				default:
-					sb.append(c);
-					break;
-			}
-		}
-		sb.append(QUOTE);
-	}
-
-	public static void convertToJavaStringLiteralOn(String string, Writer writer) {
-		if (string.length() == 0) {
-			writeStringOn(EMPTY_JAVA_STRING_LITERAL, writer);
-		} else {
-			convertToJavaStringLiteralOn_(string.toCharArray(), writer);
-		}
-	}
-
-	public static void convertToJavaStringLiteralOn(char[] string, Writer writer) {
-		if (string.length == 0) {
-			writeStringOn(EMPTY_JAVA_STRING_LITERAL, writer);
-		} else {
-			convertToJavaStringLiteralOn_(string, writer);
-		}
-	}
-
-	/*
-	 * no length checks
-	 */
-	private static void convertToJavaStringLiteralOn_(char[] string, Writer writer) {
-		writeCharOn(QUOTE, writer);
-		for (char c : string) {
-			switch (c) {
-				case '\b':  // backspace
-					writeStringOn("\\b", writer);  //$NON-NLS-1$
-					break;
-				case '\t':  // horizontal tab
-					writeStringOn("\\t", writer);  //$NON-NLS-1$
-					break;
-				case '\n':  // line-feed LF
-					writeStringOn("\\n", writer);  //$NON-NLS-1$
-					break;
-				case '\f':  // form-feed FF
-					writeStringOn("\\f", writer);  //$NON-NLS-1$
-					break;
-				case '\r':  // carriage-return CR
-					writeStringOn("\\r", writer);  //$NON-NLS-1$
-					break;
-				case '"':  // double-quote
-					writeStringOn("\\\"", writer);  //$NON-NLS-1$
-					break;
-//				case '\'':  // single-quote
-//					writeStringOn("\\'", writer);  //$NON-NLS-1$
-//					break;
-				case '\\':  // backslash
-					writeStringOn("\\\\", writer);  //$NON-NLS-1$
-					break;
-				default:
-					writeCharOn(c, writer);
-					break;
-			}
-		}
-		writeCharOn(QUOTE, writer);
-	}
-
-
-	// ********** convenience **********
-
-	public static char[] convertToCharArray(StringBuffer sb) {
-		int len = sb.length();
-		char[] result = new char[len];
-		sb.getChars(0, len, result, 0);
-		return result;
-	}
-
-	public static char[] convertToCharArray(StringBuilder sb) {
-		int len = sb.length();
-		char[] result = new char[len];
-		sb.getChars(0, len, result, 0);
-		return result;
-	}
-
-	private static void writeStringOn(char[] string, Writer writer) {
-		try {
-			writer.write(string);
-		} catch (IOException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	private static void writeStringOn(char[] string, char escape, Writer writer) {
-		try {
-			for (char c : string) {
-				if (c == escape) {
-					writer.write(c);
-				}
-				writer.write(c);
-			}
-		} catch (IOException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	private static void writeStringOn(char[] string, int off, int len, Writer writer) {
-		try {
-			writer.write(string, off, len);
-		} catch (IOException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	private static void writeStringOn(String string, int off, int len, Writer writer) {
-		try {
-			writer.write(string, off, len);
-		} catch (IOException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	private static void writeStringOn(String string, Writer writer) {
-		try {
-			writer.write(string);
-		} catch (IOException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	private static void writeCharOn(char c, Writer writer) {
-		try {
-			writer.write(c);
-		} catch (IOException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-
-	// ********** constructor **********
-
-	/*
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private StringTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedBag.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedBag.java
deleted file mode 100644
index e59e8a1..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedBag.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- * Thread-safe implementation of the {@link Bag} interface.
- */
-public class SynchronizedBag<E>
-	implements Bag<E>, Serializable
-{
-	/** Backing bag. */
-	private final Bag<E> bag;
-
-	/** Object to synchronize on. */
-	private final Object mutex;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a synchronized bag that wraps the
-	 * specified bag and locks on the specified mutex.
-	 */
-	public SynchronizedBag(Bag<E> bag, Object mutex) {
-		super();
-		if (bag == null) {
-			throw new NullPointerException();
-		}
-		this.bag = bag;
-		this.mutex = mutex;
-	}
-
-	/**
-	 * Construct a synchronized bag that wraps the
-	 * specified bag and locks on itself.
-	 */
-	public SynchronizedBag(Bag<E> bag) {
-		super();
-		if (bag == null) {
-			throw new NullPointerException();
-		}
-		this.bag = bag;
-		this.mutex = this;
-	}
-
-	/**
-	 * Construct a synchronized bag that locks on the specified mutex.
-	 */
-	public SynchronizedBag(Object mutex) {
-		this(new HashBag<E>(), mutex);
-	}
-
-	/**
-	 * Construct a synchronized bag that locks on itself.
-	 */
-	public SynchronizedBag() {
-		this(new HashBag<E>());
-	}
-
-
-	// ********** Bag implementation **********
-
-	public boolean add(E o, int count) {
-		synchronized (this.mutex) {
-			return this.bag.add(o, count);
-		}
-	}
-
-	public int count(Object o) {
-		synchronized (this.mutex) {
-			return this.bag.count(o);
-		}
-	}
-
-	public Iterator<Bag.Entry<E>> entries() {
-		synchronized (this.mutex) {
-			return this.bag.entries();
-		}
-	}
-
-	public boolean remove(Object o, int count) {
-		synchronized (this.mutex) {
-			return this.bag.remove(o, count);
-		}
-	}
-
-	public int uniqueCount() {
-		synchronized (this.mutex) {
-			return this.bag.uniqueCount();
-		}
-	}
-
-	public Iterator<E> uniqueIterator() {
-		synchronized (this.mutex) {
-			return this.bag.uniqueIterator();
-		}
-	}
-
-
-	// ********** Collection implementation **********
-
-	public boolean add(E e) {
-		synchronized (this.mutex) {
-			return this.bag.add(e);
-		}
-	}
-
-	public boolean addAll(Collection<? extends E> c) {
-		synchronized (this.mutex) {
-			return this.bag.addAll(c);
-		}
-	}
-
-	public void clear() {
-		synchronized (this.mutex) {
-			this.bag.clear();
-		}
-	}
-
-	public boolean contains(Object o) {
-		synchronized (this.mutex) {
-			return this.bag.contains(o);
-		}
-	}
-
-	public boolean containsAll(Collection<?> c) {
-		synchronized (this.mutex) {
-			return this.bag.containsAll(c);
-		}
-	}
-
-	public boolean isEmpty() {
-		synchronized (this.mutex) {
-			return this.bag.isEmpty();
-		}
-	}
-
-	public Iterator<E> iterator() {
-		synchronized (this.mutex) {
-			return this.bag.iterator();
-		}
-	}
-
-	public boolean remove(Object o) {
-		synchronized (this.mutex) {
-			return this.bag.remove(o);
-		}
-	}
-
-	public boolean removeAll(Collection<?> c) {
-		synchronized (this.mutex) {
-			return this.bag.removeAll(c);
-		}
-	}
-
-	public boolean retainAll(Collection<?> c) {
-		synchronized (this.mutex) {
-			return this.bag.retainAll(c);
-		}
-	}
-
-	public int size() {
-		synchronized (this.mutex) {
-			return this.bag.size();
-		}
-	}
-
-	public Object[] toArray() {
-		synchronized (this.mutex) {
-			return this.bag.toArray();
-		}
-	}
-
-	public <T> T[] toArray(T[] a) {
-		synchronized (this.mutex) {
-			return this.bag.toArray(a);
-		}
-	}
-
-
-	// ********** additional public protocol **********
-
-	/**
-	 * Return the object the stack locks on while performing
-	 * its operations.
-	 */
-	public Object getMutex() {
-		return this.mutex;
-	}
-
-
-	// ********** Object overrides **********
-
-	@Override
-	public String toString() {
-		synchronized (this.mutex) {
-			return this.bag.toString();
-		}
-	}
-
-	private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {
-		synchronized (this.mutex) {
-			s.defaultWriteObject();
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedBoolean.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedBoolean.java
deleted file mode 100644
index f962b58..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedBoolean.java
+++ /dev/null
@@ -1,469 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import org.eclipse.jpt.utility.Command;
-
-/**
- * This class provides synchronized access to a <code>boolean</code> value.
- * It also provides protocol for suspending a thread until the
- * <code>boolean</code> value is set to <code>true</code> or <code>false</code>,
- * with optional time-outs.
- * 
- * @see BooleanReference
- */
-public class SynchronizedBoolean
-	implements Cloneable, Serializable
-{
-	/** Backing <code>boolean</code>. */
-	private boolean value;
-
-	/** Object to synchronize on. */
-	private final Object mutex;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Create a synchronized <code>boolean</code> with the specified
-	 * initial value and mutex.
-	 */
-	public SynchronizedBoolean(boolean value, Object mutex) {
-		super();
-		this.value = value;
-		this.mutex = mutex;
-	}
-
-	/**
-	 * Create a synchronized <code>boolean</code> with the
-	 * specified initial value.
-	 * The synchronized <code>boolean</code> itself will be the mutex.
-	 */
-	public SynchronizedBoolean(boolean value) {
-		super();
-		this.value = value;
-		this.mutex = this;
-	}
-
-	/**
-	 * Create a synchronized <code>boolean</code>
-	 * with an initial value of <code>false</code>
-	 * and specified mutex.
-	 */
-	public SynchronizedBoolean(Object mutex) {
-		this(false, mutex);
-	}
-
-	/**
-	 * Create a synchronized <code>boolean</code>
-	 * with an initial value of <code>false</code>.
-	 * The synchronized <code>boolean</code> itself will be the mutex.
-	 */
-	public SynchronizedBoolean() {
-		this(false);
-	}
-
-
-	// ********** accessors **********
-
-	/**
-	 * Return the current <code>boolean</code> value.
-	 */
-	public boolean getValue() {
-		synchronized (this.mutex) {
-			return this.value;
-		}
-	}
-
-	/**
-	 * Return whether the current <code>boolean</code>
-	 * value is the specified value.
-	 */
-	public boolean is(boolean v) {
-		synchronized (this.mutex) {
-			return this.value == v;
-		}
-	}
-
-	/**
-	 * Return whether the current <code>boolean</code>
-	 * value is the specified value.
-	 */
-	public boolean isNot(boolean v) {
-		synchronized (this.mutex) {
-			return this.value != v;
-		}
-	}
-
-	/**
-	 * Return whether the current <code>boolean</code>
-	 * value is <code>true</code>.
-	 */
-	public boolean isTrue() {
-		synchronized (this.mutex) {
-			return this.value;
-		}
-	}
-
-	/**
-	 * Return whether the current <code>boolean</code>
-	 * value is <code>false</code>.
-	 */
-	public boolean isFalse() {
-		synchronized (this.mutex) {
-			return ! this.value;
-		}
-	}
-
-	/**
-	 * Set the <code>boolean</code> value.
-	 * If the value changes, all waiting threads are notified.
-	 */
-	public void setValue(boolean value) {
-		synchronized (this.mutex) {
-			this.setValue_(value);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void setValue_(boolean v) {
-		if (this.value != v) {
-			this.value = v;
-			this.mutex.notifyAll();
-		}
-	}
-
-	/**
-	 * Set the <code>boolean</code> value to the NOT of its current value.
-	 * If the value changes, all waiting threads are notified.
-	 * Return the resulting value.
-	 */
-	public boolean flip() {
-		synchronized (this.mutex) {
-			boolean v = ! this.value;
-			this.setValue_(v);
-			return v;
-		}
-	}
-
-	/**
-	 * Set the <code>boolean</code> value to <code>true</code>.
-	 * If the value changes, all waiting threads are notified.
-	 */
-	public void setNot(boolean v) {
-		this.setValue( ! v);
-	}
-
-	/**
-	 * Set the <code>boolean</code> value to <code>true</code>.
-	 * If the value changes, all waiting threads are notified.
-	 */
-	public void setTrue() {
-		this.setValue(true);
-	}
-
-	/**
-	 * Set the <code>boolean</code> value to <code>false</code>.
-	 * If the value changes, all waiting threads are notified.
-	 */
-	public void setFalse() {
-		this.setValue(false);
-	}
-
-	/**
-	 * Return the object this object locks on while performing
-	 * its operations.
-	 */
-	public Object getMutex() {
-		return this.mutex;
-	}
-
-
-	// ********** indefinite waits **********
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value changes
-	 * to the specified value. If the <code>boolean</code> value is already the
-	 * specified value, return immediately.
-	 */
-	public void waitUntilValueIs(boolean v) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilValueIs_(v);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void waitUntilValueIs_(boolean v) throws InterruptedException {
-		while (this.value != v) {
-			this.mutex.wait();
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value
-	 * changes to the NOT of the specified value.
-	 * If the <code>boolean</code> value is already the NOT of the specified
-	 * value, return immediately.
-	 */
-	public void waitUntilValueIsNot(boolean v) throws InterruptedException {
-		this.waitUntilValueIs( ! v);
-	}
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value
-	 * changes to <code>true</code>.
-	 * If the <code>boolean</code> value is already <code>true</code>,
-	 * return immediately.
-	 */
-	public void waitUntilTrue() throws InterruptedException {
-		this.waitUntilValueIs(true);
-	}
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value
-	 * changes to <code>false</code>.
-	 * If the <code>boolean</code> value is already <code>false</code>,
-	 * return immediately.
-	 */
-	public void waitUntilFalse() throws InterruptedException {
-		this.waitUntilValueIs(false);
-	}
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value changes to
-	 * <em>not</em> the specified value, then change it back to the specified
-	 * value and continue executing. If the <code>boolean</code> value is already
-	 * <em>not</em> the specified value, set the value to the specified value
-	 * immediately.
-	 */
-	public void waitToSetValue(boolean v) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilValueIs_( ! v);
-			this.setValue_(v);
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value
-	 * changes to <code>false</code>,
-	 * then change it back to <code>true</code> and continue executing.
-	 * If the <code>boolean</code> value is already <code>false</code>,
-	 * set the value to <code>true</code> immediately.
-	 */
-	public void waitToSetTrue() throws InterruptedException {
-		this.waitToSetValue(true);
-	}
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value
-	 * changes to <code>true</code>,
-	 * then change it back to <code>false</code> and continue executing.
-	 * If the <code>boolean</code> value is already <code>true</code>,
-	 * set the value to <code>false</code> immediately.
-	 */
-	public void waitToSetFalse() throws InterruptedException {
-		this.waitToSetValue(false);
-	}
-
-
-	// ********** timed waits **********
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value changes
-	 * to the specified value or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code> if
-	 * the specified value was achieved;
-	 * return <code>false</code> if a time-out occurred.
-	 * If the <code>boolean</code> value is already the specified value,
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilValueIs(boolean v, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			return this.waitUntilValueIs_(v, timeout);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private boolean waitUntilValueIs_(boolean v, long timeout) throws InterruptedException {
-		if (timeout == 0L) {
-			this.waitUntilValueIs_(v);	// wait indefinitely until notified
-			return true;	// if it ever comes back, the condition was met
-		}
-
-		long stop = System.currentTimeMillis() + timeout;
-		long remaining = timeout;
-		while ((this.value != v) && (remaining > 0L)) {
-			this.mutex.wait(remaining);
-			remaining = stop - System.currentTimeMillis();
-		}
-		return (this.value == v);
-	}
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value
-	 * changes to the NOT of the specified value or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code> if
-	 * the NOT of the specified value was achieved;
-	 * return <code>false</code> if a time-out occurred.
-	 * If the <code>boolean</code> value is already the NOT of the specified
-	 * value, return immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public void waitUntilValueIsNot(boolean v, long timeout) throws InterruptedException {
-		this.waitUntilValueIs( ! v, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value changes
-	 * to <code>true</code> or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code> if
-	 * <code>true</code> was achieved;
-	 * return <code>false</code> if a time-out occurred.
-	 * If the <code>boolean</code> value is already <code>true</code>,
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilTrue(long timeout) throws InterruptedException {
-		return this.waitUntilValueIs(true, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value changes
-	 * to <code>false</code> or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code> if
-	 * <code>false</code> was achieved;
-	 * return <code>false</code> if a time-out occurred.
-	 * If the <code>boolean</code> value is already <code>true</code>,
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilFalse(long timeout) throws InterruptedException {
-		return this.waitUntilValueIs(false, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value changes
-	 * to <em>not</em> the specified value, then change it back to the specified
-	 * value and continue executing. If the <code>boolean</code> value does not
-	 * change to <code>false</code> before the time-out, simply continue
-	 * executing without changing the value.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value was set to the specified value; return <code>false</code>
-	 * if a time-out occurred. If the <code>boolean</code> value is already
-	 * <em>not</em> the specified value, set the value to the specified value
-	 * immediately and return <code>true</code>.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitToSetValue(boolean v, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			boolean success = this.waitUntilValueIs_( ! v, timeout);
-			if (success) {
-				this.setValue_(v);
-			}
-			return success;
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value changes
-	 * to <code>false</code>, then change it back to <code>true</code> and
-	 * continue executing. If the <code>boolean</code> value does not change to
-	 * <code>false</code> before the time-out, simply continue executing without
-	 * changing the value. The time-out is specified in milliseconds. Return
-	 * <code>true</code> if the value was set to <code>true</code>;
-	 * return <code>false</code> if a time-out occurred. If the
-	 * <code>boolean</code> value is already <code>false</code>, set the
-	 * value to <code>true</code> immediately and return <code>true</code>.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitToSetTrue(long timeout) throws InterruptedException {
-		return this.waitToSetValue(true, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the <code>boolean</code> value changes
-	 * to <code>true</code>, then change it back to <code>false</code> and
-	 * continue executing. If the <code>boolean</code> value does not change to
-	 * <code>true</code> before the time-out, simply continue executing without
-	 * changing the value. The time-out is specified in milliseconds. Return
-	 * <code>true</code> if the value was set to <code>false</code>;
-	 * return <code>false</code> if a time-out occurred. If the
-	 * <code>boolean</code> value is already <code>true</code>, set the
-	 * value to <code>false</code> immediately and return <code>true</code>.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitToSetFalse(long timeout) throws InterruptedException {
-		return this.waitToSetValue(false, timeout);
-	}
-
-
-	// ********** synchronized behavior **********
-
-	/**
-	 * If the current thread is not interrupted, execute the specified command 
-	 * with the mutex locked. This is useful for initializing the value from another
-	 * thread.
-	 */
-	public void execute(Command command) throws InterruptedException {
-		if (Thread.interrupted()) {
-			throw new InterruptedException();
-		}
-		synchronized (this.mutex) {
-			command.execute();
-		}
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public SynchronizedBoolean clone() {
-		try {
-			synchronized (this.mutex) {
-				return (SynchronizedBoolean) super.clone();
-			}
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-	@Override
-	public boolean equals(Object o) {
-		return (o instanceof SynchronizedBoolean) &&
-			(this.getValue() == ((SynchronizedBoolean) o).getValue());
-	}
-
-	@Override
-	public int hashCode() {
-		return this.getValue() ? 1 : 0;
-	}
-
-	@Override
-	public String toString() {
-		return '[' + String.valueOf(this.getValue()) + ']';
-	}
-
-	private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {
-		synchronized (this.mutex) {
-			s.defaultWriteObject();
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedInt.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedInt.java
deleted file mode 100644
index acb902e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedInt.java
+++ /dev/null
@@ -1,1012 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-import org.eclipse.jpt.utility.Command;
-
-/**
- * This class provides synchronized access to an <code>int</code>.
- * It also provides protocol for suspending a thread until the
- * value is set to a specified value, with optional time-outs.
- * 
- * @see IntReference
- */
-public class SynchronizedInt
-	implements Comparable<SynchronizedInt>, Cloneable, Serializable
-{
-	/** Backing <code>int</code>. */
-	private int value;
-
-	/** Object to synchronize on. */
-	private final Object mutex;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Create a synchronized integer with the specified initial value
-	 * and mutex.
-	 */
-	public SynchronizedInt(int value, Object mutex) {
-		super();
-		this.value = value;
-		this.mutex = mutex;
-	}
-
-	/**
-	 * Create a synchronized integer with the specified initial value.
-	 * The synchronized integer itself will be the mutex.
-	 */
-	public SynchronizedInt(int value) {
-		super();
-		this.value = value;
-		this.mutex = this;
-	}
-
-	/**
-	 * Create a synchronized integer with an initial value of zero
-	 * and the specified mutex.
-	 */
-	public SynchronizedInt(Object mutex) {
-		this(0, mutex);
-	}
-
-	/**
-	 * Create a synchronized object with an initial value of zero.
-	 * The synchronized integer itself will be the mutex.
-	 */
-	public SynchronizedInt() {
-		this(0);
-	}
-
-
-	// ********** methods **********
-
-	/**
-	 * Return the current value.
-	 */
-	public int getValue() {
-		synchronized (this.mutex) {
-			return this.value;
-		}
-	}
-
-	/**
-	 * Return whether the current value is equal to the specified value.
-	 */
-	public boolean equals(int v) {
-		synchronized (this.mutex) {
-			return this.value == v;
-		}
-	}
-
-	/**
-	 * Return whether the current value is not equal to the specified value.
-	 */
-	public boolean notEquals(int v) {
-		synchronized (this.mutex) {
-			return this.value != v;
-		}
-	}
-
-	/**
-	 * Return whether the current value is zero.
-	 */
-	public boolean isZero() {
-		synchronized (this.mutex) {
-			return this.value == 0;
-		}
-	}
-
-	/**
-	 * Return whether the current value is not zero.
-	 */
-	public boolean isNotZero() {
-		synchronized (this.mutex) {
-			return this.value != 0;
-		}
-	}
-
-	/**
-	 * Return whether the current value is greater than the specified value.
-	 */
-	public boolean isGreaterThan(int v) {
-		synchronized (this.mutex) {
-			return this.value > v;
-		}
-	}
-
-	/**
-	 * Return whether the current value is greater than or equal to the
-	 * specified value.
-	 */
-	public boolean isGreaterThanOrEqual(int v) {
-		synchronized (this.mutex) {
-			return this.value >= v;
-		}
-	}
-
-	/**
-	 * Return whether the current value is less than the specified value.
-	 */
-	public boolean isLessThan(int v) {
-		synchronized (this.mutex) {
-			return this.value < v;
-		}
-	}
-
-	/**
-	 * Return whether the current value is less than or equal to the
-	 * specified value.
-	 */
-	public boolean isLessThanOrEqual(int v) {
-		synchronized (this.mutex) {
-			return this.value <= v;
-		}
-	}
-
-	/**
-	 * Return whether the current value is positive.
-	 */
-	public boolean isPositive() {
-		return this.isGreaterThan(0);
-	}
-
-	/**
-	 * Return whether the current value is not positive
-	 * (i.e. negative or zero).
-	 */
-	public boolean isNotPositive() {
-		return this.isLessThanOrEqual(0);
-	}
-
-	/**
-	 * Return whether the current value is negative.
-	 */
-	public boolean isNegative() {
-		return this.isLessThan(0);
-	}
-
-	/**
-	 * Return whether the current value is not negative
-	 * (i.e. zero or positive).
-	 */
-	public boolean isNotNegative() {
-		return this.isGreaterThanOrEqual(0);
-	}
-
-	/**
-	 * Set the value. If the value changes, all waiting
-	 * threads are notified. Return the previous value.
-	 */
-	public int setValue(int value) {
-		synchronized (this.mutex) {
-			return this.setValue_(value);
-		}
-	}
-
-	/**
-	 * Return the <em>old</em> value.
-	 * Pre-condition: synchronized
-	 */
-	private int setValue_(int v) {
-		int old = this.value;
-		if (this.value != v) {
-			this.value = v;
-			this.mutex.notifyAll();
-		}
-		return old;
-	}
-
-	/**
-	 * Return the <em>new</em> value.
-	 * Pre-condition: synchronized
-	 */
-	private int setNewValue_(int v) {
-		if (this.value != v) {
-			this.value = v;
-			this.mutex.notifyAll();
-		}
-		return v;
-	}
-
-	/**
-	 * Set the value to the absolute value of the current value.
-	 * Return the new value.
-	 */
-	public int abs() {
-		synchronized (this.mutex) {
-			return this.setNewValue_(Math.abs(this.value));
-		}
-	}
-
-	/**
-	 * Set the value to the negative value of the current value.
-	 * Return the new value.
-	 */
-	public int neg() {
-		synchronized (this.mutex) {
-			return this.setNewValue_(-this.value);
-		}
-	}
-
-	/**
-	 * Set the value to zero. If the value changes, all waiting
-	 * threads are notified. Return the previous value.
-	 */
-	public int setZero() {
-		return this.setValue(0);
-	}
-
-	/**
-	 * Set the value to the current value plus the specified value.
-	 * Return the new value.
-	 */
-	public int add(int v) {
-		synchronized (this.mutex) {
-			return this.setNewValue_(this.value + v);
-		}
-	}
-
-	/**
-	 * Increment the value by one.
-	 * Return the new value.
-	 */
-	public int increment() {
-		synchronized (this.mutex) {
-			this.value++;
-			this.mutex.notifyAll();
-			return this.value;
-		}
-	}
-
-	/**
-	 * Set the value to the current value minus the specified value.
-	 * Return the new value.
-	 */
-	public int subtract(int v) {
-		synchronized (this.mutex) {
-			return this.setNewValue_(this.value - v);
-		}
-	}
-
-	/**
-	 * Decrement the value by one.
-	 * Return the new value.
-	 */
-	public int decrement() {
-		synchronized (this.mutex) {
-			this.value--;
-			this.mutex.notifyAll();
-			return this.value;
-		}
-	}
-
-	/**
-	 * Set the value to the current value times the specified value.
-	 * Return the new value.
-	 */
-	public int multiply(int v) {
-		synchronized (this.mutex) {
-			return this.setNewValue_(this.value * v);
-		}
-	}
-
-	/**
-	 * Set the value to the current value divided by the specified value.
-	 * Return the new value.
-	 */
-	public int divide(int v) {
-		synchronized (this.mutex) {
-			return this.setNewValue_(this.value / v);
-		}
-	}
-
-	/**
-	 * Set the value to the remainder of the current value divided by the
-	 * specified value.
-	 * Return the new value.
-	 */
-	public int remainder(int v) {
-		synchronized (this.mutex) {
-			return this.setNewValue_(this.value % v);
-		}
-	}
-
-	/**
-	 * Set the value to the minimum of the current value and the specified value.
-	 * Return the new value.
-	 */
-	public int min(int v) {
-		synchronized (this.mutex) {
-			return this.setNewValue_(Math.min(this.value, v));
-		}
-	}
-
-	/**
-	 * Set the value to the maximum of the current value and the specified value.
-	 * Return the new value.
-	 */
-	public int max(int v) {
-		synchronized (this.mutex) {
-			return this.setNewValue_(Math.max(this.value, v));
-		}
-	}
-
-	/**
-	 * Set the value to the current value raised to the power of the'
-	 * specified value.
-	 * Return the new value.
-	 */
-	public int pow(int v) {
-		synchronized (this.mutex) {
-			return this.setNewValue_((int) Math.pow(this.value, v));
-		}
-	}
-
-	/**
-	 * If the current value is the specified expected value, set it to the
-	 * specified new value. Return the previous value.
-	 */
-	public int compareAndSwap(int expectedValue, int newValue) {
-		synchronized (this.mutex) {
-			return this.compareAndSwap_(expectedValue, newValue);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private int compareAndSwap_(int expectedValue, int newValue) {
-		return (this.value == expectedValue) ? this.setValue_(newValue) : this.value;
-	}
-
-	/**
-	 * Return the object the synchronized integer locks on while performing
-	 * its operations.
-	 */
-	public Object getMutex() {
-		return this.mutex;
-	}
-
-
-	// ********** indefinite waits **********
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to the specified value. If the value is already the
-	 * specified value, return immediately.
-	 */
-	public void waitUntilEqual(int v) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilEqual_(v);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void waitUntilEqual_(int v) throws InterruptedException {
-		while (this.value != v) {
-			this.mutex.wait();
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to something other than the specified value. If the
-	 * value is already <em>not</em> the specified value,
-	 * return immediately.
-	 */
-	public void waitUntilNotEqual(int v) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilNotEqual_(v);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void waitUntilNotEqual_(int v) throws InterruptedException {
-		while (this.value == v) {
-			this.mutex.wait();
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to zero.
-	 * If the value is already zero, return immediately.
-	 */
-	public void waitUntilZero() throws InterruptedException {
-		this.waitUntilEqual(0);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to something other than zero.
-	 * If the value is already <em>not</em> zero,
-	 * return immediately.
-	 */
-	public void waitUntilNotZero() throws InterruptedException {
-		this.waitUntilNotEqual(0);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to a value greater than the specified value. If the value is already
-	 * greater than the specified value, return immediately.
-	 */
-	public void waitUntilGreaterThan(int v) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilGreaterThan_(v);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void waitUntilGreaterThan_(int v) throws InterruptedException {
-		while (this.value <= v) {
-			this.mutex.wait();
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to a value greater than or equal to the specified value. If the value is already
-	 * greater than or equal the specified value, return immediately.
-	 */
-	public void waitUntilGreaterThanOrEqual(int v) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilGreaterThanOrEqual_(v);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void waitUntilGreaterThanOrEqual_(int v) throws InterruptedException {
-		while (this.value < v) {
-			this.mutex.wait();
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to a value less than the specified value. If the value is already
-	 * less than the specified value, return immediately.
-	 */
-	public void waitUntilLessThan(int v) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilLessThan_(v);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void waitUntilLessThan_(int v) throws InterruptedException {
-		while (this.value >= v) {
-			this.mutex.wait();
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to a value less than or equal to the specified value. If the value is already
-	 * less than or equal the specified value, return immediately.
-	 */
-	public void waitUntilLessThanOrEqual(int v) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilLessThanOrEqual_(v);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void waitUntilLessThanOrEqual_(int v) throws InterruptedException {
-		while (this.value > v) {
-			this.mutex.wait();
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the value is positive.
-	 * If the value is already positive, return immediately.
-	 */
-	public void waitUntilPositive() throws InterruptedException {
-		this.waitUntilGreaterThan(0);
-	}
-
-	/**
-	 * Suspend the current thread until the value is not positive
-	 * (i.e. negative or zero).
-	 * If the value is already <em>not</em> positive,
-	 * return immediately.
-	 */
-	public void waitUntilNotPositive() throws InterruptedException {
-		this.waitUntilLessThanOrEqual(0);
-	}
-
-	/**
-	 * Suspend the current thread until the value is negative.
-	 * If the value is already negative, return immediately.
-	 */
-	public void waitUntilNegative() throws InterruptedException {
-		this.waitUntilLessThan(0);
-	}
-
-	/**
-	 * Suspend the current thread until the value is not negative
-	 * (i.e. zero or positive).
-	 * If the value is already <em>not</em> negative,
-	 * return immediately.
-	 */
-	public void waitUntilNotNegative() throws InterruptedException {
-		this.waitUntilGreaterThanOrEqual(0);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to
-	 * something other than the specified value, then change
-	 * it back to the specified value and continue executing.
-	 * If the value is already <em>not</em> the specified value, set
-	 * the value immediately.
-	 * Return the previous value.
-	 */
-	public int waitToSetValue(int v) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilNotEqual_(v);
-			return this.setValue_(v);
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to
-	 * something other than zero, then change it
-	 * back to zero and continue executing.
-	 * If the value is already <em>not</em> zero,
-	 * set the value to zero immediately.
-	 * Return the previous value.
-	 */
-	public int waitToSetZero() throws InterruptedException {
-		return this.waitToSetValue(0);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to
-	 * the specified expected value, then change it
-	 * to the specified new value and continue executing.
-	 * If the value is already the specified expected value,
-	 * set the value to the specified new value immediately.
-	 * Return the previous value.
-	 */
-	public int waitToSwap(int expectedValue, int newValue) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilEqual_(expectedValue);
-			return this.setValue_(newValue);
-		}
-	}
-
-
-	// ********** timed waits **********
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to the specified value or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the specified value was achieved; return <code>false</code>
-	 * if a time-out occurred.
-	 * If the value is already the specified value, return true immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilEqual(int v, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			return this.waitUntilEqual_(v, timeout);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private boolean waitUntilEqual_(int v, long timeout) throws InterruptedException {
-		if (timeout == 0L) {
-			this.waitUntilEqual_(v);  // wait indefinitely until notified
-			return true;  // if it ever comes back, the condition was met
-		}
-
-		long stop = System.currentTimeMillis() + timeout;
-		long remaining = timeout;
-		while ((this.value != v) && (remaining > 0L)) {
-			this.mutex.wait(remaining);
-			remaining = stop - System.currentTimeMillis();
-		}
-		return (this.value == v);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to something
-	 * other than the specified value or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the specified value was removed; return <code>false</code> if a
-	 * time-out occurred. If the value is already <em>not</em> the specified
-	 * value, return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilNotEqual(int v, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			return this.waitUntilNotEqual_(v, timeout);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private boolean waitUntilNotEqual_(int v, long timeout) throws InterruptedException {
-		if (timeout == 0L) {
-			this.waitUntilNotEqual_(v);	// wait indefinitely until notified
-			return true;	// if it ever comes back, the condition was met
-		}
-
-		long stop = System.currentTimeMillis() + timeout;
-		long remaining = timeout;
-		while ((this.value == v) && (remaining > 0L)) {
-			this.mutex.wait(remaining);
-			remaining = stop - System.currentTimeMillis();
-		}
-		return (this.value != v);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to zero or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value is now zero; return <code>false</code>
-	 * if a time-out occurred. If the value is already zero,
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilZero(long timeout) throws InterruptedException {
-		return this.waitUntilEqual(0, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to something other than zero or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value is now not zero; return <code>false</code>
-	 * if a time-out occurred. If the value is already <em>not</em>
-	 * zero, return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilNotZero(long timeout) throws InterruptedException {
-		return this.waitUntilNotEqual(0, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to a value greater
-	 * than the specified value or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the specified value was achieved; return <code>false</code>
-	 * if a time-out occurred.
-	 * If the value is already greater than the specified value, return immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilGreaterThan(int v, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			return this.waitUntilGreaterThan_(v, timeout);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private boolean waitUntilGreaterThan_(int v, long timeout) throws InterruptedException {
-		if (timeout == 0L) {
-			this.waitUntilGreaterThan_(v);  // wait indefinitely until notified
-			return true;  // if it ever comes back, the condition was met
-		}
-
-		long stop = System.currentTimeMillis() + timeout;
-		long remaining = timeout;
-		while ((this.value <= v) && (remaining > 0L)) {
-			this.mutex.wait(remaining);
-			remaining = stop - System.currentTimeMillis();
-		}
-		return (this.value > v);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to a value greater
-	 * than or equal to the specified value or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the specified value was achieved; return <code>false</code>
-	 * if a time-out occurred.
-	 * If the value is already greater than or equal to the specified value,
-	 * return immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilGreaterThanOrEqual(int v, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			return this.waitUntilGreaterThanOrEqual_(v, timeout);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private boolean waitUntilGreaterThanOrEqual_(int v, long timeout) throws InterruptedException {
-		if (timeout == 0L) {
-			this.waitUntilGreaterThanOrEqual_(v);  // wait indefinitely until notified
-			return true;  // if it ever comes back, the condition was met
-		}
-
-		long stop = System.currentTimeMillis() + timeout;
-		long remaining = timeout;
-		while ((this.value < v) && (remaining > 0L)) {
-			this.mutex.wait(remaining);
-			remaining = stop - System.currentTimeMillis();
-		}
-		return (this.value >= v);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to a value less
-	 * than the specified value or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the specified value was achieved; return <code>false</code>
-	 * if a time-out occurred.
-	 * If the value is already less than the specified value, return immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilLessThan(int v, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			return this.waitUntilLessThan_(v, timeout);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private boolean waitUntilLessThan_(int v, long timeout) throws InterruptedException {
-		if (timeout == 0L) {
-			this.waitUntilLessThan_(v);  // wait indefinitely until notified
-			return true;  // if it ever comes back, the condition was met
-		}
-
-		long stop = System.currentTimeMillis() + timeout;
-		long remaining = timeout;
-		while ((this.value >= v) && (remaining > 0L)) {
-			this.mutex.wait(remaining);
-			remaining = stop - System.currentTimeMillis();
-		}
-		return (this.value < v);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to a value less
-	 * than or equal to the specified value or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the specified value was achieved; return <code>false</code>
-	 * if a time-out occurred.
-	 * If the value is already less than or equal to the specified value,
-	 * return immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilLessThanOrEqual(int v, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			return this.waitUntilLessThanOrEqual_(v, timeout);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private boolean waitUntilLessThanOrEqual_(int v, long timeout) throws InterruptedException {
-		if (timeout == 0L) {
-			this.waitUntilLessThanOrEqual_(v);  // wait indefinitely until notified
-			return true;  // if it ever comes back, the condition was met
-		}
-
-		long stop = System.currentTimeMillis() + timeout;
-		long remaining = timeout;
-		while ((this.value > v) && (remaining > 0L)) {
-			this.mutex.wait(remaining);
-			remaining = stop - System.currentTimeMillis();
-		}
-		return (this.value <= v);
-	}
-
-	/**
-	 * Suspend the current thread until the value is positive
-	 * or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value is now positive; return <code>false</code>
-	 * if a time-out occurred. If the value is already positive,
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilPositive(long timeout) throws InterruptedException {
-		return this.waitUntilGreaterThan(0, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the value is not positive
-	 * or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value is now not positive; return <code>false</code>
-	 * if a time-out occurred. If the value is already not positive,
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilNotPositive(long timeout) throws InterruptedException {
-		return this.waitUntilLessThanOrEqual(0, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the value is negative
-	 * or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value is now negative; return <code>false</code>
-	 * if a time-out occurred. If the value is already negative,
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilNegative(long timeout) throws InterruptedException {
-		return this.waitUntilLessThan(0, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the value is not negative
-	 * or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value is now not negative; return <code>false</code>
-	 * if a time-out occurred. If the value is already not negative,
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilNotNegative(long timeout) throws InterruptedException {
-		return this.waitUntilGreaterThanOrEqual(0, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to
-	 * something other than the specified value, then change
-	 * it back to the specified value and continue executing.
-	 * If the value does not change to something other than the
-	 * specified value before the time-out, simply continue executing
-	 * without changing the value.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value was set to the specified value; return <code>false</code>
-	 * if a time-out occurred.
-	 * If the value is already something other than the specified value, set
-	 * the value immediately and return <code>true</code>.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitToSetValue(int v, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			boolean success = this.waitUntilNotEqual_(v, timeout);
-			if (success) {
-				this.setValue_(v);
-			}
-			return success;
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to something
-	 * other than zero, then change it back to zero
-	 * and continue executing. If the value does not change to something
-	 * other than zero before the time-out, simply continue
-	 * executing without changing the value.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value was set to zero; return <code>false</code>
-	 * if a time-out occurred.
-	 * If the value is already something other than zero, set
-	 * the value to zero immediately and return <code>true</code>.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitToSetZero(long timeout) throws InterruptedException {
-		return this.waitToSetValue(0, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to
-	 * the specified expected value, then change it
-	 * to the specified new value and continue executing.
-	 * If the value does not change to the specified expected value
-	 * before the time-out, simply continue executing without changing
-	 * the value.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value was set to the specified new value; return
-	 * <code>false</code> if a time-out occurred.
-	 * If the value is already the specified expected value,
-	 * set the value to the specified new value immediately.
-	 * Return the previous value.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitToSwap(int expectedValue, int newValue, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			boolean success = this.waitUntilEqual_(expectedValue, timeout);
-			if (success) {
-				this.setValue_(newValue);
-			}
-			return success;
-		}
-	}
-
-
-	// ********** synchronized behavior **********
-
-	/**
-	 * If current thread is not interrupted, execute the specified command 
-	 * with the mutex locked. This is useful for initializing the value from another
-	 * thread.
-	 */
-	public void execute(Command command) throws InterruptedException {
-		if (Thread.interrupted()) {
-			throw new InterruptedException();
-		}
-		synchronized (this.mutex) {
-			command.execute();
-		}
-	}
-
-
-	// ********** Comparable implementation **********
-
-	public int compareTo(SynchronizedInt si) {
-		int thisValue = this.getValue();
-		int otherValue = si.getValue();
-		return thisValue < otherValue ? -1 : (thisValue == otherValue ? 0 : 1);
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public SynchronizedInt clone() {
-		try {
-			synchronized (this.mutex) {
-				return (SynchronizedInt) super.clone();
-			}
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		return (obj instanceof SynchronizedInt) &&
-				(this.getValue() == ((SynchronizedInt) obj).getValue());
-	}
-
-	@Override
-	public int hashCode() {
-		return this.getValue();
-	}
-
-	@Override
-	public String toString() {
-		return '[' + String.valueOf(this.getValue()) + ']';
-	}
-
-	private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {
-		synchronized (this.mutex) {
-			s.defaultWriteObject();
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedObject.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedObject.java
deleted file mode 100644
index d6554e5..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedObject.java
+++ /dev/null
@@ -1,490 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import org.eclipse.jpt.utility.Command;
-
-/**
- * This class provides synchronized access to an object of type <code>V</code>.
- * It also provides protocol for suspending a thread until the
- * value is set to <code>null</code> or a non-<code>null</code> value,
- * with optional time-outs.
- * 
- * @parm V the type of the synchronized object's value
- * @see ObjectReference
- */
-public class SynchronizedObject<V>
-	implements Cloneable, Serializable
-{
-	/** Backing value. */
-	private V value;
-
-	/** Object to synchronize on. */
-	private final Object mutex;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Create a synchronized object with the specified initial value
-	 * and mutex.
-	 */
-	public SynchronizedObject(V value, Object mutex) {
-		super();
-		this.value = value;
-		this.mutex = mutex;
-	}
-
-	/**
-	 * Create a synchronized object with the specified initial value.
-	 * The synchronized object itself will be the mutex.
-	 */
-	public SynchronizedObject(V value) {
-		super();
-		this.value = value;
-		this.mutex = this;
-	}
-
-	/**
-	 * Create a synchronized object with an initial value of <code>null</code>.
-	 * The synchronized object itself will be the mutex.
-	 */
-	public SynchronizedObject() {
-		this(null);
-	}
-
-
-	// ********** accessors **********
-
-	/**
-	 * Return the current value.
-	 */
-	public V getValue() {
-		synchronized (this.mutex) {
-			return this.value;
-		}
-	}
-
-	/**
-	 * Return whether the current value is equal to the specified value.
-	 */
-	public boolean valueEquals(V v) {
-		synchronized (this.mutex) {
-			return Tools.valuesAreEqual(this.value, v);
-		}
-	}
-
-	/**
-	 * Return whether the current value is not equal to the specified value.
-	 */
-	public boolean valueNotEqual(V v) {
-		synchronized (this.mutex) {
-			return Tools.valuesAreDifferent(this.value, v);
-		}
-	}
-
-	/**
-	 * Return whether the current value is <code>null</code>.
-	 */
-	public boolean isNull() {
-		synchronized (this.mutex) {
-			return this.value == null;
-		}
-	}
-
-	/**
-	 * Return whether the current value is not <code>null</code>.
-	 */
-	public boolean isNotNull() {
-		synchronized (this.mutex) {
-			return this.value != null;
-		}
-	}
-
-	/**
-	 * Set the value. If the value changes, all waiting
-	 * threads are notified. Return the previous value.
-	 */
-	public V setValue(V value) {
-		synchronized (this.mutex) {
-			return this.setValue_(value);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private V setValue_(V v) {
-		V old = this.value;
-		if (this.value != v) {
-			this.value = v;
-			this.mutex.notifyAll();
-		}
-		return old;
-	}
-
-	/**
-	 * Set the value to <code>null</code>. If the value changes, all waiting
-	 * threads are notified. Return the previous value.
-	 */
-	public V setNull() {
-		return this.setValue(null);
-	}
-
-	/**
-	 * If the current value is the specified expected value, set it to the
-	 * specified new value. Return the previous value.
-	 */
-	public V compareAndSwap(V expectedValue, V newValue) {
-		synchronized (this.mutex) {
-			return this.compareAndSwap_(expectedValue, newValue);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private V compareAndSwap_(V expectedValue, V newValue) {
-		return Tools.valuesAreEqual(this.value, expectedValue) ? this.setValue_(newValue) : this.value;
-	}
-
-	/**
-	 * Return the object the synchronized object locks on while performing
-	 * its operations.
-	 */
-	public Object getMutex() {
-		return this.mutex;
-	}
-
-
-	// ********** indefinite waits **********
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to the specified value. If the value is already the
-	 * specified value, return immediately.
-	 */
-	public void waitUntilValueIs(V v) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilValueIs_(v);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void waitUntilValueIs_(V v) throws InterruptedException {
-		while (Tools.valuesAreDifferent(this.value, v)) {
-			this.mutex.wait();
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to something other than the specified value. If the
-	 * value is already <em>not</em> the specified value,
-	 * return immediately.
-	 */
-	public void waitUntilValueIsNot(V v) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilValueIsNot_(v);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void waitUntilValueIsNot_(V v) throws InterruptedException {
-		while (Tools.valuesAreEqual(this.value, v)) {
-			this.mutex.wait();
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to <code>null</code>.
-	 * If the value is already <code>null</code>, return immediately.
-	 */
-	public void waitUntilNull() throws InterruptedException {
-		this.waitUntilValueIs(null);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to something other than <code>null</code>.
-	 * If the value is already <em>not</em> <code>null</code>,
-	 * return immediately.
-	 */
-	public void waitUntilNotNull() throws InterruptedException {
-		this.waitUntilValueIsNot(null);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to
-	 * something other than the specified value, then change
-	 * it back to the specified value and continue executing.
-	 * If the value is already <em>not</em> the specified value, set
-	 * the value immediately.
-	 * Return the previous value.
-	 */
-	public V waitToSetValue(V v) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilValueIsNot_(v);
-			return this.setValue_(v);
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to
-	 * something other than <code>null</code>, then change it
-	 * back to <code>null</code> and continue executing.
-	 * If the value is already <em>not</em> <code>null</code>,
-	 * set the value to <code>null</code> immediately.
-	 * Return the previous value.
-	 */
-	public V waitToSetNull() throws InterruptedException {
-		return this.waitToSetValue(null);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to
-	 * the specified expected value, then change it
-	 * to the specified new value and continue executing.
-	 * If the value is already the specified expected value,
-	 * set the value to the specified new value immediately.
-	 * Return the previous value.
-	 */
-	public V waitToSwap(V expectedValue, V newValue) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilValueIs_(expectedValue);
-			return this.setValue_(newValue);
-		}
-	}
-
-
-	// ********** timed waits **********
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to the specified value or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the specified value was achieved; return <code>false</code>
-	 * if a time-out occurred.
-	 * If the value is already the specified value, return true immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilValueIs(V v, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			return this.waitUntilValueIs_(v, timeout);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private boolean waitUntilValueIs_(V v, long timeout) throws InterruptedException {
-		if (timeout == 0L) {
-			this.waitUntilValueIs_(v);  // wait indefinitely until notified
-			return true;  // if it ever comes back, the condition was met
-		}
-
-		long stop = System.currentTimeMillis() + timeout;
-		long remaining = timeout;
-		while (Tools.valuesAreDifferent(this.value, v) && (remaining > 0L)) {
-			this.mutex.wait(remaining);
-			remaining = stop - System.currentTimeMillis();
-		}
-		return (this.value == v);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to something
-	 * other than the specified value or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the specified value was removed; return <code>false</code> if a
-	 * time-out occurred. If the value is already <em>not</em> the specified
-	 * value, return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilValueIsNot(V v, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			return this.waitUntilValueIsNot_(v, timeout);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private boolean waitUntilValueIsNot_(V v, long timeout) throws InterruptedException {
-		if (timeout == 0L) {
-			this.waitUntilValueIsNot_(v);	// wait indefinitely until notified
-			return true;	// if it ever comes back, the condition was met
-		}
-
-		long stop = System.currentTimeMillis() + timeout;
-		long remaining = timeout;
-		while (Tools.valuesAreEqual(this.value, v) && (remaining > 0L)) {
-			this.mutex.wait(remaining);
-			remaining = stop - System.currentTimeMillis();
-		}
-		return (this.value != v);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to <code>null</code> or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the specified value was achieved; return <code>false</code>
-	 * if a time-out occurred. If the value is already <code>null</code>,
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilNull(long timeout) throws InterruptedException {
-		return this.waitUntilValueIs(null, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes
-	 * to something other than <code>null</code> or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the specified value was achieved; return <code>false</code>
-	 * if a time-out occurred. If the value is already <em>not</em>
-	 * <code>null</code>, return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilNotNull(long timeout) throws InterruptedException {
-		return this.waitUntilValueIsNot(null, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to
-	 * something other than the specified value, then change
-	 * it back to the specified value and continue executing.
-	 * If the value does not change to something other than the
-	 * specified value before the time-out, simply continue executing
-	 * without changing the value.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value was set to the specified value; return <code>false</code>
-	 * if a time-out occurred.
-	 * If the value is already something other than the specified value, set
-	 * the value immediately and return <code>true</code>.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitToSetValue(V v, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			boolean success = this.waitUntilValueIsNot_(v, timeout);
-			if (success) {
-				this.setValue_(v);
-			}
-			return success;
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to something
-	 * other than <code>null</code>, then change it back to <code>null</code>
-	 * and continue executing. If the value does not change to something
-	 * other than <code>null</code> before the time-out, simply continue
-	 * executing without changing the value.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value was set to <code>null</code>; return <code>false</code>
-	 * if a time-out occurred.
-	 * If the value is already something other than <code>null</code>, set
-	 * the value to <code>null</code> immediately and return <code>true</code>.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitToSetNull(long timeout) throws InterruptedException {
-		return this.waitToSetValue(null, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the value changes to
-	 * the specified expected value, then change it
-	 * to the specified new value and continue executing.
-	 * If the value does not change to the specified expected value
-	 * before the time-out, simply continue executing without changing
-	 * the value.
-	 * The time-out is specified in milliseconds. Return <code>true</code>
-	 * if the value was set to the specified new value; return
-	 * <code>false</code> if a time-out occurred.
-	 * If the value is already the specified expected value,
-	 * set the value to the specified new value immediately.
-	 * Return the previous value.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitToSwap(V expectedValue, V newValue, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			boolean success = this.waitUntilValueIs_(expectedValue, timeout);
-			if (success) {
-				this.setValue_(newValue);
-			}
-			return success;
-		}
-	}
-
-
-	// ********** synchronized behavior **********
-
-	/**
-	 * If current thread is not interrupted, execute the specified command 
-	 * with the mutex locked. This is useful for initializing the value from another
-	 * thread.
-	 */
-	public void execute(Command command) throws InterruptedException {
-		if (Thread.interrupted()) {
-			throw new InterruptedException();
-		}
-		synchronized (this.mutex) {
-			command.execute();
-		}
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public SynchronizedObject<V> clone() {
-		try {
-			synchronized (this.mutex) {
-				@SuppressWarnings("unchecked")
-				SynchronizedObject<V> clone = (SynchronizedObject<V>) super.clone();
-				return clone;
-			}
-		} catch (CloneNotSupportedException ex) {
-			throw new InternalError();
-		}
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		return (obj instanceof SynchronizedObject<?>) &&
-			Tools.valuesAreEqual(this.getValue(), ((SynchronizedObject<?>) obj).getValue());
-	}
-
-	@Override
-	public int hashCode() {
-		Object v = this.getValue();
-		return (v == null) ? 0 : v.hashCode();
-	}
-
-	@Override
-	public String toString() {
-		return '[' + String.valueOf(this.getValue()) + ']';
-	}
-
-	private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {
-		synchronized (this.mutex) {
-			s.defaultWriteObject();
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedQueue.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedQueue.java
deleted file mode 100644
index c35a4aa..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedQueue.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.Command;
-
-/**
- * Thread-safe implementation of the {@link Queue} interface.
- * This also provides protocol for suspending a thread until the
- * queue is empty or not empty, with optional time-outs.
- */
-public class SynchronizedQueue<E>
-	implements Queue<E>, Serializable
-{
-	/** Backing queue. */
-	private final Queue<E> queue;
-
-	/** Object to synchronize on. */
-	private final Object mutex;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a synchronized queue that wraps the
-	 * specified queue and locks on the specified mutex.
-	 */
-	public SynchronizedQueue(Queue<E> queue, Object mutex) {
-		super();
-		if (queue == null) {
-			throw new NullPointerException();
-		}
-		this.queue = queue;
-		this.mutex = mutex;
-	}
-
-	/**
-	 * Construct a synchronized queue that wraps the
-	 * specified queue and locks on itself.
-	 */
-	public SynchronizedQueue(Queue<E> queue) {
-		super();
-		if (queue == null) {
-			throw new NullPointerException();
-		}
-		this.queue = queue;
-		this.mutex = this;
-	}
-
-	/**
-	 * Construct an empty synchronized queue that locks on the specified mutex.
-	 */
-	public SynchronizedQueue(Object mutex) {
-		this(new SimpleQueue<E>(), mutex);
-	}
-
-	/**
-	 * Construct an empty synchronized queue that locks on itself.
-	 */
-	public SynchronizedQueue() {
-		this(new SimpleQueue<E>());
-	}
-
-
-	// ********** Queue implementation **********
-
-	public void enqueue(E element) {
-		synchronized (this.mutex) {
-			this.enqueue_(element);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void enqueue_(E element) {
-		this.queue.enqueue(element);
-		this.mutex.notifyAll();
-	}
-
-	public E dequeue() {
-		synchronized (this.mutex) {
-			return this.dequeue_();
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private E dequeue_() {
-		E element = this.queue.dequeue();
-		this.mutex.notifyAll();
-		return element;
-	}
-
-	public E peek() {
-		synchronized (this.mutex) {
-			return this.queue.peek();
-		}
-	}
-
-	public boolean isEmpty() {
-		synchronized (this.mutex) {
-			return this.queue.isEmpty();
-		}
-	}
-
-
-	// ********** indefinite waits **********
-
-	/**
-	 * Suspend the current thread until the queue's empty status changes
-	 * to the specified value.
-	 */
-	public void waitUntilEmptyIs(boolean empty) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilEmptyIs_(empty);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void waitUntilEmptyIs_(boolean empty) throws InterruptedException {
-		while (this.queue.isEmpty() != empty) {
-			this.mutex.wait();
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the queue is empty.
-	 */
-	public void waitUntilEmpty() throws InterruptedException {
-		this.waitUntilEmptyIs(true);
-	}
-
-	/**
-	 * Suspend the current thread until the queue has something on it.
-	 */
-	public void waitUntilNotEmpty() throws InterruptedException {
-		this.waitUntilEmptyIs(false);
-	}
-
-	/**
-	 * Suspend the current thread until the queue is empty,
-	 * then "enqueue" the specified item to the tail of the queue
-	 * and continue executing.
-	 */
-	public void waitToEnqueue(E element) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilEmptyIs_(true);
-			this.enqueue_(element);
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the queue has something on it,
-	 * then "dequeue" an item from the head of the queue and return it.
-	 */
-	public Object waitToDequeue() throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilEmptyIs_(false);
-			return this.dequeue_();
-		}
-	}
-
-
-	// ********** timed waits **********
-
-	/**
-	 * Suspend the current thread until the queue's empty status changes
-	 * to the specified value or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code> if the specified
-	 * empty status was achieved; return <code>false</code> if a time-out occurred.
-	 * If the queue's empty status is already the specified value,
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilEmptyIs(boolean empty, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			return this.waitUntilEmptyIs_(empty, timeout);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private boolean waitUntilEmptyIs_(boolean empty, long timeout) throws InterruptedException {
-		if (timeout == 0L) {
-			this.waitUntilEmptyIs_(empty);	// wait indefinitely until notified
-			return true;	// if it ever comes back, the condition was met
-		}
-
-		long stop = System.currentTimeMillis() + timeout;
-		long remaining = timeout;
-		while ((this.queue.isEmpty() != empty) && (remaining > 0L)) {
-			this.mutex.wait(remaining);
-			remaining = stop - System.currentTimeMillis();
-		}
-		return (this.queue.isEmpty() == empty);
-	}
-
-	/**
-	 * Suspend the current thread until the queue is empty
-	 * or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code> if
-	 * the queue is empty; return <code>false</code> if a time-out occurred.
-	 * If the queue is already empty, return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilEmpty(long timeout) throws InterruptedException {
-		return this.waitUntilEmptyIs(true, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the queue has something on it.
-	 * or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code> if
-	 * the queue is not empty; return <code>false</code> if a time-out occurred.
-	 * If the queue already has something on it, return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilNotEmpty(long timeout) throws InterruptedException {
-		return this.waitUntilEmptyIs(false, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the queue is empty,
-	 * then "enqueue" the specified item to the tail of the queue
-	 * and continue executing. If the queue is not emptied out
-	 * before the time-out, simply continue executing without
-	 * "enqueueing" the item.
-	 * The time-out is specified in milliseconds. Return <code>true</code> if the
-	 * item was enqueued; return <code>false</code> if a time-out occurred.
-	 * If the queue is already empty, "enqueue" the specified item and
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitToEnqueue(E element, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			boolean success = this.waitUntilEmptyIs_(true, timeout);
-			if (success) {
-				this.enqueue_(element);
-			}
-			return success;
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the queue has something on it,
-	 * then "dequeue" an item from the head of the queue and return it.
-	 * If the queue is empty and nothing is "enqueued" on to it before the
-	 * time-out, throw a no such element exception.
-	 * The time-out is specified in milliseconds.
-	 * If the queue is not empty, "dequeue" an item and
-	 * return it immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public Object waitToDequeue(long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			boolean success = this.waitUntilEmptyIs_(false, timeout);
-			if (success) {
-				return this.dequeue_();
-			}
-			throw new NoSuchElementException();
-		}
-	}
-
-
-	// ********** synchronized behavior **********
-
-	/**
-	 * If the current thread is not interrupted, execute the specified command 
-	 * with the mutex locked. This is useful for initializing the queue in another
-	 * thread.
-	 */
-	public void execute(Command command) throws InterruptedException {
-		if (Thread.interrupted()) {
-			throw new InterruptedException();
-		}
-		synchronized (this.mutex) {
-			command.execute();
-		}
-	}
-
-
-	// ********** additional public protocol **********
-
-	/**
-	 * "Drain" all the current items from the queue into specified queue.
-	 */
-	public void drainTo(Queue<E> q) {
-		synchronized (this.mutex) {
-			this.drainTo_(q);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void drainTo_(Queue<E> q) {
-		boolean changed = false;
-		while ( ! this.queue.isEmpty()) {
-			q.enqueue(this.queue.dequeue());
-			changed = true;
-		}
-		if (changed) {
-			this.mutex.notifyAll();
-		}
-	}
-
-	/**
-	 * Return the object the queue locks on while performing
-	 * its operations.
-	 */
-	public Object getMutex() {
-		return this.mutex;
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public String toString() {
-		synchronized (this.mutex) {
-			return '[' + this.queue.toString() + ']';
-		}
-	}
-
-	private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {
-		synchronized (this.mutex) {
-			s.defaultWriteObject();
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedStack.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedStack.java
deleted file mode 100644
index dc0a4dc..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SynchronizedStack.java
+++ /dev/null
@@ -1,325 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-import java.util.EmptyStackException;
-
-import org.eclipse.jpt.utility.Command;
-
-/**
- * Thread-safe implementation of the {@link Stack} interface.
- * This also provides protocol for suspending a thread until the
- * stack is empty or not empty, with optional time-outs.
- */
-public class SynchronizedStack<E>
-	implements Stack<E>, Serializable
-{
-	/** Backing stack. */
-	private final Stack<E> stack;
-
-	/** Object to synchronize on. */
-	private final Object mutex;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a synchronized stack that wraps the
-	 * specified stack and locks on the specified mutex.
-	 */
-	public SynchronizedStack(Stack<E> stack, Object mutex) {
-		super();
-		if (stack == null) {
-			throw new NullPointerException();
-		}
-		this.stack = stack;
-		this.mutex = mutex;
-	}
-
-	/**
-	 * Construct a synchronized stack that wraps the
-	 * specified stack and locks on itself.
-	 */
-	public SynchronizedStack(Stack<E> stack) {
-		super();
-		if (stack == null) {
-			throw new NullPointerException();
-		}
-		this.stack = stack;
-		this.mutex = this;
-	}
-
-	/**
-	 * Construct an empty synchronized stack that locks on the specified mutex.
-	 */
-	public SynchronizedStack(Object mutex) {
-		this(new SimpleStack<E>(), mutex);
-	}
-
-	/**
-	 * Construct an empty synchronized stack that locks on itself.
-	 */
-	public SynchronizedStack() {
-		this(new SimpleStack<E>());
-	}
-
-
-	// ********** Stack implementation **********
-
-	public void push(E element) {
-		synchronized (this.mutex) {
-			this.push_(element);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void push_(E element) {
-		this.stack.push(element);
-		this.mutex.notifyAll();
-	}
-
-	public E pop() {
-		synchronized (this.mutex) {
-			return this.pop_();
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private E pop_() {
-		E o = this.stack.pop();
-		this.mutex.notifyAll();
-		return o;
-	}
-
-	public E peek() {
-		synchronized (this.mutex) {
-			return this.stack.peek();
-		}
-	}
-
-	public boolean isEmpty() {
-		synchronized (this.mutex) {
-			return this.stack.isEmpty();
-		}
-	}
-
-
-	// ********** indefinite waits **********
-
-	/**
-	 * Suspend the current thread until the stack's empty status changes
-	 * to the specified value.
-	 */
-	public void waitUntilEmptyIs(boolean empty) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilEmptyIs_(empty);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private void waitUntilEmptyIs_(boolean empty) throws InterruptedException {
-		while (this.stack.isEmpty() != empty) {
-			this.mutex.wait();
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the stack is empty.
-	 */
-	public void waitUntilEmpty() throws InterruptedException {
-		this.waitUntilEmptyIs(true);
-	}
-
-	/**
-	 * Suspend the current thread until the stack has something on it.
-	 */
-	public void waitUntilNotEmpty() throws InterruptedException {
-		this.waitUntilEmptyIs(false);
-	}
-
-	/**
-	 * Suspend the current thread until the stack is empty,
-	 * then "push" the specified item on to the top of the stack
-	 * and continue executing.
-	 */
-	public void waitToPush(E element) throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilEmptyIs_(true);
-			this.push_(element);
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the stack has something on it,
-	 * then "pop" an item from the top of the stack and return it.
-	 */
-	public Object waitToPop() throws InterruptedException {
-		synchronized (this.mutex) {
-			this.waitUntilEmptyIs_(false);
-			return this.pop_();
-		}
-	}
-
-
-	// ********** timed waits **********
-
-	/**
-	 * Suspend the current thread until the stack's empty status changes
-	 * to the specified value or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code> if the specified
-	 * empty status was achieved; return <code>false</code> if a time-out occurred.
-	 * If the stack's empty status is already the specified value,
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilEmptyIs(boolean empty, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			return this.waitUntilEmptyIs_(empty, timeout);
-		}
-	}
-
-	/**
-	 * Pre-condition: synchronized
-	 */
-	private boolean waitUntilEmptyIs_(boolean empty, long timeout) throws InterruptedException {
-		if (timeout == 0L) {
-			this.waitUntilEmptyIs_(empty);	// wait indefinitely until notified
-			return true;	// if it ever comes back, the condition was met
-		}
-
-		long stop = System.currentTimeMillis() + timeout;
-		long remaining = timeout;
-		while ((this.stack.isEmpty() != empty) && (remaining > 0L)) {
-			this.mutex.wait(remaining);
-			remaining = stop - System.currentTimeMillis();
-		}
-		return (this.stack.isEmpty() == empty);
-	}
-
-	/**
-	 * Suspend the current thread until the stack is empty
-	 * or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code> if
-	 * the stack is empty; return <code>false</code> if a time-out occurred.
-	 * If the stack is already empty, return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilEmpty(long timeout) throws InterruptedException {
-		return this.waitUntilEmptyIs(true, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the stack has something on it.
-	 * or the specified time-out occurs.
-	 * The time-out is specified in milliseconds. Return <code>true</code> if
-	 * the stack is not empty; return <code>false</code> if a time-out occurred.
-	 * If the stack already has something on it, return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitUntilNotEmpty(long timeout) throws InterruptedException {
-		return this.waitUntilEmptyIs(false, timeout);
-	}
-
-	/**
-	 * Suspend the current thread until the stack is empty,
-	 * then "push" the specified item on to the top of the stack
-	 * and continue executing. If the stack is not emptied out
-	 * before the time-out, simply continue executing without
-	 * "pushing" the item.
-	 * The time-out is specified in milliseconds. Return <code>true</code> if the
-	 * item was pushed; return <code>false</code> if a time-out occurred.
-	 * If the stack is already empty, "push" the specified item and
-	 * return <code>true</code> immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public boolean waitToPush(E element, long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			boolean success = this.waitUntilEmptyIs_(true, timeout);
-			if (success) {
-				this.push_(element);
-			}
-			return success;
-		}
-	}
-
-	/**
-	 * Suspend the current thread until the stack has something on it,
-	 * then "pop" an item from the top of the stack and return it.
-	 * If the stack is empty and nothing is "pushed" on to it before the
-	 * time-out, throw an empty stack exception.
-	 * The time-out is specified in milliseconds.
-	 * If the stack is not empty, "pop" an item and
-	 * return it immediately.
-	 * If the time-out is zero, wait indefinitely.
-	 */
-	public Object waitToPop(long timeout) throws InterruptedException {
-		synchronized (this.mutex) {
-			boolean success = this.waitUntilEmptyIs_(false, timeout);
-			if (success) {
-				return this.pop_();
-			}
-			throw new EmptyStackException();
-		}
-	}
-
-
-	// ********** synchronized behavior **********
-
-	/**
-	 * If the current thread is not interrupted, execute the specified command 
-	 * with the mutex locked. This is useful for initializing the stack in another
-	 * thread.
-	 */
-	public void execute(Command command) throws InterruptedException {
-		if (Thread.interrupted()) {
-			throw new InterruptedException();
-		}
-		synchronized (this.mutex) {
-			command.execute();
-		}
-	}
-
-
-	// ********** additional public protocol **********
-
-	/**
-	 * Return the object the stack locks on while performing
-	 * its operations.
-	 */
-	public Object getMutex() {
-		return this.mutex;
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public String toString() {
-		synchronized (this.mutex) {
-			return '[' + this.stack.toString() + ']';
-		}
-	}
-
-	private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {
-		synchronized (this.mutex) {
-			s.defaultWriteObject();
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ThreadLocalCommand.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ThreadLocalCommand.java
deleted file mode 100644
index c12038e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ThreadLocalCommand.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import org.eclipse.jpt.utility.Command;
-
-/**
- * This implementation of the Command interface allows the client to
- * specify a different Command for each thread.
- */
-public class ThreadLocalCommand implements Command {
-	protected final ThreadLocal<Command> threadLocal;
-	protected final Command defaultCommand;
-
-	/**
-	 * The default command does nothing.
-	 */
-	public ThreadLocalCommand() {
-		this(Command.Null.instance());
-	}
-
-	public ThreadLocalCommand(Command defaultCommand) {
-		super();
-		this.defaultCommand = defaultCommand;
-		this.threadLocal = this.buildThreadLocal();
-	}
-
-	protected ThreadLocal<Command> buildThreadLocal() {
-		return new ThreadLocal<Command>();
-	}
-
-	public void execute() {
-		this.get().execute();
-	}
-
-	protected Command get() {
-		Command command = this.threadLocal.get();
-		return (command != null) ? command : this.defaultCommand;
-	}
-
-	/**
-	 * Set the current thread's command to the specified value.
-	 */
-	public void set(Command command) {
-		this.threadLocal.set(command);
-	}
-
-	/**
-	 * Return the string representation of the current thread's command.
-	 */
-	@Override
-	public String toString() {
-		return this.get().toString();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ThreadLocalCommandExecutor.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ThreadLocalCommandExecutor.java
deleted file mode 100644
index 7edfa1f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ThreadLocalCommandExecutor.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.CommandExecutor;
-
-/**
- * This implementation of the CommandExecutor interface allows the client to
- * specify a different Command Executor for each thread.
- */
-public class ThreadLocalCommandExecutor implements CommandExecutor {
-	protected final ThreadLocal<CommandExecutor> threadLocal;
-	protected final CommandExecutor defaultCommandExecutor;
-
-	/**
-	 * The default command executor simply executes the command directly.
-	 */
-	public ThreadLocalCommandExecutor() {
-		this(CommandExecutor.Default.instance());
-	}
-
-	public ThreadLocalCommandExecutor(CommandExecutor defaultCommandExecutor) {
-		super();
-		this.defaultCommandExecutor = defaultCommandExecutor;
-		this.threadLocal = this.buildThreadLocal();
-	}
-
-	protected ThreadLocal<CommandExecutor> buildThreadLocal() {
-		return new ThreadLocal<CommandExecutor>();
-	}
-
-	public void execute(Command command) {
-		this.getThreadLocalCommandExecutor().execute(command);
-	}
-
-	protected CommandExecutor getThreadLocalCommandExecutor() {
-		CommandExecutor ce = this.threadLocal.get();
-		return (ce != null) ? ce : this.defaultCommandExecutor;
-	}
-
-	/**
-	 * Set the current thread's command executor to the specified value.
-	 */
-	public void set(CommandExecutor commandExecutor) {
-		this.threadLocal.set(commandExecutor);
-	}
-
-	/**
-	 * Return the string representation of the current thread's command
-	 * executor.
-	 */
-	@Override
-	public String toString() {
-		return this.getThreadLocalCommandExecutor().toString();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Tools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Tools.java
deleted file mode 100644
index 39378dc..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Tools.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-/**
- * Various utility methods.
- */
-@SuppressWarnings("nls")
-public final class Tools {
-
-	// ********** object comparison **********
-
-	/**
-	 * Return whether the specified values are equal, with the appropriate null checks.
-	 */
-	public static boolean valuesAreEqual(Object value1, Object value2) {
-		return (value1 == null) ?
-				(value2 == null) :
-				((value2 != null) && value1.equals(value2));
-	}
-
-	/**
-	 * Return whether the specified values are different, with the appropriate null checks.
-	 */
-	public static boolean valuesAreDifferent(Object value1, Object value2) {
-		return ! valuesAreEqual(value1, value2);
-	}
-
-
-	// ********** System properties **********
-
-	/**
-	 * Return whether the current JVM is Sun's.
-	 */
-	public static boolean jvmIsSun() {
-		return jvmIs("Sun");
-	}
-
-	/**
-	 * Return whether the current JVM is IBM's.
-	 */
-	public static boolean jvmIsIBM() {
-		return jvmIs("IBM");
-	}
-
-	private static boolean jvmIs(String jvmVendorName) {
-		return System.getProperty("java.vendor").startsWith(jvmVendorName);
-	}
-
-	/**
-	 * Return whether the current operating system is Microsoft Windows.
-	 */
-	public static boolean osIsWindows() {
-		return osIs("Windows");
-	}
-
-	/**
-	 * Return whether the current operating system is Linux.
-	 */
-	public static boolean osIsLinux() {
-		return osIs("Linux");
-	}
-
-	private static boolean osIs(String osName) {
-		return System.getProperty("os.name").indexOf(osName) != -1;
-	}
-
-
-	// ********** constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private Tools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Transformer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Transformer.java
deleted file mode 100644
index d73844e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Transformer.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.Serializable;
-
-/**
- * Used by various "pluggable" classes to transform objects.
- * Transform an object of type T1 to an object of type T2.
- */
-public interface Transformer<T1, T2> {
-
-	/**
-	 * Return the transformed object.
-	 * The semantics of "transform" is determined by the
-	 * contract between the client and the server.
-	 */
-	T2 transform(T1 o);
-
-
-	/**
-	 * A "null" transformer will perform no transformation at all;
-	 * it will simply return the object "untransformed".
-	 */
-	final class Null<S1, S2> implements Transformer<S1, S2>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final Transformer INSTANCE = new Null();
-		@SuppressWarnings("unchecked")
-		public static <R1, R2> Transformer<R1, R2> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Null() {
-			super();
-		}
-		// simply return the object, unchanged
-		@SuppressWarnings("unchecked")
-		public S2 transform(S1 o) {
-			return (S2) o;
-		}
-		@Override
-		public String toString() {
-			return "Transformer.Null"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-	/**
-	 * A "disabled" transformer will throw an exception if
-	 * {@link #transform(Object)} is called. This is useful in situations
-	 * where a transformer is optional and the default transformer should
-	 * not be used.
-	 */
-	final class Disabled<S1, S2> implements Transformer<S1, S2>, Serializable {
-		@SuppressWarnings("rawtypes")
-		public static final Transformer INSTANCE = new Disabled();
-		@SuppressWarnings("unchecked")
-		public static <R1, R2> Transformer<R1, R2> instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Disabled() {
-			super();
-		}
-		// throw an exception
-		public S2 transform(S1 o) {
-			throw new UnsupportedOperationException();
-		}
-		@Override
-		public String toString() {
-			return "Transformer.Disabled"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/XMLStringEncoder.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/XMLStringEncoder.java
deleted file mode 100644
index f6b3cd4..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/XMLStringEncoder.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-
-/**
- * This encoder will replace any of a specified set of characters with an XML
- * "character reference": '/' => "&#x2f;"
- */
-public final class XMLStringEncoder {
-
-	/** The set of characters to be converted into XML character references. */
-	private final char[] chars;
-
-	/** Cache the value of the highest character in the set above. */
-	private final char maxChar;
-
-
-	// ********** constructors/initialization **********
-
-	/**
-	 * Construct an encoder that converts the specified set of characters
-	 * into XML character references.
-	 */
-	public XMLStringEncoder(char[] chars) {
-		super();
-		if (chars == null) {
-			throw new NullPointerException();
-		}
-		// the ampersand must be included since it is the escape character
-		if (ArrayTools.contains(chars, '&')) {
-			this.chars = chars;
-		} else {
-			this.chars = ArrayTools.add(chars, '&');
-		}
-		this.maxChar = this.calculateMaxInvalidFileNameChar();
-	}
-
-	/**
-	 * Calculate the maximum value of the set of characters to be converted
-	 * into XML character references. This will be used to short-circuit the
-	 * search for a character in the set.
-	 * @see #charIsToBeEncoded(char)
-	 */
-	private char calculateMaxInvalidFileNameChar() {
-		char[] localChars = this.chars;
-		char max = 0;
-		for (int i = localChars.length; i-- > 0; ) {
-			char c = localChars[i];
-			if (max < c) {
-				max = c;
-			}
-		}
-		return max;
-	}
-
-
-	// ********** API **********
-
-	/**
-	 * Return the specified string with any characters in the set
-	 * replaced with XML character references.
-	 */
-	public String encode(String s) {
-		int len = s.length();
-		// allow for a few encoded characters
-		StringBuilder sb = new StringBuilder(len + 20);
-		for (int i = 0; i < len; i++) {
-			this.appendCharacterTo(s.charAt(i), sb);
-		}
-		return sb.toString();
-	}
-
-	/**
-	 * Return the specified string with any XML character references
-	 * replaced by the characters themselves.
-	 */
-	public String decode(String s) {
-		StringBuilder sb = new StringBuilder(s.length());
-		StringBuilder temp = new StringBuilder();	// performance tweak
-		this.decodeTo(new StringReader(s), sb, temp);
-		return sb.toString();
-	}
-
-
-	// ********** internal methods **********
-
-	/**
-	 * Append the specified character to the string buffer,
-	 * converting it to an XML character reference if necessary.
-	 */
-	private void appendCharacterTo(char c, StringBuilder sb) {
-		if (this.charIsToBeEncoded(c)) {
-			this.appendCharacterReferenceTo(c, sb);
-		} else {
-			sb.append(c);
-		}
-	}
-
-	/**
-	 * Return whether the specified character is one of the characters
-	 * to be converted to XML character references.
-	 */
-	private boolean charIsToBeEncoded(char c) {
-		return (c <= this.maxChar) && ArrayTools.contains(this.chars, c);
-	}
-
-	/**
-	 * Append the specified character's XML character reference to the
-	 * specified string buffer (e.g. '/' => "&#x2f;").
-	 */
-	private void appendCharacterReferenceTo(char c, StringBuilder sb) {
-		sb.append("&#x"); //$NON-NLS-1$
-		sb.append(Integer.toString(c, 16));
-		sb.append(';');
-	}
-
-	private void decodeTo(Reader reader, StringBuilder sb, StringBuilder temp) {
-		try {
-			this.decodeTo_(reader, sb, temp);
-		} catch (IOException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	private void decodeTo_(Reader reader, StringBuilder sb, StringBuilder temp) throws IOException {
-		int c = reader.read();
-		while (c != -1) {
-			if (c == '&') {
-				this.decodeCharacterReferenceTo(reader, sb, temp);
-			} else {
-				sb.append((char) c);
-			}
-			c = reader.read();
-		}
-		reader.close();
-	}
-
-	private void decodeCharacterReferenceTo(Reader reader, StringBuilder sb, StringBuilder temp) throws IOException {
-		int c = reader.read();
-		this.checkChar(c, '#');
-		c = reader.read();
-		this.checkChar(c, 'x');
-
-		temp.setLength(0);  // re-use temp
-		c = reader.read();
-		while (c != ';') {
-			this.checkEndOfStream(c);
-			temp.append((char) c);
-			c = reader.read();
-		}
-		String charValue = temp.toString();
-		if (charValue.length() == 0) {
-			throw new IllegalStateException("missing numeric string"); //$NON-NLS-1$
-		}
-		sb.append((char) Integer.parseInt(charValue, 16));
-	}
-
-	private void checkChar(int c, int expected) {
-		this.checkEndOfStream(c);
-		if (c != expected) {
-			throw new IllegalStateException("expected '" + (char) expected + "', but encountered '" + (char) c + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-	}
-
-	private void checkEndOfStream(int c) {
-		if (c == -1) {
-			throw new IllegalStateException("unexpected end of string"); //$NON-NLS-1$
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/enumerations/EmptyEnumeration.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/enumerations/EmptyEnumeration.java
deleted file mode 100644
index df8f5fd..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/enumerations/EmptyEnumeration.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.enumerations;
-
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-/**
- * An <code>EmptyEnumeration</code> is just that.
- * 
- * @param <E> the type of elements returned by the enumeration
- */
-public final class EmptyEnumeration<E>
-	implements Enumeration<E>
-{
-
-	// singleton
-	@SuppressWarnings("rawtypes")
-	private static final EmptyEnumeration INSTANCE = new EmptyEnumeration();
-
-	/**
-	 * Return the singleton.
-	 */
-	@SuppressWarnings("unchecked")
-	public static <T> Enumeration<T> instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private EmptyEnumeration() {
-		super();
-	}
-
-	public boolean hasMoreElements() {
-		return false;
-	}
-
-	public E nextElement() {
-		throw new NoSuchElementException();
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getSimpleName();
-	}
-
-	private static final long serialVersionUID = 1L;
-	private Object readResolve() {
-		// replace this object with the singleton
-		return INSTANCE;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/enumerations/IteratorEnumeration.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/enumerations/IteratorEnumeration.java
deleted file mode 100644
index 3113dfe..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/enumerations/IteratorEnumeration.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.enumerations;
-
-import java.util.Enumeration;
-import java.util.Iterator;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * An <code>IteratorEnumeration</code> wraps an
- * {@link Iterator} so that it can be treated like an
- * {@link Enumeration}.
- * Hopefully we don't have much need for this....
- * 
- * @param <E> the type of elements returned by the enumeration
- */
-public class IteratorEnumeration<E>
-	implements Enumeration<E>
-{
-	private final Iterator<? extends E> iterator;
-
-	/**
-	 * Construct an enumeration that wraps the specified iterable.
-	 */
-	public IteratorEnumeration(Iterable<? extends E> iterable) {
-		this(iterable.iterator());
-	}
-
-	/**
-	 * Construct an enumeration that wraps the specified iterator.
-	 */
-	public IteratorEnumeration(Iterator<? extends E> iterator) {
-		super();
-		this.iterator = iterator;
-	}
-
-	public boolean hasMoreElements() {
-		return this.iterator.hasNext();
-	}
-
-	public E nextElement() {
-		return this.iterator.next();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterator);
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ArrayIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ArrayIterable.java
deleted file mode 100644
index 3916991..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ArrayIterable.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Arrays;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-
-/**
- * An <code>ArrayIterable</code> provides an {@link Iterable}
- * for an array of objects of type <code>E</code>.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see ArrayIterator
- * @see ArrayListIterable
- */
-public class ArrayIterable<E>
-	implements Iterable<E>
-{
-	final E[] array;
-	final int start;
-	final int length;
-
-	/**
-	 * Construct an iterable for the specified array.
-	 */
-	public ArrayIterable(E... array) {
-		this(array, 0, array.length);
-	}
-
-	/**
-	 * Construct an iterable for the specified array,
-	 * starting at the specified start index and continuing for
-	 * the rest of the array.
-	 */
-	public ArrayIterable(E[] array, int start) {
-		this(array, start, array.length - start);
-	}
-
-	/**
-	 * Construct an iterable for the specified array,
-	 * starting at the specified start index and continuing for
-	 * the specified length.
-	 */
-	public ArrayIterable(E[] array, int start, int length) {
-		super();
-		if ((start < 0) || (start > array.length)) {
-			throw new IllegalArgumentException("start: " + start); //$NON-NLS-1$
-		}
-		if ((length < 0) || (length > array.length - start)) {
-			throw new IllegalArgumentException("length: " + length); //$NON-NLS-1$
-		}
-		this.array = array;
-		this.start = start;
-		this.length = length;
-	}
-
-	public Iterator<E> iterator() {
-		return new ArrayIterator<E>(this.array, this.start, this.length);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, Arrays.toString(this.array));
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ArrayListIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ArrayListIterable.java
deleted file mode 100644
index 83a7ab7..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ArrayListIterable.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.iterators.ArrayListIterator;
-
-/**
- * An <code>ArrayListIterable</code> provides a {@link ListIterable}
- * for an array of objects of type <code>E</code>.
- * 
- * @param <E> the type of elements returned by the list iterable's list iterator
- * 
- * @see ArrayIterable
- * @see ArrayListIterator
- */
-public class ArrayListIterable<E>
-	extends ArrayIterable<E>
-	implements ListIterable<E>
-{
-	/**
-	 * Construct a list iterable for the specified array.
-	 */
-	public ArrayListIterable(E... array) {
-		this(array, 0, array.length);
-	}
-
-	/**
-	 * Construct a list iterable for the specified array,
-	 * starting at the specified start index and continuing for
-	 * the rest of the array.
-	 */
-	public ArrayListIterable(E[] array, int start) {
-		this(array, start, array.length - start);
-	}
-
-	/**
-	 * Construct a list iterable for the specified array,
-	 * starting at the specified start index and continuing for
-	 * the specified length.
-	 */
-	public ArrayListIterable(E[] array, int start, int length) {
-		super(array, start, length);
-	}
-
-	@Override
-	public ListIterator<E> iterator() {
-		return new ArrayListIterator<E>(this.array, this.start, this.length);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ChainIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ChainIterable.java
deleted file mode 100644
index ebd9fcb..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ChainIterable.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.ChainIterator;
-
-/**
- * A <code>ChainIterable</code> provides a pluggable {@link Iterable}
- * that loops over a chain of arbitrarily linked objects. The chain
- * should be null-terminated (i.e. a call to the {@link #nextLink(Object)}
- * method should return <code>null</code> when it is passed the last
- * link of the chain).
- * To use, supply a starting link and supply a {@link ChainIterator.Linker} or
- * subclass <code>ChainIterable</code> and override the
- * {@link #nextLink(Object)} method.
- * The starting link will be the first object returned by the iterable's iterator.
- * If the starting link is <code>null</code>, the iterable will be empty.
- * Note this iterable does not support <code>null</code> elements.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see ChainIterator
- */
-public class ChainIterable<E>
-	implements Iterable<E>
-{
-	private final E startLink;
-	private final ChainIterator.Linker<E> linker;
-
-
-	/**
-	 * Construct an iterable with the specified starting link
-	 * and a default linker that calls back to the iterable.
-	 * Use this constructor if you want to override the
-	 * {@link #nextLink(Object)} method instead of building
-	 * a {@link ChainIterator.Linker}.
-	 */
-	public ChainIterable(E startLink) {
-		super();
-		this.startLink = startLink;
-		this.linker = this.buildDefaultLinker();
-	}
-
-	/**
-	 * Construct an iterator with the specified starting link
-	 * and linker.
-	 */
-	public ChainIterable(E startLink, ChainIterator.Linker<E> linker) {
-		super();
-		this.startLink = startLink;
-		this.linker = linker;
-	}
-
-	protected ChainIterator.Linker<E> buildDefaultLinker() {
-		return new DefaultLinker();
-	}
-
-	public Iterator<E> iterator() {
-		return new ChainIterator<E>(this.startLink, this.linker);
-	}
-
-	/**
-	 * Return the next link in the chain; null if there are no more links.
-	 * <p>
-	 * This method can be overridden by a subclass as an alternative to
-	 * building a {@link ChainIterator.Linker}.
-	 */
-	protected E nextLink(@SuppressWarnings("unused") E currentLink) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.startLink);
-	}
-
-
-	//********** default linker **********
-
-	protected class DefaultLinker implements ChainIterator.Linker<E> {
-		public E nextLink(E currentLink) {
-			return ChainIterable.this.nextLink(currentLink);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/CloneIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/CloneIterable.java
deleted file mode 100644
index 1e2aadf..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/CloneIterable.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
-
-/**
- * Pull together remover state and behavior for subclasses.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see SnapshotCloneIterable
- * @see LiveCloneIterable
- */
-public abstract class CloneIterable<E>
-	implements Iterable<E>
-{
-	final CloneIterator.Remover<E> remover;
-
-
-	// ********** constructors **********
-
-	protected CloneIterable() {
-		super();
-		this.remover = this.buildDefaultRemover();
-	}
-
-	protected CloneIterable(CloneIterator.Remover<E> remover) {
-		super();
-		this.remover = remover;
-	}
-
-	protected CloneIterator.Remover<E> buildDefaultRemover() {
-		return new DefaultRemover();
-	}
-
-
-	// ********** default removal **********
-
-	/**
-	 * Remove the specified element from the original collection.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link CloneIterator.Remover}.
-	 */
-	protected void remove(@SuppressWarnings("unused") E element) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-
-	//********** default mutator **********
-
-	protected class DefaultRemover implements CloneIterator.Remover<E> {
-		public void remove(E element) {
-			CloneIterable.this.remove(element);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/CloneListIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/CloneListIterable.java
deleted file mode 100644
index 90748f7..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/CloneListIterable.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
-
-/**
- * Pull together mutator state and behavior for subclasses.
- * 
- * @param <E> the type of elements returned by the list iterable's list iterator
- * 
- * @see SnapshotCloneListIterable
- * @see LiveCloneListIterable
- */
-public abstract class CloneListIterable<E>
-	implements ListIterable<E>
-{
-	final CloneListIterator.Mutator<E> mutator;
-
-
-	// ********** constructors **********
-
-	protected CloneListIterable() {
-		super();
-		this.mutator = this.buildDefaultMutator();
-	}
-
-	protected CloneListIterable(CloneListIterator.Mutator<E> mutator) {
-		super();
-		this.mutator = mutator;
-	}
-
-	protected CloneListIterator.Mutator<E> buildDefaultMutator() {
-		return new DefaultMutator();
-	}
-
-
-	// ********** default mutations **********
-
-	/**
-	 * At the specified index, add the specified element to the original list.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link CloneListIterator.Mutator}.
-	 */
-	protected void add(@SuppressWarnings("unused") int index, @SuppressWarnings("unused") E element) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-	/**
-	 * Remove the element at the specified index from the original list.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link CloneListIterator.Mutator}.
-	 */
-	protected void remove(@SuppressWarnings("unused") int index) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-	/**
-	 * At the specified index, set the specified element in the original list.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link CloneListIterator.Mutator}.
-	 */
-	protected void set(@SuppressWarnings("unused") int index, @SuppressWarnings("unused") E element) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-
-	//********** default mutator **********
-
-	protected class DefaultMutator implements CloneListIterator.Mutator<E> {
-		public void add(int index, E element) {
-			CloneListIterable.this.add(index, element);
-		}
-		public void remove(int index) {
-			CloneListIterable.this.remove(index);
-		}
-		public void set(int index, E element) {
-			CloneListIterable.this.set(index, element);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/CompositeIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/CompositeIterable.java
deleted file mode 100644
index 88cd46f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/CompositeIterable.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-/**
- * A <code>CompositeIterable</code> wraps an {@link Iterable}
- * of {@link Iterable}s and makes them appear to be a single
- * {@link Iterable}.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see CompositeIterator
- * @see CompositeListIterable
- */
-public class CompositeIterable<E>
-	implements Iterable<E>
-{
-	private final Iterable<? extends Iterable<? extends E>> iterables;
-
-
-	/**
-	 * Construct an iterable with the specified collection of iterables.
-	 */
-	public CompositeIterable(Iterable<? extends Iterable<? extends E>> iterables) {
-		super();
-		this.iterables = iterables;
-	}
-
-	/**
-	 * Construct an iterable with the specified object prepended
-	 * to the specified iterable.
-	 */
-	@SuppressWarnings("unchecked")
-	public CompositeIterable(E object, Iterable<? extends E> iterable) {
-		this(new SingleElementIterable<E>(object), iterable);
-	}
-
-	/**
-	 * Construct an iterable with the specified object appended
-	 * to the specified iterable.
-	 */
-	@SuppressWarnings("unchecked")
-	public CompositeIterable(Iterable<? extends E> iterable, E object) {
-		this(iterable, new SingleElementIterable<E>(object));
-	}
-
-	/**
-	 * Construct an iterable with the specified iterables.
-	 */
-	public CompositeIterable(Iterable<? extends E>... iterables) {
-		this(new ArrayIterable<Iterable<? extends E>>(iterables));
-	}
-
-	/**
-	 * combined iterators
-	 */
-	public Iterator<E> iterator() {
-		return new CompositeIterator<E>(this.iterators());
-	}
-
-	/**
-	 * iterator of iterators
-	 */
-	protected Iterator<? extends Iterator<? extends E>> iterators() {
-		return new TransformationIterator<Iterable<? extends E>, Iterator<? extends E>>(this.iterables()) {
-			@Override
-			protected Iterator<? extends E> transform(Iterable<? extends E> next) {
-				return next.iterator();
-			}
-		};
-	}
-
-	/**
-	 * iterator of iterables
-	 */
-	protected Iterator<? extends Iterable<? extends E>> iterables() {
-		return this.iterables.iterator();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterables);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/CompositeListIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/CompositeListIterable.java
deleted file mode 100644
index 0d38e35..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/CompositeListIterable.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.CompositeListIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationListIterator;
-
-/**
- * A <code>CompositeListIterable</code> wraps a {@link ListIterable}
- * of {@link ListIterable}s and makes them appear to be a single
- * {@link ListIterable}.
- * 
- * @param <E> the type of elements returned by the list iterable's list iterator
- * 
- * @see CompositeListIterator
- * @see CompositeIterable
- * @see ReadOnlyCompositeListIterable
- */
-public class CompositeListIterable<E>
-	implements ListIterable<E>
-{
-	private final ListIterable<? extends ListIterable<E>> iterables;
-
-
-	/**
-	 * Construct a list iterable with the specified list of list iterables.
-	 */
-	public CompositeListIterable(List<ListIterable<E>> iterables) {
-		this(new ListListIterable<ListIterable<E>>(iterables));
-	}
-
-	/**
-	 * Construct a list iterable with the specified list of list iterables.
-	 */
-	public CompositeListIterable(ListIterable<? extends ListIterable<E>> iterables) {
-		super();
-		this.iterables = iterables;
-	}
-
-	/**
-	 * Construct a list iterable with the specified object prepended
-	 * to the specified list.
-	 */
-	public CompositeListIterable(E object, List<E> list) {
-		this(object, new ListListIterable<E>(list));
-	}
-
-	/**
-	 * Construct a list iterable with the specified object prepended
-	 * to the specified list iterable.
-	 */
-	@SuppressWarnings("unchecked")
-	public CompositeListIterable(E object, ListIterable<E> iterable) {
-		this(new SingleElementListIterable<E>(object), iterable);
-	}
-
-	/**
-	 * Construct a list iterable with the specified object appended
-	 * to the specified list.
-	 */
-	public CompositeListIterable(List<E> list, E object) {
-		this(new ListListIterable<E>(list), object);
-	}
-
-	/**
-	 * Construct a list iterable with the specified object appended
-	 * to the specified list iterable.
-	 */
-	@SuppressWarnings("unchecked")
-	public CompositeListIterable(ListIterable<E> iterable, E object) {
-		this(iterable, new SingleElementListIterable<E>(object));
-	}
-
-	/**
-	 * Construct a list iterable with the specified list iterables.
-	 */
-	public CompositeListIterable(ListIterable<E>... iterables) {
-		this(new ArrayListIterable<ListIterable<E>>(iterables));
-	}
-
-	/**
-	 * Construct a list iterable with the specified lists.
-	 */
-	public CompositeListIterable(List<E>... lists) {
-		this(new TransformationListIterable<List<E>, ListIterable<E>>(new ArrayListIterable<List<E>>(lists)) {
-			@Override
-			protected ListIterable<E> transform(List<E> list) {
-				return new ListListIterable<E>(list);
-			}
-		});
-	}
-
-	/**
-	 * combined list iterators
-	 */
-	public ListIterator<E> iterator() {
-		return new CompositeListIterator<E>(this.iterators());
-	}
-
-	/**
-	 * list iterator of list iterators
-	 */
-	protected ListIterator<? extends ListIterator<E>> iterators() {
-		return new TransformationListIterator<ListIterable<E>, ListIterator<E>>(this.iterables()) {
-			@Override
-			protected ListIterator<E> transform(ListIterable<E> next) {
-				return next.iterator();
-			}
-		};
-	}
-
-	/**
-	 * list iterator of list iterables
-	 */
-	protected ListIterator<? extends ListIterable<E>> iterables() {
-		return this.iterables.iterator();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterables);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/EmptyIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/EmptyIterable.java
deleted file mode 100644
index 502f399..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/EmptyIterable.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.io.Serializable;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-
-/**
- * An <code>EmptyIterable</code> is just that.
- * Maybe just a touch better-performing than {@link java.util.Collections#EMPTY_SET}
- * since we don't create a new {@link Iterator} every time {@link #iterator()} is called.
- * (Not sure why they do that....)
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see EmptyIterator
- * @see EmptyListIterable
- */
-public final class EmptyIterable<E>
-	implements Iterable<E>, Serializable
-{
-	// singleton
-	@SuppressWarnings("rawtypes")
-	private static final Iterable INSTANCE = new EmptyIterable();
-
-	/**
-	 * Return the singleton.
-	 */
-	@SuppressWarnings("unchecked")
-	public static <T> Iterable<T> instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private EmptyIterable() {
-		super();
-	}
-
-	public Iterator<E> iterator() {
-		return EmptyIterator.instance();
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getSimpleName();
-	}
-
-	private static final long serialVersionUID = 1L;
-	private Object readResolve() {
-		// replace this object with the singleton
-		return INSTANCE;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/EmptyListIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/EmptyListIterable.java
deleted file mode 100644
index 3eb059c..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/EmptyListIterable.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.io.Serializable;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.iterators.EmptyListIterator;
-
-/**
- * An <code>EmptyListIterable</code> is just that.
- * Maybe just a touch better-performing than {@link java.util.Collections#EMPTY_LIST}
- * since we don't create a new {@link Iterator} every time {@link #iterator()} is called.
- * (Not sure why they do that....)
- * 
- * @param <E> the type of elements returned by the list iterable's list iterator
- * 
- * @see EmptyListIterator
- * @see EmptyIterable
- */
-public final class EmptyListIterable<E>
-	implements ListIterable<E>, Serializable
-{
-	// singleton
-	@SuppressWarnings("rawtypes")
-	private static final ListIterable INSTANCE = new EmptyListIterable();
-
-	/**
-	 * Return the singleton.
-	 */
-	@SuppressWarnings("unchecked")
-	public static <T> ListIterable<T> instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private EmptyListIterable() {
-		super();
-	}
-
-	public ListIterator<E> iterator() {
-		return EmptyListIterator.instance();
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getSimpleName();
-	}
-
-	private static final long serialVersionUID = 1L;
-	private Object readResolve() {
-		// replace this object with the singleton
-		return INSTANCE;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/FilteringIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/FilteringIterable.java
deleted file mode 100644
index a184190..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/FilteringIterable.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.Filter;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
-
-/**
- * A <code>FilteringIterable</code> wraps another {@link Iterable}
- * and uses a {@link Filter} to determine which elements in the
- * nested iterable are to be returned by the iterable's iterator.
- * <p>
- * As an alternative to building a {@link Filter}, a subclass
- * of <code>FilteringIterable</code> can override the
- * {@link #accept(Object)} method.
- * 
- * @param <E> the type of elements to be filtered
- * 
- * @see FilteringIterator
- */
-public class FilteringIterable<E>
-	implements Iterable<E>
-{
-	private final Iterable<? extends E> iterable;
-	private final Filter<E> filter;
-
-
-	/**
-	 * Construct an iterable with the specified nested
-	 * iterable and a default filter that calls back to the iterable.
-	 * Use this constructor if you want to override the
-	 * {@link #accept(Object)} method instead of building
-	 * a {@link Filter}.
-	 */
-	public FilteringIterable(Iterable<? extends E> iterable) {
-		super();
-		this.iterable = iterable;
-		this.filter = this.buildDefaultFilter();
-	}
-
-	/**
-	 * Construct an iterable with the specified nested
-	 * iterable and filter.
-	 */
-	public FilteringIterable(Iterable<? extends E> iterable, Filter<E> filter) {
-		super();
-		this.iterable = iterable;
-		this.filter = filter;
-	}
-
-	protected Filter<E> buildDefaultFilter() {
-		return new DefaultFilter();
-	}
-
-	public Iterator<E> iterator() {
-		return new FilteringIterator<E>(this.iterable.iterator(), this.filter);
-	}
-
-	/**
-	 * Return whether the iterable's iterator
-	 * should return the specified next element from a call to the
-	 * {@link Iterator#next()} method.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link Filter}.
-	 */
-	protected boolean accept(@SuppressWarnings("unused") E o) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterable);
-	}
-
-
-	//********** default filter **********
-
-	protected class DefaultFilter implements Filter<E> {
-		public boolean accept(E o) {
-			return FilteringIterable.this.accept(o);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/GraphIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/GraphIterable.java
deleted file mode 100644
index 2bb584c..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/GraphIterable.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Arrays;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.GraphIterator;
-
-/**
- * A <code>GraphIterable</code> is similar to a {@link TreeIterable}
- * except that it cannot be assumed that all nodes assume a strict tree
- * structure. For instance, in a tree, a node cannot be a descendent of
- * itself, but a graph may have a cyclical structure.
- * 
- * A <code>GraphIterable</code> simplifies the traversal of a
- * graph of objects, where the objects' protocol(s) provides
- * a method for getting the next collection of nodes in the graph,
- * (or <em>neighbors</em>), but does not provide a method for
- * getting <em>all</em> of the nodes in the graph.
- * (e.g. a neighbor can return his neighbors, and those neighbors
- * can return their neighbors, which might also include the original
- * neighbor, but you only want to visit the original neighbor once.)
- * <p>
- * If a neighbor has already been visited (determined by using 
- * {@link #equals(Object)}), that neighbor is not visited again,
- * nor are the neighbors of that object.
- * <p>
- * It is up to the user of this class to ensure a <em>complete</em> graph.
- * <p>
- * To use, supply:<ul>
- * <li> either the initial node of the graph or an {@link Iterable}
- * of the initial collection of graph nodes
- * <li> a {@link GraphIterator.MisterRogers} that tells who the neighbors are
- * of each node
- * (alternatively, subclass <code>GraphIterable</code>
- * and override the {@link #neighbors(Object)} method)
- * </ul>
- * The {@link Iterator#remove()} operation is not supported. This behavior, if 
- * desired, must be implemented by the user of this class.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see GraphIterator
- */
-public class GraphIterable<E>
-	implements Iterable<E>
-{
-	private final Iterable<? extends E> roots;
-	private final GraphIterator.MisterRogers<E> misterRogers;
-
-
-	/**
-	 * Construct an iterable containing the nodes of a graph with the specified root
-	 * and a default Mr. Rogers that calls back to the iterable.
-	 * Use this constructor if you want to override the
-	 * {@link #neighbors(Object)} method instead of building
-	 * a {@link GraphIterator.MisterRogers}.
-	 */
-	public GraphIterable(E root) {
-		this(new SingleElementIterable<E>(root));
-	}
-
-	/**
-	 * Construct an iterable containing the nodes of a graph 
-	 * with the specified root and Mr. Rogers.
-	 */
-	public GraphIterable(E root, GraphIterator.MisterRogers<E> misterRogers) {
-		this(new SingleElementIterable<E>(root), misterRogers);
-	}
-
-	/**
-	 * Construct an iterable containing the nodes of a graph 
-	 * with the specified collection of roots
-	 * and a default Mr. Rogers that calls back to the iterable.
-	 * Use this constructor if you want to override the
-	 * {@link #neighbors(Object)} method instead of building
-	 * a {@link GraphIterator.MisterRogers}.
-	 */
-	public GraphIterable(E... roots) {
-		this(Arrays.asList(roots));
-	}
-
-	/**
-	 * Construct an iterable containing the nodes of a graph 
-	 * with the specified roots and Mr. Rogers.
-	 */
-	public GraphIterable(E[] roots, GraphIterator.MisterRogers<E> misterRogers) {
-		this(Arrays.asList(roots), misterRogers);
-	}
-
-	/**
-	 * Construct an iterable containing the nodes of a graph 
-	 * with the specified collection of roots
-	 * and a default Mr. Rogers that calls back to the iterable.
-	 * Use this constructor if you want to override the
-	 * {@link #neighbors(Object)} method instead of building
-	 * a {@link GraphIterator.MisterRogers}.
-	 */
-	public GraphIterable(Iterable<? extends E> roots) {
-		super();
-		this.roots = roots;
-		this.misterRogers = this.buildDefaultMisterRogers();
-	}
-
-	/**
-	 * Construct an iterable containing the nodes of a graph 
-	 * with the specified roots and Mr. Rogers.
-	 */
-	public GraphIterable(Iterable<? extends E> roots, GraphIterator.MisterRogers<E> misterRogers) {
-		super();
-		this.roots = roots;
-		this.misterRogers = misterRogers;
-	}
-
-	protected GraphIterator.MisterRogers<E> buildDefaultMisterRogers() {
-		return new DefaultMisterRogers();
-	}
-
-	public Iterator<E> iterator() {
-		return new GraphIterator<E>(this.roots, this.misterRogers);
-	}
-
-	/**
-	 * Return the immediate neighbors of the specified object.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link GraphIterator.MisterRogers}.
-	 */
-	protected Iterator<? extends E> neighbors(@SuppressWarnings("unused") E next) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.roots);
-	}
-
-
-	//********** default Mr. Rogers **********
-
-	protected class DefaultMisterRogers implements GraphIterator.MisterRogers<E> {
-		public Iterator<? extends E> neighbors(E node) {
-			return GraphIterable.this.neighbors(node);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ListIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ListIterable.java
deleted file mode 100644
index adda824..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ListIterable.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.ListIterator;
-
-/**
- * A <code>ListIterable</code> simply extends {@link Iterable}
- * to return a {@link ListIterator} of type <code>E</code>.
- * 
- * @param <E> the type of elements returned by the iterable's iterators
- */
-public interface ListIterable<E>
-	extends Iterable<E>
-{
-	/**
-	 * Return a list iterator over a set of elements of type E.
-	 */
-	ListIterator<E> iterator();
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ListListIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ListListIterable.java
deleted file mode 100644
index c09fae9..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ListListIterable.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.List;
-import java.util.ListIterator;
-
-/**
- * A <code>ListListIterable</code> adapts a {@link List}
- * to the {@link ListIterable} interface.
- * 
- * @param <E> the type of elements returned by the iterable's iterators
- */
-public class ListListIterable<E>
-	implements ListIterable<E>
-{
-	private final List<E> list;
-
-	public ListListIterable(List<E> list) {
-		super();
-		this.list = list;
-	}
-
-	public ListIterator<E> iterator() {
-		return this.list.listIterator();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/LiveCloneIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/LiveCloneIterable.java
deleted file mode 100644
index afef8fe..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/LiveCloneIterable.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
-
-/**
- * A <code>LiveCloneIterable</code> returns an iterator on a current copy of a
- * collection, allowing for concurrent access to the original collection. A
- * copy of the collection is created every time {@link #iterator()} is
- * called. As a result, the contents of the collection can be different with
- * each call to {@link #iterator()} (i.e. it is "live").
- * <p>
- * The original collection passed to the <code>LiveCloneIterable</code>'s
- * constructor should be thread-safe (e.g. {@link java.util.Vector});
- * otherwise you run the risk of a corrupted collection.
- * <p>
- * By default, the iterator returned by a <code>LiveCloneIterable</code> does not
- * support the {@link Iterator#remove()} operation; this is because it does not
- * have access to the original collection. But if the <code>LiveCloneIterable</code>
- * is supplied with an {@link CloneIterator.Remover} it will delegate the
- * {@link Iterator#remove()} operation to the <code>Remover</code>.
- * Alternatively, a subclass can override the iterable's {@link #remove(Object)}
- * method.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see CloneIterator
- * @see SnapshotCloneIterable
- * @see LiveCloneListIterable
- */
-public class LiveCloneIterable<E>
-	extends CloneIterable<E>
-{
-	private final Collection<? extends E> collection;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a "live" iterable for the specified collection.
-	 * The {@link Iterator#remove()} operation will not be supported
-	 * by the iterator returned by {@link #iterator()}
-	 * unless a subclass overrides the iterable's {@link #remove(Object)}
-	 * method.
-	 */
-	public LiveCloneIterable(Collection<? extends E> collection) {
-		super();
-		this.collection = collection;
-	}
-
-	/**
-	 * Construct a "live" iterable for the specified collection.
-	 * The specified remover will be used by any generated iterators to
-	 * remove objects from the original collection.
-	 */
-	public LiveCloneIterable(Collection<? extends E> collection, CloneIterator.Remover<E> remover) {
-		super(remover);
-		this.collection = collection;
-	}
-
-
-	// ********** Iterable implementation **********
-
-	public Iterator<E> iterator() {
-		return new CloneIterator<E>(this.collection, this.remover);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.collection);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/LiveCloneListIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/LiveCloneListIterable.java
deleted file mode 100644
index 8ce3157..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/LiveCloneListIterable.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
-
-/**
- * A <code>LiveCloneListIterable</code> returns a list iterator on a current
- * copy of a list, allowing for concurrent access to the original list. A
- * copy of the list is created every time {@link #iterator()} is
- * called. As a result, the contents of the list can be different with
- * each call to {@link #iterator()} (i.e. it is "live").
- * <p>
- * The original list passed to the <code>LiveCloneListIterable</code>'s
- * constructor should be thread-safe (e.g. {@link java.util.Vector});
- * otherwise you run the risk of a corrupted list.
- * <p>
- * By default, the list iterator returned by a <code>LiveCloneListIterable</code>
- * does not support the modify operations; this is because it does not
- * have access to the original list. But if the <code>LiveCloneListIterable</code>
- * is supplied with an {@link CloneListIterator.Mutator} it will delegate the
- * modify operations to the <code>Mutator</code>.
- * Alternatively, a subclass can override the list iterable's mutation
- * methods.
- * 
- * @param <E> the type of elements returned by the list iterable's list iterator
- * 
- * @see CloneListIterator
- * @see SnapshotCloneListIterable
- * @see LiveCloneIterable
- */
-public class LiveCloneListIterable<E>
-	extends CloneListIterable<E>
-{
-	private final List<? extends E> list;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a "live" list iterable for the specified list.
-	 * The {@link ListIterator} mutation operations will not be supported
-	 * by the list iterator returned by {@link #iterator()}
-	 * unless a subclass overrides the iterable's mutation
-	 * methods.
-	 */
-	public LiveCloneListIterable(List<? extends E> list) {
-		super();
-		this.list = list;
-	}
-
-	/**
-	 * Construct a "live" list iterable for the specified list.
-	 * The specified mutator will be used by any generated list iterators to
-	 * modify the original list.
-	 */
-	public LiveCloneListIterable(List<? extends E> list, CloneListIterator.Mutator<E> mutator) {
-		super(mutator);
-		this.list = list;
-	}
-
-
-	// ********** ListIterable implementation **********
-
-	public ListIterator<E> iterator() {
-		return new CloneListIterator<E>(this.list, this.mutator);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.list);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/PeekableIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/PeekableIterable.java
deleted file mode 100644
index e79efd7..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/PeekableIterable.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.PeekableIterator;
-
-/**
- * A <code>PeekableIterable</code> wraps another {@link Iterable}
- * and returns an {@link PeekableIterator} that allows a
- * {@link PeekableIterator#peek() peek} at the next element to be 
- * returned by {@link Iterator#next()}.
- * <p>
- * One, possibly undesirable, side-effect of using this iterator is that
- * the nested iterator's <code>next()</code> method will be invoked
- * <em>before</em> the peekable iterator's {@link Iterator#next()}
- * method is invoked. This is because the "next" element must be
- * pre-loaded for the {@link PeekableIterator#peek()} method.
- * This also prevents a peekable iterator from supporting the optional
- * {@link Iterator#remove()} method.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see PeekableIterator
- */
-public class PeekableIterable<E>
-	implements Iterable<E>
-{
-	private final Iterable<? extends E> iterable;
-
-	/**
-	 * Construct a peekable iterable that wraps the specified
-	 * iterable.
-	 */
-	public PeekableIterable(Iterable<? extends E> iterable) {
-		super();
-		this.iterable = iterable;
-	}
-
-	public PeekableIterator<E> iterator() {
-		return new PeekableIterator<E>(this.iterable);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterable);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/QueueIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/QueueIterable.java
deleted file mode 100644
index 50819f3..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/QueueIterable.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.Queue;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.QueueIterator;
-
-/**
- * A <code>QueueIterable</code> provides an {@link Iterable}
- * for a {@link Queue} of objects of type <code>E</code>. The queue's elements
- * are {@link Queue#dequeue() dequeue}d" as the iterable's iterator returns
- * them with calls to {@link Iterator#next()}.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see Queue
- * @see QueueIterator
- */
-public class QueueIterable<E>
-	implements Iterable<E>
-{
-	private final Queue<E> queue;
-
-	/**
-	 * Construct an iterable for the specified queue.
-	 */
-	public QueueIterable(Queue<E> queue) {
-		super();
-		this.queue = queue;
-	}
-
-	public Iterator<E> iterator() {
-		return new QueueIterator<E>(this.queue);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.queue);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ReadOnlyCompositeListIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ReadOnlyCompositeListIterable.java
deleted file mode 100644
index a74e998..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ReadOnlyCompositeListIterable.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyCompositeListIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationListIterator;
-
-/**
- * A <code>ReadOnlyCompositeListIterable</code> wraps a {@link ListIterable}
- * of {@link ListIterable}s and makes them appear to be a single
- * read-only {@link ListIterable}. A read-only composite list
- * iterable is more flexible than a normal composite list iterable when it
- * comes to the element types of the nested list iterables.
- * 
- * @param <E> the type of elements returned by the list iterable's list iterator
- * 
- * @see ReadOnlyCompositeListIterator
- * @see CompositeListIterable
- */
-public class ReadOnlyCompositeListIterable<E>
-	implements ListIterable<E>
-{
-	private final ListIterable<? extends ListIterable<? extends E>> iterables;
-
-
-	/**
-	 * Construct a list iterable with the specified list of list iterables.
-	 */
-	public ReadOnlyCompositeListIterable(ListIterable<? extends ListIterable<? extends E>> iterables) {
-		super();
-		this.iterables = iterables;
-	}
-
-	/**
-	 * Construct a list iterable with the specified object prepended
-	 * to the specified list iterable.
-	 */
-	@SuppressWarnings("unchecked")
-	public ReadOnlyCompositeListIterable(E object, ListIterable<? extends E> iterable) {
-		this(new SingleElementListIterable<E>(object), iterable);
-	}
-
-	/**
-	 * Construct a list iterable with the specified object appended
-	 * to the specified list iterable.
-	 */
-	@SuppressWarnings("unchecked")
-	public ReadOnlyCompositeListIterable(ListIterable<? extends E> iterable, E object) {
-		this(iterable, new SingleElementListIterable<E>(object));
-	}
-
-	/**
-	 * Construct a list iterable with the specified list iterables.
-	 */
-	public ReadOnlyCompositeListIterable(ListIterable<? extends E>... iterables) {
-		this(new ArrayListIterable<ListIterable<? extends E>>(iterables));
-	}
-
-	/**
-	 * combined list iterators
-	 */
-	public ListIterator<E> iterator() {
-		return new ReadOnlyCompositeListIterator<E>(this.iterators());
-	}
-
-	/**
-	 * list iterator of list iterators
-	 */
-	protected ListIterator<? extends ListIterator<? extends E>> iterators() {
-		return new TransformationListIterator<ListIterable<? extends E>, ListIterator<? extends E>>(this.iterables()) {
-			@Override
-			protected ListIterator<? extends E> transform(ListIterable<? extends E> next) {
-				return next.iterator();
-			}
-		};
-	}
-
-	/**
-	 * list iterator of list iterables
-	 */
-	protected ListIterator<? extends ListIterable<? extends E>> iterables() {
-		return this.iterables.iterator();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterables);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ReadOnlyIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ReadOnlyIterable.java
deleted file mode 100644
index 250ace7..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ReadOnlyIterable.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyIterator;
-
-/**
- * A <code>ReadOnlyIterable</code> wraps another {@link Iterable}
- * and returns a read-only {@link Iterator}.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see ReadOnlyIterator
- * @see ReadOnlyListIterable
- */
-public class ReadOnlyIterable<E>
-	implements Iterable<E>
-{
-	private final Iterable<? extends E> iterable;
-
-
-	/**
-	 * Construct an iterable the returns a read-only iterator on the elements
-	 * in the specified iterable.
-	 */
-	public ReadOnlyIterable(Iterable<? extends E> iterable) {
-		super();
-		this.iterable = iterable;
-	}
-
-	public Iterator<E> iterator() {
-		return new ReadOnlyIterator<E>(this.iterable);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterable);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ReadOnlyListIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ReadOnlyListIterable.java
deleted file mode 100644
index 3065538..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/ReadOnlyListIterable.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyListIterator;
-
-/**
- * A <code>ReadOnlyListIterable</code> wraps another {@link ListIterable}
- * and returns a read-only {@link ListIterator}.
- * 
- * @param <E> the type of elements returned by the list iterable's list iterator
- * 
- * @see ReadOnlyListIterator
- * @see ReadOnlyIterable
- */
-public class ReadOnlyListIterable<E>
-	implements ListIterable<E>
-{
-	private final ListIterable<? extends E> listIterable;
-
-
-	/**
-	 * Construct a list iterable the returns a read-only list iterator on the elements
-	 * in the specified list iterable.
-	 */
-	public ReadOnlyListIterable(ListIterable<? extends E> iterable) {
-		super();
-		this.listIterable = iterable;
-	}
-
-	public ListIterator<E> iterator() {
-		return new ReadOnlyListIterator<E>(this.listIterable);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.listIterable);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SingleElementIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SingleElementIterable.java
deleted file mode 100644
index 78b504d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SingleElementIterable.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementIterator;
-
-/**
- * A <code>SingleElementIterable</code> returns an {@link Iterator}
- * that holds a single element
- * and returns it with the first call to {@link Iterator#next()}, at
- * which point it will return <code>false</code> to any subsequent
- * call to {@link Iterator#hasNext()}.
- * <p>
- * A <code>SingleElementIterable</code> is equivalent to the
- * {@link Iterable} returned by:
- * 	{@link java.util.Collections#singleton(Object)}.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see SingleElementIterator
- * @see SingleElementListIterable
- */
-public class SingleElementIterable<E>
-	implements Iterable<E>
-{
-	private final E element;
-
-	/**
-	 * Construct an iterable that contains only the specified element.
-	 */
-	public SingleElementIterable(E element) {
-		super();
-		this.element = element;
-	}
-
-	public Iterator<E> iterator() {
-		return new SingleElementIterator<E>(this.element);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.element);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SingleElementListIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SingleElementListIterable.java
deleted file mode 100644
index e6774eb..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SingleElementListIterable.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementListIterator;
-
-/**
- * A <code>SingleElementListIterable</code> returns a {@link ListIterator}
- * that holds a single element
- * and returns it with the first call to {@link ListIterator#next()}, at
- * which point it will return <code>false</code> to any subsequent
- * call to {@link ListIterator#hasNext()}. Likewise, it will return <code>false</code>
- * to a call to {@link ListIterator#hasPrevious()} until a call to {@link ListIterator#next()},
- * at which point a call to {@link ListIterator#previous()} will return the
- * single element.
- * <p>
- * A <code>SingleElementListIterable</code> is equivalent to the
- * {@link Iterable} returned by:
- * 	{@link java.util.Collections#singletonList(Object)}.
- * 
- * @param <E> the type of elements returned by the list iterable's list iterator
- * 
- * @see SingleElementListIterator
- * @see SingleElementIterable
- */
-public class SingleElementListIterable<E>
-	implements ListIterable<E>
-{
-	private final E element;
-
-	/**
-	 * Construct a list iterable that contains only the specified element.
-	 */
-	public SingleElementListIterable(E element) {
-		super();
-		this.element = element;
-	}
-
-	public ListIterator<E> iterator() {
-		return new SingleElementListIterator<E>(this.element);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.element);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SnapshotCloneIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SnapshotCloneIterable.java
deleted file mode 100644
index 0da6b82..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SnapshotCloneIterable.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
-
-/**
- * A <code>SnapshotCloneIterable</code> returns an iterator on a "snapshot" of a
- * collection, allowing for concurrent access to the original collection. A
- * copy of the collection is created when the iterable is constructed.
- * As a result, the contents of the collection will be the same with
- * every call to {@link #iterator()}.
- * <p>
- * The original collection passed to the <code>SnapshotCloneIterable</code>'s
- * constructor should be thread-safe (e.g. {@link java.util.Vector});
- * otherwise you run the risk of a corrupted collection.
- * <p>
- * By default, the iterator returned by a <code>SnapshotCloneIterable</code> does not
- * support the {@link Iterator#remove()} operation; this is because it does not
- * have access to the original collection. But if the <code>SnapshotCloneIterable</code>
- * is supplied with a {@link CloneIterator.Remover} it will delegate the
- * {@link Iterator#remove()} operation to the <code>Remover</code>.
- * Alternatively, a subclass can override the iterable's {@link #remove(Object)}
- * method.
- * <p>
- * This iterable is useful for multiple passes over a collection that should not
- * be changed (e.g. by another thread) between passes.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see CloneIterator
- * @see LiveCloneIterable
- * @see SnapshotCloneListIterable
- */
-public class SnapshotCloneIterable<E>
-	extends CloneIterable<E>
-{
-	private final Object[] array;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a "snapshot" iterable for the specified collection.
-	 * The {@link Iterator#remove()} operation will not be supported
-	 * by the iterator returned by {@link #iterator()}
-	 * unless a subclass overrides the iterable's {@link #remove(Object)}
-	 * method.
-	 */
-	public SnapshotCloneIterable(Collection<? extends E> collection) {
-		super();
-		this.array = collection.toArray();
-	}
-
-	/**
-	 * Construct a "snapshot" iterable for the specified collection.
-	 * The specified remover will be used by any generated iterators to
-	 * remove objects from the original collection.
-	 */
-	public SnapshotCloneIterable(Collection<? extends E> collection, CloneIterator.Remover<E> remover) {
-		super(remover);
-		this.array = collection.toArray();
-	}
-
-
-	// ********** Iterable implementation **********
-
-	public Iterator<E> iterator() {
-		return new LocalCloneIterator<E>(this.remover, this.array);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, Arrays.toString(this.array));
-	}
-
-
-	// ********** clone iterator **********
-
-	/**
-	 * provide access to "internal" constructor
-	 */
-	protected static class LocalCloneIterator<E> extends CloneIterator<E> {
-		protected LocalCloneIterator(Remover<E> remover, Object[] array) {
-			super(remover, array);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SnapshotCloneListIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SnapshotCloneListIterable.java
deleted file mode 100644
index 251c05f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SnapshotCloneListIterable.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
-
-/**
- * A <code>SnapshotCloneListIterable</code> returns a list iterator on a
- * "snapshot" of a list, allowing for concurrent access to the original list.
- * A copy of the list is created when the list iterable is constructed.
- * As a result, the contents of the list will be the same with
- * every call to {@link #iterator()}, even if the original list is modified via
- * the list iterator's mutation methods.
- * <p>
- * The original list passed to the <code>SnapshotCloneListIterable</code>'s
- * constructor should be thread-safe (e.g. {@link java.util.Vector});
- * otherwise you run the risk of a corrupted list.
- * <p>
- * By default, the list iterator returned by a <code>SnapshotCloneListIterable</code> does not
- * support the {@link ListIterator} mutation operations; this is because it does not
- * have access to the original list. But if the <code>SnapshotCloneListIterable</code>
- * is supplied with a {@link CloneListIterator.Mutator} it will delegate the
- * {@link ListIterator} mutation operations to the <code>Mutator</code>.
- * Alternatively, a subclass can override the list iterable's mutation
- * methods.
- * <p>
- * This list iterable is useful for multiple passes over a list that should not
- * be changed (e.g. by another thread) between passes.
- * 
- * @param <E> the type of elements returned by the list iterable's list iterator
- * 
- * @see CloneListIterator
- * @see LiveCloneListIterable
- * @see SnapshotCloneIterable
- */
-public class SnapshotCloneListIterable<E>
-	extends CloneListIterable<E>
-{
-	private final Object[] array;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a "snapshot" list iterable for the specified list.
-	 * The {@link ListIterator} modify operations will not be supported
-	 * by the list iterator returned by {@link #iterator()}
-	 * unless a subclass overrides the list iterable's modify
-	 * method.
-	 */
-	public SnapshotCloneListIterable(List<? extends E> list) {
-		super();
-		this.array = list.toArray();
-	}
-
-	/**
-	 * Construct a "snapshot" list iterable for the specified list.
-	 * The specified mutator will be used by any generated list iterators to
-	 * modify the original list.
-	 */
-	public SnapshotCloneListIterable(List<? extends E> list, CloneListIterator.Mutator<E> mutator) {
-		super(mutator);
-		this.array = list.toArray();
-	}
-
-
-	// ********** ListIterable implementation **********
-
-	public ListIterator<E> iterator() {
-		return new LocalCloneListIterator<E>(this.mutator, this.array);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, Arrays.toString(this.array));
-	}
-
-
-	// ********** clone iterator **********
-
-	/**
-	 * provide access to "internal" constructor
-	 */
-	protected static class LocalCloneListIterator<E> extends CloneListIterator<E> {
-		protected LocalCloneListIterator(Mutator<E> mutator, Object[] array) {
-			super(mutator, array);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/StackIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/StackIterable.java
deleted file mode 100644
index fe14746..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/StackIterable.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.Stack;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.StackIterator;
-
-/**
- * A <code>StackIterable</code> provides an {@link Iterable}
- * for a {@link Stack} of objects of type <code>E</code>. The stack's elements
- * are {@link Stack#pop() "popped"} as the iterable's iterator returns
- * them with calls to {@link Iterator#next()}.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see Stack
- * @see StackIterator
- */
-public class StackIterable<E>
-	implements Iterable<E>
-{
-	private final Stack<E> stack;
-
-	/**
-	 * Construct an iterable for the specified stack.
-	 */
-	public StackIterable(Stack<E> stack) {
-		super();
-		this.stack = stack;
-	}
-
-	public Iterator<E> iterator() {
-		return new StackIterator<E>(this.stack);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.stack);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SubIterableWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SubIterableWrapper.java
deleted file mode 100644
index de91d46..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SubIterableWrapper.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.SubIteratorWrapper;
-
-/**
- * Wrap an iterable of elements of type <code>E1</code>, converting it into an
- * iterable of elements of type <code>E2</code>. Assume the wrapped iterable
- * contains only elements of type <code>E2</code>.
- * 
- * @param <E1> input: the type of elements contained by the wrapped iterable
- * @param <E2> output: the type of elements returned by the iterable's iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterators.SubIteratorWrapper
- */
-public class SubIterableWrapper<E1, E2>
-	implements Iterable<E2>
-{
-	private final Iterable<E1> iterable;
-
-
-	public SubIterableWrapper(Iterable<E1> iterable) {
-		super();
-		this.iterable = iterable;
-	}
-
-	public Iterator<E2> iterator() {
-		return new SubIteratorWrapper<E1, E2>(this.iterable.iterator());
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterable);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SubListIterableWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SubListIterableWrapper.java
deleted file mode 100644
index 8803323..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SubListIterableWrapper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.SubListIteratorWrapper;
-
-/**
- * Wrap a list iterable of elements of type <code>E1</code>, converting it into
- * a list iterable of elements of type <code>E2</code>. Assume the wrapped
- * iterable contains only elements of type <code>E2</code>.
- * 
- * @param <E1> input: the type of elements contained by the wrapped list iterable
- * @param <E2> output: the type of elements returned by the iterable's list iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterators.SubListIteratorWrapper
- */
-public class SubListIterableWrapper<E1, E2>
-	implements ListIterable<E2>
-{
-	private final ListIterable<E1> iterable;
-
-
-	public SubListIterableWrapper(List<E1> list) {
-		this(new ListListIterable<E1>(list));
-	}
-
-	public SubListIterableWrapper(ListIterable<E1> iterable) {
-		super();
-		this.iterable = iterable;
-	}
-
-	public ListIterator<E2> iterator() {
-		return new SubListIteratorWrapper<E1, E2>(this.iterable.iterator());
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterable);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SuperIterableWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SuperIterableWrapper.java
deleted file mode 100644
index 5f1e063..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SuperIterableWrapper.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * Wrap an iterable of elements of any sub-type of <code>E</code>, converting it into an
- * iterable of elements of type <code>E</code>. This shouldn't be a problem since there
- * is no way to add invalid elements to the iterable.
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterators.SuperIteratorWrapper
- */
-public class SuperIterableWrapper<E>
-	implements Iterable<E>
-{
-	private final Iterable<E> iterable;
-
-
-	@SuppressWarnings("unchecked")
-	public SuperIterableWrapper(Iterable<? extends E> iterable) {
-		super();
-		// this should be a safe cast - the iterator will only ever
-		// return E (or a sub-type) from #next()
-		this.iterable = (Iterable<E>) iterable;
-	}
-
-	public Iterator<E> iterator() {
-		return this.iterable.iterator();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterable);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SuperListIterableWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SuperListIterableWrapper.java
deleted file mode 100644
index db44b17..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/SuperListIterableWrapper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.SuperListIteratorWrapper;
-
-/**
- * Wrap a list iterable of elements of any sub-type of <code>E</code>, converting it into a
- * list iterable of elements of type <code>E</code>. This shouldn't be a problem since the
- * resulting list iterable's list iterator disables the methods that would put invalid elements
- * in the list iterator's backing list (i.e. {@link #set(E)} and {@link #add(E)}).
- * 
- * @param <E> the type of elements returned by the iterable's iterators
- * 
- * @see org.eclipse.jpt.utility.internal.iterators.SuperListIteratorWrapper
- */
-public class SuperListIterableWrapper<E>
-	implements ListIterable<E>
-{
-	private final ListIterable<? extends E> iterable;
-
-
-	public <T extends E> SuperListIterableWrapper(List<T> list) {
-		this(new ListListIterable<T>(list));
-	}
-
-	public SuperListIterableWrapper(ListIterable<? extends E> iterable) {
-		super();
-		this.iterable = iterable;
-	}
-
-	public ListIterator<E> iterator() {
-		return new SuperListIteratorWrapper<E>(this.iterable.iterator());
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterable);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/TransformationIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/TransformationIterable.java
deleted file mode 100644
index 7ad42b2..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/TransformationIterable.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-/**
- * A <code>TransformationIterable</code> wraps another {@link Iterable}
- * and transforms its elements for client consumption. To use, supply a 
- * {@link Transformer} or subclass <code>TransformationIterable</code>
- * and override the {@link #transform(Object)} method.
- * Objects of type <code>E1</code> are transformed into objects of type <code>E2</code>;
- * i.e. the iterable's iterator returns objects of type <code>E2</code>.
- * 
- * @param <E1> input: the type of elements to be transformed
- * @param <E2> output: the type of elements returned by the iterable's iterator
- * 
- * @see TransformationIterator
- * @see TransformationListIterable
- */
-public class TransformationIterable<E1, E2>
-	implements Iterable<E2>
-{
-	private final Iterable<? extends E1> iterable;
-	private final Transformer<E1, ? extends E2> transformer;
-
-
-	/**
-	 * Construct an iterable with the specified nested iterable
-	 * and a default transformer that calls back to the iterable.
-	 * Use this constructor if you want to override the
-	 * {@link #transform(Object)} method instead of building
-	 * a {@link Transformer}.
-	 */
-	public TransformationIterable(Iterable<? extends E1> iterable) {
-		super();
-		this.iterable = iterable;
-		this.transformer = this.buildDefaultTransformer();
-	}
-
-	/**
-	 * Construct an iterable with the specified nested iterable
-	 * and transformer.
-	 */
-	public TransformationIterable(Iterable<? extends E1> iterable, Transformer<E1, ? extends E2> transformer) {
-		super();
-		this.iterable = iterable;
-		this.transformer = transformer;
-	}
-
-	protected Transformer<E1, ? extends E2> buildDefaultTransformer() {
-		return new DefaultTransformer();
-	}
-
-	public Iterator<E2> iterator() {
-		return new TransformationIterator<E1, E2>(this.iterable.iterator(), this.transformer);
-	}
-
-	/**
-	 * Transform the specified object and return the result.
-	 */
-	protected E2 transform(@SuppressWarnings("unused") E1 o) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterable);
-	}
-
-
-	//********** default linker **********
-
-	protected class DefaultTransformer implements Transformer<E1, E2> {
-		public E2 transform(E1 o) {
-			return TransformationIterable.this.transform(o);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/TransformationListIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/TransformationListIterable.java
deleted file mode 100644
index 0bd2714..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/TransformationListIterable.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.iterators.TransformationListIterator;
-
-/**
- * A <code>TransformationListIterable</code> wraps another {@link ListIterable}
- * and transforms its elements for client consumption. To use, supply a 
- * {@link Transformer} or subclass <code>TransformationListIterable</code>
- * and override the {@link #transform(Object)} method.
- * Objects of type <code>E1</code> are transformed into objects of type <code>E2</code>;
- * i.e. the list iterable's list iterator returns objects of type <code>E2</code>.
- * 
- * @param <E1> input: the type of elements to be transformed
- * @param <E2> output: the type of elements returned by the iterable's iterator
- * 
- * @see TransformationListIterator
- * @see TransformationIterable
- */
-public class TransformationListIterable<E1, E2>
-	implements ListIterable<E2>
-{
-	private final ListIterable<? extends E1> iterable;
-	private final Transformer<E1, ? extends E2> transformer;
-
-
-	/**
-	 * Construct a list iterable with the specified nested list
-	 * and a default transformer that calls back to the list iterable.
-	 * Use this constructor if you want to override the
-	 * {@link #transform(Object)} method instead of building
-	 * a {@link Transformer}.
-	 */
-	public TransformationListIterable(List<E1> list) {
-		this(new ListListIterable<E1>(list));
-	}
-
-	/**
-	 * Construct a list iterable with the specified nested list iterable
-	 * and a default transformer that calls back to the list iterable.
-	 * Use this constructor if you want to override the
-	 * {@link #transform(Object)} method instead of building
-	 * a {@link Transformer}.
-	 */
-	public TransformationListIterable(ListIterable<? extends E1> iterable) {
-		super();
-		this.iterable = iterable;
-		this.transformer = this.buildDefaultTransformer();
-	}
-
-	/**
-	 * Construct a list iterable with the specified nested list
-	 * and transformer.
-	 */
-	public TransformationListIterable(List<E1> list, Transformer<E1, ? extends E2> transformer) {
-		this(new ListListIterable<E1>(list), transformer);
-	}
-
-	/**
-	 * Construct a list iterable with the specified nested list iterable
-	 * and transformer.
-	 */
-	public TransformationListIterable(ListIterable<? extends E1> iterable, Transformer<E1, ? extends E2> transformer) {
-		super();
-		this.iterable = iterable;
-		this.transformer = transformer;
-	}
-
-	protected Transformer<E1, ? extends E2> buildDefaultTransformer() {
-		return new DefaultTransformer();
-	}
-
-	public ListIterator<E2> iterator() {
-		return new TransformationListIterator<E1, E2>(this.iterable.iterator(), this.transformer);
-	}
-
-	/**
-	 * Transform the specified object and return the result.
-	 */
-	protected E2 transform(@SuppressWarnings("unused") E1 o) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterable);
-	}
-
-
-	//********** default linker **********
-
-	protected class DefaultTransformer implements Transformer<E1, E2> {
-		public E2 transform(E1 o) {
-			return TransformationListIterable.this.transform(o);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/TreeIterable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/TreeIterable.java
deleted file mode 100644
index ab227cd..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterables/TreeIterable.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterables;
-
-import java.util.Arrays;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.TreeIterator;
-
-/**
- * A <code>TreeIterable</code> simplifies the traversal of a
- * tree of objects, where the objects' protocol(s) provides
- * a method for getting the immediate children of the given
- * node but does not provide a method for getting all the
- * descendants (children, grandchildren, etc.) of the given node.
- * <p>
- * To use, supply:<ul>
- * <li> either the root element of the tree or, if the tree has
- * multiple roots, an {@link Iterable} of the set of roots
- * <li> a {@link TreeIterator.Midwife} that delivers the children of each child
- * (alternatively, subclass <code>TreeIterable</code>
- * and override the {@link #children(Object)} method)
- * </ul>
- * 
- * @param <E> the type of elements returned by the iterable's iterator
- * 
- * @see TreeIterator
- */
-public class TreeIterable<E>
-	implements Iterable<E>
-{
-	private final Iterable<? extends E> roots;
-	private final TreeIterator.Midwife<E> midwife;
-
-
-	/**
-	 * Construct an iterable containing the nodes of a tree with the specified root
-	 * and a default midwife that calls back to the iterable.
-	 * Use this constructor if you want to override the
-	 * {@link #children(Object)} method instead of building
-	 * a {@link TreeIterator.Midwife}.
-	 */
-	public TreeIterable(E root) {
-		this(new SingleElementIterable<E>(root));
-	}
-
-	/**
-	 * Construct an iterable containing the nodes of a tree with the specified root
-	 * and midwife.
-	 */
-	public TreeIterable(E root, TreeIterator.Midwife<E> midwife) {
-		this(new SingleElementIterable<E>(root), midwife);
-	}
-
-	/**
-	 * Construct an iterable containing the nodes of a tree with the specified roots
-	 * and a default midwife that calls back to the iterable.
-	 * Use this constructor if you want to override the
-	 * {@link #children(Object)} method instead of building
-	 * a {@link TreeIterator.Midwife}.
-	 */
-	public TreeIterable(E... roots) {
-		this(Arrays.asList(roots));
-	}
-
-	/**
-	 * Construct an iterable containing the nodes of a tree with the specified roots
-	 * and midwife.
-	 */
-	public TreeIterable(E[] roots, TreeIterator.Midwife<E> midwife) {
-		this(Arrays.asList(roots), midwife);
-	}
-
-	/**
-	 * Construct an iterable containing the nodes of a tree with the specified roots
-	 * and a default midwife that calls back to the iterable.
-	 * Use this constructor if you want to override the
-	 * {@link #children(Object)} method instead of building
-	 * a {@link TreeIterator.Midwife}.
-	 */
-	public TreeIterable(Iterable<? extends E> roots) {
-		super();
-		this.roots = roots;
-		this.midwife = this.buildDefaultMidwife();
-	}
-
-	/**
-	 * Construct an iterable containing the nodes of a tree with the specified roots
-	 * and midwife.
-	 */
-	public TreeIterable(Iterable<? extends E> roots, TreeIterator.Midwife<E> midwife) {
-		super();
-		this.roots = roots;
-		this.midwife = midwife;
-	}
-
-	protected TreeIterator.Midwife<E> buildDefaultMidwife() {
-		return new DefaultMidwife();
-	}
-
-	public Iterator<E> iterator() {
-		return new TreeIterator<E>(this.roots, this.midwife);
-	}
-
-	/**
-	 * Return the immediate children of the specified object.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link TreeIterator.Midwife}.
-	 */
-	protected Iterator<? extends E> children(@SuppressWarnings("unused") E next) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.roots);
-	}
-
-
-	//********** default midwife **********
-
-	protected class DefaultMidwife implements TreeIterator.Midwife<E> {
-		public Iterator<? extends E> children(E node) {
-			return TreeIterable.this.children(node);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ArrayIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ArrayIterator.java
deleted file mode 100644
index 6396a3c..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ArrayIterator.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * An <code>ArrayIterator</code> provides an {@link Iterator}
- * for an array of objects of type <code>E</code>.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.ArrayIterable
- */
-public class ArrayIterator<E>
-	implements Iterator<E>
-{
-	final E[] array;	// private-protected
-	int cursor;		// private-protected
-	private final int max;
-
-
-	/**
-	 * Construct an iterator for the specified array.
-	 */
-	public ArrayIterator(E... array) {
-		this(array, 0, array.length);
-	}
-
-	/**
-	 * Construct an iterator for the specified array,
-	 * starting at the specified start index and continuing for
-	 * the rest of the array.
-	 */
-	public ArrayIterator(E[] array, int start) {
-		this(array, start, array.length - start);
-	}
-
-	/**
-	 * Construct an iterator for the specified array,
-	 * starting at the specified start index and continuing for
-	 * the specified length.
-	 */
-	public ArrayIterator(E[] array, int start, int length) {
-		super();
-		if ((start < 0) || (start > array.length)) {
-			throw new IllegalArgumentException("start: " + start); //$NON-NLS-1$
-		}
-		if ((length < 0) || (length > array.length - start)) {
-			throw new IllegalArgumentException("length: " + length); //$NON-NLS-1$
-		}
-		this.array = array;
-		this.cursor = start;
-		this.max = start + length;
-	}
-
-	public boolean hasNext() {
-		return this.cursor != this.max;
-	}
-
-	public E next() {
-		if (this.hasNext()) {
-			return this.array[this.cursor++];
-		}
-		throw new NoSuchElementException();
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, Arrays.toString(this.array));
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ArrayListIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ArrayListIterator.java
deleted file mode 100644
index e75afa5..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ArrayListIterator.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-
-/**
- * An <code>ArrayListIterator</code> provides a {@link ListIterator}
- * for an array of objects.
- * <p>
- * The name might be a bit confusing:
- * This is a {@link ListIterator} for an <code>Array</code>;
- * <em>not</em> an {@link Iterator} for a {@link java.util.ArrayList}.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.ArrayListIterable
- */
-public class ArrayListIterator<E>
-	extends ArrayIterator<E>
-	implements ListIterator<E>
-{
-	private final int min;
-
-
-	/**
-	 * Construct a list iterator for the specified array.
-	 */
-	public ArrayListIterator(E... array) {
-		this(array, 0, array.length);
-	}
-	
-	/**
-	 * Construct a list iterator for the specified array,
-	 * starting at the specified start index and continuing for
-	 * the rest of the array.
-	 */
-	public ArrayListIterator(E[] array, int start) {
-		this(array, start, array.length - start);
-	}
-
-	/**
-	 * Construct a list iterator for the specified array,
-	 * starting at the specified start index and continuing for
-	 * the specified length.
-	 */
-	public ArrayListIterator(E[] array, int start, int length) {
-		super(array, start, length);
-		this.min = start;
-	}
-	
-	public int nextIndex() {
-		return this.cursor;
-	}
-	
-	public int previousIndex() {
-		return this.cursor - 1;
-	}
-	
-	public boolean hasPrevious() {
-		return this.cursor != this.min;
-	}
-	
-	public E previous() {
-		if (this.hasPrevious()) {
-			return this.array[--this.cursor];
-		}
-		throw new NoSuchElementException();
-	}
-	
-	public void add(E e) {
-		throw new UnsupportedOperationException();
-	}
-	
-	public void set(E e) {
-		throw new UnsupportedOperationException();
-	}
-	
-	@Override
-	public String toString() {
-		return super.toString();
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ChainIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ChainIterator.java
deleted file mode 100644
index 3454816..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ChainIterator.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>ChainIterator</code> provides a pluggable {@link Iterator}
- * that loops over a chain of arbitrarily linked objects. The chain
- * should be null-terminated (i.e. a call to the {@link #nextLink(Object)}
- * method should return <code>null</code> when it is passed the last
- * link of the chain).
- * To use, supply a starting link and supply a {@link Linker} or 
- * subclass <code>ChainIterator</code> and override the
- * {@link #nextLink(Object)} method.
- * The starting link will be the first object returned by the iterator.
- * If the starting link is <code>null</code>, the iterator will be empty.
- * Note this iterator does not support <code>null</code> elements.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.ChainIterable
- */
-public class ChainIterator<E>
-	implements Iterator<E>
-{
-	private E nextLink;
-	private final Linker<E> linker;
-
-
-	/**
-	 * Construct an iterator with the specified starting link
-	 * and a disabled linker.
-	 * Use this constructor if you want to override the
-	 * {@link #nextLink(Object)} method instead of building
-	 * a {@link Linker}.
-	 */
-	public ChainIterator(E startLink) {
-		this(startLink, Linker.Disabled.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator with the specified starting link
-	 * and linker.
-	 */
-	public ChainIterator(E startLink, Linker<E> linker) {
-		super();
-		this.nextLink = startLink;
-		this.linker = linker;
-	}
-
-	public boolean hasNext() {
-		return this.nextLink != null;
-	}
-
-	public E next() {
-		if (this.nextLink == null) {
-			throw new NoSuchElementException();
-		}
-		E result = this.nextLink;
-		this.nextLink = this.nextLink(this.nextLink);
-		return result;
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * Return the next link in the chain; null if there are no more links.
-	 */
-	protected E nextLink(E currentLink) {
-		return this.linker.nextLink(currentLink);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.nextLink);
-	}
-
-
-	//********** member interface **********
-
-	/**
-	 * Used by {@link ChainIterator} to link
-	 * the elements in the chain.
-	 */
-	public interface Linker<T> {
-
-		/**
-		 * Return the next link in the chain; null if there are no more links.
-		 */
-		T nextLink(T currentLink);
-
-
-		final class Null<S> implements Linker<S> {
-			@SuppressWarnings("rawtypes")
-			public static final Linker INSTANCE = new Null();
-			@SuppressWarnings("unchecked")
-			public static <R> Linker<R> instance() {
-				return INSTANCE;
-			}
-			// ensure single instance
-			private Null() {
-				super();
-			}
-			// simply return null, indicating the chain is ended
-			public S nextLink(S currentLink) {
-				return null;
-			}
-			@Override
-			public String toString() {
-				return "ChainIterator.Linker.Null"; //$NON-NLS-1$
-			}
-			private static final long serialVersionUID = 1L;
-			private Object readResolve() {
-				// replace this object with the singleton
-				return INSTANCE;
-			}
-		}
-
-		final class Disabled<S> implements Linker<S> {
-			@SuppressWarnings("rawtypes")
-			public static final Linker INSTANCE = new Disabled();
-			@SuppressWarnings("unchecked")
-			public static <R> Linker<R> instance() {
-				return INSTANCE;
-			}
-			// ensure single instance
-			private Disabled() {
-				super();
-			}
-			// throw an exception
-			public S nextLink(S currentLink) {
-				throw new UnsupportedOperationException();  // ChainIterator.nextLink(Object) was not implemented
-			}
-			@Override
-			public String toString() {
-				return "ChainIterator.Linker.Disabled"; //$NON-NLS-1$
-			}
-			private static final long serialVersionUID = 1L;
-			private Object readResolve() {
-				// replace this object with the singleton
-				return INSTANCE;
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CloneIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CloneIterator.java
deleted file mode 100644
index 16dd9f0..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CloneIterator.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Collection;
-import java.util.Iterator;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>CloneIterator</code> iterates over a copy of a collection,
- * allowing for concurrent access to the original collection.
- * <p>
- * The original collection passed to the <code>CloneIterator</code>'s
- * constructor should be synchronized (e.g. {@link java.util.Vector});
- * otherwise you run the risk of a corrupted collection.
- * <p>
- * By default, a <code>CloneIterator</code> does not support the
- * {@link #remove()} operation; this is because it does not have
- * access to the original collection. But if the <code>CloneIterator</code>
- * is supplied with an {@link Remover} it will delegate the
- * {@link #remove()} operation to the {@link Remover}.
- * Alternatively, a subclass can override the {@link #remove(Object)}
- * method.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.LiveCloneIterable
- * @see org.eclipse.jpt.utility.internal.iterables.SnapshotCloneIterable
- */
-public class CloneIterator<E>
-	implements Iterator<E>
-{
-	private final Iterator<Object> iterator;
-	private E current;
-	private final Remover<E> remover;
-	private boolean removeAllowed;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an iterator on a copy of the specified collection.
-	 * The {@link #remove()} method will not be supported,
-	 * unless a subclass overrides the {@link #remove(Object)}.
-	 */
-	public CloneIterator(Collection<? extends E> collection) {
-		this(collection, Remover.ReadOnly.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator on a copy of the specified array.
-	 * The {@link #remove()} method will not be supported,
-	 * unless a subclass overrides the {@link #remove(Object)}.
-	 */
-	public CloneIterator(E[] array) {
-		this(array, Remover.ReadOnly.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator on a copy of the specified collection.
-	 * Use the specified remover to remove objects from the
-	 * original collection.
-	 */
-	public CloneIterator(Collection<? extends E> collection, Remover<E> remover) {
-		this(remover, collection.toArray());
-	}
-
-	/**
-	 * Construct an iterator on a copy of the specified array.
-	 * Use the specified remover to remove objects from the
-	 * original array.
-	 */
-	public CloneIterator(E[] array, Remover<E> remover) {
-		this(remover, array.clone());
-	}
-
-	/**
-	 * Internal constructor used by subclasses.
-	 * Swap order of arguments to prevent collision with other constructor.
-	 * The passed in array will *not* be cloned.
-	 */
-	protected CloneIterator(Remover<E> remover, Object... array) {
-		super();
-		this.iterator = new ArrayIterator<Object>(array);
-		this.current = null;
-		this.remover = remover;
-		this.removeAllowed = false;
-	}
-
-
-	// ********** Iterator implementation **********
-
-	public boolean hasNext() {
-		return this.iterator.hasNext();
-	}
-
-	public E next() {
-		this.current = this.nestedNext();
-		this.removeAllowed = true;
-		return this.current;
-	}
-
-	public void remove() {
-		if ( ! this.removeAllowed) {
-			throw new IllegalStateException();
-		}
-		this.remove(this.current);
-		this.removeAllowed = false;
-	}
-
-
-	// ********** internal methods **********
-
-	/**
-	 * The collection passed in during construction held elements of type <code>E</code>,
-	 * so this cast is not a problem. We need this cast because
-	 * all the elements of the original collection were copied into
-	 * an object array (<code>Object[]</code>).
-	 */
-	@SuppressWarnings("unchecked")
-	protected E nestedNext() {
-		return (E) this.iterator.next();
-	}
-
-	/**
-	 * Remove the specified element from the original collection.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link Remover}.
-	 */
-	protected void remove(E e) {
-		this.remover.remove(e);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this);
-	}
-
-
-	//********** member interface **********
-
-	/**
-	 * Used by {@link CloneIterator} to remove
-	 * elements from the original collection; since the iterator
-	 * does not have direct access to the original collection.
-	 */
-	public interface Remover<T> {
-
-		/**
-		 * Remove the specified object from the original collection.
-		 */
-		void remove(T element);
-
-
-		final class ReadOnly<S> implements Remover<S> {
-			@SuppressWarnings("rawtypes")
-			public static final Remover INSTANCE = new ReadOnly();
-			@SuppressWarnings("unchecked")
-			public static <R> Remover<R> instance() {
-				return INSTANCE;
-			}
-			// ensure single instance
-			private ReadOnly() {
-				super();
-			}
-			// remove is not supported
-			public void remove(Object element) {
-				throw new UnsupportedOperationException();
-			}
-			@Override
-			public String toString() {
-				return "CloneIterator.Remover.ReadOnly"; //$NON-NLS-1$
-			}
-			private static final long serialVersionUID = 1L;
-			private Object readResolve() {
-				// replace this object with the singleton
-				return INSTANCE;
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CloneListIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CloneListIterator.java
deleted file mode 100644
index 5493e0d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CloneListIterator.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.List;
-import java.util.ListIterator;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>CloneListIterator</code> iterates over a copy of a list,
- * allowing for concurrent access to the original list.
- * <p>
- * The original list passed to the <code>CloneListIterator</code>'s
- * constructor should be synchronized; otherwise you run the risk of
- * a corrupted list (e.g. {@link java.util.Vector}.
- * <p>
- * By default, a <code>CloneListIterator</code> does not support the
- * modification operations; this is because it does not have
- * access to the original list. But if the <code>CloneListIterator</code>
- * is supplied with a {@link Mutator} it will delegate the
- * modification operations to the {@link Mutator}.
- * Alternatively, a subclass can override the modification methods.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.LiveCloneListIterable
- * @see org.eclipse.jpt.utility.internal.iterables.SnapshotCloneListIterable
- */
-public class CloneListIterator<E>
-	implements ListIterator<E>
-{
-	private final ListIterator<Object> listIterator;
-	private int cursor;
-	private State state;
-	private final Mutator<E> mutator;
-
-	private enum State {
-		UNKNOWN,
-		PREVIOUS,
-		NEXT
-	}
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a list iterator on a copy of the specified list.
-	 * The modification methods will not be supported,
-	 * unless a subclass overrides them.
-	 */
-	public CloneListIterator(List<? extends E> list) {
-		this(list, Mutator.ReadOnly.<E>instance());
-	}
-
-	/**
-	 * Construct a list iterator on a copy of the specified array.
-	 * The modification methods will not be supported,
-	 * unless a subclass overrides them.
-	 */
-	public CloneListIterator(E[] array) {
-		this(array, Mutator.ReadOnly.<E>instance());
-	}
-
-	/**
-	 * Construct a list iterator on a copy of the specified list.
-	 * Use the specified list mutator to modify the original list.
-	 */
-	public CloneListIterator(List<? extends E> list, Mutator<E> mutator) {
-		this(mutator, list.toArray());
-	}
-
-	/**
-	 * Construct a list iterator on a copy of the specified array.
-	 * Use the specified list mutator to modify the original list.
-	 */
-	public CloneListIterator(E[] array, Mutator<E> mutator) {
-		this(mutator, array.clone());
-	}
-
-	/**
-	 * Internal constructor used by subclasses.
-	 * Swap order of arguments to prevent collision with other constructor.
-	 * The passed in array will *not* be cloned.
-	 */
-	protected CloneListIterator(Mutator<E> mutator, Object... array) {
-		super();
-		// build a copy of the list and keep it in synch with original (if the mutator allows changes)
-		// that way the nested list iterator will maintain some of our state
-		this.listIterator = CollectionTools.list(array).listIterator();
-		this.mutator = mutator;
-		this.cursor = 0;
-		this.state = State.UNKNOWN;
-	}
-
-
-	// ********** ListIterator implementation **********
-
-	public boolean hasNext() {
-		return this.listIterator.hasNext();
-	}
-
-	public E next() {
-		// allow the nested iterator to throw an exception before we modify the index
-		E next = this.nestedNext();
-		this.cursor++;
-		this.state = State.NEXT;
-		return next;
-	}
-
-	public void remove() {
-		// allow the nested iterator to throw an exception before we modify the original list
-		this.listIterator.remove();
-		if (this.state == State.PREVIOUS) {
-			this.remove(this.cursor);
-		} else {
-			this.cursor--;
-			this.remove(this.cursor);
-		}
-	}
-
-	public int nextIndex() {
-		return this.listIterator.nextIndex();
-	}
-
-	public int previousIndex() {
-		return this.listIterator.previousIndex();
-	}
-
-	public boolean hasPrevious() {
-		return this.listIterator.hasPrevious();
-	}
-
-	public E previous() {
-		// allow the nested iterator to throw an exception before we modify the index
-		E previous = this.nestedPrevious();
-		this.cursor--;
-		this.state = State.PREVIOUS;
-		return previous;
-	}
-
-	public void add(E o) {
-		// allow the nested iterator to throw an exception before we modify the original list
-		this.listIterator.add(o);
-		this.add(this.cursor, o);
-		this.cursor++;
-	}
-
-	public void set(E o) {
-		// allow the nested iterator to throw an exception before we modify the original list
-		this.listIterator.set(o);
-		if (this.state == State.PREVIOUS) {
-			this.set(this.cursor, o);
-		} else {
-			this.set(this.cursor - 1, o);
-		}
-	}
-
-
-	// ********** internal methods **********
-
-	/**
-	 * The list passed in during construction held elements of type <code>E</code>,
-	 * so this cast is not a problem. We need this cast because
-	 * all the elements of the original collection were copied into
-	 * an object array (<code>Object[]</code>).
-	 */
-	@SuppressWarnings("unchecked")
-	protected E nestedNext() {
-		return (E) this.listIterator.next();
-	}
-
-	/**
-	 * The list passed in during construction held elements of type <code>E</code>,
-	 * so this cast is not a problem. We need this cast because
-	 * all the elements of the original collection were copied into
-	 * an object array (<code>Object[]</code>).
-	 */
-	@SuppressWarnings("unchecked")
-	protected E nestedPrevious() {
-		return (E) this.listIterator.previous();
-	}
-
-	/**
-	 * Add the specified element to the original list.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link Mutator}.
-	 */
-	protected void add(int index, E o) {
-		this.mutator.add(index, o);
-	}
-
-	/**
-	 * Remove the specified element from the original list.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link Mutator}.
-	 */
-	protected void remove(int index) {
-		this.mutator.remove(index);
-	}
-
-	/**
-	 * Set the specified element in the original list.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link Mutator}.
-	 */
-	protected void set(int index, E o) {
-		this.mutator.set(index, o);
-	}
-
-
-	// ********** overrides **********
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this);
-	}
-
-
-	//********** member interface **********
-
-	/**
-	 * Used by {@link CloneListIterator} to remove
-	 * elements from the original list; since the list iterator
-	 * does not have direct access to the original list.
-	 */
-	public interface Mutator<T> {
-
-		/**
-		 * Add the specified object to the original list.
-		 */
-		void add(int index, T o);
-
-		/**
-		 * Remove the specified object from the original list.
-		 */
-		void remove(int index);
-
-		/**
-		 * Set the specified object in the original list.
-		 */
-		void set(int index, T o);
-
-
-		final class ReadOnly<S> implements Mutator<S> {
-			@SuppressWarnings("rawtypes")
-			public static final Mutator INSTANCE = new ReadOnly();
-			@SuppressWarnings("unchecked")
-			public static <R> Mutator<R> instance() {
-				return INSTANCE;
-			}
-			// ensure single instance
-			private ReadOnly() {
-				super();
-			}
-			// add is not supported
-			public void add(int index, Object o) {
-				throw new UnsupportedOperationException();
-			}
-			// remove is not supported
-			public void remove(int index) {
-				throw new UnsupportedOperationException();
-			}
-			// set is not supported
-			public void set(int index, Object o) {
-				throw new UnsupportedOperationException();
-			}
-			@Override
-			public String toString() {
-				return "CloneListIterator.Mutator.ReadOnly"; //$NON-NLS-1$
-			}
-			private static final long serialVersionUID = 1L;
-			private Object readResolve() {
-				// replace this object with the singleton
-				return INSTANCE;
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CompositeIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CompositeIterator.java
deleted file mode 100644
index f2127a2..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CompositeIterator.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-
-/**
- * A <code>CompositeIterator</code> wraps a collection
- * of {@link Iterator}s and makes them appear to be a single
- * {@link Iterator}.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.CompositeIterable
- */
-public class CompositeIterator<E>
-	implements Iterator<E>
-{
-	private final Iterator<? extends Iterator<? extends E>> iterators;
-	private Iterator<? extends E> currentIterator;
-	private Iterator<? extends E> lastIteratorToReturnNext;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an iterator that returns all the elements held by the
-	 * specified iterables.
-	 */
-	public CompositeIterator(Iterable<? extends Iterable<? extends E>> iterables) {
-		this(
-			new TransformationIterator<Iterable<? extends E>, Iterator<? extends E>>(iterables.iterator()) {
-				@Override
-				protected Iterator<? extends E> transform(Iterable<? extends E> iterable) {
-					return iterable.iterator();
-				}
-			}
-		);
-	}
-
-	/**
-	 * Construct an iterator with the specified collection of iterators.
-	 */
-	public CompositeIterator(Iterator<? extends Iterator<? extends E>> iterators) {
-		super();
-		this.iterators = iterators;
-	}
-
-	/**
-	 * Construct an iterator with the specified object prepended
-	 * to the specified iterable.
-	 */
-	public CompositeIterator(E object, Iterable<? extends E> iterable) {
-		this(object, iterable.iterator());
-	}
-
-	/**
-	 * Construct an iterator with the specified object prepended
-	 * to the specified iterator.
-	 */
-	@SuppressWarnings("unchecked")
-	public CompositeIterator(E object, Iterator<? extends E> iterator) {
-		this(new SingleElementIterator<E>(object), iterator);
-	}
-
-	/**
-	 * Construct an iterator with the specified object appended
-	 * to the specified iterable.
-	 */
-	public CompositeIterator(Iterable<? extends E> iterable, E object) {
-		this(iterable.iterator(), object);
-	}
-
-	/**
-	 * Construct an iterator with the specified object appended
-	 * to the specified iterator.
-	 */
-	@SuppressWarnings("unchecked")
-	public CompositeIterator(Iterator<? extends E> iterator, E object) {
-		this(iterator, new SingleElementIterator<E>(object));
-	}
-
-	/**
-	 * Construct an iterator with the specified iterables.
-	 */
-	public CompositeIterator(Iterable<? extends E>... iterables) {
-		this(new ArrayIterable<Iterable<? extends E>>(iterables));
-	}
-
-	/**
-	 * Construct an iterator with the specified iterators.
-	 */
-	public CompositeIterator(Iterator<? extends E>... iterators) {
-		this(new ArrayIterator<Iterator<? extends E>>(iterators));
-	}
-
-
-	// ********** Iterator implementation **********
-
-	public boolean hasNext() {
-		try {
-			this.loadCurrentIterator();
-		} catch (NoSuchElementException ex) {
-			// this occurs if there are no iterators at all
-			return false;
-		}
-		return this.currentIterator.hasNext();
-	}
-
-	public E next() {
-		this.loadCurrentIterator();
-		E result = this.currentIterator.next();
-
-		// the statement above will throw a NoSuchElementException
-		// if the current iterator is at the end of the line;
-		// so if we get here, we can set 'lastIteratorToReturnNext'
-		this.lastIteratorToReturnNext = this.currentIterator;
-
-		return result;
-	}
-
-	public void remove() {
-		if (this.lastIteratorToReturnNext == null) {
-			// CompositeIterator#next() has never been called
-			throw new IllegalStateException();
-		}
-		this.lastIteratorToReturnNext.remove();
-	}
-
-	/**
-	 * Load {@link currentIterator} with the first iterator that {@link Iterator#hasNext()}
-	 * or the final iterator if all the elements have already been retrieved.
-	 */
-	private void loadCurrentIterator() {
-		if (this.currentIterator == null) {
-			this.currentIterator = this.iterators.next();
-		}
-		while (( ! this.currentIterator.hasNext()) && this.iterators.hasNext()) {
-			this.currentIterator = this.iterators.next();
-		}
-	}
-
-
-	// ********** overrides **********
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterators);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CompositeListIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CompositeListIterator.java
deleted file mode 100644
index e1d3c7a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CompositeListIterator.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayListIterable;
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-
-/**
- * A <code>CompositeListIterator</code> wraps a list
- * of {@link ListIterator}s and makes them appear to be a single
- * {@link ListIterator}.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.CompositeListIterable
- */
-public class CompositeListIterator<E>
-	implements ListIterator<E>
-{
-	private final ListIterator<? extends ListIterator<E>> iterators;
-	private ListIterator<E> nextIterator;
-	private int nextIndex;
- 	/**
- 	 * true if "next" was last returned; false if "previous" was last returned;
- 	 * this determines the effect of {@link #remove(Object)} on {@link #nextIndex}
- 	 */
-	private boolean nextReturned;
-	private ListIterator<E> lastIteratorToReturnElement;
-
-
-	/**
-	 * Construct a list iterator on the elements in the specified list of lists.
-	 */
-	public CompositeListIterator(List<? extends List<E>> lists) {
-		this(
-			new TransformationListIterator<List<E>, ListIterator<E>>(lists.listIterator()) {
-				@Override
-				protected ListIterator<E> transform(List<E> list) {
-					return list.listIterator();
-				}
-			}
-		);
-	}
-
-	/**
-	 * Construct a list iterator on the elements in the specified list of lists.
-	 */
-	public CompositeListIterator(ListIterable<? extends ListIterable<E>> listIterables) {
-		this(
-			new TransformationListIterator<ListIterable<E>, ListIterator<E>>(listIterables.iterator()) {
-				@Override
-				protected ListIterator<E> transform(ListIterable<E> list) {
-					return list.iterator();
-				}
-			}
-		);
-	}
-
-	/**
-	 * Construct a list iterator with the specified list of list iterators.
-	 */
-	public CompositeListIterator(ListIterator<? extends ListIterator<E>> iterators) {
-		super();
-		this.iterators = iterators;
-		this.nextIndex = 0;
-		this.nextReturned = false;
-	}
-
-	/**
-	 * Construct a list iterator with the specified object prepended
-	 * to the specified list.
-	 */
-	public CompositeListIterator(E object, List<E> list) {
-		this(object, list.listIterator());
-	}
-
-	/**
-	 * Construct a list iterator with the specified object prepended
-	 * to the specified list.
-	 */
-	public CompositeListIterator(E object, ListIterable<E> listIterable) {
-		this(object, listIterable.iterator());
-	}
-
-	/**
-	 * Construct a list iterator with the specified object prepended
-	 * to the specified iterator.
-	 */
-	@SuppressWarnings("unchecked")
-	public CompositeListIterator(E object, ListIterator<E> iterator) {
-		this(new SingleElementListIterator<E>(object), iterator);
-	}
-
-	/**
-	 * Construct a list iterator with the specified object appended
-	 * to the specified list.
-	 */
-	public CompositeListIterator(List<E> list, E object) {
-		this(list.listIterator(), object);
-	}
-
-	/**
-	 * Construct a list iterator with the specified object appended
-	 * to the specified list.
-	 */
-	public CompositeListIterator(ListIterable<E> listIterable, E object) {
-		this(listIterable.iterator(), object);
-	}
-
-	/**
-	 * Construct a list iterator with the specified object appended
-	 * to the specified iterator.
-	 */
-	@SuppressWarnings("unchecked")
-	public CompositeListIterator(ListIterator<E> iterator, E object) {
-		this(iterator, new SingleElementListIterator<E>(object));
-	}
-
-	/**
-	 * Construct a list iterator with the specified lists.
-	 */
-	public CompositeListIterator(List<E>... lists) {
-		this(Arrays.asList(lists));
-	}
-
-	/**
-	 * Construct a list iterator with the specified lists.
-	 */
-	public CompositeListIterator(ListIterable<E>... listIterables) {
-		this(new ArrayListIterable<ListIterable<E>>(listIterables));
-	}
-
-	/**
-	 * Construct a list iterator with the specified list iterators.
-	 */
-	public CompositeListIterator(ListIterator<E>... iterators) {
-		this(new ArrayListIterator<ListIterator<E>>(iterators));
-	}
-
-	public void add(E o) {
-		this.checkNextIterator();
-		this.nextIterator.add(o);
-		this.nextIndex++;
-	}
-
-	public boolean hasNext() {
-		try {
-			this.loadNextIterator();
-		} catch (NoSuchElementException ex) {
-			// this occurs if there are no iterators at all
-			return false;
-		}
-		return this.nextIterator.hasNext();
-	}
-
-	public boolean hasPrevious() {
-		try {
-			this.loadPreviousIterator();
-		} catch (NoSuchElementException ex) {
-			// this occurs if there are no iterators at all
-			return false;
-		}
-		return this.nextIterator.hasPrevious();
-	}
-
-	public E next() {
-		this.loadNextIterator();
-		E result = this.nextIterator.next();
-
-		// the statement above will throw a NoSuchElementException
-		// if the current iterator is at the end of the line;
-		// so if we get here, we can set the 'lastIteratorToReturnElement'
-		this.lastIteratorToReturnElement = this.nextIterator;
-		this.nextIndex++;
-		this.nextReturned = true;
-
-		return result;
-	}
-
-	public int nextIndex() {
-		return this.nextIndex;
-	}
-
-	public E previous() {
-		this.loadPreviousIterator();
-		E result = this.nextIterator.previous();
-
-		// the statement above will throw a NoSuchElementException
-		// if the current iterator is at the end of the line;
-		// so if we get here, we can set the 'lastIteratorToReturnElement'
-		this.lastIteratorToReturnElement = this.nextIterator;
-		this.nextIndex--;
-		this.nextReturned = false;
-
-		return result;
-	}
-
-	public int previousIndex() {
-		return this.nextIndex  - 1;
-	}
-
-	public void remove() {
-		if (this.lastIteratorToReturnElement == null) {
-			throw new IllegalStateException();
-		}
-		this.lastIteratorToReturnElement.remove();
-		if (this.nextReturned) {
-			// decrement the index because the "next" element has moved forward in the list
-			this.nextIndex--;
-		}
-	}
-
-	public void set(E e) {
-		if (this.lastIteratorToReturnElement == null) {
-			throw new IllegalStateException();
-		}
-		this.lastIteratorToReturnElement.set(e);
-	}
-
-	/**
-	 * Load 'nextIterator' with the first iterator that <code>hasNext()</code>
-	 * or the final iterator if all the elements have already been retrieved.
-	 */
-	private void loadNextIterator() {
-		this.checkNextIterator();
-		while (( ! this.nextIterator.hasNext()) && this.iterators.hasNext()) {
-			this.nextIterator = this.iterators.next();
-		}
-	}
-
-	/**
-	 * Load 'nextIterator' with the first iterator that <code>hasPrevious()</code>
-	 * or the first iterator if all the elements have already been retrieved.
-	 */
-	private void loadPreviousIterator() {
-		this.checkNextIterator();
-		while (( ! this.nextIterator.hasPrevious()) && this.iterators.hasPrevious()) {
-			this.nextIterator = this.iterators.previous();
-		}
-	}
-
-	/**
-	 * If 'nextIterator' is null, load it with the first iterator.
-	 */
-	private void checkNextIterator() {
-		if (this.nextIterator == null) {
-			this.nextIterator = this.iterators.next();
-		}
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterators);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EmptyIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EmptyIterator.java
deleted file mode 100644
index 5fa4d4f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EmptyIterator.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * An <code>EmptyIterator</code> is just that.
- * 
- * @param <E> the type of elements (not) returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.EmptyIterable
- */
-public final class EmptyIterator<E>
-	implements Iterator<E>
-{
-
-	// singleton
-	@SuppressWarnings("rawtypes")
-	private static final EmptyIterator INSTANCE = new EmptyIterator();
-
-	/**
-	 * Return the singleton.
-	 */
-	@SuppressWarnings("unchecked")
-	public static <T> Iterator<T> instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private EmptyIterator() {
-		super();
-	}
-
-	public boolean hasNext() {
-		return false;
-	}
-
-	public E next() {
-		throw new NoSuchElementException();
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this);
-	}
-
-	private static final long serialVersionUID = 1L;
-	private Object readResolve() {
-		// replace this object with the singleton
-		return INSTANCE;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EmptyListIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EmptyListIterator.java
deleted file mode 100644
index 5cd142d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EmptyListIterator.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * An <code>EmptyListIterator</code> is just that.
- * 
- * @param <E> the type of elements (not) returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.EmptyListIterable
- */
-public final class EmptyListIterator<E>
-	implements ListIterator<E>
-{
-
-	// singleton
-	@SuppressWarnings("rawtypes")
-	private static final EmptyListIterator INSTANCE = new EmptyListIterator();
-
-	/**
-	 * Return the singleton.
-	 */
-	@SuppressWarnings("unchecked")
-	public static <T> ListIterator<T> instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure single instance.
-	 */
-	private EmptyListIterator() {
-		super();
-	}
-	
-	public void add(E e) {
-		throw new UnsupportedOperationException();
-	}
-
-	public boolean hasNext() {
-		return false;
-	}
-
-	public boolean hasPrevious() {
-		return false;
-	}
-
-	public E next() {
-		throw new NoSuchElementException();
-	}
-
-	public int nextIndex() {
-		return 0;
-	}
-
-	public E previous() {
-		throw new NoSuchElementException();
-	}
-
-	public int previousIndex() {
-		return -1;
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	public void set(E e) {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this);
-	}
-	
-	private static final long serialVersionUID = 1L;
-	private Object readResolve() {
-		// replace this object with the singleton
-		return INSTANCE;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EnumerationIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EnumerationIterator.java
deleted file mode 100644
index d39ebfe..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EnumerationIterator.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Enumeration;
-import java.util.Iterator;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * An <code>EnumerationIterator</code> wraps an
- * {@link Enumeration} so that it can be treated like an
- * {@link Iterator}.
- * 
- * @param <E> the type of elements returned by the iterator
- */
-public class EnumerationIterator<E>
-	implements Iterator<E>
-{
-	private final Enumeration<? extends E> enumeration;
-
-	/**
-	 * Construct an iterator that wraps the specified enumeration.
-	 */
-	public EnumerationIterator(Enumeration<? extends E> enumeration) {
-		this.enumeration = enumeration;
-	}
-	
-	public boolean hasNext() {
-		return this.enumeration.hasMoreElements();
-	}
-	
-	public E next() {
-		return this.enumeration.nextElement();
-	}
-	
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-	
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.enumeration);
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/FilteringIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/FilteringIterator.java
deleted file mode 100644
index 642b4a3..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/FilteringIterator.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.Filter;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>FilteringIterator</code> wraps another {@link Iterator}
- * and uses a {@link Filter} to determine which elements in the
- * nested iterator are to be returned by calls to {@link #next()}.
- * <p>
- * As an alternative to building a {@link Filter</code>, a subclass
- * of <code>FilteringIterator</code> can override the
- * {@link #accept(Object)} method.
- * <p>
- * One, possibly undesirable, side-effect of using this iterator is that
- * the nested iterator's <code>next()</code> method will be invoked
- * <em>before</em> the filtered iterator's {@link #next()}
- * method is invoked. This is because the "next" element must be
- * checked for whether it is to be accepted before the filtered iterator
- * can determine whether it has a "next" element (i.e. that the
- * {@link #hasNext()} method should return <code>true</code>).
- * This also prevents a filtered iterator from supporting the optional
- * <code>remove()</code> method.
- * 
- * @param <E> the type of elements to be filtered
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.FilteringIterable
- */
-public class FilteringIterator<E>
-	implements Iterator<E>
-{
-	private final Iterator<? extends E> iterator;
-	private final Filter<E> filter;
-	private E next;
-	private boolean done;
-
-
-	/**
-	 * Construct an iterator with the specified
-	 * iterable and a disabled filter.
-	 * Use this constructor if you want to override the
-	 * {@link #accept(Object)} method instead of building
-	 * a {@link Filter}.
-	 */
-	public FilteringIterator(Iterable<? extends E> iterable) {
-		this(iterable.iterator());
-	}
-
-	/**
-	 * Construct an iterator with the specified nested
-	 * iterator and a disabled filter.
-	 * Use this constructor if you want to override the
-	 * {@link #accept(Object)} method instead of building
-	 * a {@link Filter}.
-	 */
-	public FilteringIterator(Iterator<? extends E> iterator) {
-		this(iterator, Filter.Disabled.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator with the specified
-	 * iterable and filter.
-	 */
-	public FilteringIterator(Iterable<? extends E> iterable, Filter<E> filter) {
-		this(iterable.iterator(), filter);
-	}
-
-	/**
-	 * Construct an iterator with the specified nested
-	 * iterator and filter.
-	 */
-	public FilteringIterator(Iterator<? extends E> iterator, Filter<E> filter) {
-		super();
-		this.iterator = iterator;
-		this.filter = filter;
-		this.loadNext();
-	}
-
-	public boolean hasNext() {
-		return ! this.done;
-	}
-
-	public E next() {
-		if (this.done) {
-			throw new NoSuchElementException();
-		}
-		E result = this.next;
-		this.loadNext();
-		return result;
-	}
-
-	/**
-	 * Because we need to pre-load the next element
-	 * to be returned, we cannot support the <code>remove()</code>
-	 * method.
-	 */
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * Load next with the next valid entry from the nested
-	 * iterator. If there are none, next is set to <code>END</code>.
-	 */
-	private void loadNext() {
-		this.done = true;
-		while (this.iterator.hasNext() && (this.done)) {
-			E temp = this.iterator.next();
-			if (this.accept(temp)) {
-				// assume that if the object was accepted it is of type E
-				this.next = temp;
-				this.done = false;
-			} else {
-				this.next = null;
-				this.done = true;
-			}
-		}
-	}
-
-	/**
-	 * Return whether the {@link FilteringIterator}
-	 * should return the specified next element from a call to the
-	 * {@link #next()} method.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link Filter}.
-	 */
-	protected boolean accept(E o) {
-		return this.filter.accept(o);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterator);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/GraphIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/GraphIterator.java
deleted file mode 100644
index 516573e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/GraphIterator.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>GraphIterator</code> is similar to a {@link TreeIterator}
- * except that it cannot be assumed that all nodes assume a strict tree
- * structure. For instance, in a tree, a node cannot be a descendent of
- * itself, but a graph may have a cyclical structure.
- * 
- * A <code>GraphIterator</code> simplifies the traversal of a
- * graph of objects, where the objects' protocol(s) provides
- * a method for getting the next collection of nodes in the graph,
- * (or <em>neighbors</em>), but does not provide a method for
- * getting <em>all</em> of the nodes in the graph.
- * (e.g. a neighbor can return his neighbors, and those neighbors
- * can return their neighbors, which might also include the original
- * neighbor, but you only want to visit the original neighbor once.)
- * <p>
- * If a neighbor has already been visited (determined by using 
- * {@link #equals(Object)}), that neighbor is not visited again,
- * nor are the neighbors of that object.
- * <p>
- * It is up to the user of this class to ensure a <em>complete</em> graph.
- * <p>
- * To use, supply:<ul>
- * <li> either the initial node of the graph or an {@link Iterator}
- * over an initial collection of graph nodes
- * <li> a {@link MisterRogers] that tells who the neighbors are
- * of each node
- * (alternatively, subclass <code>GraphIterator</code>
- * and override the {@link #neighbors(Object)} method)
- * </ul>
- * {@link #remove()} is not supported. This behavior, if 
- * desired, must be implemented by the user of this class.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.GraphIterable
- */
-public class GraphIterator<E>
-	implements Iterator<E>
-{
-	// use a LinkedList since we will be pulling off the front and adding to the end
-	private final LinkedList<Iterator<? extends E>> iterators = new LinkedList<Iterator<? extends E>>();
-	private final HashSet<E> visitedNeighbors = new HashSet<E>();
-	private final MisterRogers<E> misterRogers;
-	
-	private Iterator<? extends E> currentIterator;
-	
-	private E nextNeighbor;
-	private boolean done;
-
-
-	/**
-	 * Construct an iterator that returns the nodes of a graph
-	 * with the specified collection of roots
-	 * and a disabled Mr. Rogers.
-	 * Use this constructor if you want to override the
-	 * {@link #neighbors(Object)} method instead of building
-	 * a {@link MisterRogers}.
-	 */
-	public GraphIterator(E... roots) {
-		this(new ArrayIterator<E>(roots));
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a graph
-	 * with the specified collection of roots
-	 * and a disabled Mr. Rogers.
-	 * Use this constructor if you want to override the
-	 * {@link #neighbors(Object)} method instead of building
-	 * a {@link MisterRogers}.
-	 */
-	public GraphIterator(Iterable<? extends E> roots) {
-		this(roots.iterator());
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a graph
-	 * with the specified collection of roots
-	 * and a disabled Mr. Rogers.
-	 * Use this constructor if you want to override the
-	 * {@link #neighbors(Object)} method instead of building
-	 * a {@link MisterRogers}.
-	 */
-	public GraphIterator(Iterator<? extends E> roots) {
-		this(roots, MisterRogers.Disabled.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a graph
-	 * with the specified root
-	 * and a disabled Mr. Rogers.
-	 * Use this constructor if you want to override the
-	 * <code>neighbors(Object)</code> method instead of building
-	 * a <code>MisterRogers</code>.
-	 */
-	public GraphIterator(E root) {
-		this(root, MisterRogers.Disabled.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a graph
-	 * with the specified root and Mr. Rogers.
-	 */
-	public GraphIterator(E root, MisterRogers<E> misterRogers) {
-		this(new SingleElementIterator<E>(root), misterRogers);
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a graph
-	 * with the specified collection of roots and Mr. Rogers.
-	 */
-	public GraphIterator(E[] roots, MisterRogers<E> misterRogers) {
-		this(new ArrayIterator<E>(roots), misterRogers);
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a graph
-	 * with the specified roots and Mr. Rogers.
-	 */
-	public GraphIterator(Iterable<? extends E> roots, MisterRogers<E> misterRogers) {
-		this(roots.iterator(), misterRogers);
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a graph
-	 * with the specified roots and Mr. Rogers.
-	 */
-	public GraphIterator(Iterator<? extends E> roots, MisterRogers<E> misterRogers) {
-		super();
-		this.currentIterator = roots;
-		this.misterRogers = misterRogers;
-		this.loadNextNeighbor();
-	}
-
-	/**
-	 * Load next neighbor with the next entry from the current iterator.
-	 * If the current iterator has none, load the next iterator.
-	 * If there are no more, the {@link done} flag is set.
-	 */
-	private void loadNextNeighbor() {
-		if (this.currentIterator == EmptyIterator.instance()) {
-			this.done = true;
-		}
-		else if (this.currentIterator.hasNext()) {
-			E nextPossibleNeighbor = this.currentIterator.next();
-			if (this.visitedNeighbors.contains(nextPossibleNeighbor)) {
-				this.loadNextNeighbor();  // recurse
-			} else {
-				this.nextNeighbor = nextPossibleNeighbor;
-				this.visitedNeighbors.add(nextPossibleNeighbor);
-				this.iterators.add(this.neighbors(nextPossibleNeighbor));
-			}
-		} 
-		else {
-			for (Iterator<? extends Iterator<? extends E>> stream = this.iterators.iterator(); ! this.currentIterator.hasNext() && stream.hasNext(); ) {
-				this.currentIterator = stream.next();
-				stream.remove();
-			}
-			if ( ! this.currentIterator.hasNext()) {
-				this.currentIterator = EmptyIterator.instance();
-			}
-			this.loadNextNeighbor();  // recurse
-		}
-	}
-
-	public boolean hasNext() {
-		return ! this.done;
-	}
-
-	public E next() {
-		if (this.done) {
-			throw new NoSuchElementException();
-		}
-		E next = this.nextNeighbor;
-		this.loadNextNeighbor();
-		return next;
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * Return the immediate neighbors of the specified object.
-	 */
-	protected Iterator<? extends E> neighbors(E next) {
-		return this.misterRogers.neighbors(next);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.currentIterator);
-	}
-	
-	
-	//********** inner classes **********
-	
-	/**
-	 * Used by {@link GraphIterator} to retrieve
-	 * the immediate neighbors of a node in the graph.
-	 * "These are the people in your neighborhood..."
-	 */
-	public interface MisterRogers<T> {
-
-		/**
-		 * Return the immediate neighbors of the specified object.
-		 */
-		Iterator<? extends T> neighbors(T next);
-		
-		
-		final class Null<S> implements MisterRogers<S> {
-			@SuppressWarnings("rawtypes")
-			public static final MisterRogers INSTANCE = new Null();
-			@SuppressWarnings("unchecked")
-			public static <R> MisterRogers<R> instance() {
-				return INSTANCE;
-			}
-			// ensure single instance
-			private Null() {
-				super();
-			}
-			// return no neighbors
-			public Iterator<S> neighbors(S next) {
-				return EmptyIterator.instance();
-			}
-			@Override
-			public String toString() {
-				return "GraphIterator.MisterRogers.Null"; //$NON-NLS-1$
-			}
-			private static final long serialVersionUID = 1L;
-			private Object readResolve() {
-				// replace this object with the singleton
-				return INSTANCE;
-			}
-		}
-
-		/** The Mr. Rogers used when the {@link GraphIterator#neighbors(Object)} method is overridden. */
-		final class Disabled<S> implements MisterRogers<S> {
-			@SuppressWarnings("rawtypes")
-			public static final MisterRogers INSTANCE = new Disabled();
-			@SuppressWarnings("unchecked")
-			public static <R> MisterRogers<R> instance() {
-				return INSTANCE;
-			}
-			// ensure single instance
-			private Disabled() {
-				super();
-			}
-			// throw an exception
-			public Iterator<S> neighbors(S next) {
-				throw new UnsupportedOperationException();  // GraphIterator.neighbors(Object) was not implemented
-			}
-			@Override
-			public String toString() {
-				return "GraphIterator.MisterRogers.Disabled"; //$NON-NLS-1$
-			}
-			private static final long serialVersionUID = 1L;
-			private Object readResolve() {
-				// replace this object with the singleton
-				return INSTANCE;
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/PeekableIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/PeekableIterator.java
deleted file mode 100644
index 04a134b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/PeekableIterator.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>PeekableIterator</code> wraps another {@link Iterator}
- * and allows a {@link #peek()} at the next element to be 
- * returned by {@link #next()}.
- * <p>
- * One, possibly undesirable, side-effect of using this iterator is that
- * the nested iterator's <code>next()</code> method will be invoked
- * <em>before</em> the peekable iterator's {@link #next()}
- * method is invoked. This is because the "next" element must be
- * pre-loaded for the {@link #peek()} method.
- * This also prevents a peekable iterator from supporting the optional
- * {@link #remove()} method.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.PeekableIterable
- */
-public class PeekableIterator<E>
-	implements Iterator<E>
-{
-	private final Iterator<? extends E> iterator;
-	private E next;
-	private boolean done;
-
-
-	/**
-	 * Construct a peekable iterator that wraps the specified
-	 * iterable.
-	 */
-	public PeekableIterator(Iterable<? extends E> iterable) {
-		this(iterable.iterator());
-	}
-
-	/**
-	 * Construct a peekable iterator that wraps the specified nested
-	 * iterator.
-	 */
-	public PeekableIterator(Iterator<? extends E> iterator) {
-		super();
-		this.iterator = iterator;
-		this.done = false;
-		this.loadNext();
-	}
-
-	public boolean hasNext() {
-		return ! this.done;
-	}
-
-	public E next() {
-		if (this.done) {
-			throw new NoSuchElementException();
-		}
-		E result = this.next;
-		this.loadNext();
-		return result;
-	}
-
-	/**
-	 * Return the element that will be returned by the next call to the
-	 * {@link #next()} method, without advancing past it.
-	 */
-	public E peek() {
-		if (this.done) {
-			throw new NoSuchElementException();
-		}
-		return this.next;
-	}
-
-	/**
-	 * Because we need to pre-load the next element
-	 * to be returned, we cannot support the {@link #remove()}
-	 * method.
-	 */
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * Load next with the next entry from the nested
-	 * iterator. If there are none, {@link #next} is set to <code>null</code>
-	 * and {@link #done} is set to <code>true</code>.
-	 */
-	private void loadNext() {
-		if (this.iterator.hasNext()) {
-			this.next = this.iterator.next();
-		} else {
-			this.next = null;
-			this.done = true;
-		}
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterator);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/QueueIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/QueueIterator.java
deleted file mode 100644
index 80d6b6a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/QueueIterator.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.Queue;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>QueueIterator</code> provides an {@link Iterator}
- * for a {@link Queue} of objects of type <code>E</code>. The queue's elements
- * are {@link Queue#dequeue() dequeue}d" as the iterator returns them with
- * calls to {@link #next()}.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see Queue
- * @see org.eclipse.jpt.utility.internal.iterables.QueueIterable
- */
-public class QueueIterator<E>
-	implements Iterator<E>
-{
-	private final Queue<E> queue;
-
-
-	/**
-	 * Construct an iterator for the specified queue.
-	 */
-	public QueueIterator(Queue<E> queue) {
-		super();
-		this.queue = queue;
-	}
-
-	public boolean hasNext() {
-		return ! this.queue.isEmpty();
-	}
-
-	public E next() {
-		return this.queue.dequeue();
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.queue);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ReadOnlyCompositeListIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ReadOnlyCompositeListIterator.java
deleted file mode 100644
index 2ad79fd..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ReadOnlyCompositeListIterator.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayListIterable;
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-
-/**
- * A <code>ReadOnlyCompositeListIterator</code> wraps a list
- * of {@link ListIterator}s and makes them appear to be a single
- * read-only {@link ListIterator}. A read-only composite list
- * iterator is more flexible than a normal composite list iterator when it
- * comes to the element types of the nested iterators.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.ReadOnlyCompositeListIterable
- */
-public class ReadOnlyCompositeListIterator<E>
-	implements ListIterator<E>
-{
-	private final ListIterator<? extends ListIterator<? extends E>> iterators;
-	private ListIterator<? extends E> nextIterator;
-	private int nextIndex;
-
-
-	/**
-	 * Construct a read-only list iterator with the specified list of lists.
-	 */
-	public ReadOnlyCompositeListIterator(List<? extends List<? extends E>> lists) {
-		this(
-			new TransformationListIterator<List<? extends E>, ListIterator<? extends E>>(lists.listIterator()) {
-				@Override
-				protected ListIterator<? extends E> transform(List<? extends E> list) {
-					return list.listIterator();
-				}
-			}
-		);
-	}
-
-	/**
-	 * Construct a read-only list iterator with the specified list of lists.
-	 */
-	public ReadOnlyCompositeListIterator(ListIterable<? extends ListIterable<? extends E>> listIterables) {
-		this(
-			new TransformationListIterator<ListIterable<? extends E>, ListIterator<? extends E>>(listIterables.iterator()) {
-				@Override
-				protected ListIterator<? extends E> transform(ListIterable<? extends E> listIterable) {
-					return listIterable.iterator();
-				}
-			}
-		);
-	}
-
-	/**
-	 * Construct a read-only list iterator with the specified list of
-	 * list iterators.
-	 */
-	public ReadOnlyCompositeListIterator(ListIterator<? extends ListIterator<? extends E>> iterators) {
-		super();
-		this.iterators = iterators;
-		this.nextIndex = 0;
-	}
-
-	/**
-	 * Construct a read-only list iterator with the specified object prepended
-	 * to the specified list.
-	 */
-	public ReadOnlyCompositeListIterator(E object, List<? extends E> list) {
-		this(object, list.listIterator());
-	}
-
-	/**
-	 * Construct a read-only list iterator with the specified object prepended
-	 * to the specified list.
-	 */
-	public ReadOnlyCompositeListIterator(E object, ListIterable<? extends E> listIterable) {
-		this(object, listIterable.iterator());
-	}
-
-	/**
-	 * Construct a read-only list iterator with the specified object prepended
-	 * to the specified iterator.
-	 */
-	@SuppressWarnings("unchecked")
-	public ReadOnlyCompositeListIterator(E object, ListIterator<? extends E> iterator) {
-		this(new SingleElementListIterator<E>(object), iterator);
-	}
-
-	/**
-	 * Construct a read-only list iterator with the specified object appended
-	 * to the specified list.
-	 */
-	public ReadOnlyCompositeListIterator(List<? extends E> list, E object) {
-		this(list.listIterator(), object);
-	}
-
-	/**
-	 * Construct a read-only list iterator with the specified object appended
-	 * to the specified list.
-	 */
-	public ReadOnlyCompositeListIterator(ListIterable<? extends E> listIterable, E object) {
-		this(listIterable.iterator(), object);
-	}
-
-	/**
-	 * Construct a read-only list iterator with the specified object appended
-	 * to the specified iterator.
-	 */
-	@SuppressWarnings("unchecked")
-	public ReadOnlyCompositeListIterator(ListIterator<? extends E> iterator, E object) {
-		this(iterator, new SingleElementListIterator<E>(object));
-	}
-
-	/**
-	 * Construct a read-only list iterator with the specified lists.
-	 */
-	public ReadOnlyCompositeListIterator(List<? extends E>... lists) {
-		this(Arrays.asList(lists));
-	}
-
-	/**
-	 * Construct a read-only list iterator with the specified lists.
-	 */
-	public ReadOnlyCompositeListIterator(ListIterable<? extends E>... listIterables) {
-		this(new ArrayListIterable<ListIterable<? extends E>>(listIterables));
-	}
-
-	/**
-	 * Construct a read-only list iterator with the specified list iterators.
-	 */
-	public ReadOnlyCompositeListIterator(ListIterator<? extends E>... iterators) {
-		this(new ArrayListIterator<ListIterator<? extends E>>(iterators));
-	}
-
-	public boolean hasNext() {
-		try {
-			this.loadNextIterator();
-		} catch (NoSuchElementException ex) {
-			// this occurs if there are no iterators at all
-			return false;
-		}
-		return this.nextIterator.hasNext();
-	}
-
-	public boolean hasPrevious() {
-		try {
-			this.loadPreviousIterator();
-		} catch (NoSuchElementException ex) {
-			// this occurs if there are no iterators at all
-			return false;
-		}
-		return this.nextIterator.hasPrevious();
-	}
-
-	public E next() {
-		this.loadNextIterator();
-		E result = this.nextIterator.next();
-	
-		// the statement above will throw a NoSuchElementException
-		// if the current iterator is at the end of the line;
-		// so if we get here, we can increment 'nextIndex'
-		this.nextIndex++;
-	
-		return result;
-	}
-
-	public int nextIndex() {
-		return this.nextIndex;
-	}
-
-	public E previous() {
-		this.loadPreviousIterator();
-		E result = this.nextIterator.previous();
-	
-		// the statement above will throw a NoSuchElementException
-		// if the current iterator is at the end of the line;
-		// so if we get here, we can decrement 'nextIndex'
-		this.nextIndex--;
-	
-		return result;
-	}
-
-	public int previousIndex() {
-		return this.nextIndex  - 1;
-	}
-
-	public void add(E o) {
-		// the list iterator is read-only
-		throw new UnsupportedOperationException();
-	}
-
-	public void remove() {
-		// the list iterator is read-only
-		throw new UnsupportedOperationException();
-	}
-
-	public void set(E e) {
-		// the list iterator is read-only
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * Load {@link #nextIterator} with the first iterator that {@link #hasNext()}
-	 * or the final iterator if all the elements have already been retrieved.
-	 */
-	private void loadNextIterator() {
-		this.checkNextIterator();
-		while (( ! this.nextIterator.hasNext()) && this.iterators.hasNext()) {
-			this.nextIterator = this.iterators.next();
-		}
-	}
-
-	/**
-	 * Load {@link #nextIterator} with the first iterator that {@link #hasPrevious()}
-	 * or the first iterator if all the elements have already been retrieved.
-	 */
-	private void loadPreviousIterator() {
-		this.checkNextIterator();
-		while (( ! this.nextIterator.hasPrevious()) && this.iterators.hasPrevious()) {
-			this.nextIterator = this.iterators.previous();
-		}
-	}
-
-	/**
-	 * If {@link #nextIterator} is null, load it with the first iterator.
-	 */
-	private void checkNextIterator() {
-		if (this.nextIterator == null) {
-			this.nextIterator = this.iterators.next();
-		}
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterators);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ReadOnlyIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ReadOnlyIterator.java
deleted file mode 100644
index edbef62..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ReadOnlyIterator.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>ReadOnlyIterator</code> wraps another {@link Iterator}
- * and removes support for {@link #remove()}.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.ReadOnlyIterable
- */
-public class ReadOnlyIterator<E>
-	implements Iterator<E>
-{
-	private final Iterator<? extends E> iterator;
-
-	/**
-	 * Construct an iterator on the specified collection that
-	 * disallows removes.
-	 */
-	public ReadOnlyIterator(Iterable<? extends E> c) {
-		this(c.iterator());
-	}
-
-	/**
-	 * Construct an iterator with the specified nested iterator
-	 * and disallow removes.
-	 */
-	public ReadOnlyIterator(Iterator<? extends E> iterator) {
-		super();
-		this.iterator = iterator;
-	}
-
-	public boolean hasNext() {
-		// delegate to the nested iterator
-		return this.iterator.hasNext();
-	}
-
-	public E next() {
-		// delegate to the nested iterator
-		return this.iterator.next();
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterator);
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ReadOnlyListIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ReadOnlyListIterator.java
deleted file mode 100644
index 86884fc..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ReadOnlyListIterator.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-
-/**
- * A <code>ReadOnlyListIterator</code> wraps another
- * {@link ListIterator} and removes support for:<ul>
- * <li>{@link #remove()}
- * 	<li>{@link #set(Object)}
- * 	<li>{@link #add(Object)}
- * </ul>
- * 
- * @param <E> the type of elements returned by the list iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.ReadOnlyListIterable
- */
-public class ReadOnlyListIterator<E>
-	implements ListIterator<E>
-{
-	private final ListIterator<? extends E> listIterator;
-
-
-	/**
-	 * Construct a list iterator on the specified list that
-	 * disallows removes, sets, and adds.
-	 */
-	public ReadOnlyListIterator(List<? extends E> list) {
-		this(list.listIterator());
-	}
-
-	/**
-	 * Construct a list iterator on the specified list that
-	 * disallows removes, sets, and adds.
-	 */
-	public ReadOnlyListIterator(ListIterable<? extends E> listIterable) {
-		this(listIterable.iterator());
-	}
-
-	/**
-	 * Construct a list iterator on the specified list iterator that
-	 * disallows removes, sets, and adds.
-	 */
-	public ReadOnlyListIterator(ListIterator<? extends E> listIterator) {
-		super();
-		this.listIterator = listIterator;
-	}
-
-	public boolean hasNext() {
-		// delegate to the nested iterator
-		return this.listIterator.hasNext();
-	}
-
-	public E next() {
-		// delegate to the nested iterator
-		return this.listIterator.next();
-	}
-
-	public boolean hasPrevious() {
-		// delegate to the nested iterator
-		return this.listIterator.hasPrevious();
-	}
-
-	public E previous() {
-		// delegate to the nested iterator
-		return this.listIterator.previous();
-	}
-
-	public int nextIndex() {
-		// delegate to the nested iterator
-		return this.listIterator.nextIndex();
-	}
-
-	public int previousIndex() {
-		// delegate to the nested iterator
-		return this.listIterator.previousIndex();
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	public void set(E o) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void add(E o) {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.listIterator);
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ResultSetIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ResultSetIterator.java
deleted file mode 100644
index f3d597e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ResultSetIterator.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>ResultSetIterator</code> wraps an SQL {@link ResultSet}
- * and transforms its rows for client consumption. Subclasses can override
- * {@link #buildNext(ResultSet)} to build the expected object from
- * the current row of the result set.
- * <p>
- * To use, supply:<ul>
- * <li> a {@link ResultSet}
- * <li> an {@link Adapter} that converts a row in the {@link ResultSet}
- * into the desired object
- * (alternatively, subclass <code>ResultSetIterator</code>
- * and override the {@link #buildNext(ResultSet)} method)
- * </ul>
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see java.sql.ResultSet
- */
-public class ResultSetIterator<E>
-	implements Iterator<E>
-{
-	private final ResultSet resultSet;
-	private final Adapter<E> adapter;
-	private E next;
-	private boolean done;
-
-
-	/**
-	 * Construct an iterator on the specified result set that returns
-	 * the objects produced by the specified adapter.
-	 */
-	public ResultSetIterator(ResultSet resultSet, Adapter<E> adapter) {
-		super();
-		this.resultSet = resultSet;
-		this.adapter = adapter;
-		this.done = false;
-		this.next = this.buildNext();
-	}
-
-	/**
-	 * Construct an iterator on the specified result set that returns
-	 * the first object in each row of the result set.
-	 */
-	public ResultSetIterator(ResultSet resultSet) {
-		this(resultSet, Adapter.Default.<E>instance());
-	}
-
-	/**
-	 * Build the next object for the iterator to return.
-	 * Close the result set when we reach the end.
-	 */
-	private E buildNext() {
-		try {
-			if (this.resultSet.next()) {
-				return this.buildNext(this.resultSet);
-			}
-			this.resultSet.close();
-			this.done = true;
-			return null;
-		} catch (SQLException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	/**
-	 * By default, return the first object in the current row
-	 * of the result set. Any {@link SQLException}s will
-	 * be caught and wrapped in a {@link RuntimeException}.
-	 */
-	protected E buildNext(ResultSet rs) throws SQLException {
-		return this.adapter.buildNext(rs);
-	}
-
-	public boolean hasNext() {
-		return ! this.done;
-	}
-
-	public E next() {
-		if (this.done) {
-			throw new NoSuchElementException();
-		}
-		E temp = this.next;
-		this.next = this.buildNext();
-		return temp;
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.resultSet);
-	}
-
-
-	// ********** interface **********
-
-	/**
-	 * Used by {@link ResultSetIterator} to convert a
-	 * {@link ResultSet}'s current row into the next object
-	 * to be returned by the {@link Iterator}.
-	 */
-	public interface Adapter<T> {
-
-		/**
-		 * Return an object corresponding to the result set's
-		 * "current" row. Any {@link SQLException}s will
-		 * be caught and wrapped in a {@link RuntimeException}.
-		 * @see java.sql.ResultSet
-		 */
-		T buildNext(ResultSet rs) throws SQLException;
-
-
-		final class Default<S> implements Adapter<S> {
-			@SuppressWarnings("rawtypes")
-			public static final Adapter INSTANCE = new Default();
-			@SuppressWarnings("unchecked")
-			public static <R> Adapter<R> instance() {
-				return INSTANCE;
-			}
-			// ensure single instance
-			private Default() {
-				super();
-			}
-			// return the first object in the current row of the result set
-			@SuppressWarnings("unchecked")
-			public S buildNext(ResultSet rs) throws SQLException {
-				// result set columns are indexed starting with 1
-				return (S) rs.getObject(1);
-			}
-			@Override
-			public String toString() {
-				return "ResultSetIterator.Adapter.Default"; //$NON-NLS-1$
-			}
-			private static final long serialVersionUID = 1L;
-			private Object readResolve() {
-				// replace this object with the singleton
-				return INSTANCE;
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SingleElementIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SingleElementIterator.java
deleted file mode 100644
index 25e89cf..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SingleElementIterator.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>SingleElementIterator</code> holds a single element
- * and returns it with the first call to {@link next()}, at
- * which point it will return <code>false</code> to any subsequent
- * call to {@link #hasNext()}.
- * <p>
- * A <code>SingleElementIterator</code> is equivalent to the
- * {@link Iterator} returned by:
- * 	{@link java.util.Collections#singleton(element)}<code>.iterator()</code>
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.SingleElementIterable
- */
-public class SingleElementIterator<E>
-	implements Iterator<E>
-{
-	private final E element;
-	private boolean done;
-
-
-	/**
-	 * Construct an iterator that returns only the specified element.
-	 */
-	public SingleElementIterator(E element) {
-		super();
-		this.element = element;
-		this.done = false;
-	}
-
-	public boolean hasNext() {
-		return ! this.done;
-	}
-
-	public E next() {
-		if (this.done) {
-			throw new NoSuchElementException();
-		}
-		this.done = true;
-		return this.element;
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.element);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SingleElementListIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SingleElementListIterator.java
deleted file mode 100644
index c407665..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SingleElementListIterator.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>SingleElementListIterator</code> holds a single element
- * and returns it with the first call to {@link next()}, at
- * which point it will return <code>false</code> to any subsequent
- * call to {@link #hasNext()}. Likewise, it will return <code>false</code>
- * to a call to {@link #hasPrevious()} until a call to {@link #next()},
- * at which point a call to {@link #previous()} will return the
- * single element.
- * <p>
- * A <code>SingleElementListIterator</code> is equivalent to the
- * {@link Iterator} returned by:
- * 	{@link java.util.Collections#singletonList(element)}<code>.listIterator()</code>
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.SingleElementListIterable
- */
-public class SingleElementListIterator<E>
-	implements ListIterator<E>
-{
-	private final E element;
-	private boolean hasNext;
-
-
-	/**
-	 * Construct a list iterator that returns only the specified element.
-	 */
-	public SingleElementListIterator(E element) {
-		super();
-		this.element = element;
-		this.hasNext = true;
-	}
-
-	public boolean hasNext() {
-		return this.hasNext;
-	}
-
-	public E next() {
-		if (this.hasNext) {
-			this.hasNext = false;
-			return this.element;
-		}
-		throw new NoSuchElementException();
-	}
-
-	public int nextIndex() {
-		return this.hasNext ? 0 : 1;
-	}
-
-	public boolean hasPrevious() {
-		return ! this.hasNext;
-	}
-
-	public E previous() {
-		if (this.hasNext) {
-			throw new NoSuchElementException();
-		}
-		this.hasNext = true;
-		return this.element;
-	}
-
-	public int previousIndex() {
-		return this.hasNext ? -1 : 0;
-	}
-
-	public void add(E e) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void set(E e) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.element);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/StackIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/StackIterator.java
deleted file mode 100644
index e743fa7..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/StackIterator.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.Stack;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>StackIterator</code> provides an {@link Iterator}
- * for a {@link Stack} of objects of type <code>E</code>. The stack's elements
- * are {@link Stack#pop() pop}ped" as the iterator returns them with
- * calls to {@link #next()}.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see Stack
- * @see org.eclipse.jpt.utility.internal.iterables.StackIterable
- */
-public class StackIterator<E>
-	implements Iterator<E>
-{
-	private final Stack<E> stack;
-
-
-	/**
-	 * Construct an iterator for the specified stack.
-	 */
-	public StackIterator(Stack<E> stack) {
-		super();
-		this.stack = stack;
-	}
-
-	public boolean hasNext() {
-		return ! this.stack.isEmpty();
-	}
-
-	public E next() {
-		return this.stack.pop();
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.stack);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SubIteratorWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SubIteratorWrapper.java
deleted file mode 100644
index eefcfcc..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SubIteratorWrapper.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * Wrap an iterator on elements of type <code>E1</code>, converting it into an
- * iterator on elements of type <code>E2</code>. Assume the wrapped iterator
- * returns only elements of type <code>E2</code>.
- * 
- * @param <E1> input: the type of elements returned by the wrapped iterator
- * @param <E2> output: the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.SubIterableWrapper
- */
-public class SubIteratorWrapper<E1, E2>
-	implements Iterator<E2>
-{
-	private final Iterator<E1> iterator;
-
-
-	public SubIteratorWrapper(Iterable<E1> iterable) {
-		this(iterable.iterator());
-	}
-
-	public SubIteratorWrapper(Iterator<E1> iterator) {
-		super();
-		this.iterator = iterator;
-	}
-
-	public boolean hasNext() {
-		return this.iterator.hasNext();
-	}
-
-	@SuppressWarnings("unchecked")
-	public E2 next() {
-		return (E2) this.iterator.next();
-	}
-
-	public void remove() {
-		this.iterator.remove();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterator);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SubListIteratorWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SubListIteratorWrapper.java
deleted file mode 100644
index c9e5db7..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SubListIteratorWrapper.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-
-/**
- * Wrap a list iterator on elements of type <code>E1</code>, converting it into
- * a list iterator on elements of type <code>E2</code>. Assume the wrapped
- * list iterator returns only elements of type <code>E2</code>.
- * 
- * @param <E1> input: the type of elements returned by the wrapped list iterator
- * @param <E2> output: the type of elements returned by the list iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.SubListIterableWrapper
- */
-public class SubListIteratorWrapper<E1, E2>
-	implements ListIterator<E2>
-{
-	private final ListIterator<E1> listIterator;
-
-
-	public SubListIteratorWrapper(List<E1> list) {
-		this(list.listIterator());
-	}
-
-	public SubListIteratorWrapper(ListIterable<E1> listIterable) {
-		this(listIterable.iterator());
-	}
-
-	public SubListIteratorWrapper(ListIterator<E1> iterator) {
-		super();
-		this.listIterator = iterator;
-	}
-
-	public boolean hasNext() {
-		return this.listIterator.hasNext();
-	}
-
-	@SuppressWarnings("unchecked")
-	public E2 next() {
-		return (E2) this.listIterator.next();
-	}
-
-	public int nextIndex() {
-		return this.listIterator.nextIndex();
-	}
-
-	public boolean hasPrevious() {
-		return this.listIterator.hasPrevious();
-	}
-
-	@SuppressWarnings("unchecked")
-	public E2 previous() {
-		return (E2) this.listIterator.previous();
-	}
-
-	public int previousIndex() {
-		return this.listIterator.previousIndex();
-	}
-
-	public void remove() {
-		this.listIterator.remove();
-	}
-
-	public void set(E2 e) {
-		throw new UnsupportedOperationException();
-	}
-	
-	public void add(E2 e) {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.listIterator);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SuperIteratorWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SuperIteratorWrapper.java
deleted file mode 100644
index 52fd5f6..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SuperIteratorWrapper.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * Wrap an iterator on elements of any sub-type of <code>E</code>, converting it into an
- * iterator on elements of type <code>E</code>. This shouldn't be a problem since there
- * is no way to add invalid elements to the iterator's backing collection.
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.SuperIterableWrapper
- */
-public class SuperIteratorWrapper<E>
-	implements Iterator<E>
-{
-	private final Iterator<? extends E> iterator;
-
-
-	public SuperIteratorWrapper(Iterable<? extends E> iterable) {
-		this(iterable.iterator());
-	}
-
-	public SuperIteratorWrapper(Iterator<? extends E> iterator) {
-		super();
-		this.iterator = iterator;
-	}
-
-	public boolean hasNext() {
-		return this.iterator.hasNext();
-	}
-
-	public E next() {
-		return this.iterator.next();
-	}
-
-	public void remove() {
-		this.iterator.remove();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterator);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SuperListIteratorWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SuperListIteratorWrapper.java
deleted file mode 100644
index c3817ac..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SuperListIteratorWrapper.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-
-/**
- * Wrap a list iterator on elements of any sub-type of <code>E</code>, converting it into a
- * list iterator on elements of type <code>E</code>. This shouldn't be a problem since the
- * resulting list iterator disables the methods that would put invalid elements
- * in the iterator's backing list (i.e. {@link #set(E)} and {@link #add(E)}).
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.SuperListIterableWrapper
- */
-public class SuperListIteratorWrapper<E>
-	implements ListIterator<E>
-{
-	private final ListIterator<? extends E> listIterator;
-
-
-	public SuperListIteratorWrapper(List<? extends E> list) {
-		this(list.listIterator());
-	}
-
-	public SuperListIteratorWrapper(ListIterable<? extends E> listIterable) {
-		this(listIterable.iterator());
-	}
-
-	public SuperListIteratorWrapper(ListIterator<? extends E> listIterator) {
-		super();
-		this.listIterator = listIterator;
-	}
-
-	public boolean hasNext() {
-		return this.listIterator.hasNext();
-	}
-
-	public E next() {
-		return this.listIterator.next();
-	}
-
-	public int nextIndex() {
-		return this.listIterator.nextIndex();
-	}
-
-	public boolean hasPrevious() {
-		return this.listIterator.hasPrevious();
-	}
-
-	public E previous() {
-		return this.listIterator.previous();
-	}
-
-	public int previousIndex() {
-		return this.listIterator.previousIndex();
-	}
-
-	public void remove() {
-		this.listIterator.remove();
-	}
-
-	public void set(E e) {
-		throw new UnsupportedOperationException();
-	}
-	
-	public void add(E e) {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.listIterator);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SynchronizedIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SynchronizedIterator.java
deleted file mode 100644
index 2fd5ae2..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SynchronizedIterator.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * Wrap an iterator and synchronize all its methods so it can be safely shared
- * among multiple threads.
- * 
- * @param <E> the type of elements returned by the iterator
- */
-public class SynchronizedIterator<E>
-	implements Iterator<E>
-{
-	private final Iterator<? extends E> iterator;
-
-	/** Object to synchronize on. */
-	private final Object mutex;
-
-
-	public SynchronizedIterator(Iterable<? extends E> iterable) {
-		this(iterable.iterator());
-	}
-
-	public SynchronizedIterator(Iterable<? extends E> iterable, Object mutex) {
-		this(iterable.iterator(), mutex);
-	}
-
-	public SynchronizedIterator(Iterator<? extends E> iterator) {
-		super();
-		this.iterator = iterator;
-		this.mutex = this;
-	}
-
-	public SynchronizedIterator(Iterator<? extends E> iterator, Object mutex) {
-		super();
-		this.iterator = iterator;
-		this.mutex = mutex;
-	}
-
-	public synchronized boolean hasNext() {
-		synchronized (this.mutex) {
-			return this.iterator.hasNext();
-		}
-	}
-
-	public synchronized E next() {
-		synchronized (this.mutex) {
-			return this.iterator.next();
-		}
-	}
-
-	public synchronized void remove() {
-		synchronized (this.mutex) {
-			this.iterator.remove();
-		}
-	}
-
-	@Override
-	public String toString() {
-		synchronized (this.mutex) {
-			return StringTools.buildToStringFor(this, this.iterator);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SynchronizedListIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SynchronizedListIterator.java
deleted file mode 100644
index d3ffc94..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SynchronizedListIterator.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-
-/**
- * Wrap a list iterator and synchronize all its methods so it can be safely shared
- * among multiple threads.
- * 
- * @param <E> the type of elements returned by the iterator
- */
-public class SynchronizedListIterator<E>
-	implements ListIterator<E>
-{
-	private final ListIterator<E> listIterator;
-
-	/** Object to synchronize on. */
-	private final Object mutex;
-
-
-	public SynchronizedListIterator(List<E> list) {
-		this(list.listIterator());
-	}
-
-	public SynchronizedListIterator(List<E> list, Object mutex) {
-		this(list.listIterator(), mutex);
-	}
-
-	public SynchronizedListIterator(ListIterable<E> listIterable) {
-		this(listIterable.iterator());
-	}
-
-	public SynchronizedListIterator(ListIterable<E> listIterable, Object mutex) {
-		this(listIterable.iterator(), mutex);
-	}
-
-	public SynchronizedListIterator(ListIterator<E> listIterator) {
-		super();
-		this.listIterator = listIterator;
-		this.mutex = this;
-	}
-
-	public SynchronizedListIterator(ListIterator<E> listIterator, Object mutex) {
-		super();
-		this.listIterator = listIterator;
-		this.mutex = mutex;
-	}
-
-	public synchronized boolean hasNext() {
-		synchronized (this.mutex) {
-			return this.listIterator.hasNext();
-		}
-	}
-
-	public synchronized E next() {
-		synchronized (this.mutex) {
-			return this.listIterator.next();
-		}
-	}
-
-	public synchronized int nextIndex() {
-		synchronized (this.mutex) {
-			return this.listIterator.nextIndex();
-		}
-	}
-
-	public synchronized boolean hasPrevious() {
-		synchronized (this.mutex) {
-			return this.listIterator.hasPrevious();
-		}
-	}
-
-	public synchronized E previous() {
-		synchronized (this.mutex) {
-			return this.listIterator.previous();
-		}
-	}
-
-	public synchronized int previousIndex() {
-		synchronized (this.mutex) {
-			return this.listIterator.previousIndex();
-		}
-	}
-
-	public synchronized void remove() {
-		synchronized (this.mutex) {
-			this.listIterator.remove();
-		}
-	}
-
-	public synchronized void add(E e) {
-		synchronized (this.mutex) {
-			this.listIterator.add(e);
-		}
-	}
-
-	public synchronized void set(E e) {
-		synchronized (this.mutex) {
-			this.listIterator.set(e);
-		}
-	}
-
-	@Override
-	public String toString() {
-		synchronized (this.mutex) {
-			return StringTools.buildToStringFor(this, this.listIterator);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TransformationIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TransformationIterator.java
deleted file mode 100644
index 8185d98..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TransformationIterator.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.Transformer;
-
-
-/**
- * A <code>TransformationIterator</code> wraps another {@link Iterator}
- * and transforms its results for client consumption. To use, supply a 
- * {@link Transformer} or subclass <code>TransformationIterator</code>
- * and override the {@link #transform(Object)} method.
- * Objects of type <code>E1</code> are transformed into objects of type <code>E2</code>;
- * i.e. the iterator returns objects of type <code>E2</code>.
- * 
- * @param <E1> input: the type of elements to be transformed
- * @param <E2> output: the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.TransformationIterable
- */
-public class TransformationIterator<E1, E2>
-	implements Iterator<E2>
-{
-	private final Iterator<? extends E1> iterator;
-	private final Transformer<E1, ? extends E2> transformer;
-
-
-	/**
-	 * Construct an iterator with the specified iterable
-	 * and a disabled transformer.
-	 * Use this constructor if you want to override the
-	 * {@link #transform(Object)} method instead of building
-	 * a {@link Transformer}.
-	 */
-	public TransformationIterator(Iterable<? extends E1> iterable) {
-		this(iterable.iterator());
-	}
-
-	/**
-	 * Construct an iterator with the specified nested iterator
-	 * and a disabled transformer.
-	 * Use this constructor if you want to override the
-	 * {@link #transform(Object)} method instead of building
-	 * a {@link Transformer}.
-	 */
-	public TransformationIterator(Iterator<? extends E1> iterator) {
-		this(iterator, Transformer.Disabled.<E1, E2>instance());
-	}
-
-	/**
-	 * Construct an iterator with the specified iterable and transformer.
-	 */
-	public TransformationIterator(Iterable<? extends E1> iterable, Transformer<E1, ? extends E2> transformer) {
-		this(iterable.iterator(), transformer);
-	}
-
-	/**
-	 * Construct an iterator with the specified nested iterator
-	 * and transformer.
-	 */
-	public TransformationIterator(Iterator<? extends E1> iterator, Transformer<E1, ? extends E2> transformer) {
-		super();
-		this.iterator = iterator;
-		this.transformer = transformer;
-	}
-
-	public boolean hasNext() {
-		// delegate to the nested iterator
-		return this.iterator.hasNext();
-	}
-
-	public E2 next() {
-		// transform the object returned by the nested iterator before returning it
-		return this.transform(this.iterator.next());
-	}
-
-	public void remove() {
-		// delegate to the nested iterator
-		this.iterator.remove();
-	}
-
-	/**
-	 * Transform the specified object and return the result.
-	 */
-	protected E2 transform(E1 next) {
-		return this.transformer.transform(next);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.iterator);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TransformationListIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TransformationListIterator.java
deleted file mode 100644
index 358cf6a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TransformationListIterator.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-
-/**
- * A <code>TransformationListIterator</code> wraps another {@link ListIterator}
- * and transforms its results for client consumption. To use, supply a 
- * {@link Transformer} or subclass <code>TransformationIterator</code>
- * and override the {@link #transform(Object)} method.
- * <p>
- * The methods {@link #set(Object)} and {@link #add(Object)}
- * are left unsupported in this class.
- * 
- * @param <E1> input: the type of elements to be transformed
- * @param <E2> output: the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.TransformationListIterable
- */
-public class TransformationListIterator<E1, E2>
-	implements ListIterator<E2>
-{
-	private final ListIterator<? extends E1> listIterator;
-	private final Transformer<E1, ? extends E2> transformer;
-
-
-	/**
-	 * Construct an iterator with the specified list
-	 * and a disabled transformer.
-	 * Use this constructor if you want to override the
-	 * {@link #transform(Object)} method instead of building
-	 * a {@link Transformer}.
-	 */
-	public TransformationListIterator(List<? extends E1> list) {
-		this(list.listIterator());
-	}
-
-	/**
-	 * Construct an iterator with the specified nested listed iterator
-	 * and a disabled transformer.
-	 * Use this constructor if you want to override the
-	 * {@link #transform(Object)} method instead of building
-	 * a {@link Transformer}.
-	 */
-	public TransformationListIterator(ListIterator<? extends E1> listIterator) {
-		this(listIterator, Transformer.Disabled.<E1, E2>instance());
-	}
-
-	/**
-	 * Construct an iterator with the specified list
-	 * and a disabled transformer.
-	 * Use this constructor if you want to override the
-	 * {@link #transform(Object)} method instead of building
-	 * a {@link Transformer}.
-	 */
-	public TransformationListIterator(ListIterable<? extends E1> listIterable) {
-		this(listIterable.iterator());
-	}
-
-	/**
-	 * Construct an iterator with the specified list and transformer.
-	 */
-	public TransformationListIterator(List<? extends E1> list, Transformer<E1, ? extends E2> transformer) {
-		this(list.listIterator(), transformer);
-	}
-
-	/**
-	 * Construct an iterator with the specified list and transformer.
-	 */
-	public TransformationListIterator(ListIterable<? extends E1> listIterable, Transformer<E1, ? extends E2> transformer) {
-		this(listIterable.iterator(), transformer);
-	}
-
-	/**
-	 * Construct an iterator with the specified nested iterator
-	 * and transformer.
-	 */
-	public TransformationListIterator(ListIterator<? extends E1> listIterator, Transformer<E1, ? extends E2> transformer) {
-		super();
-		this.listIterator = listIterator;
-		this.transformer = transformer;
-	}
-
-	public boolean hasNext() {
-		// delegate to the nested iterator
-		return this.listIterator.hasNext();
-	}
-
-	public E2 next() {
-		// transform the object returned by the nested iterator before returning it
-		return this.transform(this.listIterator.next());
-	}
-
-	public int nextIndex() {
-		// delegate to the nested iterator
-		return this.listIterator.nextIndex();
-	}
-
-	public boolean hasPrevious() {
-		// delegate to the nested iterator
-		return this.listIterator.hasPrevious();
-	}
-
-	public E2 previous() {
-		// transform the object returned by the nested iterator before returning it
-		return this.transform(this.listIterator.previous());
-	}
-
-	public int previousIndex() {
-		// delegate to the nested iterator
-		return this.listIterator.previousIndex();
-	}
-
-	public void add(E2 o) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void set(E2 o) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void remove() {
-		// delegate to the nested iterator
-		this.listIterator.remove();
-	}
-
-	/**
-	 * Transform the specified object and return the result.
-	 */
-	protected E2 transform(E1 next) {
-		return this.transformer.transform(next);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.listIterator);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TreeIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TreeIterator.java
deleted file mode 100644
index 5994906..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TreeIterator.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.iterators;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>TreeIterator</code> simplifies the traversal of a
- * tree of objects, where the objects' protocol(s) provides
- * a method for getting the immediate children of the given
- * node but does not provide a method for getting all the
- * descendants (children, grandchildren, etc.) of the given node.
- * <p>
- * To use, supply:<ul>
- * <li> either the root element of the tree or, if the tree has
- * multiple roots, an {@link Iterator} over the set of roots
- * <li> a {@link Midwife} that delivers the children
- * of each child
- * (alternatively, subclass <code>TreeIterator</code>
- * and override the {@link #children(Object)} method)
- * </ul>
- * 
- * @param <E> the type of elements returned by the iterator
- * 
- * @see org.eclipse.jpt.utility.internal.iterables.TreeIterable
- */
-public class TreeIterator<E>
-	implements Iterator<E>
-{
-	private final LinkedList<Iterator<? extends E>> iterators;
-	private final Midwife<E> midwife;
-	private Iterator<? extends E> currentIterator;
-
-
-	/**
-	 * Construct an iterator that returns the nodes of a tree
-	 * with the specified collection of roots
-	 * and a disabled midwife.
-	 * Use this constructor if you want to override the
-	 * {@link #children(Object)} method instead of building
-	 * a {@link Midwife}.
-	 */
-	public TreeIterator(E... roots) {
-		this(new ArrayIterator<E>(roots));
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a tree
-	 * with the specified collection of roots
-	 * and a disabled midwife.
-	 * Use this constructor if you want to override the
-	 * {@link #children(Object)} method instead of building
-	 * a {@link Midwife}.
-	 */
-	public TreeIterator(Iterable<? extends E> roots) {
-		this(roots.iterator());
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a tree
-	 * with the specified collection of roots
-	 * and a disabled midwife.
-	 * Use this constructor if you want to override the
-	 * {@link #children(Object)} method instead of building
-	 * a {@link Midwife}.
-	 */
-	public TreeIterator(Iterator<? extends E> roots) {
-		this(roots, Midwife.Disabled.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a tree
-	 * with the specified root and a disabled midwife.
-	 * Use this constructor if you want to override the
-	 * {@link #children(Object)} method instead of building
-	 * a {@link Midwife}.
-	 */
-	public TreeIterator(E root) {
-		this(root, Midwife.Disabled.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a tree
-	 * with the specified root and midwife.
-	 */
-	public TreeIterator(E root, Midwife<E> midwife) {
-		this(new SingleElementIterator<E>(root), midwife);
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a tree
-	 * with the specified roots and midwife.
-	 */
-	public TreeIterator(E[] roots, Midwife<E> midwife) {
-		this(new ArrayIterator<E>(roots), midwife);
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a tree
-	 * with the specified roots and midwife.
-	 */
-	public TreeIterator(Iterable<? extends E> roots, Midwife<E> midwife) {
-		this(roots.iterator(), midwife);
-	}
-
-	/**
-	 * Construct an iterator that returns the nodes of a tree
-	 * with the specified roots and midwife.
-	 */
-	public TreeIterator(Iterator<? extends E> roots, Midwife<E> midwife) {
-		super();
-		this.currentIterator = roots;
-		// use a LinkedList since we will be pulling off the front and adding to the end
-		this.iterators = new LinkedList<Iterator<? extends E>>();
-		this.midwife = midwife;
-	}
-
-	public boolean hasNext() {
-		if (this.currentIterator.hasNext()) {
-			return true;
-		}
-		for (Iterator<? extends E> iterator : this.iterators) {
-			if (iterator.hasNext()) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	public E next() {
-		if (this.currentIterator.hasNext()) {
-			return this.nextInternal();
-		}
-		for (Iterator<Iterator<? extends E>> stream = this.iterators.iterator(); stream.hasNext(); ) {
-			this.currentIterator = stream.next();
-			if (this.currentIterator.hasNext()) {
-				break;
-			}
-			stream.remove();
-		}
-		return this.nextInternal();
-	}
-
-	/**
-	 * Fetch the children of the next node before returning it.
-	 */
-	private E nextInternal() {
-		E next = this.currentIterator.next();
-		this.iterators.add(this.children(next));
-		return next;
-	}
-
-	public void remove() {
-		this.currentIterator.remove();
-	}
-
-	/**
-	 * Return the immediate children of the specified object.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link Midwife}.
-	 */
-	protected Iterator<? extends E> children(E next) {
-		return this.midwife.children(next);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.currentIterator);
-	}
-
-
-	//********** inner classes **********
-
-	/**
-	 * Used by {@link TreeIterator} to retrieve
-	 * the immediate children of a node in the tree.
-	 */
-	public interface Midwife<T> {
-
-		/**
-		 * Return the immediate children of the specified object.
-		 */
-		Iterator<? extends T> children(T o);
-
-
-		final class Null<S> implements Midwife<S> {
-			@SuppressWarnings("rawtypes")
-			public static final Midwife INSTANCE = new Null();
-			@SuppressWarnings("unchecked")
-			public static <R> Midwife<R> instance() {
-				return INSTANCE;
-			}
-			// ensure single instance
-			private Null() {
-				super();
-			}
-			// return no neighbors
-			public Iterator<S> children(S next) {
-				return EmptyIterator.instance();
-			}
-			@Override
-			public String toString() {
-				return "TreeIterator.Midwife.Null"; //$NON-NLS-1$
-			}
-			private static final long serialVersionUID = 1L;
-			private Object readResolve() {
-				// replace this object with the singleton
-				return INSTANCE;
-			}
-		}
-
-		/**
-		 * The midwife used when the {@link TreeIterator#children(Object)}
-		 * method is overridden.
-		 */
-		final class Disabled<S> implements Midwife<S> {
-			@SuppressWarnings("rawtypes")
-			public static final Midwife INSTANCE = new Disabled();
-			@SuppressWarnings("unchecked")
-			public static <R> Midwife<R> instance() {
-				return INSTANCE;
-			}
-			// ensure single instance
-			private Disabled() {
-				super();
-			}
-			// throw an exception
-			public Iterator<S> children(S next) {
-				throw new UnsupportedOperationException();  // TreeIterator.children(Object) was not implemented
-			}
-			@Override
-			public String toString() {
-				return "TreeIterator.Midwife.Disabled"; //$NON-NLS-1$
-			}
-			private static final long serialVersionUID = 1L;
-			private Object readResolve() {
-				// replace this object with the singleton
-				return INSTANCE;
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/AbstractModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/AbstractModel.java
deleted file mode 100644
index 6cd31fc..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/AbstractModel.java
+++ /dev/null
@@ -1,687 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-import org.eclipse.jpt.utility.model.listener.TreeChangeListener;
-
-/**
- * Reasonable implementation of the {@link Model} protocol
- * with numerous convenience methods.
- * 
- * @see ChangeSupport
- */
-public abstract class AbstractModel
-	implements Model
-{
-	/**
-	 * Delegate state/property/collection/list/tree change support to this
-	 * helper object. The change support object is "lazily-initialized";
-	 * so it may be null. The method {@link #getChangeSupport()} will initialize this
-	 * field if it is null.
-	 * 
-	 * NB: We instantiate this when we fire events, even when we do not have
-	 * any listeners (which is be implied if this is null).
-	 * This allows the change support to have behavior tied to events even when
-	 * we have no listeners.
-	 * @see CallbackChangeSupport#aspectChanged(String)
-	 */
-	protected ChangeSupport changeSupport;
-
-
-	// ********** constructors/initialization **********
-
-	/**
-	 * Default constructor.
-	 */
-	protected AbstractModel() {
-		super();
-	}
-
-	/**
-	 * This accessor will build the change support when required.
-	 * This only helps reduce the footprint of a model that neither has any
-	 * listeners added to it nor ever changes (fires any events).
-	 */
-	protected synchronized ChangeSupport getChangeSupport() {
-		if (this.changeSupport == null) {
-			this.changeSupport = this.buildChangeSupport();
-		}
-		return this.changeSupport;
-	}
-
-	/**
-	 * Allow subclasses to tweak the change support used.
-	 */
-	protected ChangeSupport buildChangeSupport() {
-		return new ChangeSupport(this);
-	}
-
-
-	// ********** change support **********
-
-	public void addChangeListener(ChangeListener listener) {
-		this.getChangeSupport().addChangeListener(listener);
-	}
-
-	public void removeChangeListener(ChangeListener listener) {
-		this.getChangeSupport().removeChangeListener(listener);
-	}
-
-	/**
-	 * Return whether the model has any change listeners.
-	 */
-	public boolean hasAnyChangeListeners() {
-		return (this.changeSupport != null) && this.changeSupport.hasAnyChangeListeners();
-	}
-
-	/**
-	 * Return whether the model has no change listeners.
-	 */
-	public boolean hasNoChangeListeners() {
-		return ! this.hasAnyChangeListeners();
-	}
-
-
-	// ********** state change support **********
-
-	public void addStateChangeListener(StateChangeListener listener) {
-		this.getChangeSupport().addStateChangeListener(listener);
-	}
-
-	public void removeStateChangeListener(StateChangeListener listener) {
-		this.getChangeSupport().removeStateChangeListener(listener);
-	}
-
-	/**
-	 * Return whether the model has any state change listeners.
-	 */
-	public boolean hasAnyStateChangeListeners() {
-		return (this.changeSupport != null) && this.changeSupport.hasAnyStateChangeListeners();
-	}
-
-	/**
-	 * Return whether the model has no state change listeners.
-	 */
-	public boolean hasNoStateChangeListeners() {
-		return ! this.hasAnyStateChangeListeners();
-	}
-
-	protected final void fireStateChanged(StateChangeEvent event) {
-		this.getChangeSupport().fireStateChanged(event);
-	}
-
-	protected final void fireStateChanged() {
-		this.getChangeSupport().fireStateChanged();
-	}
-
-
-	// ********** property change support **********
-
-	public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
-		this.getChangeSupport().addPropertyChangeListener(propertyName, listener);
-	}
-
-	public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
-		this.getChangeSupport().removePropertyChangeListener(propertyName, listener);
-	}
-
-	/**
-	 * Return whether the model has any property change listeners that will
-	 * be notified when the specified property has changed.
-	 */
-	public boolean hasAnyPropertyChangeListeners(String propertyName) {
-		return (this.changeSupport != null) && this.changeSupport.hasAnyPropertyChangeListeners(propertyName);
-	}
-
-	/**
-	 * Return whether the model has no property change listeners that will
-	 * be notified when the specified property has changed.
-	 */
-	public boolean hasNoPropertyChangeListeners(String propertyName) {
-		return ! this.hasAnyPropertyChangeListeners(propertyName);
-	}
-
-	protected final void firePropertyChanged(PropertyChangeEvent event) {
-		this.getChangeSupport().firePropertyChanged(event);
-	}
-
-	protected final void firePropertyChanged(String propertyName, Object oldValue, Object newValue) {
-		this.getChangeSupport().firePropertyChanged(propertyName, oldValue, newValue);
-	}
-
-	protected final void firePropertyChanged(String propertyName, int oldValue, int newValue) {
-		this.getChangeSupport().firePropertyChanged(propertyName, oldValue, newValue);
-	}
-
-	protected final void firePropertyChanged(String propertyName, boolean oldValue, boolean newValue) {
-		this.getChangeSupport().firePropertyChanged(propertyName, oldValue, newValue);
-	}
-
-	/**
-	 * implied <code>null</code> "old" value
-	 */
-	protected final void firePropertyChanged(String propertyName, Object newValue) {
-		this.firePropertyChanged(propertyName, null, newValue);
-	}
-
-
-	// ********** collection change support **********
-
-	public void addCollectionChangeListener(String collectionName, CollectionChangeListener listener) {
-		this.getChangeSupport().addCollectionChangeListener(collectionName, listener);
-	}
-
-	public void removeCollectionChangeListener(String collectionName, CollectionChangeListener listener) {
-		this.getChangeSupport().removeCollectionChangeListener(collectionName, listener);
-	}
-
-	/**
-	 * Return whether the model has any collection change listeners that will
-	 * be notified when the specified collection has changed.
-	 */
-	public boolean hasAnyCollectionChangeListeners(String collectionName) {
-		return (this.changeSupport != null) && this.changeSupport.hasAnyCollectionChangeListeners(collectionName);
-	}
-
-	/**
-	 * Return whether the model has no collection change listeners that will
-	 * be notified when the specified collection has changed.
-	 */
-	public boolean hasNoCollectionChangeListeners(String collectionName) {
-		return ! this.hasAnyCollectionChangeListeners(collectionName);
-	}
-
-	protected final void fireItemsAdded(CollectionAddEvent event) {
-		this.getChangeSupport().fireItemsAdded(event);
-	}
-
-	protected final void fireItemsAdded(String collectionName, Collection<?> addedItems) {
-		this.getChangeSupport().fireItemsAdded(collectionName, addedItems);
-	}
-
-	protected final void fireItemAdded(String collectionName, Object addedItem) {
-		this.getChangeSupport().fireItemAdded(collectionName, addedItem);
-	}
-
-	protected final void fireItemsRemoved(CollectionRemoveEvent event) {
-		this.getChangeSupport().fireItemsRemoved(event);
-	}
-
-	protected final void fireItemsRemoved(String collectionName, Collection<?> removedItems) {
-		this.getChangeSupport().fireItemsRemoved(collectionName, removedItems);
-	}
-
-	protected final void fireItemRemoved(String collectionName, Object removedItem) {
-		this.getChangeSupport().fireItemRemoved(collectionName, removedItem);
-	}
-
-	protected final void fireCollectionCleared(CollectionClearEvent event) {
-		this.getChangeSupport().fireCollectionCleared(event);
-	}
-
-	protected final void fireCollectionCleared(String collectionName) {
-		this.getChangeSupport().fireCollectionCleared(collectionName);
-	}
-
-	protected final void fireCollectionChanged(CollectionChangeEvent event) {
-		this.getChangeSupport().fireCollectionChanged(event);
-	}
-
-	protected final void fireCollectionChanged(String collectionName, Collection<?> collection) {
-		this.getChangeSupport().fireCollectionChanged(collectionName, collection);
-	}
-
-	protected <E> boolean addItemToCollection(E item, Collection<E> collection, String collectionName) {
-		return this.getChangeSupport().addItemToCollection(item, collection, collectionName);
-	}
-
-	protected <E> boolean addItemsToCollection(E[] items, Collection<E> collection, String collectionName) {
-		return this.getChangeSupport().addItemsToCollection(items, collection, collectionName);
-	}
-
-	protected <E> boolean addItemsToCollection(Collection<? extends E> items, Collection<E> collection, String collectionName) {
-		return this.getChangeSupport().addItemsToCollection(items, collection, collectionName);
-	}
-
-	protected <E> boolean addItemsToCollection(Iterable<? extends E> items, Collection<E> collection, String collectionName) {
-		return this.getChangeSupport().addItemsToCollection(items, collection, collectionName);
-	}
-
-	protected <E> boolean addItemsToCollection(Iterator<? extends E> items, Collection<E> collection, String collectionName) {
-		return this.getChangeSupport().addItemsToCollection(items, collection, collectionName);
-	}
-
-	protected boolean removeItemFromCollection(Object item, Collection<?> collection, String collectionName) {
-		return this.getChangeSupport().removeItemFromCollection(item, collection, collectionName);
-	}
-
-	protected boolean removeItemsFromCollection(Object[] items, Collection<?> collection, String collectionName) {
-		return this.getChangeSupport().removeItemsFromCollection(items, collection, collectionName);
-	}
-
-	protected boolean removeItemsFromCollection(Collection<?> items, Collection<?> collection, String collectionName) {
-		return this.getChangeSupport().removeItemsFromCollection(items, collection, collectionName);
-	}
-
-	protected boolean removeItemsFromCollection(Iterable<?> items, Collection<?> collection, String collectionName) {
-		return this.getChangeSupport().removeItemsFromCollection(items, collection, collectionName);
-	}
-
-	protected boolean removeItemsFromCollection(Iterator<?> items, Collection<?> collection, String collectionName) {
-		return this.getChangeSupport().removeItemsFromCollection(items, collection, collectionName);
-	}
-
-	protected boolean retainItemsInCollection(Object[] items, Collection<?> collection, String collectionName) {
-		return this.getChangeSupport().retainItemsInCollection(items, collection, collectionName);
-	}
-
-	protected boolean retainItemsInCollection(Collection<?> items, Collection<?> collection, String collectionName) {
-		return this.getChangeSupport().retainItemsInCollection(items, collection, collectionName);
-	}
-
-	protected boolean retainItemsInCollection(Iterable<?> items, Collection<?> collection, String collectionName) {
-		return this.getChangeSupport().retainItemsInCollection(items, collection, collectionName);
-	}
-
-	protected boolean retainItemsInCollection(Iterator<?> items, Collection<?> collection, String collectionName) {
-		return this.getChangeSupport().retainItemsInCollection(items, collection, collectionName);
-	}
-
-	protected boolean clearCollection(Collection<?> collection, String collectionName) {
-		return this.getChangeSupport().clearCollection(collection, collectionName);
-	}
-
-	protected <E> boolean synchronizeCollection(Collection<E> newCollection, Collection<E> collection, String collectionName) {
-		return this.getChangeSupport().synchronizeCollection(newCollection, collection, collectionName);
-	}
-
-	protected <E> boolean synchronizeCollection(Iterator<E> newCollection, Collection<E> collection, String collectionName) {
-		return this.getChangeSupport().synchronizeCollection(newCollection, collection, collectionName);
-	}
-
-
-	// ********** list change support **********
-
-	public void addListChangeListener(String listName, ListChangeListener listener) {
-		this.getChangeSupport().addListChangeListener(listName, listener);
-	}
-
-	public void removeListChangeListener(String listName, ListChangeListener listener) {
-		this.getChangeSupport().removeListChangeListener(listName, listener);
-	}
-
-	/**
-	 * Return whether the model has any list change listeners that will
-	 * be notified when the specified list has changed.
-	 */
-	public boolean hasAnyListChangeListeners(String listName) {
-		return (this.changeSupport != null) && this.changeSupport.hasAnyListChangeListeners(listName);
-	}
-
-	/**
-	 * Return whether the model has no list change listeners that will
-	 * be notified when the specified list has changed.
-	 */
-	public boolean hasNoListChangeListeners(String listName) {
-		return ! this.hasAnyListChangeListeners(listName);
-	}
-
-	protected final void fireItemsAdded(ListAddEvent event) {
-		this.getChangeSupport().fireItemsAdded(event);
-	}
-
-	protected final void fireItemsAdded(String listName, int index, List<?> addedItems) {
-		this.getChangeSupport().fireItemsAdded(listName, index, addedItems);
-	}
-
-	protected final void fireItemAdded(String listName, int index, Object addedItem) {
-		this.getChangeSupport().fireItemAdded(listName, index, addedItem);
-	}
-
-	protected final void fireItemsRemoved(ListRemoveEvent event) {
-		this.getChangeSupport().fireItemsRemoved(event);
-	}
-
-	protected final void fireItemsRemoved(String listName, int index, List<?> removedItems) {
-		this.getChangeSupport().fireItemsRemoved(listName, index, removedItems);
-	}
-
-	protected final void fireItemRemoved(String listName, int index, Object removedItem) {
-		this.getChangeSupport().fireItemRemoved(listName, index, removedItem);
-	}
-
-	protected final void fireItemsReplaced(ListReplaceEvent event) {
-		this.getChangeSupport().fireItemsReplaced(event);
-	}
-
-	protected final <E> void fireItemsReplaced(String listName, int index, List<? extends E> newItems, List<E> replacedItems) {
-		this.getChangeSupport().fireItemsReplaced(listName, index, newItems, replacedItems);
-	}
-
-	protected final void fireItemReplaced(String listName, int index, Object newItem, Object replacedItem) {
-		this.getChangeSupport().fireItemReplaced(listName, index, newItem, replacedItem);
-	}
-
-	protected final void fireItemsMoved(ListMoveEvent event) {
-		this.getChangeSupport().fireItemsMoved(event);
-	}
-
-	protected final <E> void fireItemsMoved(String listName, int targetIndex, int sourceIndex, int length) {
-		this.getChangeSupport().fireItemsMoved(listName, targetIndex, sourceIndex, length);
-	}
-
-	protected final void fireItemMoved(String listName, int targetIndex, int sourceIndex) {
-		this.getChangeSupport().fireItemMoved(listName, targetIndex, sourceIndex);
-	}
-
-	protected final void fireListCleared(ListClearEvent event) {
-		this.getChangeSupport().fireListCleared(event);
-	}
-
-	protected final void fireListCleared(String listName) {
-		this.getChangeSupport().fireListCleared(listName);
-	}
-
-	protected final void fireListChanged(ListChangeEvent event) {
-		this.getChangeSupport().fireListChanged(event);
-	}
-
-	protected final void fireListChanged(String listName, List<?> list) {
-		this.getChangeSupport().fireListChanged(listName, list);
-	}
-
-	protected <E> void addItemToList(int index, E item, List<E> list, String listName) {
-		this.getChangeSupport().addItemToList(index, item, list, listName);
-	}
-
-	protected <E> boolean addItemToList(E item, List<E> list, String listName) {
-		return this.getChangeSupport().addItemToList(item, list, listName);
-	}
-
-	protected <E> boolean addItemsToList(int index, E[] items, List<E> list, String listName) {
-		return this.getChangeSupport().addItemsToList(index, items, list, listName);
-	}
-
-	protected <E> boolean addItemsToList(int index, Collection<? extends E> items, List<E> list, String listName) {
-		return this.getChangeSupport().addItemsToList(index, items, list, listName);
-	}
-
-	protected <E> boolean addItemsToList(int index, Iterable<? extends E> items, List<E> list, String listName) {
-		return this.getChangeSupport().addItemsToList(index, items, list, listName);
-	}
-
-	protected <E> boolean addItemsToList(int index, Iterator<? extends E> items, List<E> list, String listName) {
-		return this.getChangeSupport().addItemsToList(index, items, list, listName);
-	}
-
-	protected <E> boolean addItemsToList(E[] items, List<E> list, String listName) {
-		return this.getChangeSupport().addItemsToList(items, list, listName);
-	}
-
-	protected <E> boolean addItemsToList(Collection<? extends E> items, List<E> list, String listName) {
-		return this.getChangeSupport().addItemsToList(items, list, listName);
-	}
-
-	protected <E> boolean addItemsToList(Iterable<? extends E> items, List<E> list, String listName) {
-		return this.getChangeSupport().addItemsToList(items, list, listName);
-	}
-
-	protected <E> boolean addItemsToList(Iterator<? extends E> items, List<E> list, String listName) {
-		return this.getChangeSupport().addItemsToList(items, list, listName);
-	}
-
-	protected <E> E removeItemFromList(int index, List<E> list, String listName) {
-		return this.getChangeSupport().removeItemFromList(index, list, listName);
-	}
-
-	protected boolean removeItemFromList(Object item, List<?> list, String listName) {
-		return this.getChangeSupport().removeItemFromList(item, list, listName);
-	}
-
-	protected <E> List<E> removeItemsFromList(int index, List<E> list, String listName) {
-		return this.getChangeSupport().removeItemsFromList(index, list, listName);
-	}
-
-	protected <E> List<E> removeItemsFromList(int index, int length, List<E> list, String listName) {
-		return this.getChangeSupport().removeItemsFromList(index, length, list, listName);
-	}
-
-	protected boolean removeItemsFromList(Object[] items, List<?> list, String listName) {
-		return this.getChangeSupport().removeItemsFromList(items, list, listName);
-	}
-
-	protected boolean removeItemsFromList(Collection<?> items, List<?> list, String listName) {
-		return this.getChangeSupport().removeItemsFromList(items, list, listName);
-	}
-
-	protected boolean removeItemsFromList(Iterable<?> items, List<?> list, String listName) {
-		return this.getChangeSupport().removeItemsFromList(items, list, listName);
-	}
-
-	protected boolean removeItemsFromList(Iterator<?> items, List<?> list, String listName) {
-		return this.getChangeSupport().removeItemsFromList(items, list, listName);
-	}
-
-	protected boolean retainItemsInList(Object[] items, List<?> list, String listName) {
-		return this.getChangeSupport().retainItemsInList(items, list, listName);
-	}
-
-	protected boolean retainItemsInList(Collection<?> items, List<?> list, String listName) {
-		return this.getChangeSupport().retainItemsInList(items, list, listName);
-	}
-
-	protected boolean retainItemsInList(Iterable<?> items, List<?> list, String listName) {
-		return this.getChangeSupport().retainItemsInList(items, list, listName);
-	}
-
-	protected boolean retainItemsInList(Iterator<?> items, List<?> list, String listName) {
-		return this.getChangeSupport().retainItemsInList(items, list, listName);
-	}
-
-	protected <E> E setItemInList(int index, E item, List<E> list, String listName) {
-		return this.getChangeSupport().setItemInList(index, item, list, listName);
-	}
-
-	protected <E> int replaceItemInList(E oldItem, E newItem, List<E> list, String listName) {
-		return this.getChangeSupport().replaceItemInList(oldItem, newItem, list, listName);
-	}
-
-	protected <E> List<E> setItemsInList(int index, E[] items, List<E> list, String listName) {
-		return this.getChangeSupport().setItemsInList(index, items, list, listName);
-	}
-
-	protected <E> List<E> setItemsInList(int index, List<? extends E> items, List<E> list, String listName) {
-		return this.getChangeSupport().setItemsInList(index, items, list, listName);
-	}
-
-	protected <E> void moveItemsInList(int targetIndex, int sourceIndex, int length, List<E> list, String listName) {
-		this.getChangeSupport().moveItemsInList(targetIndex, sourceIndex, length, list, listName);
-	}
-
-	protected <E> void moveItemInList(int targetIndex, int sourceIndex, List<E> list, String listName) {
-		this.getChangeSupport().moveItemInList(targetIndex, sourceIndex, list, listName);
-	}
-
-	protected boolean clearList(List<?> list, String listName) {
-		return this.getChangeSupport().clearList(list, listName);
-	}
-
-	protected <E> boolean synchronizeList(List<E> newList, List<E> list, String listName) {
-		return this.getChangeSupport().synchronizeList(newList, list, listName);
-	}
-
-	protected <E> boolean synchronizeList(Iterator<E> newList, List<E> list, String listName) {
-		return this.getChangeSupport().synchronizeList(newList, list, listName);
-	}
-
-
-	// ********** tree change support **********
-
-	public void addTreeChangeListener(String treeName, TreeChangeListener listener) {
-		this.getChangeSupport().addTreeChangeListener(treeName, listener);
-	}
-
-	public void removeTreeChangeListener(String treeName, TreeChangeListener listener) {
-		this.getChangeSupport().removeTreeChangeListener(treeName, listener);
-	}
-
-	/**
-	 * Return whether the model has any tree change listeners that will
-	 * be notified when the specified tree has changed.
-	 */
-	public boolean hasAnyTreeChangeListeners(String treeName) {
-		return (this.changeSupport != null) && this.changeSupport.hasAnyTreeChangeListeners(treeName);
-	}
-
-	/**
-	 * Return whether the model has no tree change listeners that will
-	 * be notified when the specified tree has changed.
-	 */
-	public boolean hasNoTreeChangeListeners(String treeName) {
-		return ! this.hasAnyTreeChangeListeners(treeName);
-	}
-
-	protected final void fireNodeAdded(TreeAddEvent event) {
-		this.getChangeSupport().fireNodeAdded(event);
-	}
-
-	protected final void fireNodeAdded(String treeName, List<?> path) {
-		this.getChangeSupport().fireNodeAdded(treeName, path);
-	}
-
-	protected final void fireNodeRemoved(TreeRemoveEvent event) {
-		this.getChangeSupport().fireNodeRemoved(event);
-	}
-
-	protected final void fireNodeRemoved(String treeName, List<?> path) {
-		this.getChangeSupport().fireNodeRemoved(treeName, path);
-	}
-
-	protected final void fireTreeCleared(TreeClearEvent event) {
-		this.getChangeSupport().fireTreeCleared(event);
-	}
-
-	protected final void fireTreeCleared(String treeName) {
-		this.getChangeSupport().fireTreeCleared(treeName);
-	}
-
-	protected final void fireTreeChanged(TreeChangeEvent event) {
-		this.getChangeSupport().fireTreeChanged(event);
-	}
-
-	protected final void fireTreeChanged(String treeName, Collection<?> nodes) {
-		this.getChangeSupport().fireTreeChanged(treeName, nodes);
-	}
-
-
-	// ********** convenience methods **********
-
-	/**
-	 * Return whether the specified values are equal, with the appropriate <code>null</code> checks.
-	 * Convenience method for checking whether an attribute value has changed.
-	 * <p>
-	 * <em>Do not</em> use this to determine whether to fire a change notification,
-	 * {@link ChangeSupport} already does that.
-	 */
-	protected final boolean valuesAreEqual(Object value1, Object value2) {
-		return this.getChangeSupport().valuesAreEqual(value1, value2);
-	}
-	protected final boolean attributeValueHasNotChanged(Object oldValue, Object newValue) {
-		return this.valuesAreEqual(oldValue, newValue);
-	}
-
-
-	/**
-	 * Return whether the specified values are different, with the appropriate <code>null</code> checks.
-	 * Convenience method for checking whether an attribute value has changed.
-	 * <p>
-	 * <em>Do not</em> use this to determine whether to fire a change notification,
-	 * {@link ChangeSupport} already does that.
-	 * <p>
-	 * For example, after firing the change notification, you can use this method
-	 * to decide if some other, related, piece of state needs to be synchronized
-	 * with the state that just changed.
-	 */
-	protected final boolean valuesAreDifferent(Object value1, Object value2) {
-		return this.getChangeSupport().valuesAreDifferent(value1, value2);
-	}
-	protected final boolean attributeValueHasChanged(Object oldValue, Object newValue) {
-		return this.valuesAreDifferent(oldValue, newValue);
-	}
-
-
-	// ********** Object overrides **********
-
-	/**
-	 * Although cloning models is usually not a Good Idea,
-	 * we should at least support it properly.
-	 */
-	@Override
-	protected AbstractModel clone() throws CloneNotSupportedException {
-		AbstractModel clone = (AbstractModel) super.clone();
-		// clear out change support - models do not share listeners
-		clone.changeSupport = null;
-		return clone;
-	}
-
-	/**
-	 * e.g. <code>"ClassName[00F3EE42](add'l info)"</code>
-	 */
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		StringTools.buildSimpleToStringOn(this, sb);
-		sb.append('(');
-		int len = sb.length();
-		this.toString(sb);
-		if (sb.length() == len) {
-			sb.deleteCharAt(len - 1);
-		} else {
-			sb.append(')');
-		}
-		return sb.toString();
-	}
-
-	/**
-	 * This method is public so one model can call a nested model's
-	 * <code>#toString(StringBuilder)</code>.
-	 */
-	public void toString(@SuppressWarnings("unused") StringBuilder sb) {
-		// subclasses should override this to do something a bit more helpful
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/CallbackChangeSupport.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/CallbackChangeSupport.java
deleted file mode 100644
index b3d9b4d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/CallbackChangeSupport.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model;
-
-import java.util.Collection;
-import java.util.EventListener;
-import java.util.List;
-
-import org.eclipse.jpt.utility.internal.ListenerList;
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-
-/**
- * This change support class will notify listeners whenever one of the source's
- * aspects has changed. Only the aspect name is passed to the listener; no
- * event is generated. This allows the listeners to delegate to the change
- * support object verification that an aspect as actually changed. This is
- * useful for simple things like setting dirty flags, blanket validation, and
- * blanket sychronization; i.e. things that might be interested in the <em>name</em>
- * of the aspect that changed but not so much <em>how</em> the aspect changed.
- */
-public class CallbackChangeSupport
-	extends ChangeSupport
-{
-	protected final ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-	private static final long serialVersionUID = 1L;
-
-
-	public CallbackChangeSupport(Model source, Listener listener) {
-		this(source);
-		this.addListener(listener);
-	}
-
-	public CallbackChangeSupport(Model source) {
-		super(source);
-	}
-
-	protected void aspectChanged(String aspectName) {
-		for (Listener listener : this.listenerList.getListeners()) {
-			listener.aspectChanged(aspectName);
-		}
-	}
-
-	public void addListener(Listener listener) {
-		this.listenerList.add(listener);
-	}
-
-	public void removeListener(Listener listener) {
-		this.listenerList.remove(listener);
-	}
-
-
-	// ********** listener interface **********
-
-	/**
-	 * Listener that will be notified of any aspect changes.
-	 */
-	public interface Listener extends EventListener {
-
-		/**
-		 * The specified aspect changed.
-		 */
-		void aspectChanged(String aspectName);
-
-	}
-
-
-	// ********** state change support **********
-
-	@Override
-	public void fireStateChanged(StateChangeEvent event) {
-		super.fireStateChanged(event);
-		this.aspectChanged(null);
-	}
-
-	@Override
-	public void fireStateChanged() {
-		super.fireStateChanged();
-		this.aspectChanged(null);
-	}
-
-
-	// ********** property change support **********
-
-	@Override
-	protected void firePropertyChanged_(PropertyChangeEvent event) {
-		super.firePropertyChanged_(event);
-		this.aspectChanged(event.getPropertyName());
-	}
-
-	@Override
-	protected void firePropertyChanged_(String propertyName, Object oldValue, Object newValue) {
-		super.firePropertyChanged_(propertyName, oldValue, newValue);
-		this.aspectChanged(propertyName);
-	}
-
-	@Override
-	protected void firePropertyChanged_(String propertyName, int oldValue, int newValue) {
-		super.firePropertyChanged_(propertyName, oldValue, newValue);
-		this.aspectChanged(propertyName);
-	}
-
-	@Override
-	protected void firePropertyChanged_(String propertyName, boolean oldValue, boolean newValue) {
-		super.firePropertyChanged_(propertyName, oldValue, newValue);
-		this.aspectChanged(propertyName);
-	}
-
-
-	// ********** collection change support **********
-
-	@Override
-	protected void fireItemsAdded_(CollectionAddEvent event) {
-		super.fireItemsAdded_(event);
-		this.aspectChanged(event.getCollectionName());
-	}
-
-	@Override
-	protected void fireItemsAdded_(String collectionName, Collection<?> addedItems) {
-		super.fireItemsAdded_(collectionName, addedItems);
-		this.aspectChanged(collectionName);
-	}
-
-	@Override
-	public void fireItemAdded(String collectionName, Object addedItem) {
-		super.fireItemAdded(collectionName, addedItem);
-		this.aspectChanged(collectionName);
-	}
-
-	@Override
-	protected void fireItemsRemoved_(CollectionRemoveEvent event) {
-		super.fireItemsRemoved_(event);
-		this.aspectChanged(event.getCollectionName());
-	}
-
-	@Override
-	protected void fireItemsRemoved_(String collectionName, Collection<?> removedItems) {
-		super.fireItemsRemoved_(collectionName, removedItems);
-		this.aspectChanged(collectionName);
-	}
-
-	@Override
-	public void fireItemRemoved(String collectionName, Object removedItem) {
-		super.fireItemRemoved(collectionName, removedItem);
-		this.aspectChanged(collectionName);
-	}
-
-	@Override
-	public void fireCollectionCleared(CollectionClearEvent event) {
-		super.fireCollectionCleared(event);
-		this.aspectChanged(event.getCollectionName());
-	}
-
-	@Override
-	public void fireCollectionCleared(String collectionName) {
-		super.fireCollectionCleared(collectionName);
-		this.aspectChanged(collectionName);
-	}
-
-	@Override
-	public void fireCollectionChanged(CollectionChangeEvent event) {
-		super.fireCollectionChanged(event);
-		this.aspectChanged(event.getCollectionName());
-	}
-
-	@Override
-	public void fireCollectionChanged(String collectionName, Collection<?> collection) {
-		super.fireCollectionChanged(collectionName, collection);
-		this.aspectChanged(collectionName);
-	}
-
-
-	// ********** list change support **********
-
-	@Override
-	protected void fireItemsAdded_(ListAddEvent event) {
-		super.fireItemsAdded_(event);
-		this.aspectChanged(event.getListName());
-	}
-
-	@Override
-	protected void fireItemsAdded_(String listName, int index, List<?> addedItems) {
-		super.fireItemsAdded_(listName, index, addedItems);
-		this.aspectChanged(listName);
-	}
-
-	@Override
-	public void fireItemAdded(String listName, int index, Object addedItem) {
-		super.fireItemAdded(listName, index, addedItem);
-		this.aspectChanged(listName);
-	}
-
-	@Override
-	protected void fireItemsRemoved_(ListRemoveEvent event) {
-		super.fireItemsRemoved_(event);
-		this.aspectChanged(event.getListName());
-	}
-
-	@Override
-	protected void fireItemsRemoved_(String listName, int index, List<?> removedItems) {
-		super.fireItemsRemoved_(listName, index, removedItems);
-		this.aspectChanged(listName);
-	}
-
-	@Override
-	public void fireItemRemoved(String listName, int index, Object removedItem) {
-		super.fireItemRemoved(listName, index, removedItem);
-		this.aspectChanged(listName);
-	}
-
-	@Override
-	protected void fireItemsReplaced_(ListReplaceEvent event) {
-		super.fireItemsReplaced_(event);
-		this.aspectChanged(event.getListName());
-	}
-
-	@Override
-	protected void fireItemsReplaced_(String listName, int index, List<?> newItems, List<?> replacedItems) {
-		super.fireItemsReplaced_(listName, index, newItems, replacedItems);
-		this.aspectChanged(listName);
-	}
-
-	@Override
-	protected void fireItemReplaced_(String listName, int index, Object newItem, Object replacedItem) {
-		super.fireItemReplaced_(listName, index, newItem, replacedItem);
-		this.aspectChanged(listName);
-	}
-
-	@Override
-	protected void fireItemsMoved_(ListMoveEvent event) {
-		super.fireItemsMoved_(event);
-		this.aspectChanged(event.getListName());
-	}
-
-	@Override
-	protected void fireItemsMoved_(String listName, int targetIndex, int sourceIndex, int length) {
-		super.fireItemsMoved_(listName, targetIndex, sourceIndex, length);
-		this.aspectChanged(listName);
-	}
-
-	@Override
-	public void fireListCleared(ListClearEvent event) {
-		super.fireListCleared(event);
-		this.aspectChanged(event.getListName());
-	}
-
-	@Override
-	public void fireListCleared(String listName) {
-		super.fireListCleared(listName);
-		this.aspectChanged(listName);
-	}
-
-	@Override
-	public void fireListChanged(ListChangeEvent event) {
-		super.fireListChanged(event);
-		this.aspectChanged(event.getListName());
-	}
-
-	@Override
-	public void fireListChanged(String listName, List<?> list) {
-		super.fireListChanged(listName, list);
-		this.aspectChanged(listName);
-	}
-
-
-	// ********** tree change support **********
-
-	@Override
-	public void fireNodeAdded(TreeAddEvent event) {
-		super.fireNodeAdded(event);
-		this.aspectChanged(event.getTreeName());
-	}
-
-	@Override
-	public void fireNodeAdded(String treeName, List<?> path) {
-		super.fireNodeAdded(treeName, path);
-		this.aspectChanged(treeName);
-	}
-
-	@Override
-	public void fireNodeRemoved(TreeRemoveEvent event) {
-		super.fireNodeRemoved(event);
-		this.aspectChanged(event.getTreeName());
-	}
-
-	@Override
-	public void fireNodeRemoved(String treeName, List<?> path) {
-		super.fireNodeRemoved(treeName, path);
-		this.aspectChanged(treeName);
-	}
-
-	@Override
-	public void fireTreeCleared(TreeClearEvent event) {
-		super.fireTreeCleared(event);
-		this.aspectChanged(event.getTreeName());
-	}
-
-	@Override
-	public void fireTreeCleared(String treeName) {
-		super.fireTreeCleared(treeName);
-		this.aspectChanged(treeName);
-	}
-
-	@Override
-	public void fireTreeChanged(TreeChangeEvent event) {
-		super.fireTreeChanged(event);
-		this.aspectChanged(event.getTreeName());
-	}
-
-	@Override
-	public void fireTreeChanged(String treeName, Collection<?> nodes) {
-		super.fireTreeChanged(treeName, nodes);
-		this.aspectChanged(treeName);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/ChangeSupport.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/ChangeSupport.java
deleted file mode 100644
index 6acfac1..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/ChangeSupport.java
+++ /dev/null
@@ -1,2746 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EventListener;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.ListenerList;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.Tools;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-import org.eclipse.jpt.utility.model.listener.TreeChangeListener;
-
-/**
- * Support object that can be used by implementors of the {@link Model} interface.
- * It provides for state, property, collection, list, and tree change notifications to
- * listeners.
- * <p>
- * <strong>NB1:</strong> There is lots of copy-n-paste code in this class. Nearly all of this duplication
- * is an effort to prevent the unnecessary creation of new objects (typically event
- * objects). Since many events are fired when there are no listeners, we postpone
- * the creation of event objects until we know we have interested listeners.
- * Most methods have the "non-duplicated" version of the method body commented
- * out at the top of the current method body.
- * The hope was that this class would prove to be fairly static and the duplicated
- * code would not prove onerous; but that has not proven to be
- * the case, as we have added support for "state" changes, "dirty" notification,
- * and custom "notifiers", with more to come, I'm sure....  ~bjv
- * <p>
- * <strong>NB2:</strong> This class will check to see if, during the firing of events, a listener
- * on the original, cloned, list of listeners has been removed from the master
- * list of listeners <em>before</em> it is notified. If the listener has been removed
- * "concurrently" it will <em>not</em> be notified.
- * <p>
- * <strong>NB3:</strong> Any listener that is added during the firing of events will <em>not</em> be
- * also notified. This is a bit inconsistent with NB2, but seems reasonable
- * since any added listener should already be in synch with the model.
- * <p>
- * <strong>NB4:</strong> This class is serializable, but it will only write out listeners that
- * are also serializable while silently leaving behind listeners that are not.
- * 
- * @see Model
- * @see AbstractModel
- */
-public class ChangeSupport
-	implements Serializable
-{
-	/** The object to be provided as the "source" for any generated events. */
-	protected final Model source;
-
-	/** Associate aspect names to class-specific listener lists. */
-	private AspectListenerListPair<?>[] aspectListenerListPairs = EMPTY_ASPECT_LISTENER_LIST_PAIR_ARRAY;
-		private static final AspectListenerListPair<?>[] EMPTY_ASPECT_LISTENER_LIST_PAIR_ARRAY = new AspectListenerListPair[0];
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructor **********
-
-	/**
-	 * Construct support for the specified source of change events.
-	 * The source cannot be null.
-	 */
-	public ChangeSupport(Model source) {
-		super();
-		if (source == null) {
-			throw new NullPointerException();
-		}
-		this.source = source;
-	}
-
-
-	// ********** internal implementation **********
-
-	/**
-	 * Add a listener that listens to all the events of the specified type and
-	 * carrying the specified aspect name.
-	 * Neither the aspect name nor the listener can be null.
-	 */
-	protected synchronized <L extends EventListener> void addListener(Class<L> listenerClass, String aspectName, L listener) {
-		ListenerList<L> aspectListenerList = this.getListenerList(listenerClass, aspectName);
-		if (aspectListenerList == null) {
-			this.aspectListenerListPairs = ArrayTools.add(this.aspectListenerListPairs, new SimpleAspectListenerListPair<L>(listenerClass, aspectName, listener));
-		} else {
-			aspectListenerList.add(listener);
-		}
-	}
-
-	/**
-	 * Add a listener that listens to all the events of the specified type.
-	 * The listener cannot be null.
-	 */
-	protected synchronized <L extends EventListener> void addListener(Class<L> listenerClass, L listener) {
-		ListenerList<L> listenerList = this.getListenerList(listenerClass);
-		if (listenerList == null) {
-			this.aspectListenerListPairs = ArrayTools.add(this.aspectListenerListPairs, new NullAspectListenerListPair<L>(listenerClass, listener));
-		} else {
-			listenerList.add(listener);
-		}
-	}
-
-	/**
-	 * Remove a listener that has been registered for all the
-	 * events of the specified type and carrying the specified aspect name.
-	 * Neither the aspect name nor the listener can be null.
-	 */
-	protected synchronized <L extends EventListener> void removeListener(Class<L> listenerClass, String aspectName, L listener) {
-		ListenerList<L> aspectListenerList = this.getListenerList(listenerClass, aspectName);
-		if (aspectListenerList == null) {
-			throw new IllegalArgumentException("unregistered listener: " + listener); //$NON-NLS-1$
-		}
-		aspectListenerList.remove(listener);  // leave the pair, even if the listener list is empty?
-	}
-
-	/**
-	 * Remove a listener that has been registered for all the events of the specified type.
-	 * The listener cannot be null.
-	 */
-	protected synchronized <L extends EventListener> void removeListener(Class<L> listenerClass, L listener) {
-		ListenerList<L> listenerList = this.getListenerList(listenerClass);
-		if (listenerList == null) {
-			throw new IllegalArgumentException("unregistered listener: " + listener); //$NON-NLS-1$
-		}
-		listenerList.remove(listener);  // leave the pair, even if the listener list is empty?
-	}
-
-	/**
-	 * Return the listener list for the specified listener class and aspect name.
-	 * Return null if the listener list is not present.
-	 * The aspect name cannot be null.
-	 */
-	protected <L extends EventListener> ListenerList<L> getListenerList(Class<L> listenerClass, String aspectName) {
-		// put in a null check to simplify calling code
-		if (aspectName == null) {
-			throw new NullPointerException();
-		}
-		return this.getListenerList_(listenerClass, aspectName);
-	}
-
-	/**
-	 * Return the listener list for the specified listener class.
-	 * Return null if the listener list is not present.
-	 */
-	protected <L extends EventListener> ListenerList<L> getListenerList(Class<L> listenerClass) {
-		return this.getListenerList_(listenerClass, null);
-	}
-
-	/**
-	 * Return the listener list for the specified listener class and aspect name.
-	 * Return null if the listener list is not present.
-	 */
-	protected synchronized <L extends EventListener> ListenerList<L> getListenerList_(Class<L> listenerClass, String aspectName) {
-		for (AspectListenerListPair<?> pair : this.aspectListenerListPairs) {
-			if (pair.matches(listenerClass, aspectName)) {
-				@SuppressWarnings("unchecked") ListenerList<L> aspectListenerList = (ListenerList<L>) pair.listenerList;
-				return aspectListenerList;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Return whether there are any listeners for the specified listener class
-	 * and aspect name.
-	 */
-	protected <L extends EventListener> boolean hasAnyListeners(Class<L> listenerClass, String aspectName) {
-		ListenerList<L> aspectListenerList = this.getListenerList(listenerClass, aspectName);
-		if ((aspectListenerList != null) && ! aspectListenerList.isEmpty()) {
-			return true;
-		}
-		return this.hasAnyChangeListeners();  // check for any general purpose listeners
-	}
-
-	/**
-	 * Return whether there are no listeners for the specified listener class
-	 * and aspect name.
-	 */
-	protected <L extends EventListener> boolean hasNoListeners(Class<L> listenerClass, String aspectName) {
-		return ! this.hasAnyListeners(listenerClass, aspectName);
-	}
-
-	/**
-	 * Return whether there are any listeners for the specified listener class.
-	 */
-	protected <L extends EventListener> boolean hasAnyListeners(Class<L> listenerClass) {
-		ListenerList<L> aspectListenerList = this.getListenerList(listenerClass);
-		if ((aspectListenerList != null) && ! aspectListenerList.isEmpty()) {
-			return true;
-		}
-		// check for any general purpose listeners (unless that's what we're already doing)
-		return (listenerClass == this.getChangeListenerClass()) ? false : this.hasAnyChangeListeners();
-	}
-
-	/**
-	 * Return whether there are no listeners for the specified listener class.
-	 */
-	protected <L extends EventListener> boolean hasNoListeners(Class<L> listenerClass) {
-		return ! this.hasAnyListeners(listenerClass);
-	}
-
-
-	// ********** general purpose change support **********
-
-	/**
-	 * Subclasses that add other types of listeners should override this method
-	 * to return the extension to ChangeListener that also extends whatever new
-	 * listener types are supported.
-	 */
-	@SuppressWarnings("unchecked")
-	protected <L extends ChangeListener> Class<L> getChangeListenerClass() {
-		// not sure why I need to cast here...
-		return (Class<L>) CHANGE_LISTENER_CLASS;
-	}
-
-	protected static final Class<ChangeListener> CHANGE_LISTENER_CLASS = ChangeListener.class;
-
-	/**
-	 * Add a general purpose listener that listens to all events,
-	 * regardless of the aspect name associated with that event.
-	 * The listener cannot be null.
-	 */
-	public void addChangeListener(ChangeListener listener) {
-		this.addListener(this.getChangeListenerClass(), listener);
-	}
-
-	/**
-	 * Remove a general purpose listener.
-	 * The listener cannot be null.
-	 */
-	public void removeChangeListener(ChangeListener listener) {
-		this.removeListener(this.getChangeListenerClass(), listener);
-	}
-
-	/**
-	 * Return whether there are any general purpose listeners that will be
-	 * notified of any changes.
-	 */
-	public boolean hasAnyChangeListeners() {
-		return this.hasAnyListeners(this.getChangeListenerClass());
-	}
-
-	private ListenerList<ChangeListener> getChangeListenerList() {
-		return this.getListenerList(CHANGE_LISTENER_CLASS);
-	}
-
-	private Iterable<ChangeListener> getChangeListeners() {
-		ListenerList<ChangeListener> listenerList = this.getChangeListenerList();
-		return (listenerList == null) ? null : listenerList.getListeners();
-	}
-
-	private boolean hasChangeListener(ChangeListener listener) {
-		return CollectionTools.contains(this.getChangeListeners(), listener);
-	}
-
-
-	// ********** state change support **********
-
-	protected static final Class<StateChangeListener> STATE_CHANGE_LISTENER_CLASS = StateChangeListener.class;
-
-	/**
-	 * Add a state change listener.
-	 */
-	public void addStateChangeListener(StateChangeListener listener) {
-		this.addListener(STATE_CHANGE_LISTENER_CLASS, listener);
-	}
-
-	/**
-	 * Remove a state change listener.
-	 */
-	public void removeStateChangeListener(StateChangeListener listener) {
-		this.removeListener(STATE_CHANGE_LISTENER_CLASS, listener);
-	}
-
-	/**
-	 * Return whether there are any state change listeners.
-	 */
-	public boolean hasAnyStateChangeListeners() {
-		return this.hasAnyListeners(STATE_CHANGE_LISTENER_CLASS);
-	}
-
-	private ListenerList<StateChangeListener> getStateChangeListenerList() {
-		return this.getListenerList(STATE_CHANGE_LISTENER_CLASS);
-	}
-
-	private Iterable<StateChangeListener> getStateChangeListeners() {
-		ListenerList<StateChangeListener> listenerList = this.getStateChangeListenerList();
-		return (listenerList == null) ? null : listenerList.getListeners();
-	}
-
-	private boolean hasStateChangeListener(StateChangeListener listener) {
-		return CollectionTools.contains(this.getStateChangeListeners(), listener);
-	}
-
-	/**
-	 * Fire the specified state change event to any registered listeners.
-	 */
-	public void fireStateChanged(StateChangeEvent event) {
-		Iterable<StateChangeListener> listeners = this.getStateChangeListeners();
-		if (listeners != null) {
-			for (StateChangeListener listener : listeners) {
-				if (this.hasStateChangeListener(listener)) {  // verify listener is still listening
-					listener.stateChanged(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.stateChanged(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a generic state change event to any registered state change
-	 * listeners.
-	 */
-	public void fireStateChanged() {
-//		this.fireStateChanged(new StateChangeEvent(this.source));
-		StateChangeEvent event = null;
-		Iterable<StateChangeListener> listeners = this.getStateChangeListeners();
-		if (listeners != null) {
-			for (StateChangeListener listener : listeners) {
-				if (this.hasStateChangeListener(listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new StateChangeEvent(this.source);
-					}
-					listener.stateChanged(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new StateChangeEvent(this.source);
-					}
-					changeListener.stateChanged(event);
-				}
-			}
-		}
-	}
-
-
-	// ********** property change support **********
-
-	protected static final Class<PropertyChangeListener> PROPERTY_CHANGE_LISTENER_CLASS = PropertyChangeListener.class;
-
-	/**
-	 * Add a property change listener for the specified property. The listener
-	 * will be notified only for changes to the specified property.
-	 */
-	public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
-		this.addListener(PROPERTY_CHANGE_LISTENER_CLASS, propertyName, listener);
-	}
-
-	/**
-	 * Remove a property change listener that was registered for a specific property.
-	 */
-	public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
-		this.removeListener(PROPERTY_CHANGE_LISTENER_CLASS, propertyName, listener);
-	}
-
-	/**
-	 * Return whether there are any property change listeners that will
-	 * be notified when the specified property has changed.
-	 */
-	public boolean hasAnyPropertyChangeListeners(String propertyName) {
-		return this.hasAnyListeners(PROPERTY_CHANGE_LISTENER_CLASS, propertyName);
-	}
-
-	private ListenerList<PropertyChangeListener> getPropertyChangeListenerList(String propertyName) {
-		return this.getListenerList(PROPERTY_CHANGE_LISTENER_CLASS, propertyName);
-	}
-
-	private Iterable<PropertyChangeListener> getPropertyChangeListeners(String propertyName) {
-		ListenerList<PropertyChangeListener> listenerList = this.getPropertyChangeListenerList(propertyName);
-		return (listenerList == null) ? null : listenerList.getListeners();
-	}
-
-	private boolean hasPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
-		return CollectionTools.contains(this.getPropertyChangeListeners(propertyName), listener);
-	}
-
-	/**
-	 * Fire the specified property change event to any registered listeners.
-	 * No event is fired if the given event's old and new values are the same;
-	 * this includes when both values are null. Use a state change event
-	 * for general purpose notification of changes.
-	 */
-	public void firePropertyChanged(PropertyChangeEvent event) {
-		if (this.valuesAreDifferent(event.getOldValue(), event.getNewValue())) {
-			this.firePropertyChanged_(event);
-		}
-	}
-
-	/**
-	 * pre-condition: the specified event's old and new values are different
-	 */
-	protected void firePropertyChanged_(PropertyChangeEvent event) {
-		String propertyName = event.getPropertyName();
-		Iterable<PropertyChangeListener> listeners = this.getPropertyChangeListeners(propertyName);
-		if (listeners != null) {
-			for (PropertyChangeListener listener : listeners) {
-				if (this.hasPropertyChangeListener(propertyName, listener)) {  // verify listener is still listening
-					listener.propertyChanged(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.propertyChanged(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound property update to any registered property change listeners.
-	 * No event is fired if the given old and new values are the same;
-	 * this includes when both values are null. Use a state change event
-	 * for general purpose notification of changes.
-	 */
-	public void firePropertyChanged(String propertyName, Object oldValue, Object newValue) {
-//		this.firePropertyChanged(new PropertyChangeEvent(this.source, propertyName, oldValue, newValue));
-		if (this.valuesAreDifferent(oldValue, newValue)) {
-			this.firePropertyChanged_(propertyName, oldValue, newValue);
-		}
-	}
-
-	/**
-	 * pre-condition: the specified old and new values are different
-	 */
-	protected void firePropertyChanged_(String propertyName, Object oldValue, Object newValue) {
-		PropertyChangeEvent event = null;
-		Iterable<PropertyChangeListener> listeners = this.getPropertyChangeListeners(propertyName);
-		if (listeners != null) {
-			for (PropertyChangeListener listener : listeners) {
-				if (this.hasPropertyChangeListener(propertyName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new PropertyChangeEvent(this.source, propertyName, oldValue, newValue);
-					}
-					listener.propertyChanged(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new PropertyChangeEvent(this.source, propertyName, oldValue, newValue);
-					}
-					changeListener.propertyChanged(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report an int bound property update to any registered listeners.
-	 * No event is fired if old and new are equal.
-	 * <p>
-	 * This is merely a convenience wrapper around the more general
-	 * firePropertyChange method that takes Object values.
-	 */
-	public void firePropertyChanged(String propertyName, int oldValue, int newValue) {
-//		this.firePropertyChanged(propertyName, Integer.valueOf(oldValue), Integer.valueOf(newValue));
-		if (oldValue != newValue) {
-			this.firePropertyChanged_(propertyName, oldValue, newValue);
-		}
-	}
-
-	/**
-	 * pre-condition: the specified old and new values are different
-	 */
-	protected void firePropertyChanged_(String propertyName, int oldValue, int newValue) {
-		PropertyChangeEvent event = null;
-		Iterable<PropertyChangeListener> listeners = this.getPropertyChangeListeners(propertyName);
-		if (listeners != null) {
-			for (PropertyChangeListener listener : listeners) {
-				if (this.hasPropertyChangeListener(propertyName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new PropertyChangeEvent(this.source, propertyName, Integer.valueOf(oldValue), Integer.valueOf(newValue));
-					}
-					listener.propertyChanged(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new PropertyChangeEvent(this.source, propertyName, Integer.valueOf(oldValue), Integer.valueOf(newValue));
-					}
-					changeListener.propertyChanged(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a boolean bound property update to any registered listeners.
-	 * No event is fired if old and new are equal.
-	 * <p>
-	 * This is merely a convenience wrapper around the more general
-	 * firePropertyChange method that takes Object values.
-	 */
-	public void firePropertyChanged(String propertyName, boolean oldValue, boolean newValue) {
-//		this.firePropertyChanged(propertyName, Boolean.valueOf(oldValue), Boolean.valueOf(newValue));
-		if (oldValue != newValue) {
-			this.firePropertyChanged_(propertyName, oldValue, newValue);
-		}
-	}
-
-	/**
-	 * pre-condition: the specified old and new values are different
-	 */
-	protected void firePropertyChanged_(String propertyName, boolean oldValue, boolean newValue) {
-		PropertyChangeEvent event = null;
-		Iterable<PropertyChangeListener> listeners = this.getPropertyChangeListeners(propertyName);
-		if (listeners != null) {
-			for (PropertyChangeListener listener : listeners) {
-				if (this.hasPropertyChangeListener(propertyName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new PropertyChangeEvent(this.source, propertyName, Boolean.valueOf(oldValue), Boolean.valueOf(newValue));
-					}
-					listener.propertyChanged(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new PropertyChangeEvent(this.source, propertyName, Boolean.valueOf(oldValue), Boolean.valueOf(newValue));
-					}
-					changeListener.propertyChanged(event);
-				}
-			}
-		}
-	}
-
-
-	// ********** collection change support **********
-
-	protected static final Class<CollectionChangeListener> COLLECTION_CHANGE_LISTENER_CLASS = CollectionChangeListener.class;
-
-	/**
-	 * Add a collection change listener for the specified collection. The listener
-	 * will be notified only for changes to the specified collection.
-	 */
-	public void addCollectionChangeListener(String collectionName, CollectionChangeListener listener) {
-		this.addListener(COLLECTION_CHANGE_LISTENER_CLASS, collectionName, listener);
-	}
-
-	/**
-	 * Remove a collection change listener that was registered for a specific collection.
-	 */
-	public void removeCollectionChangeListener(String collectionName, CollectionChangeListener listener) {
-		this.removeListener(COLLECTION_CHANGE_LISTENER_CLASS, collectionName, listener);
-	}
-
-	/**
-	 * Return whether there are any collection change listeners that will
-	 * be notified when the specified collection has changed.
-	 */
-	public boolean hasAnyCollectionChangeListeners(String collectionName) {
-		return this.hasAnyListeners(COLLECTION_CHANGE_LISTENER_CLASS, collectionName);
-	}
-
-	private ListenerList<CollectionChangeListener> getCollectionChangeListenerList(String collectionName) {
-		return this.getListenerList(COLLECTION_CHANGE_LISTENER_CLASS, collectionName);
-	}
-
-	private Iterable<CollectionChangeListener> getCollectionChangeListeners(String collectionName) {
-		ListenerList<CollectionChangeListener> listenerList = this.getCollectionChangeListenerList(collectionName);
-		return (listenerList == null) ? null : listenerList.getListeners();
-	}
-
-	private boolean hasCollectionChangeListener(String collectionName, CollectionChangeListener listener) {
-		return CollectionTools.contains(this.getCollectionChangeListeners(collectionName), listener);
-	}
-
-	/**
-	 * Report a bound collection update to any registered listeners.
-	 */
-	public void fireItemsAdded(CollectionAddEvent event) {
-		if (event.getItemsSize() != 0) {
-			this.fireItemsAdded_(event);
-		}
-	}
-
-	/**
-	 * pre-condition: items were added
-	 */
-	protected void fireItemsAdded_(CollectionAddEvent event) {
-		String collectionName = event.getCollectionName();
-		Iterable<CollectionChangeListener> listeners = this.getCollectionChangeListeners(collectionName);
-		if (listeners != null) {
-			for (CollectionChangeListener listener : listeners) {
-				if (this.hasCollectionChangeListener(collectionName, listener)) {  // verify listener is still listening
-					listener.itemsAdded(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.itemsAdded(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound collection update to any registered listeners.
-	 */
-	public void fireItemsAdded(String collectionName, Collection<?> addedItems) {
-//		this.fireItemsAdded(new CollectionAddEvent(this.source, collectionName, addedItems));
-		if ( ! addedItems.isEmpty()) {
-			this.fireItemsAdded_(collectionName, addedItems);
-		}
-	}
-
-	/**
-	 * pre-condition: items were added
-	 */
-	protected void fireItemsAdded_(String collectionName, Collection<?> addedItems) {
-		CollectionAddEvent event = null;
-		Iterable<CollectionChangeListener> listeners = this.getCollectionChangeListeners(collectionName);
-		if (listeners != null) {
-			for (CollectionChangeListener listener : listeners) {
-				if (this.hasCollectionChangeListener(collectionName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new CollectionAddEvent(this.source, collectionName, addedItems);
-					}
-					listener.itemsAdded(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new CollectionAddEvent(this.source, collectionName, addedItems);
-					}
-					changeListener.itemsAdded(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound collection update to any registered listeners.
-	 */
-	public void fireItemAdded(String collectionName, Object addedItem) {
-//		this.fireItemsAdded(collectionName, Collections.singleton(addedItem));
-
-		CollectionAddEvent event = null;
-		Iterable<CollectionChangeListener> listeners = this.getCollectionChangeListeners(collectionName);
-		if (listeners != null) {
-			for (CollectionChangeListener listener : listeners) {
-				if (this.hasCollectionChangeListener(collectionName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new CollectionAddEvent(this.source, collectionName, addedItem);
-					}
-					listener.itemsAdded(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new CollectionAddEvent(this.source, collectionName, addedItem);
-					}
-					changeListener.itemsAdded(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound collection update to any registered listeners.
-	 */
-	public void fireItemsRemoved(CollectionRemoveEvent event) {
-		if (event.getItemsSize() != 0) {
-			this.fireItemsRemoved_(event);
-		}
-	}
-
-	/**
-	 * pre-condition: items were removed
-	 */
-	protected void fireItemsRemoved_(CollectionRemoveEvent event) {
-		String collectionName = event.getCollectionName();
-		Iterable<CollectionChangeListener> listeners = this.getCollectionChangeListeners(collectionName);
-		if (listeners != null) {
-			for (CollectionChangeListener listener : listeners) {
-				if (this.hasCollectionChangeListener(collectionName, listener)) {  // verify listener is still listening
-					listener.itemsRemoved(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.itemsRemoved(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound collection update to any registered listeners.
-	 */
-	public void fireItemsRemoved(String collectionName, Collection<?> removedItems) {
-//		this.fireItemsRemoved(new CollectionRemoveEvent(this.source, collectionName, removedItems));
-		if ( ! removedItems.isEmpty()) {
-			this.fireItemsRemoved_(collectionName, removedItems);
-		}
-	}
-
-	/**
-	 * pre-condition: items were removed
-	 */
-	protected void fireItemsRemoved_(String collectionName, Collection<?> removedItems) {
-		CollectionRemoveEvent event = null;
-		Iterable<CollectionChangeListener> listeners = this.getCollectionChangeListeners(collectionName);
-		if (listeners != null) {
-			for (CollectionChangeListener listener : listeners) {
-				if (this.hasCollectionChangeListener(collectionName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new CollectionRemoveEvent(this.source, collectionName, removedItems);
-					}
-					listener.itemsRemoved(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new CollectionRemoveEvent(this.source, collectionName, removedItems);
-					}
-					changeListener.itemsRemoved(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound collection update to any registered listeners.
-	 */
-	public void fireItemRemoved(String collectionName, Object removedItem) {
-//		this.fireItemsRemoved(collectionName, Collections.singleton(removedItem));
-
-		CollectionRemoveEvent event = null;
-		Iterable<CollectionChangeListener> listeners = this.getCollectionChangeListeners(collectionName);
-		if (listeners != null) {
-			for (CollectionChangeListener listener : listeners) {
-				if (this.hasCollectionChangeListener(collectionName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new CollectionRemoveEvent(this.source, collectionName, removedItem);
-					}
-					listener.itemsRemoved(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new CollectionRemoveEvent(this.source, collectionName, removedItem);
-					}
-					changeListener.itemsRemoved(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound collection update to any registered listeners.
-	 */
-	public void fireCollectionCleared(CollectionClearEvent event) {
-		String collectionName = event.getCollectionName();
-		Iterable<CollectionChangeListener> listeners = this.getCollectionChangeListeners(collectionName);
-		if (listeners != null) {
-			for (CollectionChangeListener listener : listeners) {
-				if (this.hasCollectionChangeListener(collectionName, listener)) {  // verify listener is still listening
-					listener.collectionCleared(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.collectionCleared(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound collection update to any registered listeners.
-	 */
-	public void fireCollectionCleared(String collectionName) {
-//		this.fireCollectionCleared(new CollectionClearEvent(this.source, collectionName));
-
-		CollectionClearEvent event = null;
-		Iterable<CollectionChangeListener> listeners = this.getCollectionChangeListeners(collectionName);
-		if (listeners != null) {
-			for (CollectionChangeListener listener : listeners) {
-				if (this.hasCollectionChangeListener(collectionName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new CollectionClearEvent(this.source, collectionName);
-					}
-					listener.collectionCleared(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new CollectionClearEvent(this.source, collectionName);
-					}
-					changeListener.collectionCleared(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound collection update to any registered listeners.
-	 */
-	public void fireCollectionChanged(CollectionChangeEvent event) {
-		String collectionName = event.getCollectionName();
-		Iterable<CollectionChangeListener> listeners = this.getCollectionChangeListeners(collectionName);
-		if (listeners != null) {
-			for (CollectionChangeListener listener : listeners) {
-				if (this.hasCollectionChangeListener(collectionName, listener)) {  // verify listener is still listening
-					listener.collectionChanged(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.collectionChanged(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound collection update to any registered listeners.
-	 */
-	public void fireCollectionChanged(String collectionName, Collection<?> collection) {
-//		this.fireCollectionChanged(new CollectionChangeEvent(this.source, collectionName, collection));
-
-		CollectionChangeEvent event = null;
-		Iterable<CollectionChangeListener> listeners = this.getCollectionChangeListeners(collectionName);
-		if (listeners != null) {
-			for (CollectionChangeListener listener : listeners) {
-				if (this.hasCollectionChangeListener(collectionName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new CollectionChangeEvent(this.source, collectionName, collection);
-					}
-					listener.collectionChanged(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new CollectionChangeEvent(this.source, collectionName, collection);
-					}
-					changeListener.collectionChanged(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Add the specified item to the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether the collection changed.
-	 * @see java.util.Collection#add(Object)
-	 */
-	public <E> boolean addItemToCollection(E item, Collection<E> collection, String collectionName) {
-		if (collection.add(item)) {
-			this.fireItemAdded(collectionName, item);
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Add the specified items to the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether collection changed.
-	 * @see java.util.Collection#addAll(java.util.Collection)
-	 */
-	public <E> boolean addItemsToCollection(E[] items, Collection<E> collection, String collectionName) {
-		return (items.length != 0)
-				&& this.addItemsToCollection_(new ArrayIterator<E>(items), collection, collectionName);
-	}
-
-	/**
-	 * Add the specified items to the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether collection changed.
-	 * @see java.util.Collection#addAll(java.util.Collection)
-	 */
-	public <E> boolean addItemsToCollection(Collection<? extends E> items, Collection<E> collection, String collectionName) {
-		return ( ! items.isEmpty())
-				&& this.addItemsToCollection_(items.iterator(), collection, collectionName);
-	}
-
-	/**
-	 * Add the specified items to the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether collection changed.
-	 * @see java.util.Collection#addAll(java.util.Collection)
-	 */
-	public <E> boolean addItemsToCollection(Iterable<? extends E> items, Collection<E> collection, String collectionName) {
-		return this.addItemsToCollection(items.iterator(), collection, collectionName);
-	}
-
-	/**
-	 * Add the specified items to the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether collection changed.
-	 * @see java.util.Collection#addAll(java.util.Collection)
-	 */
-	public <E> boolean addItemsToCollection(Iterator<? extends E> items, Collection<E> collection, String collectionName) {
-		return items.hasNext()
-				&& this.addItemsToCollection_(items, collection, collectionName);
-	}
-
-	/**
-	 * no empty check
-	 */
-	protected <E> boolean addItemsToCollection_(Iterator<? extends E> items, Collection<E> collection, String collectionName) {
-		Collection<E> addedItems = null;
-		while (items.hasNext()) {
-			E item = items.next();
-			if (collection.add(item)) {
-				if (addedItems == null) {
-					addedItems = new ArrayList<E>();
-				}
-				addedItems.add(item);
-			}
-		}
-		if (addedItems != null) {
-			this.fireItemsAdded(collectionName, addedItems);
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Remove the specified item from the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether the collection changed.
-	 * @see java.util.Collection#remove(Object)
-	 */
-	public boolean removeItemFromCollection(Object item, Collection<?> collection, String collectionName) {
-		if (collection.remove(item)) {
-			this.fireItemRemoved(collectionName, item);
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Remove the specified items from the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether the collection changed.
-	 * @see java.util.Collection#removeAll(java.util.Collection)
-	 */
-	public boolean removeItemsFromCollection(Object[] items, Collection<?> collection, String collectionName) {
-		return (items.length != 0)
-				&& ( ! collection.isEmpty())
-				&& this.removeItemsFromCollection_(new ArrayIterator<Object>(items), collection, collectionName);
-	}
-
-	/**
-	 * Remove the specified items from the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether the collection changed.
-	 * @see java.util.Collection#removeAll(java.util.Collection)
-	 */
-	public boolean removeItemsFromCollection(Collection<?> items, Collection<?> collection, String collectionName) {
-		return ( ! items.isEmpty())
-				&& ( ! collection.isEmpty())
-				&& this.removeItemsFromCollection_(items.iterator(), collection, collectionName);
-	}
-
-	/**
-	 * Remove the specified items from the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether the collection changed.
-	 * @see java.util.Collection#removeAll(java.util.Collection)
-	 */
-	public boolean removeItemsFromCollection(Iterable<?> items, Collection<?> collection, String collectionName) {
-		return this.removeItemsFromCollection(items.iterator(), collection, collectionName);
-	}
-
-	/**
-	 * Remove the specified items from the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether the collection changed.
-	 * @see java.util.Collection#removeAll(java.util.Collection)
-	 */
-	public boolean removeItemsFromCollection(Iterator<?> items, Collection<?> collection, String collectionName) {
-		return items.hasNext()
-				&& ( ! collection.isEmpty())
-				&& this.removeItemsFromCollection_(items, collection, collectionName);
-	}
-
-	/**
-	 * no empty checks
-	 */
-	protected boolean removeItemsFromCollection_(Iterator<?> items, Collection<?> collection, String collectionName) {
-		HashBag<?> removedItems = CollectionTools.collection(items);
-		removedItems.retainAll(collection);
-		boolean changed = collection.removeAll(removedItems);
-
-		if ( ! removedItems.isEmpty()) {
-			this.fireItemsRemoved(collectionName, removedItems);
-		}
-		return changed;
-	}
-
-	/**
-	 * Retain the specified items in the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether the collection changed.
-	 * @see java.util.Collection#retainAll(java.util.Collection)
-	 */
-	public boolean retainItemsInCollection(Object[] items, Collection<?> collection, String collectionName) {
-		if (collection.isEmpty()) {
-			return false;
-		}
-		if (items.length == 0) {
-			return this.clearCollection_(collection, collectionName);
-		}
-		return this.retainItemsInCollection_(new ArrayIterator<Object>(items), collection, collectionName);
-	}
-
-	/**
-	 * Retain the specified items in the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether the collection changed.
-	 * @see java.util.Collection#retainAll(java.util.Collection)
-	 */
-	public boolean retainItemsInCollection(Collection<?> items, Collection<?> collection, String collectionName) {
-		if (collection.isEmpty()) {
-			return false;
-		}
-		if (items.isEmpty()) {
-			return this.clearCollection_(collection, collectionName);
-		}
-		return this.retainItemsInCollection_(items.iterator(), collection, collectionName);
-	}
-
-	/**
-	 * Retain the specified items in the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether the collection changed.
-	 * @see java.util.Collection#retainAll(java.util.Collection)
-	 */
-	public boolean retainItemsInCollection(Iterable<?> items, Collection<?> collection, String collectionName) {
-		return this.retainItemsInCollection(items.iterator(), collection, collectionName);
-	}
-
-	/**
-	 * Retain the specified items in the specified bound collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether the collection changed.
-	 * @see java.util.Collection#retainAll(java.util.Collection)
-	 */
-	public boolean retainItemsInCollection(Iterator<?> items, Collection<?> collection, String collectionName) {
-		if (collection.isEmpty()) {
-			return false;
-		}
-		if ( ! items.hasNext()) {
-			return this.clearCollection_(collection, collectionName);
-		}
-		return this.retainItemsInCollection_(items, collection, collectionName);
-	}
-
-	/**
-	 * no empty checks
-	 */
-	protected boolean retainItemsInCollection_(Iterator<?> items, Collection<?> collection, String collectionName) {
-		HashBag<?> retainedItems = CollectionTools.collection(items);
-		HashBag<?> removedItems = CollectionTools.collection(collection);
-		removedItems.removeAll(retainedItems);
-		boolean changed = collection.retainAll(retainedItems);
-
-		if ( ! removedItems.isEmpty()) {
-			this.fireItemsRemoved(collectionName, removedItems);
-		}
-		return changed;
-	}
-
-	/**
-	 * Clear the entire collection
-	 * and fire the appropriate event if necessary.
-	 * Return whether the collection changed.
-	 * @see java.util.Collection#clear()
-	 */
-	public boolean clearCollection(Collection<?> collection, String collectionName) {
-		if (collection.isEmpty()) {
-			return false;
-		}
-		return this.clearCollection_(collection, collectionName);
-	}
-
-	/**
-	 * no empty check
-	 */
-	protected boolean clearCollection_(Collection<?> collection, String collectionName) {
-		collection.clear();
-		this.fireCollectionCleared(collectionName);
-		return true;
-	}
-
-	/**
-	 * Synchronize the collection with the specified new collection,
-	 * making a minimum number of removes and adds.
-	 * Return whether the collection changed.
-	 */
-	public <E> boolean synchronizeCollection(Collection<E> newCollection, Collection<E> collection, String collectionName) {
-		if (newCollection.isEmpty()) {
-			return this.clearCollection(collection, collectionName);
-		}
-
-		if (collection.isEmpty()) {
-			return this.addItemsToCollection_(newCollection.iterator(), collection, collectionName);
-		}
-
-		return this.synchronizeCollection_(newCollection, collection, collectionName);
-	}
-
-	/**
-	 * Synchronize the collection with the specified new collection,
-	 * making a minimum number of removes and adds.
-	 * Return whether the collection changed.
-	 */
-	public <E> boolean synchronizeCollection(Iterator<E> newCollection, Collection<E> collection, String collectionName) {
-		if ( ! newCollection.hasNext()) {
-			return this.clearCollection(collection, collectionName);
-		}
-
-		if (collection.isEmpty()) {
-			return this.addItemsToCollection_(newCollection, collection, collectionName);
-		}
-
-		return this.synchronizeCollection_(CollectionTools.collection(newCollection), collection, collectionName);
-	}
-
-	/**
-	 * no empty checks
-	 */
-	protected <E> boolean synchronizeCollection_(Collection<E> newCollection, Collection<E> collection, String collectionName) {
-		boolean changed = false;
-		Collection<E> removeItems = new HashBag<E>(collection);
-		removeItems.removeAll(newCollection);
-		changed |= this.removeItemsFromCollection(removeItems, collection, collectionName);
-
-		Collection<E> addItems = new HashBag<E>(newCollection);
-		addItems.removeAll(collection);
-		changed |= this.addItemsToCollection(addItems, collection, collectionName);
-
-		return changed;
-	}
-
-
-	// ********** list change support **********
-
-	protected static final Class<ListChangeListener> LIST_CHANGE_LISTENER_CLASS = ListChangeListener.class;
-
-	/**
-	 * Add a list change listener for the specified list. The listener
-	 * will be notified only for changes to the specified list.
-	 */
-	public void addListChangeListener(String listName, ListChangeListener listener) {
-		this.addListener(LIST_CHANGE_LISTENER_CLASS, listName, listener);
-	}
-
-	/**
-	 * Remove a list change listener that was registered for a specific list.
-	 */
-	public void removeListChangeListener(String listName, ListChangeListener listener) {
-		this.removeListener(LIST_CHANGE_LISTENER_CLASS, listName, listener);
-	}
-
-	/**
-	 * Return whether there are any list change listeners that will
-	 * be notified when the specified list has changed.
-	 */
-	public boolean hasAnyListChangeListeners(String listName) {
-		return this.hasAnyListeners(LIST_CHANGE_LISTENER_CLASS, listName);
-	}
-
-	private ListenerList<ListChangeListener> getListChangeListenerList(String listName) {
-		return this.getListenerList(LIST_CHANGE_LISTENER_CLASS, listName);
-	}
-
-	private Iterable<ListChangeListener> getListChangeListeners(String listName) {
-		ListenerList<ListChangeListener> listenerList = this.getListChangeListenerList(listName);
-		return (listenerList == null) ? null : listenerList.getListeners();
-	}
-
-	private boolean hasListChangeListener(String listName, ListChangeListener listener) {
-		return CollectionTools.contains(this.getListChangeListeners(listName), listener);
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireItemsAdded(ListAddEvent event) {
-		if (event.getItemsSize() != 0) {
-			this.fireItemsAdded_(event);
-		}
-	}
-
-	/**
-	 * pre-condition: items were added
-	 */
-	protected void fireItemsAdded_(ListAddEvent event) {
-		String listName = event.getListName();
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					listener.itemsAdded(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.itemsAdded(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireItemsAdded(String listName, int index, List<?> addedItems) {
-//		this.fireItemsAdded(new ListAddEvent(this.source, listName, index, addedItems));
-		if ( ! addedItems.isEmpty()) {
-			this.fireItemsAdded_(listName, index, addedItems);
-		}
-	}
-
-	/**
-	 * pre-condition: items were added
-	 */
-	protected void fireItemsAdded_(String listName, int index, List<?> addedItems) {
-		ListAddEvent event = null;
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListAddEvent(this.source, listName, index, addedItems);
-					}
-					listener.itemsAdded(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListAddEvent(this.source, listName, index, addedItems);
-					}
-					changeListener.itemsAdded(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireItemAdded(String listName, int index, Object addedItem) {
-//		this.fireItemsAdded(listName, index, Collections.singletonList(addedItem));
-
-		ListAddEvent event = null;
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListAddEvent(this.source, listName, index, addedItem);
-					}
-					listener.itemsAdded(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListAddEvent(this.source, listName, index, addedItem);
-					}
-					changeListener.itemsAdded(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireItemsRemoved(ListRemoveEvent event) {
-		if (event.getItemsSize() != 0) {
-			this.fireItemsRemoved_(event);
-		}
-	}
-
-	/**
-	 * pre-condition: items were removed
-	 */
-	protected void fireItemsRemoved_(ListRemoveEvent event) {
-		String listName = event.getListName();
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					listener.itemsRemoved(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.itemsRemoved(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireItemsRemoved(String listName, int index, List<?> removedItems) {
-//		this.fireItemsRemoved(new ListRemoveEvent(this.source, listName, index, removedItems));
-		if ( ! removedItems.isEmpty()) {
-			this.fireItemsRemoved_(listName, index, removedItems);
-		}
-	}
-
-	/**
-	 * pre-condition: items were removed
-	 */
-	protected void fireItemsRemoved_(String listName, int index, List<?> removedItems) {
-		ListRemoveEvent event = null;
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListRemoveEvent(this.source, listName, index, removedItems);
-					}
-					listener.itemsRemoved(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListRemoveEvent(this.source, listName, index, removedItems);
-					}
-					changeListener.itemsRemoved(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireItemRemoved(String listName, int index, Object removedItem) {
-//		this.fireItemsRemoved(listName, index, Collections.singletonList(removedItem));
-
-		ListRemoveEvent event = null;
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListRemoveEvent(this.source, listName, index, removedItem);
-					}
-					listener.itemsRemoved(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListRemoveEvent(this.source, listName, index, removedItem);
-					}
-					changeListener.itemsRemoved(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireItemsReplaced(ListReplaceEvent event) {
-		if ((event.getItemsSize() != 0) && this.elementsAreDifferent(event.getNewItems(), event.getOldItems())) {
-			this.fireItemsReplaced_(event);
-		}
-	}
-
-	/**
-	 * pre-condition: items were replaced
-	 */
-	protected void fireItemsReplaced_(ListReplaceEvent event) {
-		String listName = event.getListName();
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					listener.itemsReplaced(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.itemsReplaced(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireItemsReplaced(String listName, int index, List<?> newItems, List<?> oldItems) {
-//		this.fireItemsReplaced(new ListReplaceEvent(this.source, listName, index, newItems, oldItems));
-		if (( ! newItems.isEmpty()) && this.elementsAreDifferent(newItems, oldItems)) {
-			this.fireItemsReplaced_(listName, index, newItems, oldItems);
-		}
-	}
-
-	/**
-	 * pre-condition: items were replaced
-	 */
-	protected void fireItemsReplaced_(String listName, int index, List<?> newItems, List<?> oldItems) {
-		ListReplaceEvent event = null;
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListReplaceEvent(this.source, listName, index, newItems, oldItems);
-					}
-					listener.itemsReplaced(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListReplaceEvent(this.source, listName, index, newItems, oldItems);
-					}
-					changeListener.itemsReplaced(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireItemReplaced(String listName, int index, Object newItem, Object oldItem) {
-//		this.fireItemsReplaced(listName, index, Collections.singletonList(newItem), Collections.singletonList(oldItem));
-		if (this.valuesAreDifferent(newItem, oldItem)) {
-			this.fireItemReplaced_(listName, index, newItem, oldItem);
-		}
-	}
-
-	/**
-	 * pre-condition: items were replaced
-	 */
-	protected void fireItemReplaced_(String listName, int index, Object newItem, Object oldItem) {
-		ListReplaceEvent event = null;
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListReplaceEvent(this.source, listName, index, newItem, oldItem);
-					}
-					listener.itemsReplaced(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListReplaceEvent(this.source, listName, index, newItem, oldItem);
-					}
-					changeListener.itemsReplaced(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireItemsMoved(ListMoveEvent event) {
-		if (event.getTargetIndex() != event.getSourceIndex()) {
-			this.fireItemsMoved_(event);
-		}
-		// it's unlikely but possible the list is unchanged by the move... (e.g. any moves within ["foo", "foo", "foo"]...)
-	}
-
-	/**
-	 * pre-condition: items were moved
-	 */
-	protected void fireItemsMoved_(ListMoveEvent event) {
-		String listName = event.getListName();
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					listener.itemsMoved(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.itemsMoved(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireItemsMoved(String listName, int targetIndex, int sourceIndex, int length) {
-//		this.fireItemsMoved(new ListMoveEvent(this.source, listName, targetIndex, sourceIndex, length));
-		if (targetIndex != sourceIndex) {
-			this.fireItemsMoved_(listName, targetIndex, sourceIndex, length);
-		}
-		// it's unlikely but possible the list is unchanged by the move... (e.g. any moves within ["foo", "foo", "foo"]...)
-	}
-
-	/**
-	 * pre-condition: items were moved
-	 */
-	protected void fireItemsMoved_(String listName, int targetIndex, int sourceIndex, int length) {
-		ListMoveEvent event = null;
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListMoveEvent(this.source, listName, targetIndex, sourceIndex, length);
-					}
-					listener.itemsMoved(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListMoveEvent(this.source, listName, targetIndex, sourceIndex, length);
-					}
-					changeListener.itemsMoved(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireItemMoved(String listName, int targetIndex, int sourceIndex) {
-		this.fireItemsMoved(listName, targetIndex, sourceIndex, 1);
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireListCleared(ListClearEvent event) {
-		String listName = event.getListName();
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					listener.listCleared(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.listCleared(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireListCleared(String listName) {
-//		this.fireListCleared(new ListClearEvent(this.source, listName));
-
-		ListClearEvent event = null;
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListClearEvent(this.source, listName);
-					}
-					listener.listCleared(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListClearEvent(this.source, listName);
-					}
-					changeListener.listCleared(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireListChanged(ListChangeEvent event) {
-		String listName = event.getListName();
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					listener.listChanged(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.listChanged(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound list update to any registered listeners.
-	 */
-	public void fireListChanged(String listName, List<?> list) {
-//		this.fireListChanged(new ListChangeEvent(this.source, listName));
-
-		ListChangeEvent event = null;
-		Iterable<ListChangeListener> listeners = this.getListChangeListeners(listName);
-		if (listeners != null) {
-			for (ListChangeListener listener : listeners) {
-				if (this.hasListChangeListener(listName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListChangeEvent(this.source, listName, list);
-					}
-					listener.listChanged(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new ListChangeEvent(this.source, listName, list);
-					}
-					changeListener.listChanged(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Add the specified item to the specified bound list at the specified index
-	 * and fire the appropriate event.
-	 * @see java.util.List#add(int, Object)
-	 */
-	public <E> void addItemToList(int index, E item, List<E> list, String listName) {
-		list.add(index, item);
-		this.fireItemAdded(listName, index, item);
-	}
-
-	/**
-	 * Add the specified item to the end of the specified bound list
-	 * and fire the appropriate event.
-	 * Return whether the list changed (i.e. 'true').
-	 * @see java.util.List#add(Object)
-	 */
-	public <E> boolean addItemToList(E item, List<E> list, String listName) {
-		if (list.add(item)) {
-			this.fireItemAdded(listName, list.size() - 1, item);
-			return true;
-		}
-		return false;  // List#add(Object) should always return 'true', so we should never get here...
-	}
-
-	/**
-	 * Add the specified items to the specified bound list at the specified index
-	 * and fire the appropriate event if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#addAll(int, java.util.Collection)
-	 */
-	public <E> boolean addItemsToList(int index, E[] items, List<E> list, String listName) {
-		return (items.length != 0)
-				&& this.addItemsToList_(index, Arrays.asList(items), list, listName);
-	}
-
-	/**
-	 * Add the specified items to the specified bound list at the specified index
-	 * and fire the appropriate event if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#addAll(int, java.util.Collection)
-	 */
-	public <E> boolean addItemsToList(int index, Collection<? extends E> items, List<E> list, String listName) {
-		return ( ! items.isEmpty())
-				&& this.addItemsToList_(index, this.convertToList(items), list, listName);
-	}
-
-	/**
-	 * no empty check
-	 */
-	protected <E> boolean addItemsToList_(int index, List<? extends E> items, List<E> list, String listName) {
-		if (list.addAll(index, items)) {
-			this.fireItemsAdded(listName, index, items);
-			return true;
-		}
-		return false;  //  'items' should not be empty, so we should never get here...
-	}
-
-	/**
-	 * Add the specified items to the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#addAll(int, java.util.Collection)
-	 */
-	public <E> boolean addItemsToList(int index, Iterable<? extends E> items, List<E> list, String listName) {
-		return this.addItemsToList(index, items.iterator(), list, listName);
-	}
-
-	/**
-	 * Add the specified items to the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#addAll(int, java.util.Collection)
-	 */
-	public <E> boolean addItemsToList(int index, Iterator<? extends E> items, List<E> list, String listName) {
-		if ( ! items.hasNext()) {
-			return false;
-		}
-
-		ArrayList<E> addedItems = CollectionTools.list(items);
-		if (list.addAll(index, addedItems)) {
-			this.fireItemsAdded(listName, index, addedItems);
-			return true;
-		}
-		return false;  //  'items' should not be empty, so we should never get here...
-	}
-
-	/**
-	 * Add the specified items to the end of to the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#addAll(java.util.Collection)
-	 */
-	public <E> boolean addItemsToList(E[] items, List<E> list, String listName) {
-		return (items.length != 0)
-				&& this.addItemsToList_(Arrays.asList(items), list, listName);
-	}
-
-	/**
-	 * Add the specified items to the end of the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#addAll(int, java.util.Collection)
-	 */
-	public <E> boolean addItemsToList(Collection<? extends E> items, List<E> list, String listName) {
-		return ( ! items.isEmpty())
-				&& this.addItemsToList_(this.convertToList(items), list, listName);
-	}
-
-	protected <E> List<? extends E> convertToList(Collection<? extends E> collection) {
-		return (collection instanceof List<?>) ? (List<? extends E>) collection : new ArrayList<E>(collection);
-	}
-
-	/**
-	 * no empty check
-	 */
-	protected <E> boolean addItemsToList_(List<? extends E> items, List<E> list, String listName) {
-		int index = list.size();
-		if (list.addAll(items)) {
-			this.fireItemsAdded(listName, index, items);
-			return true;
-		}
-		return false;  //  'items' should not be empty, so we should never get here...
-	}
-
-	/**
-	 * Add the specified items to the end of to the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#addAll(java.util.Collection)
-	 */
-	public <E> boolean addItemsToList(Iterable<? extends E> items, List<E> list, String listName) {
-		return this.addItemsToList(items.iterator(), list, listName);
-	}
-
-	/**
-	 * Add the specified items to the end of to the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#addAll(java.util.Collection)
-	 */
-	public <E> boolean addItemsToList(Iterator<? extends E> items, List<E> list, String listName) {
-		if ( ! items.hasNext()) {
-			return false;
-		}
-		return this.addItemsToList_(items, list, listName);
-	}
-
-	/**
-	 * no empty check
-	 */
-	protected <E> boolean addItemsToList_(Iterator<? extends E> items, List<E> list, String listName) {
-		ArrayList<E> addedItems = CollectionTools.list(items);
-		int index = list.size();
-		if (list.addAll(addedItems)) {
-			this.fireItemsAdded(listName, index, addedItems);
-			return true;
-		}
-		return false;  //  'items' should not be empty, so we should never get here...
-	}
-
-	/**
-	 * Remove the specified item from the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return the removed item.
-	 * @see java.util.List#remove(int)
-	 */
-	public <E> E removeItemFromList(int index, List<E> list, String listName) {
-		E item = list.remove(index);
-		this.fireItemRemoved(listName, index, item);
-		return item;
-	}
-
-	/**
-	 * Remove the specified item from the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#remove(Object)
-	 */
-	public boolean removeItemFromList(Object item, List<?> list, String listName) {
-		int index = list.indexOf(item);
-		if (index == -1) {
-			return false;
-		}
-		list.remove(index);
-		this.fireItemRemoved(listName, index, item);
-		return true;
-	}
-
-	/**
-	 * Remove the items from the specified index on
-	 * from the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return the removed items.
-	 * @see java.util.List#remove(int)
-	 */
-	public <E> List<E> removeItemsFromList(int index, List<E> list, String listName) {
-		return this.removeItemsFromList(index, list.size() - index, list, listName);
-	}
-
-	/**
-	 * Remove the specified items from the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return the removed items.
-	 * @see java.util.List#remove(int)
-	 */
-	public <E> List<E> removeItemsFromList(int index, int length, List<E> list, String listName) {
-		if (length == 0) {
-			return Collections.emptyList();
-		}
-		return this.removeItemsFromList_(index, length, list, listName);
-	}
-
-	/**
-	 * no empty check
-	 */
-	protected <E> List<E> removeItemsFromList_(int index, int length, List<E> list, String listName) {
-		List<E> subList = list.subList(index, index + length);
-		List<E> removedItems = new ArrayList<E>(subList);
-		subList.clear();
-		this.fireItemsRemoved(listName, index, removedItems);
-		return removedItems;
-	}
-
-	/**
-	 * Remove the specified items from the specified bound list
-	 * and fire the appropriate event(s) if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#removeAll(java.util.Collection)
-	 */
-	public boolean removeItemsFromList(Object[] items, List<?> list, String listName) {
-		return (items.length != 0)
-				&& ( ! list.isEmpty())
-				&& this.removeItemsFromList_(new ArrayIterator<Object>(items), list, listName);
-	}
-
-	/**
-	 * Remove the specified items from the specified bound list
-	 * and fire the appropriate event(s) if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#removeAll(java.util.Collection)
-	 */
-	public boolean removeItemsFromList(Collection<?> items, List<?> list, String listName) {
-		return ( ! items.isEmpty())
-				&& ( ! list.isEmpty())
-				&& this.removeItemsFromList_(items.iterator(), list, listName);
-	}
-
-	/**
-	 * Remove the specified items from the specified bound list
-	 * and fire the appropriate event(s) if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#removeAll(java.util.Collection)
-	 */
-	public boolean removeItemsFromList(Iterable<?> items, List<?> list, String listName) {
-		return this.removeItemsFromList(items.iterator(), list, listName);
-	}
-
-	/**
-	 * Remove the specified items from the specified bound list
-	 * and fire the appropriate event(s) if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#removeAll(java.util.Collection)
-	 */
-	public boolean removeItemsFromList(Iterator<?> items, List<?> list, String listName) {
-		return (items.hasNext())
-				&& ( ! list.isEmpty())
-				&& this.removeItemsFromList_(items, list, listName);
-	}
-
-	/**
-	 * no empty checks
-	 */
-	protected boolean removeItemsFromList_(Iterator<?> items, List<?> list, String listName) {
-		boolean changed = false;
-		while (items.hasNext()) {
-			changed |= this.removeItemFromList(items.next(), list, listName);
-		}
-		return changed;
-	}
-
-	/**
-	 * Retain the specified items in the specified bound list
-	 * and fire the appropriate event(s) if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#retainAll(java.util.Collection)
-	 */
-	public boolean retainItemsInList(Object[] items, List<?> list, String listName) {
-		if (list.isEmpty()) {
-			return false;
-		}
-		if (items.length == 0) {
-			return this.clearList_(list, listName);
-		}
-		return this.retainItemsInList_(new ArrayIterator<Object>(items), list, listName);
-	}
-
-	/**
-	 * Retain the specified items in the specified bound list
-	 * and fire the appropriate event(s) if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#retainAll(java.util.Collection)
-	 */
-	public boolean retainItemsInList(Collection<?> items, List<?> list, String listName) {
-		if (list.isEmpty()) {
-			return false;
-		}
-		if (items.isEmpty()) {
-			return this.clearList_(list, listName);
-		}
-		return this.retainItemsInList_(items.iterator(), list, listName);
-	}
-
-	/**
-	 * Retain the specified items in the specified bound list
-	 * and fire the appropriate event(s) if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#retainAll(java.util.Collection)
-	 */
-	public boolean retainItemsInList(Iterable<?> items, List<?> list, String listName) {
-		return this.retainItemsInList(items.iterator(), list, listName);
-	}
-
-	/**
-	 * Retain the specified items in the specified bound list
-	 * and fire the appropriate event(s) if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#retainAll(java.util.Collection)
-	 */
-	public boolean retainItemsInList(Iterator<?> items, List<?> list, String listName) {
-		if (list.isEmpty()) {
-			return false;
-		}
-		if ( ! items.hasNext()) {
-			return this.clearList_(list, listName);
-		}
-		return this.retainItemsInList_(items, list, listName);
-	}
-
-	/**
-	 * no empty checks
-	 */
-	protected boolean retainItemsInList_(Iterator<?> items, List<?> list, String listName) {
-		HashBag<?> retainedItems = CollectionTools.collection(items);
-		HashBag<?> removedItems = CollectionTools.collection(list);
-		removedItems.removeAll(retainedItems);
-		return this.removeItemsFromList(removedItems, list, listName);
-	}
-
-	/**
-	 * Set the specified item in the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return the replaced item.
-	 * @see java.util.List#set(int, Object)
-	 */
-	public <E> E setItemInList(int index, E item, List<E> list, String listName) {
-		E oldItem = list.set(index, item);
-		this.fireItemReplaced(listName, index, item, oldItem);
-		return oldItem;
-	}
-
-	/**
-	 * Replace the first occurrence of the specified item
-	 * in the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return the index of the replaced item.
-	 * Return -1 if the item was not found in the list.
-	 * @see java.util.List#set(int, Object)
-	 */
-	public <E> int replaceItemInList(E oldItem, E newItem, List<E> list, String listName) {
-		if (list.isEmpty()) {
-			return -1;
-		}
-
-		int index = list.indexOf(oldItem);
-		if ((index != -1) && this.valuesAreDifferent(oldItem, newItem)) {
-			list.set(index, newItem);
-			this.fireItemReplaced_(listName, index, newItem, oldItem);
-		}
-		return index;
-	}
-
-	/**
-	 * Set the specified items in the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return the replaced items.
-	 * @see java.util.List#set(int, Object)
-	 */
-	public <E> List<E> setItemsInList(int index, E[] items, List<E> list, String listName) {
-		if (items.length == 0) {
-			return Collections.emptyList();
-		}
-		return this.setItemsInList_(index, Arrays.asList(items), list, listName);
-	}
-
-	/**
-	 * Set the specified items in the specified bound list
-	 * and fire the appropriate event if necessary.
-	 * Return the replaced items.
-	 * @see java.util.List#set(int, Object)
-	 */
-	public <E> List<E> setItemsInList(int index, List<? extends E> items, List<E> list, String listName) {
-		if (items.isEmpty()) {
-			return Collections.emptyList();
-		}
-		return this.setItemsInList_(index, items, list, listName);
-	}
-
-	/**
-	 * no empty check
-	 */
-	protected <E> List<E> setItemsInList_(int index, List<? extends E> items, List<E> list, String listName) {
-		List<E> subList = list.subList(index, index + items.size());
-		List<E> oldItems = new ArrayList<E>(subList);
-		for (int i = 0; i < items.size(); i++) {
-			E newItem = items.get(i);
-			E oldItem = subList.set(i, newItem);
-			this.fireItemReplaced(listName, index + i, newItem, oldItem);
-		}
-		return oldItems;
-	}
-
-	/**
-	 * Move items in the specified list from the specified source index to the
-	 * specified target index for the specified length.
-	 * Return whether the list changed.
-	 */
-	public <E> boolean moveItemsInList(int targetIndex, int sourceIndex, int length, List<E> list, String listName) {
-		if ((targetIndex == sourceIndex) || (length == 0)) {
-			return false;
-		}
-		// it's unlikely but possible the list is unchanged by the move... (e.g. any moves within ["foo", "foo", "foo"]...)
-		CollectionTools.move(list, targetIndex, sourceIndex, length);
-		this.fireItemsMoved(listName, targetIndex, sourceIndex, length);
-		return true;
-	}
-
-	/**
-	 * Move an item in the specified list from the specified source index to the
-	 * specified target index.
-	 * Return whether the list changed.
-	 */
-	public <E> boolean moveItemInList(int targetIndex, int sourceIndex, List<E> list, String listName) {
-		if (targetIndex == sourceIndex) {
-			return false;
-		}
-		// it's unlikely but possible the list is unchanged by the move... (e.g. any moves within ["foo", "foo", "foo"]...)
-		CollectionTools.move(list, targetIndex, sourceIndex);
-		this.fireItemMoved(listName, targetIndex, sourceIndex);
-		return true;
-	}
-
-	/**
-	 * Clear the entire list
-	 * and fire the appropriate event if necessary.
-	 * Return whether the list changed.
-	 * @see java.util.List#clear()
-	 */
-	public boolean clearList(List<?> list, String listName) {
-		if (list.isEmpty()) {
-			return false;
-		}
-		return this.clearList_(list, listName);
-	}
-
-	/**
-	 * no empty check
-	 */
-	protected boolean clearList_(List<?> list, String listName) {
-		list.clear();
-		this.fireListCleared(listName);
-		return true;
-	}
-
-	/**
-	 * Synchronize the list with the specified new list,
-	 * making a minimum number of sets, removes, and/or adds.
-	 * Return whether the list changed.
-	 */
-	public <E> boolean synchronizeList(List<E> newList, List<E> list, String listName) {
-		if (newList.isEmpty()) {
-			return this.clearList(list, listName);
-		}
-		if (list.isEmpty()) {
-			return this.addItemsToList_(newList, list, listName);
-		}
-		return this.synchronizeList_(newList, list, listName);
-	}
-
-	/**
-	 * Synchronize the list with the specified new list,
-	 * making a minimum number of sets, removes, and/or adds.
-	 * Return whether the list changed.
-	 */
-	public <E> boolean synchronizeList(Iterator<E> newList, List<E> list, String listName) {
-		if ( ! newList.hasNext()) {
-			return this.clearList(list, listName);
-		}
-		if (list.isEmpty()) {
-			return this.addItemsToList_(newList, list, listName);
-		}
-		return this.synchronizeList_(CollectionTools.list(newList), list, listName);
-	}
-
-	/**
-	 * no empty checks
-	 */
-	protected <E> boolean synchronizeList_(List<E> newList, List<E> oldList, String listName) {
-		int newSize = newList.size();
-		int oldSize = oldList.size();
-
-		boolean changed = false;
-		int min = Math.min(newSize, oldSize);
-		for (int i = 0; i < min; i++) {
-			E newItem = newList.get(i);
-			E oldItem = oldList.set(i, newItem);
-			if (this.valuesAreDifferent(newItem, oldItem)) {
-				changed = true;
-				this.fireItemReplaced_(listName, i, newItem, oldItem);
-			}
-		}
-
-		if (newSize == oldSize) {
-			return changed;
-		}
-
-		if (newSize < oldSize) {
-			this.removeItemsFromList_(newSize, oldSize - newSize, oldList, listName);
-			return true;
-		}
-
-		// newSize > oldSize
-		this.addItemsToList_(newList.subList(oldSize, newSize), oldList, listName);
-		return true;
-	}
-
-
-	// ********** tree change support **********
-
-	protected static final Class<TreeChangeListener> TREE_CHANGE_LISTENER_CLASS = TreeChangeListener.class;
-
-	/**
-	 * Add a tree change listener for the specified tree. The listener
-	 * will be notified only for changes to the specified tree.
-	 */
-	public void addTreeChangeListener(String treeName, TreeChangeListener listener) {
-		this.addListener(TREE_CHANGE_LISTENER_CLASS, treeName, listener);
-	}
-
-	/**
-	 * Remove a tree change listener that was registered for a specific tree.
-	 */
-	public void removeTreeChangeListener(String treeName, TreeChangeListener listener) {
-		this.removeListener(TREE_CHANGE_LISTENER_CLASS, treeName, listener);
-	}
-
-	/**
-	 * Return whether there are any tree change listeners that will
-	 * be notified when the specified tree has changed.
-	 */
-	public boolean hasAnyTreeChangeListeners(String treeName) {
-		return this.hasAnyListeners(TREE_CHANGE_LISTENER_CLASS, treeName);
-	}
-
-	private ListenerList<TreeChangeListener> getTreeChangeListenerList(String treeName) {
-		return this.getListenerList(TREE_CHANGE_LISTENER_CLASS, treeName);
-	}
-
-	private Iterable<TreeChangeListener> getTreeChangeListeners(String treeName) {
-		ListenerList<TreeChangeListener> listenerList = this.getTreeChangeListenerList(treeName);
-		return (listenerList == null) ? null : listenerList.getListeners();
-	}
-
-	private boolean hasTreeChangeListener(String treeName, TreeChangeListener listener) {
-		return CollectionTools.contains(this.getTreeChangeListeners(treeName), listener);
-	}
-
-	/**
-	 * Report a bound tree update to any registered listeners.
-	 */
-	public void fireNodeAdded(TreeAddEvent event) {
-		String treeName = event.getTreeName();
-		Iterable<TreeChangeListener> listeners = this.getTreeChangeListeners(treeName);
-		if (listeners != null) {
-			for (TreeChangeListener listener : listeners) {
-				if (this.hasTreeChangeListener(treeName, listener)) {  // verify listener is still listening
-					listener.nodeAdded(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.nodeAdded(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound tree update to any registered listeners.
-	 */
-	public void fireNodeAdded(String treeName, List<?> path) {
-//		this.fireNodeAdded(new TreeAddEvent(this.source, treeName, path));
-		TreeAddEvent event = null;
-		Iterable<TreeChangeListener> listeners = this.getTreeChangeListeners(treeName);
-		if (listeners != null) {
-			for (TreeChangeListener listener : listeners) {
-				if (this.hasTreeChangeListener(treeName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new TreeAddEvent(this.source, treeName, path);
-					}
-					listener.nodeAdded(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new TreeAddEvent(this.source, treeName, path);
-					}
-					changeListener.nodeAdded(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound tree update to any registered listeners.
-	 */
-	public void fireNodeRemoved(TreeRemoveEvent event) {
-		String treeName = event.getTreeName();
-		Iterable<TreeChangeListener> listeners = this.getTreeChangeListeners(treeName);
-		if (listeners != null) {
-			for (TreeChangeListener listener : listeners) {
-				if (this.hasTreeChangeListener(treeName, listener)) {  // verify listener is still listening
-					listener.nodeRemoved(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.nodeRemoved(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound tree update to any registered listeners.
-	 */
-	public void fireNodeRemoved(String treeName, List<?> path) {
-//		this.fireNodeRemoved(new TreeRemoveEvent(this.source, treeName, path));
-
-		TreeRemoveEvent event = null;
-		Iterable<TreeChangeListener> listeners = this.getTreeChangeListeners(treeName);
-		if (listeners != null) {
-			for (TreeChangeListener listener : listeners) {
-				if (this.hasTreeChangeListener(treeName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new TreeRemoveEvent(this.source, treeName, path);
-					}
-					listener.nodeRemoved(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new TreeRemoveEvent(this.source, treeName, path);
-					}
-					changeListener.nodeRemoved(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound tree update to any registered listeners.
-	 */
-	public void fireTreeCleared(TreeClearEvent event) {
-		String treeName = event.getTreeName();
-		Iterable<TreeChangeListener> listeners = this.getTreeChangeListeners(treeName);
-		if (listeners != null) {
-			for (TreeChangeListener listener : listeners) {
-				if (this.hasTreeChangeListener(treeName, listener)) {  // verify listener is still listening
-					listener.treeCleared(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.treeCleared(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound tree update to any registered listeners.
-	 */
-	public void fireTreeCleared(String treeName) {
-//		this.fireTreeCleared(new TreeClearEvent(this.source, treeName));
-
-		TreeClearEvent event = null;
-		Iterable<TreeChangeListener> listeners = this.getTreeChangeListeners(treeName);
-		if (listeners != null) {
-			for (TreeChangeListener listener : listeners) {
-				if (this.hasTreeChangeListener(treeName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new TreeClearEvent(this.source, treeName);
-					}
-					listener.treeCleared(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new TreeClearEvent(this.source, treeName);
-					}
-					changeListener.treeCleared(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound tree update to any registered listeners.
-	 */
-	public void fireTreeChanged(TreeChangeEvent event) {
-		String treeName = event.getTreeName();
-		Iterable<TreeChangeListener> listeners = this.getTreeChangeListeners(treeName);
-		if (listeners != null) {
-			for (TreeChangeListener listener : listeners) {
-				if (this.hasTreeChangeListener(treeName, listener)) {  // verify listener is still listening
-					listener.treeChanged(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					changeListener.treeChanged(event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Report a bound tree update to any registered listeners.
-	 */
-	public void fireTreeChanged(String treeName, Collection<?> nodes) {
-//		this.fireTreeChanged(new TreeChangeEvent(this.source, treeName, nodes));
-
-		TreeChangeEvent event = null;
-		Iterable<TreeChangeListener> listeners = this.getTreeChangeListeners(treeName);
-		if (listeners != null) {
-			for (TreeChangeListener listener : listeners) {
-				if (this.hasTreeChangeListener(treeName, listener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new TreeChangeEvent(this.source, treeName, nodes);
-					}
-					listener.treeChanged(event);
-				}
-			}
-		}
-
-		Iterable<ChangeListener> changeListeners = this.getChangeListeners();
-		if (changeListeners != null) {
-			for (ChangeListener changeListener : changeListeners) {
-				if (this.hasChangeListener(changeListener)) {  // verify listener is still listening
-					if (event == null) {
-						event = new TreeChangeEvent(this.source, treeName, nodes);
-					}
-					changeListener.treeChanged(event);
-				}
-			}
-		}
-	}
-
-
-	// ********** convenience methods **********
-
-	/**
-	 * Return whether the specified values are equal, with the appropriate null checks.
-	 * Convenience method for checking whether an attribute value has changed.
-	 */
-	public boolean valuesAreEqual(Object value1, Object value2) {
-		return Tools.valuesAreEqual(value1, value2);
-	}
-
-	/**
-	 * Return whether the specified values are different, with the appropriate null checks.
-	 * Convenience method for checking whether an attribute value has changed.
-	 */
-	public boolean valuesAreDifferent(Object value1, Object value2) {
-		return Tools.valuesAreDifferent(value1, value2);
-	}
-
-	/**
-	 * Return whether the specified iterables return the same elements
-	 * in the same order.
-	 */
-	public boolean elementsAreEqual(Iterable<?> iterable1, Iterable<?> iterable2) {
-		return CollectionTools.elementsAreEqual(iterable1, iterable2);
-	}
-
-	/**
-	 * Return whether the specified iterables do not return the same elements
-	 * in the same order.
-	 */
-	public boolean elementsAreDifferent(Iterable<?> iterable1, Iterable<?> iterable2) {
-		return CollectionTools.elementsAreDifferent(iterable1, iterable2);
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.source);
-	}
-
-
-	// ********** member classes **********
-
-	/**
-	 * Pair an aspect name with its associated listeners.
-	 */
-	static abstract class AspectListenerListPair<L extends EventListener>
-		implements Serializable
-	{
-		final ListenerList<L> listenerList;
-
-		private static final long serialVersionUID = 1L;
-
-		AspectListenerListPair(Class<L> listenerClass, L listener) {
-			super();
-			this.listenerList = new ListenerList<L>(listenerClass, listener);
-		}
-
-		boolean matches(Class<? extends EventListener> listenerClass, @SuppressWarnings("unused") String aspectName) {
-			return this.listenerList.getListenerType() == listenerClass;
-		}
-
-		boolean matches(Class<? extends EventListener> listenerClass) {
-			return this.matches(listenerClass, null);
-		}
-
-		@Override
-		public String toString() {
-			return StringTools.buildToStringFor(this, this.getAspectName());
-		}
-
-		abstract String getAspectName();
-
-	}
-
-	/**
-	 * Pair an aspect name with its associated listeners.
-	 */
-	static class SimpleAspectListenerListPair<L extends EventListener>
-		extends AspectListenerListPair<L>
-	{
-		final String aspectName;
-
-		private static final long serialVersionUID = 1L;
-
-		SimpleAspectListenerListPair(Class<L> listenerClass, String aspectName, L listener) {
-			super(listenerClass, listener);
-			if (aspectName == null) {
-				throw new NullPointerException();
-			}
-			this.aspectName = aspectName;
-		}
-
-		@Override
-		boolean matches(Class<? extends EventListener> listenerClass, @SuppressWarnings("hiding") String aspectName) {
-			return this.aspectName.equals(aspectName)
-					&& super.matches(listenerClass, aspectName);
-		}
-
-		@Override
-		String getAspectName() {
-			return this.aspectName;
-		}
-
-	}
-
-	/**
-	 * Pair a null aspect name with its associated listeners.
-	 */
-	static class NullAspectListenerListPair<L extends EventListener>
-		extends AspectListenerListPair<L>
-	{
-		private static final long serialVersionUID = 1L;
-
-		NullAspectListenerListPair(Class<L> listenerClass, L listener) {
-			super(listenerClass, listener);
-		}
-
-		@Override
-		boolean matches(Class<? extends EventListener> listenerClass, String aspectName) {
-			return (aspectName == null)
-					&& super.matches(listenerClass, null);
-		}
-
-		@Override
-		String getAspectName() {
-			return null;
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/SingleAspectChangeSupport.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/SingleAspectChangeSupport.java
deleted file mode 100644
index 0e58832..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/SingleAspectChangeSupport.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model;
-
-import java.util.Collection;
-import java.util.EventListener;
-import java.util.List;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-
-/**
- * This change support class changes the behavior of the standard
- * change support in several ways:<ul>
- * <li>All events fired by the source must specify the single aspect.
- * <li>Listeners are required to be either "general purpose" listeners or
- * 	    listeners of the single aspect.
- * </ul>
- */
-public class SingleAspectChangeSupport
-	extends ChangeSupport
-{
-	protected final Class<? extends EventListener> validListenerClass;
-	protected final String validAspectName;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructor **********
-
-	public SingleAspectChangeSupport(Model source, Class<? extends EventListener> validListenerClass, String validAspectName) {
-		super(source);
-		if ( ! validListenerClass.isAssignableFrom(this.getChangeListenerClass())) {
-			throw new IllegalArgumentException("The change support's change listener class (" + this.getChangeListenerClass().getName() + //$NON-NLS-1$
-					") does not extend the valid listener class: " + validListenerClass.getName()); //$NON-NLS-1$
-		}
-		this.validListenerClass = validListenerClass;
-		this.validAspectName = validAspectName;
-	}
-
-
-	// ********** internal implementation **********
-
-	private UnsupportedOperationException buildUnsupportedOperationException() {
-		return new UnsupportedOperationException(
-				"This Model supports only changes for the listener type \"" + this.validListenerClass.getName() //$NON-NLS-1$
-				+ "\" and the aspect \"" + this.validAspectName + '"' //$NON-NLS-1$
-			);
-	}
-
-	/**
-	 * The listener can be either an instance of the valid listener class or
-	 * the "general-purpose" change listener class (which should extend the
-	 * the valid listener class).
-	 */
-	private void check(Class<? extends EventListener> listenerClass) {
-		if ((listenerClass != this.getChangeListenerClass()) && (listenerClass != this.validListenerClass)) {
-			throw new IllegalArgumentException(
-					"This Model supports only changes for the listener type \"" + this.validListenerClass.getName() //$NON-NLS-1$
-					+ "\" : \"" + listenerClass.getName() + '"' //$NON-NLS-1$
-				);
-		}
-	}
-
-	private void check(Class<? extends EventListener> listenerClass, String aspectName) {
-		this.check(listenerClass);
-		if ( ! aspectName.equals(this.validAspectName)) {
-			throw new IllegalArgumentException(
-					"This Model supports only changes for the aspect \"" + this.validAspectName //$NON-NLS-1$
-					+ "\" : \"" + aspectName + '"' //$NON-NLS-1$
-				);
-		}
-	}
-
-	@Override
-	protected synchronized <L extends EventListener> void addListener(Class<L> listenerClass, String aspectName, L listener) {
-		this.check(listenerClass, aspectName);
-		super.addListener(listenerClass, aspectName, listener);
-	}
-
-	@Override
-	protected synchronized <L extends EventListener> void addListener(Class<L> listenerClass, L listener) {
-		this.check(listenerClass);
-		super.addListener(listenerClass, listener);
-	}
-
-	@Override
-	protected synchronized <L extends EventListener> void removeListener(Class<L> listenerClass, String aspectName, L listener) {
-		this.check(listenerClass, aspectName);
-		super.removeListener(listenerClass, aspectName, listener);
-	}
-
-	@Override
-	protected synchronized <L extends EventListener> void removeListener(Class<L> listenerClass, L listener) {
-		this.check(listenerClass);
-		super.removeListener(listenerClass, listener);
-	}
-
-	@Override
-	protected <L extends EventListener> boolean hasAnyListeners(Class<L> listenerClass, String aspectName) {
-		this.check(listenerClass, aspectName);
-		return super.hasAnyListeners(listenerClass, aspectName);
-	}
-
-	@Override
-	protected <L extends EventListener> boolean hasAnyListeners(Class<L> listenerClass) {
-		this.check(listenerClass);
-		return super.hasAnyListeners(listenerClass);
-	}
-
-
-	// ********** state change support **********
-
-	@Override
-	public void fireStateChanged(StateChangeEvent event) {
-		throw this.buildUnsupportedOperationException();
-	}
-
-	@Override
-	public void fireStateChanged() {
-		throw this.buildUnsupportedOperationException();
-	}
-
-
-	// ********** property change support **********
-
-	@Override
-	public void firePropertyChanged(PropertyChangeEvent event) {
-		this.check(PROPERTY_CHANGE_LISTENER_CLASS, event.getPropertyName());
-		super.firePropertyChanged(event);
-	}
-
-	@Override
-	public void firePropertyChanged(String propertyName, Object oldValue, Object newValue) {
-		this.check(PROPERTY_CHANGE_LISTENER_CLASS, propertyName);
-		super.firePropertyChanged(propertyName, oldValue, newValue);
-	}
-
-	@Override
-	public void firePropertyChanged(String propertyName, int oldValue, int newValue) {
-		this.check(PROPERTY_CHANGE_LISTENER_CLASS, propertyName);
-		super.firePropertyChanged(propertyName, oldValue, newValue);
-	}
-
-	@Override
-	public void firePropertyChanged(String propertyName, boolean oldValue, boolean newValue) {
-		this.check(PROPERTY_CHANGE_LISTENER_CLASS, propertyName);
-		super.firePropertyChanged(propertyName, oldValue, newValue);
-	}
-
-
-	// ********** collection change support **********
-
-	@Override
-	public void fireItemsAdded(CollectionAddEvent event) {
-		this.check(COLLECTION_CHANGE_LISTENER_CLASS, event.getCollectionName());
-		super.fireItemsAdded(event);
-	}
-
-	@Override
-	public void fireItemsAdded(String collectionName, Collection<?> addedItems) {
-		this.check(COLLECTION_CHANGE_LISTENER_CLASS, collectionName);
-		super.fireItemsAdded(collectionName, addedItems);
-	}
-
-	@Override
-	public void fireItemAdded(String collectionName, Object addedItem) {
-		this.check(COLLECTION_CHANGE_LISTENER_CLASS, collectionName);
-		super.fireItemAdded(collectionName, addedItem);
-	}
-
-	@Override
-	public void fireItemsRemoved(CollectionRemoveEvent event) {
-		this.check(COLLECTION_CHANGE_LISTENER_CLASS, event.getCollectionName());
-		super.fireItemsRemoved(event);
-	}
-
-	@Override
-	public void fireItemsRemoved(String collectionName, Collection<?> removedItems) {
-		this.check(COLLECTION_CHANGE_LISTENER_CLASS, collectionName);
-		super.fireItemsRemoved(collectionName, removedItems);
-	}
-
-	@Override
-	public void fireItemRemoved(String collectionName, Object removedItem) {
-		this.check(COLLECTION_CHANGE_LISTENER_CLASS, collectionName);
-		super.fireItemRemoved(collectionName, removedItem);
-	}
-
-	@Override
-	public void fireCollectionCleared(CollectionClearEvent event) {
-		this.check(COLLECTION_CHANGE_LISTENER_CLASS, event.getCollectionName());
-		super.fireCollectionCleared(event);
-	}
-
-	@Override
-	public void fireCollectionCleared(String collectionName) {
-		this.check(COLLECTION_CHANGE_LISTENER_CLASS, collectionName);
-		super.fireCollectionCleared(collectionName);
-	}
-
-	@Override
-	public void fireCollectionChanged(CollectionChangeEvent event) {
-		this.check(COLLECTION_CHANGE_LISTENER_CLASS, event.getCollectionName());
-		super.fireCollectionChanged(event);
-	}
-
-	@Override
-	public void fireCollectionChanged(String collectionName, Collection<?> collection) {
-		this.check(COLLECTION_CHANGE_LISTENER_CLASS, collectionName);
-		super.fireCollectionChanged(collectionName, collection);
-	}
-
-
-	// ********** list change support **********
-
-	@Override
-	public void fireItemsAdded(ListAddEvent event) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, event.getListName());
-		super.fireItemsAdded(event);
-	}
-
-	@Override
-	public void fireItemsAdded(String listName, int index, List<?> addedItems) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, listName);
-		super.fireItemsAdded(listName, index, addedItems);
-	}
-
-	@Override
-	public void fireItemAdded(String listName, int index, Object addedItem) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, listName);
-		super.fireItemAdded(listName, index, addedItem);
-	}
-
-	@Override
-	public void fireItemsRemoved(ListRemoveEvent event) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, event.getListName());
-		super.fireItemsRemoved(event);
-	}
-
-	@Override
-	public void fireItemsRemoved(String listName, int index, List<?> removedItems) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, listName);
-		super.fireItemsRemoved(listName, index, removedItems);
-	}
-
-	@Override
-	public void fireItemRemoved(String listName, int index, Object removedItem) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, listName);
-		super.fireItemRemoved(listName, index, removedItem);
-	}
-
-	@Override
-	public void fireItemsReplaced(ListReplaceEvent event) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, event.getListName());
-		super.fireItemsReplaced(event);
-	}
-
-	@Override
-	public void fireItemsReplaced(String listName, int index, List<?> newItems, List<?> replacedItems) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, listName);
-		super.fireItemsReplaced(listName, index, newItems, replacedItems);
-	}
-
-	@Override
-	public void fireItemReplaced(String listName, int index, Object newItem, Object replacedItem) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, listName);
-		super.fireItemReplaced(listName, index, newItem, replacedItem);
-	}
-
-	@Override
-	public void fireItemsMoved(ListMoveEvent event) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, event.getListName());
-		super.fireItemsMoved(event);
-	}
-
-	@Override
-	public void fireItemsMoved(String listName, int targetIndex, int sourceIndex, int length) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, listName);
-		super.fireItemsMoved(listName, targetIndex, sourceIndex, length);
-	}
-
-	@Override
-	public void fireListCleared(ListClearEvent event) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, event.getListName());
-		super.fireListCleared(event);
-	}
-
-	@Override
-	public void fireListCleared(String listName) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, listName);
-		super.fireListCleared(listName);
-	}
-
-	@Override
-	public void fireListChanged(ListChangeEvent event) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, event.getListName());
-		super.fireListChanged(event);
-	}
-
-	@Override
-	public void fireListChanged(String listName, List<?> list) {
-		this.check(LIST_CHANGE_LISTENER_CLASS, listName);
-		super.fireListChanged(listName, list);
-	}
-
-
-	// ********** tree change support **********
-
-	@Override
-	public void fireNodeAdded(TreeAddEvent event) {
-		this.check(TREE_CHANGE_LISTENER_CLASS, event.getTreeName());
-		super.fireNodeAdded(event);
-	}
-
-	@Override
-	public void fireNodeAdded(String treeName, List<?> path) {
-		this.check(TREE_CHANGE_LISTENER_CLASS, treeName);
-		super.fireNodeAdded(treeName, path);
-	}
-
-	@Override
-	public void fireNodeRemoved(TreeRemoveEvent event) {
-		this.check(TREE_CHANGE_LISTENER_CLASS, event.getTreeName());
-		super.fireNodeRemoved(event);
-	}
-
-	@Override
-	public void fireNodeRemoved(String treeName, List<?> path) {
-		this.check(TREE_CHANGE_LISTENER_CLASS, treeName);
-		super.fireNodeRemoved(treeName, path);
-	}
-
-	@Override
-	public void fireTreeCleared(TreeClearEvent event) {
-		this.check(TREE_CHANGE_LISTENER_CLASS, event.getTreeName());
-		super.fireTreeCleared(event);
-	}
-
-	@Override
-	public void fireTreeCleared(String treeName) {
-		this.check(TREE_CHANGE_LISTENER_CLASS, treeName);
-		super.fireTreeCleared(treeName);
-	}
-
-	@Override
-	public void fireTreeChanged(TreeChangeEvent event) {
-		this.check(TREE_CHANGE_LISTENER_CLASS, event.getTreeName());
-		super.fireTreeChanged(event);
-	}
-
-	@Override
-	public void fireTreeChanged(String treeName, Collection<?> nodes) {
-		this.check(TREE_CHANGE_LISTENER_CLASS, treeName);
-		super.fireTreeChanged(treeName, nodes);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTChangeListenerWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTChangeListenerWrapper.java
deleted file mode 100644
index 43fe3e9..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTChangeListenerWrapper.java
+++ /dev/null
@@ -1,454 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.listener.awt;
-
-import java.awt.EventQueue;
-
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-
-/**
- * Wrap another change listener and forward events to it on the AWT
- * event queue, asynchronously if necessary. If the event arrived on the UI
- * thread that is probably because it was initiated by a UI widget; as a
- * result, we want to loop back synchronously so the events can be
- * short-circuited.
- */
-public final class AWTChangeListenerWrapper
-	implements ChangeListener
-{
-	private final ChangeListener listener;
-
-
-	public AWTChangeListenerWrapper(ChangeListener listener) {
-		super();
-		if (listener == null) {
-			throw new NullPointerException();
-		}
-		this.listener = listener;
-	}
-
-	public void stateChanged(StateChangeEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.stateChanged_(event);
-		} else {
-			this.executeOnEventQueue(this.buildStateChangedRunnable(event));
-		}
-	}
-
-	public void propertyChanged(PropertyChangeEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.propertyChanged_(event);
-		} else {
-			this.executeOnEventQueue(this.buildPropertyChangedRunnable(event));
-		}
-	}
-
-	public void itemsAdded(CollectionAddEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.itemsAdded_(event);
-		} else {
-			this.executeOnEventQueue(this.buildItemsAddedRunnable(event));
-		}
-	}
-
-	public void itemsRemoved(CollectionRemoveEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.itemsRemoved_(event);
-		} else {
-			this.executeOnEventQueue(this.buildItemsRemovedRunnable(event));
-		}
-	}
-
-	public void collectionCleared(CollectionClearEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.collectionCleared_(event);
-		} else {
-			this.executeOnEventQueue(this.buildCollectionClearedRunnable(event));
-		}
-	}
-
-	public void collectionChanged(CollectionChangeEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.collectionChanged_(event);
-		} else {
-			this.executeOnEventQueue(this.buildCollectionChangedRunnable(event));
-		}
-	}
-
-	public void itemsAdded(ListAddEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.itemsAdded_(event);
-		} else {
-			this.executeOnEventQueue(this.buildItemsAddedRunnable(event));
-		}
-	}
-
-	public void itemsRemoved(ListRemoveEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.itemsRemoved_(event);
-		} else {
-			this.executeOnEventQueue(this.buildItemsRemovedRunnable(event));
-		}
-	}
-
-	public void itemsMoved(ListMoveEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.itemsMoved_(event);
-		} else {
-			this.executeOnEventQueue(this.buildItemsMovedRunnable(event));
-		}
-	}
-
-	public void itemsReplaced(ListReplaceEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.itemsReplaced_(event);
-		} else {
-			this.executeOnEventQueue(this.buildItemsReplacedRunnable(event));
-		}
-	}
-
-	public void listCleared(ListClearEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.listCleared_(event);
-		} else {
-			this.executeOnEventQueue(this.buildListClearedRunnable(event));
-		}
-	}
-
-	public void listChanged(ListChangeEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.listChanged_(event);
-		} else {
-			this.executeOnEventQueue(this.buildListChangedRunnable(event));
-		}
-	}
-
-	public void nodeAdded(TreeAddEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.nodeAdded_(event);
-		} else {
-			this.executeOnEventQueue(this.buildNodeAddedRunnable(event));
-		}
-	}
-
-	public void nodeRemoved(TreeRemoveEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.nodeRemoved_(event);
-		} else {
-			this.executeOnEventQueue(this.buildNodeRemovedRunnable(event));
-		}
-	}
-
-	public void treeCleared(TreeClearEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.treeCleared_(event);
-		} else {
-			this.executeOnEventQueue(this.buildTreeClearedRunnable(event));
-		}
-	}
-
-	public void treeChanged(TreeChangeEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.treeChanged_(event);
-		} else {
-			this.executeOnEventQueue(this.buildTreeChangedRunnable(event));
-		}
-	}
-
-	private Runnable buildStateChangedRunnable(final StateChangeEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.stateChanged_(event);
-			}
-		};
-	}
-
-	private Runnable buildPropertyChangedRunnable(final PropertyChangeEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.propertyChanged_(event);
-			}
-		};
-	}
-
-	private Runnable buildItemsAddedRunnable(final CollectionAddEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.itemsAdded_(event);
-			}
-			@Override
-			public String toString() {
-				return "items added"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildItemsRemovedRunnable(final CollectionRemoveEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.itemsRemoved_(event);
-			}
-			@Override
-			public String toString() {
-				return "items removed"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildCollectionClearedRunnable(final CollectionClearEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.collectionCleared_(event);
-			}
-			@Override
-			public String toString() {
-				return "collection cleared"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildCollectionChangedRunnable(final CollectionChangeEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.collectionChanged_(event);
-			}
-			@Override
-			public String toString() {
-				return "collection changed"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildItemsAddedRunnable(final ListAddEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.itemsAdded_(event);
-			}
-			@Override
-			public String toString() {
-				return "items added"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildItemsRemovedRunnable(final ListRemoveEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.itemsRemoved_(event);
-			}
-			@Override
-			public String toString() {
-				return "items removed"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildItemsMovedRunnable(final ListMoveEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.itemsMoved_(event);
-			}
-			@Override
-			public String toString() {
-				return "items moved"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildItemsReplacedRunnable(final ListReplaceEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.itemsReplaced_(event);
-			}
-			@Override
-			public String toString() {
-				return "items replaced"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildListClearedRunnable(final ListClearEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.listCleared_(event);
-			}
-			@Override
-			public String toString() {
-				return "list cleared"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildListChangedRunnable(final ListChangeEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.listChanged_(event);
-			}
-			@Override
-			public String toString() {
-				return "list changed"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildNodeAddedRunnable(final TreeAddEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.nodeAdded_(event);
-			}
-			@Override
-			public String toString() {
-				return "node added"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildNodeRemovedRunnable(final TreeRemoveEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.nodeRemoved_(event);
-			}
-			@Override
-			public String toString() {
-				return "node removed"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildTreeClearedRunnable(final TreeClearEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.treeCleared_(event);
-			}
-			@Override
-			public String toString() {
-				return "tree cleared"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildTreeChangedRunnable(final TreeChangeEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTChangeListenerWrapper.this.treeChanged_(event);
-			}
-			@Override
-			public String toString() {
-				return "tree changed"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private boolean isExecutingOnUIThread() {
-		return EventQueue.isDispatchThread();
-	}
-
-	/**
-	 * {@link EventQueue#invokeLater(Runnable)} seems to work OK;
-	 * but using {@link EventQueue#invokeAndWait(Runnable)} can sometimes make
-	 * things more predictable when debugging, at the risk of deadlocks.
-	 */
-	private void executeOnEventQueue(Runnable r) {
-		EventQueue.invokeLater(r);
-//		try {
-//			EventQueue.invokeAndWait(r);
-//		} catch (InterruptedException ex) {
-//			throw new RuntimeException(ex);
-//		} catch (java.lang.reflect.InvocationTargetException ex) {
-//			throw new RuntimeException(ex);
-//		}
-	}
-
-	void stateChanged_(StateChangeEvent event) {
-		this.listener.stateChanged(event);
-	}
-
-	void propertyChanged_(PropertyChangeEvent event) {
-		this.listener.propertyChanged(event);
-	}
-
-	void itemsAdded_(CollectionAddEvent event) {
-		this.listener.itemsAdded(event);
-	}
-
-	void itemsRemoved_(CollectionRemoveEvent event) {
-		this.listener.itemsRemoved(event);
-	}
-
-	void collectionCleared_(CollectionClearEvent event) {
-		this.listener.collectionCleared(event);
-	}
-
-	void collectionChanged_(CollectionChangeEvent event) {
-		this.listener.collectionChanged(event);
-	}
-
-	void itemsAdded_(ListAddEvent event) {
-		this.listener.itemsAdded(event);
-	}
-
-	void itemsRemoved_(ListRemoveEvent event) {
-		this.listener.itemsRemoved(event);
-	}
-
-	void itemsMoved_(ListMoveEvent event) {
-		this.listener.itemsMoved(event);
-	}
-
-	void itemsReplaced_(ListReplaceEvent event) {
-		this.listener.itemsReplaced(event);
-	}
-
-	void listCleared_(ListClearEvent event) {
-		this.listener.listCleared(event);
-	}
-
-	void listChanged_(ListChangeEvent event) {
-		this.listener.listChanged(event);
-	}
-
-	void nodeAdded_(TreeAddEvent event) {
-		this.listener.nodeAdded(event);
-	}
-
-	void nodeRemoved_(TreeRemoveEvent event) {
-		this.listener.nodeRemoved(event);
-	}
-
-	void treeCleared_(TreeClearEvent event) {
-		this.listener.treeCleared(event);
-	}
-
-	void treeChanged_(TreeChangeEvent event) {
-		this.listener.treeChanged(event);
-	}
-
-	@Override
-	public String toString() {
-		return "AWT(" + this.listener.toString() + ')'; //$NON-NLS-1$
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTCollectionChangeListenerWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTCollectionChangeListenerWrapper.java
deleted file mode 100644
index f87f54d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTCollectionChangeListenerWrapper.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.listener.awt;
-
-import java.awt.EventQueue;
-
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-
-/**
- * Wrap another collection change listener and forward events to it on the AWT
- * event queue, asynchronously if necessary. If the event arrived on the UI
- * thread that is probably because it was initiated by a UI widget; as a
- * result, we want to loop back synchronously so the events can be
- * short-circuited.
- */
-public final class AWTCollectionChangeListenerWrapper
-	implements CollectionChangeListener
-{
-	private final CollectionChangeListener listener;
-
-	public AWTCollectionChangeListenerWrapper(CollectionChangeListener listener) {
-		super();
-		if (listener == null) {
-			throw new NullPointerException();
-		}
-		this.listener = listener;
-	}
-
-	public void itemsAdded(CollectionAddEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.itemsAdded_(event);
-		} else {
-			this.executeOnEventQueue(this.buildItemsAddedRunnable(event));
-		}
-	}
-
-	public void itemsRemoved(CollectionRemoveEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.itemsRemoved_(event);
-		} else {
-			this.executeOnEventQueue(this.buildItemsRemovedRunnable(event));
-		}
-	}
-
-	public void collectionCleared(CollectionClearEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.collectionCleared_(event);
-		} else {
-			this.executeOnEventQueue(this.buildCollectionClearedRunnable(event));
-		}
-	}
-
-	public void collectionChanged(CollectionChangeEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.collectionChanged_(event);
-		} else {
-			this.executeOnEventQueue(this.buildCollectionChangedRunnable(event));
-		}
-	}
-
-	private Runnable buildItemsAddedRunnable(final CollectionAddEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTCollectionChangeListenerWrapper.this.itemsAdded_(event);
-			}
-			@Override
-			public String toString() {
-				return "items added"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildItemsRemovedRunnable(final CollectionRemoveEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTCollectionChangeListenerWrapper.this.itemsRemoved_(event);
-			}
-			@Override
-			public String toString() {
-				return "items removed"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildCollectionClearedRunnable(final CollectionClearEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTCollectionChangeListenerWrapper.this.collectionCleared_(event);
-			}
-			@Override
-			public String toString() {
-				return "collection cleared"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildCollectionChangedRunnable(final CollectionChangeEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTCollectionChangeListenerWrapper.this.collectionChanged_(event);
-			}
-			@Override
-			public String toString() {
-				return "collection changed"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private boolean isExecutingOnUIThread() {
-		return EventQueue.isDispatchThread();
-	}
-
-	/**
-	 * {@link EventQueue#invokeLater(Runnable)} seems to work OK;
-	 * but using {@link EventQueue#invokeAndWait(Runnable)} can sometimes make
-	 * things more predictable when debugging, at the risk of deadlocks.
-	 */
-	private void executeOnEventQueue(Runnable r) {
-		EventQueue.invokeLater(r);
-//		try {
-//			EventQueue.invokeAndWait(r);
-//		} catch (InterruptedException ex) {
-//			throw new RuntimeException(ex);
-//		} catch (java.lang.reflect.InvocationTargetException ex) {
-//			throw new RuntimeException(ex);
-//		}
-	}
-
-	void itemsAdded_(CollectionAddEvent event) {
-		this.listener.itemsAdded(event);
-	}
-
-	void itemsRemoved_(CollectionRemoveEvent event) {
-		this.listener.itemsRemoved(event);
-	}
-
-	void collectionCleared_(CollectionClearEvent event) {
-		this.listener.collectionCleared(event);
-	}
-
-	void collectionChanged_(CollectionChangeEvent event) {
-		this.listener.collectionChanged(event);
-	}
-
-	@Override
-	public String toString() {
-		return "AWT(" + this.listener.toString() + ')'; //$NON-NLS-1$
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTListChangeListenerWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTListChangeListenerWrapper.java
deleted file mode 100644
index b0d6fe4..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTListChangeListenerWrapper.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.listener.awt;
-
-import java.awt.EventQueue;
-
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-
-/**
- * Wrap another list change listener and forward events to it on the AWT
- * event queue, asynchronously if necessary. If the event arrived on the UI
- * thread that is probably because it was initiated by a UI widget; as a
- * result, we want to loop back synchronously so the events can be
- * short-circuited.
- */
-public final class AWTListChangeListenerWrapper
-	implements ListChangeListener
-{
-	private final ListChangeListener listener;
-
-	public AWTListChangeListenerWrapper(ListChangeListener listener) {
-		super();
-		if (listener == null) {
-			throw new NullPointerException();
-		}
-		this.listener = listener;
-	}
-
-	public void itemsAdded(ListAddEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.itemsAdded_(event);
-		} else {
-			this.executeOnEventQueue(this.buildItemsAddedRunnable(event));
-		}
-	}
-
-	public void itemsRemoved(ListRemoveEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.itemsRemoved_(event);
-		} else {
-			this.executeOnEventQueue(this.buildItemsRemovedRunnable(event));
-		}
-	}
-
-	public void itemsMoved(ListMoveEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.itemsMoved_(event);
-		} else {
-			this.executeOnEventQueue(this.buildItemsMovedRunnable(event));
-		}
-	}
-
-	public void itemsReplaced(ListReplaceEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.itemsReplaced_(event);
-		} else {
-			this.executeOnEventQueue(this.buildItemsReplacedRunnable(event));
-		}
-	}
-
-	public void listCleared(ListClearEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.listCleared_(event);
-		} else {
-			this.executeOnEventQueue(this.buildListClearedRunnable(event));
-		}
-	}
-
-	public void listChanged(ListChangeEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.listChanged_(event);
-		} else {
-			this.executeOnEventQueue(this.buildListChangedRunnable(event));
-		}
-	}
-
-	private Runnable buildItemsAddedRunnable(final ListAddEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTListChangeListenerWrapper.this.itemsAdded_(event);
-			}
-			@Override
-			public String toString() {
-				return "items added"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildItemsRemovedRunnable(final ListRemoveEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTListChangeListenerWrapper.this.itemsRemoved_(event);
-			}
-			@Override
-			public String toString() {
-				return "items removed"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildItemsMovedRunnable(final ListMoveEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTListChangeListenerWrapper.this.itemsMoved_(event);
-			}
-			@Override
-			public String toString() {
-				return "items moved"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildItemsReplacedRunnable(final ListReplaceEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTListChangeListenerWrapper.this.itemsReplaced_(event);
-			}
-			@Override
-			public String toString() {
-				return "items replaced"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildListClearedRunnable(final ListClearEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTListChangeListenerWrapper.this.listCleared_(event);
-			}
-			@Override
-			public String toString() {
-				return "list cleared"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildListChangedRunnable(final ListChangeEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTListChangeListenerWrapper.this.listChanged_(event);
-			}
-			@Override
-			public String toString() {
-				return "list changed"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private boolean isExecutingOnUIThread() {
-		return EventQueue.isDispatchThread();
-	}
-
-	/**
-	 * {@link EventQueue#invokeLater(Runnable)} seems to work OK;
-	 * but using {@link EventQueue#invokeAndWait(Runnable)} can sometimes make
-	 * things more predictable when debugging, at the risk of deadlocks.
-	 */
-	private void executeOnEventQueue(Runnable r) {
-		EventQueue.invokeLater(r);
-//		try {
-//			EventQueue.invokeAndWait(r);
-//		} catch (InterruptedException ex) {
-//			throw new RuntimeException(ex);
-//		} catch (java.lang.reflect.InvocationTargetException ex) {
-//			throw new RuntimeException(ex);
-//		}
-	}
-
-	void itemsAdded_(ListAddEvent event) {
-		this.listener.itemsAdded(event);
-	}
-
-	void itemsRemoved_(ListRemoveEvent event) {
-		this.listener.itemsRemoved(event);
-	}
-
-	void itemsMoved_(ListMoveEvent event) {
-		this.listener.itemsMoved(event);
-	}
-
-	void itemsReplaced_(ListReplaceEvent event) {
-		this.listener.itemsReplaced(event);
-	}
-
-	void listCleared_(ListClearEvent event) {
-		this.listener.listCleared(event);
-	}
-
-	void listChanged_(ListChangeEvent event) {
-		this.listener.listChanged(event);
-	}
-
-	@Override
-	public String toString() {
-		return "AWT(" + this.listener.toString() + ')'; //$NON-NLS-1$
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTPropertyChangeListenerWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTPropertyChangeListenerWrapper.java
deleted file mode 100644
index f2a252a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTPropertyChangeListenerWrapper.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.listener.awt;
-
-import java.awt.EventQueue;
-
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-
-/**
- * Wrap another property change listener and forward events to it on the AWT
- * event queue, asynchronously if necessary. If the event arrived on the UI
- * thread that is probably because it was initiated by a UI widget; as a
- * result, we want to loop back synchronously so the events can be
- * short-circuited.
- */
-public final class AWTPropertyChangeListenerWrapper
-	implements PropertyChangeListener
-{
-	private final PropertyChangeListener listener;
-
-
-	public AWTPropertyChangeListenerWrapper(PropertyChangeListener listener) {
-		super();
-		if (listener == null) {
-			throw new NullPointerException();
-		}
-		this.listener = listener;
-	}
-
-	public void propertyChanged(PropertyChangeEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.propertyChanged_(event);
-		} else {
-			this.executeOnEventQueue(this.buildPropertyChangedRunnable(event));
-		}
-	}
-
-	private Runnable buildPropertyChangedRunnable(final PropertyChangeEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTPropertyChangeListenerWrapper.this.propertyChanged_(event);
-			}
-		};
-	}
-
-	private boolean isExecutingOnUIThread() {
-		return EventQueue.isDispatchThread();
-	}
-
-	/**
-	 * {@link EventQueue#invokeLater(Runnable)} seems to work OK;
-	 * but using {@link EventQueue#invokeAndWait(Runnable)} can sometimes make
-	 * things more predictable when debugging, at the risk of deadlocks.
-	 */
-	private void executeOnEventQueue(Runnable r) {
-		EventQueue.invokeLater(r);
-//		try {
-//			EventQueue.invokeAndWait(r);
-//		} catch (InterruptedException ex) {
-//			throw new RuntimeException(ex);
-//		} catch (java.lang.reflect.InvocationTargetException ex) {
-//			throw new RuntimeException(ex);
-//		}
-	}
-
-	void propertyChanged_(PropertyChangeEvent event) {
-		this.listener.propertyChanged(event);
-	}
-
-	@Override
-	public String toString() {
-		return "AWT(" + this.listener.toString() + ')'; //$NON-NLS-1$
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTStateChangeListenerWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTStateChangeListenerWrapper.java
deleted file mode 100644
index 11ef236..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTStateChangeListenerWrapper.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.listener.awt;
-
-import java.awt.EventQueue;
-
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-
-/**
- * Wrap another state change listener and forward events to it on the AWT
- * event queue, asynchronously if necessary. If the event arrived on the UI
- * thread that is probably because it was initiated by a UI widget; as a
- * result, we want to loop back synchronously so the events can be
- * short-circuited.
- */
-public final class AWTStateChangeListenerWrapper
-	implements StateChangeListener
-{
-	private final StateChangeListener listener;
-
-	public AWTStateChangeListenerWrapper(StateChangeListener listener) {
-		super();
-		if (listener == null) {
-			throw new NullPointerException();
-		}
-		this.listener = listener;
-	}
-
-	public void stateChanged(StateChangeEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.stateChanged_(event);
-		} else {
-			this.executeOnEventQueue(this.buildStateChangedRunnable(event));
-		}
-	}
-
-	private Runnable buildStateChangedRunnable(final StateChangeEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTStateChangeListenerWrapper.this.stateChanged_(event);
-			}
-		};
-	}
-
-	private boolean isExecutingOnUIThread() {
-		return EventQueue.isDispatchThread();
-	}
-
-	/**
-	 * {@link EventQueue#invokeLater(Runnable)} seems to work OK;
-	 * but using {@link EventQueue#invokeAndWait(Runnable)} can sometimes make
-	 * things more predictable when debugging, at the risk of deadlocks.
-	 */
-	private void executeOnEventQueue(Runnable r) {
-		EventQueue.invokeLater(r);
-//		try {
-//			EventQueue.invokeAndWait(r);
-//		} catch (InterruptedException ex) {
-//			throw new RuntimeException(ex);
-//		} catch (java.lang.reflect.InvocationTargetException ex) {
-//			throw new RuntimeException(ex);
-//		}
-	}
-
-	void stateChanged_(StateChangeEvent event) {
-		this.listener.stateChanged(event);
-	}
-
-	@Override
-	public String toString() {
-		return "AWT(" + this.listener.toString() + ')'; //$NON-NLS-1$
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTTreeChangeListenerWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTTreeChangeListenerWrapper.java
deleted file mode 100644
index 55e3a51..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/listener/awt/AWTTreeChangeListenerWrapper.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.listener.awt;
-
-import java.awt.EventQueue;
-
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.TreeChangeListener;
-
-/**
- * Wrap another tree change listener and forward events to it on the AWT
- * event queue, asynchronously if necessary. If the event arrived on the UI
- * thread that is probably because it was initiated by a UI widget; as a
- * result, we want to loop back synchronously so the events can be
- * short-circuited.
- */
-public final class AWTTreeChangeListenerWrapper
-	implements TreeChangeListener
-{
-	private final TreeChangeListener listener;
-
-	public AWTTreeChangeListenerWrapper(TreeChangeListener listener) {
-		super();
-		if (listener == null) {
-			throw new NullPointerException();
-		}
-		this.listener = listener;
-	}
-
-	public void nodeAdded(TreeAddEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.nodeAdded_(event);
-		} else {
-			this.executeOnEventQueue(this.buildNodeAddedRunnable(event));
-		}
-	}
-
-	public void nodeRemoved(TreeRemoveEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.nodeRemoved_(event);
-		} else {
-			this.executeOnEventQueue(this.buildNodeRemovedRunnable(event));
-		}
-	}
-
-	public void treeCleared(TreeClearEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.treeCleared_(event);
-		} else {
-			this.executeOnEventQueue(this.buildTreeClearedRunnable(event));
-		}
-	}
-
-	public void treeChanged(TreeChangeEvent event) {
-		if (this.isExecutingOnUIThread()) {
-			this.treeChanged_(event);
-		} else {
-			this.executeOnEventQueue(this.buildTreeChangedRunnable(event));
-		}
-	}
-
-	private Runnable buildNodeAddedRunnable(final TreeAddEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTTreeChangeListenerWrapper.this.nodeAdded_(event);
-			}
-			@Override
-			public String toString() {
-				return "node added"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildNodeRemovedRunnable(final TreeRemoveEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTTreeChangeListenerWrapper.this.nodeRemoved_(event);
-			}
-			@Override
-			public String toString() {
-				return "node removed"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildTreeClearedRunnable(final TreeClearEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTTreeChangeListenerWrapper.this.treeCleared_(event);
-			}
-			@Override
-			public String toString() {
-				return "tree cleared"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private Runnable buildTreeChangedRunnable(final TreeChangeEvent event) {
-		return new Runnable() {
-			public void run() {
-				AWTTreeChangeListenerWrapper.this.treeChanged_(event);
-			}
-			@Override
-			public String toString() {
-				return "tree changed"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private boolean isExecutingOnUIThread() {
-		return EventQueue.isDispatchThread();
-	}
-
-	/**
-	 * {@link EventQueue#invokeLater(Runnable)} seems to work OK;
-	 * but using {@link EventQueue#invokeAndWait(Runnable)} can sometimes make
-	 * things more predictable when debugging, at the risk of deadlocks.
-	 */
-	private void executeOnEventQueue(Runnable r) {
-		EventQueue.invokeLater(r);
-//		try {
-//			EventQueue.invokeAndWait(r);
-//		} catch (InterruptedException ex) {
-//			throw new RuntimeException(ex);
-//		} catch (java.lang.reflect.InvocationTargetException ex) {
-//			throw new RuntimeException(ex);
-//		}
-	}
-
-	void nodeAdded_(TreeAddEvent event) {
-		this.listener.nodeAdded(event);
-	}
-
-	void nodeRemoved_(TreeRemoveEvent event) {
-		this.listener.nodeRemoved(event);
-	}
-
-	void treeCleared_(TreeClearEvent event) {
-		this.listener.treeCleared(event);
-	}
-
-	void treeChanged_(TreeChangeEvent event) {
-		this.listener.treeChanged(event);
-	}
-
-	@Override
-	public String toString() {
-		return "AWT(" + this.listener.toString() + ')'; //$NON-NLS-1$
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractCollectionValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractCollectionValueModel.java
deleted file mode 100644
index 7737eed..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractCollectionValueModel.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-import org.eclipse.jpt.utility.internal.model.SingleAspectChangeSupport;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-
-/**
- * This abstract class provides the infrastructure for "lazily" adding listeners
- * to an underlying model as necessary. Subclasses will need to engage and
- * disegage the underlying model and fire the appropriate collection change
- * events. Subclasses must implement the appropriate {@link CollectionValueModel}.
- * <p>
- * Subclasses must implement the following methods:<ul>
- * <li>{@link #engageModel()}<p>
- *     implement this method to add the appropriate listener to the underlying model
- * <li>{@link #disengageModel()}<p>
- *     implement this method to remove the appropriate listener from the underlying model
- * </ul>
- */
-public abstract class AbstractCollectionValueModel
-	extends AbstractModel
-{
-
-	// ********** constructor/initialization **********
-
-	protected AbstractCollectionValueModel() {
-		super();
-	}
-
-	@Override
-	protected ChangeSupport buildChangeSupport() {
-		return new SingleAspectChangeSupport(this, CollectionChangeListener.class, CollectionValueModel.VALUES);
-	}
-
-
-	// ********** extend change support **********
-
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-	@Override
-	public synchronized void addChangeListener(ChangeListener listener) {
-		if (this.hasNoListeners()) {
-			this.engageModel();
-		}
-		super.addChangeListener(listener);
-	}
-	
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-	@Override
-	public synchronized void addCollectionChangeListener(String collectionName, CollectionChangeListener listener) {
-		if (collectionName.equals(CollectionValueModel.VALUES) && this.hasNoListeners()) {
-			this.engageModel();
-		}
-		super.addCollectionChangeListener(collectionName, listener);
-	}
-	
-	/**
-	 * Extend to stop listening to the underlying model if necessary.
-	 */
-	@Override
-	public synchronized void removeChangeListener(ChangeListener listener) {
-		super.removeChangeListener(listener);
-		if (this.hasNoListeners()) {
-			this.disengageModel();
-		}
-	}
-	
-	/**
-	 * Extend to stop listening to the underlying model if necessary.
-	 */
-	@Override
-	public synchronized void removeCollectionChangeListener(String collectionName, CollectionChangeListener listener) {
-		super.removeCollectionChangeListener(collectionName, listener);
-		if (collectionName.equals(CollectionValueModel.VALUES) && this.hasNoListeners()) {
-			this.disengageModel();
-		}
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * Return whether the model has no collection value listeners.
-	 */
-	protected boolean hasNoListeners() {
-		return ! this.hasListeners();
-	}
-
-	/**
-	 * Return whether the model has any collection value listeners.
-	 */
-	protected boolean hasListeners() {
-		return this.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES);
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Engage the underlying model.
-	 */
-	protected abstract void engageModel();
-
-	/**
-	 * Stop listening to the underlying model.
-	 */
-	protected abstract void disengageModel();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractListValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractListValueModel.java
deleted file mode 100644
index c9ee256..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractListValueModel.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-import org.eclipse.jpt.utility.internal.model.SingleAspectChangeSupport;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * This abstract class provides the infrastructure for "lazily" adding listeners
- * to an underlying model as necessary. Subclasses will need to engage and
- * disegage the underlying model and fire the appropriate list change
- * events. Subclasses must implement the appropriate {@link ListValueModel}.
- * <p>
- * Subclasses must implement the following methods:<ul>
- * <li>{@link #engageModel()}<p>
- *     implement this method to add the appropriate listener to the underlying model
- * <li>{@link #disengageModel()}<p>
- *     implement this method to remove the appropriate listener from the underlying model
- * </ul>
- */
-public abstract class AbstractListValueModel
-	extends AbstractModel
-{
-
-	// ********** constructor/initialization **********
-
-	protected AbstractListValueModel() {
-		super();
-	}
-
-	@Override
-	protected ChangeSupport buildChangeSupport() {
-		return new SingleAspectChangeSupport(this, ListChangeListener.class, ListValueModel.LIST_VALUES);
-	}
-
-
-	// ********** extend change support **********
-
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-	@Override
-	public void addChangeListener(ChangeListener listener) {
-		if (this.hasNoListeners()) {
-			this.engageModel();
-		}
-		super.addChangeListener(listener);
-	}
-
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-	@Override
-	public void addListChangeListener(String listName, ListChangeListener listener) {
-		if (listName.equals(ListValueModel.LIST_VALUES) && this.hasNoListeners()) {
-			this.engageModel();
-		}
-		super.addListChangeListener(listName, listener);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying model if necessary.
-	 */
-	@Override
-	public void removeChangeListener(ChangeListener listener) {
-		super.removeChangeListener(listener);
-		if (this.hasNoListeners()) {
-			this.disengageModel();
-		}
-	}
-
-	/**
-	 * Extend to stop listening to the underlying model if necessary.
-	 */
-	@Override
-	public void removeListChangeListener(String listName, ListChangeListener listener) {
-		super.removeListChangeListener(listName, listener);
-		if (listName.equals(ListValueModel.LIST_VALUES) && this.hasNoListeners()) {
-			this.disengageModel();
-		}
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * Return whether the model has no collection value listeners.
-	 */
-	protected boolean hasNoListeners() {
-		return ! this.hasListeners();
-	}
-
-	/**
-	 * Return whether the model has any collection value listeners.
-	 */
-	protected boolean hasListeners() {
-		return this.hasAnyListChangeListeners(ListValueModel.LIST_VALUES);
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Engage the underlying model.
-	 */
-	protected abstract void engageModel();
-
-	/**
-	 * Stop listening to the underlying model.
-	 */
-	protected abstract void disengageModel();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractPropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractPropertyValueModel.java
deleted file mode 100644
index d85efef..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractPropertyValueModel.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-import org.eclipse.jpt.utility.internal.model.SingleAspectChangeSupport;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * This abstract class provides the infrastructure for "lazily" adding listeners
- * to an underlying model as necessary. Subclasses will need to engage and
- * disegage the underlying model and fire the appropriate property change
- * events. Subclasses must implement the appropriate {@link PropertyValueModel}.
- * <p>
- * Subclasses must implement the following methods:<ul>
- * <li>{@link #engageModel()}<p>
- *     implement this method to add the appropriate listener to the underlying model
- * <li>{@link #disengageModel()}<p>
- *     implement this method to remove the appropriate listener from the underlying model
- * </ul>
- */
-public abstract class AbstractPropertyValueModel
-	extends AbstractModel
-{
-
-	// ********** constructor/initialization **********
-
-	protected AbstractPropertyValueModel() {
-		super();
-	}
-
-	@Override
-	protected ChangeSupport buildChangeSupport() {
-		return new SingleAspectChangeSupport(this, PropertyChangeListener.class, PropertyValueModel.VALUE);
-	}
-
-
-	// ********** extend change support **********
-
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-	@Override
-	public synchronized void addChangeListener(ChangeListener listener) {
-		if (this.hasNoListeners()) {
-			this.engageModel();
-		}
-		super.addChangeListener(listener);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying model if necessary.
-	 */
-	@Override
-	public synchronized void removeChangeListener(ChangeListener listener) {
-		super.removeChangeListener(listener);
-		if (this.hasNoListeners()) {
-			this.disengageModel();
-		}
-	}
-
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-	@Override
-	public synchronized void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
-		if (propertyName.equals(PropertyValueModel.VALUE) && this.hasNoListeners()) {
-			this.engageModel();
-		}
-		super.addPropertyChangeListener(propertyName, listener);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying model if necessary.
-	 */
-	@Override
-	public synchronized void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
-		super.removePropertyChangeListener(propertyName, listener);
-		if (propertyName.equals(PropertyValueModel.VALUE) && this.hasNoListeners()) {
-			this.disengageModel();
-		}
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * Return whether the model has no property value listeners.
-	 */
-	protected boolean hasNoListeners() {
-		return ! this.hasListeners();
-	}
-
-	/**
-	 * Return whether the model has any property value listeners.
-	 */
-	protected boolean hasListeners() {
-		return this.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE);
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Engage the underlying model.
-	 */
-	protected abstract void engageModel();
-
-	/**
-	 * Stop listening to the underlying model.
-	 */
-	protected abstract void disengageModel();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractPropertyValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractPropertyValueModelAdapter.java
deleted file mode 100644
index 641456d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractPropertyValueModelAdapter.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * This abstract class provides the infrastructure needed to wrap
- * a model, "lazily" listen to it, and convert
- * its change notifications into property value model change
- * notifications.
- * <p>
- * Subclasses must implement:<ul>
- * <li>{@link #buildValue()}<p>
- *     to return the current property value, as derived from the
- *     current model
- * <li>{@link #engageModel_()}<p>
- *     to start listening to the adapted model
- * <li>{@link #disengageModel_()}<p>
- *     to stop listening to the adapted model
- * </ul>
- * Subclasses can call {@link #propertyChanged()} whenever the calculated
- * value of the property changes (as determined by the subclass).
- */
-public abstract class AbstractPropertyValueModelAdapter<V>
-	extends AbstractPropertyValueModel
-	implements PropertyValueModel<V>
-{
-	/**
-	 * Cache the current value so we can pass an "old value" when
-	 * we fire a property change event.
-	 * We need this because the value may be calculated and we may
-	 * not able to derive the "old value" from any fired events.
-	 */
-	protected V value;
-
-
-	// ********** constructor/initialization **********
-
-	protected AbstractPropertyValueModelAdapter() {
-		super();
-		// our value is null when we are not listening to the model
-		this.value = null;
-	}
-
-
-	// ********** PropertyValueModel implementation **********
-
-	/**
-	 * Return the cached value.
-	 */
-	public V getValue() {
-		return this.value;
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Start listening to the model and build the value.
-	 */
-	@Override
-	protected void engageModel() {
-		this.engageModel_();
-		// synch our value *after* we start listening to the model,
-		// since the model's value might change when a listener is added
-		this.value = this.buildValue();
-	}
-
-	/**
-	 * Start listening to the model.
-	 */
-	protected abstract void engageModel_();
-
-	/**
-	 * Build and return the current value, as derived from the
-	 * current state of the underlying model.
-	 */
-	protected abstract V buildValue();
-
-	/**
-	 * Stop listening to the model and clear the value.
-	 */
-	@Override
-	protected void disengageModel() {
-		this.disengageModel_();
-		// clear out our value when we are not listening to the model
-		this.value = null;
-	}
-
-	/**
-	 * Stop listening to the model.
-	 */
-	protected abstract void disengageModel_();
-
-	/**
-	 * The underlying model changed in some fashion.
-	 * Recalculate the value and notify any listeners.
-	 */
-	protected void propertyChanged() {
-		Object old = this.value;
-		this.firePropertyChanged(VALUE, old, this.value = this.buildValue());
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.value);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractTreeNodeValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractTreeNodeValueModel.java
deleted file mode 100644
index 906c2e1..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AbstractTreeNodeValueModel.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Iterator;
-import java.util.List;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.ChainIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.TreeNodeValueModel;
-
-/**
- * Subclasses need only implement the following methods:
- * 
- * #value()
- *	    return the user-determined "value" of the node,
- *     i.e. the object "wrapped" by the node
- * 
- * #setValue(Object)
- *     set the user-determined "value" of the node,
- *     i.e. the object "wrapped" by the node;
- *     typically only overridden for nodes with "primitive" values
- * 
- * #parent()
- *     return the parent of the node, which should be another
- *     TreeNodeValueModel
- * 
- * #childrenModel()
- *     return a ListValueModel for the node's children
- * 
- * #engageValue() and #disengageValue()
- *     override these methods to listen to the node's value if
- *     it can change in a way that should be reflected in the tree
- */
-public abstract class AbstractTreeNodeValueModel<T>
-	extends AbstractModel
-	implements TreeNodeValueModel<T>
-{
-
-
-	// ********** constructors **********
-	
-	/**
-	 * Default constructor.
-	 */
-	protected AbstractTreeNodeValueModel() {
-		super();
-	}
-	
-	@Override
-	protected ChangeSupport buildChangeSupport() {
-		// this model fires *both* "value property change" and "state change" events...
-//		return new SingleAspectChangeSupport(this, PropertyChangeListener.class, PropertyValueModel.VALUE);
-		return super.buildChangeSupport();
-	}
-
-
-	// ********** extend AbstractModel implementation **********
-
-	/**
-	 * Clients should be adding both "state change" and "value property change"
-	 * listeners.
-	 */
-	@Override
-	public void addStateChangeListener(StateChangeListener listener) {
-		if (this.hasNoStateChangeListeners()) {
-			this.engageValue();
-		}
-		super.addStateChangeListener(listener);
-	}
-
-	/**
-	 * Begin listening to the node's value's state. If the state of the node changes
-	 * in a way that should be reflected in the tree, fire a "state change" event.
-	 */
-	protected abstract void engageValue();
-
-	/**
-	 * @see #addStateChangeListener(StateChangeListener)
-	 */
-	@Override
-	public void removeStateChangeListener(StateChangeListener listener) {
-		super.removeStateChangeListener(listener);
-		if (this.hasNoStateChangeListeners()) {
-			this.disengageValue();
-		}
-	}
-
-	/**
-	 * Stop listening to the node's value.
-	 * @see #engageValue()
-	 */
-	protected abstract void disengageValue();
-
-
-	// ********** WritablePropertyValueModel implementation **********
-	
-	public void setValue(T value) {
-		throw new UnsupportedOperationException();
-	}
-
-
-	// ********** TreeNodeValueModel implementation **********
-	
-	@SuppressWarnings("unchecked")
-	public TreeNodeValueModel<T>[] path() {
-		List<TreeNodeValueModel<T>> path = CollectionTools.reverseList(this.backPath());
-		return path.toArray(new TreeNodeValueModel[path.size()]);
-	}
-
-	/**
-	 * Return an iterator that climbs up the node's path,
-	 * starting with, and including, the node
-	 * and up to, and including, the root node.
-	 */
-	protected Iterator<TreeNodeValueModel<T>> backPath() {
-		return new ChainIterator<TreeNodeValueModel<T>>(this) {
-			@Override
-			protected TreeNodeValueModel<T> nextLink(TreeNodeValueModel<T> currentLink) {
-				return currentLink.parent();
-			}
-		};
-	}
-
-	public TreeNodeValueModel<T> child(int index) {
-		return this.childrenModel().get(index);
-	}
-
-	public int childrenSize() {
-		return this.childrenModel().size();
-	}
-
-	public int indexOfChild(TreeNodeValueModel<T> child) {
-		ListValueModel<TreeNodeValueModel<T>> children = this.childrenModel();
-		int size = children.size();
-		for (int i = 0; i < size; i++) {
-			if (children.get(i) == child) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-	public boolean isLeaf() {
-		return this.childrenModel().size() == 0;
-	}
-
-
-	// ********** standard methods **********
-
-	/**
-	 * We implement #equals(Object) so that TreePaths containing these nodes
-	 * will resolve properly when the nodes contain the same values. This is
-	 * necessary because nodes are dropped and rebuilt willy-nilly when dealing
-	 * with a sorted list of children; and this allows us to save and restore
-	 * a tree's expanded paths. The nodes in the expanded paths that are
-	 * saved before any modification (e.g. renaming a node) will be different
-	 * from the nodes in the tree's paths after the modification, if the modification
-	 * results in a possible change in the node sort order.  ~bjv
-	 */
-	@Override
-	public boolean equals(Object o) {
-		if (o == null) {
-			return false;
-		}
-		if (o.getClass() != this.getClass()) {
-			return false;
-		}
-		@SuppressWarnings("unchecked")
-		AbstractTreeNodeValueModel<T> other = (AbstractTreeNodeValueModel<T>) o;
-		return this.getValue().equals(other.getValue());
-	}
-
-	@Override
-	public int hashCode() {
-		return this.getValue().hashCode();
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.getValue());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectAdapter.java
deleted file mode 100644
index 9010b08..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectAdapter.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.EventListener;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-import org.eclipse.jpt.utility.internal.model.SingleAspectChangeSupport;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * This abstract extension of {@link AbstractModel} provides a base for adding 
- * change listeners (property change, collection change, list change, tree change)
- * to a subject and converting the subject's change notifications into a single
- * set of change notifications for a common aspect (e.g. <code>VALUE</code>).
- * <p>
- * The adapter will only listen to the subject (and subject holder) when the
- * adapter itself actually has listeners. This will allow the adapter to be
- * garbage collected when appropriate
- */
-public abstract class AspectAdapter<S>
-	extends AbstractModel
-{
-	/**
-	 * The subject that holds the aspect and fires
-	 * change notification when the aspect changes.
-	 * We need to hold on to this directly so we can
-	 * disengage it when it changes.
-	 */
-	protected S subject;
-
-	/**
-	 * A value model that holds the subject
-	 * that holds the aspect and provides change notification.
-	 * This is useful when there are a number of aspect adapters
-	 * that have the same subject and that subject can change.
-	 * All the aspect adapters should share the same subject holder.
-	 * For now, this is can only be set upon construction and is
-	 * immutable.
-	 */
-	protected final PropertyValueModel<? extends S> subjectHolder;
-
-	/** A listener that keeps us in synch with the subject holder. */
-	protected final PropertyChangeListener subjectChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an aspect adapter for the specified subject.
-	 */
-	protected AspectAdapter(S subject) {
-		this(new StaticPropertyValueModel<S>(subject));
-	}
-
-	/**
-	 * Construct an aspect adapter for the specified subject holder.
-	 * The subject holder cannot be null.
-	 */
-	protected AspectAdapter(PropertyValueModel<? extends S> subjectHolder) {
-		super();
-		if (subjectHolder == null) {
-			throw new NullPointerException();
-		}
-		this.subjectHolder = subjectHolder;
-		this.subjectChangeListener = this.buildSubjectChangeListener();
-		// the subject is null when we are not listening to it
-		// this will typically result in our value being null
-		this.subject = null;
-	}
-
-
-	// ********** initialization **********
-
-	@Override
-	protected ChangeSupport buildChangeSupport() {
-		return new LocalChangeSupport(this, this.getListenerClass(), this.getListenerAspectName());
-	}
-
-	/**
-	 * The subject holder's value has changed, keep our subject in synch.
-	 */
-	protected PropertyChangeListener buildSubjectChangeListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				AspectAdapter.this.subjectChanged();
-			}
-			@Override
-			public String toString() {
-				return "subject change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * The subject has changed. Notify listeners that the value has changed.
-	 */
-	protected synchronized void subjectChanged() {
-		Object oldValue = this.getValue();
-		boolean hasListeners = this.hasListeners();
-		if (hasListeners) {
-			this.disengageSubject();
-		}
-		this.subject = this.subjectHolder.getValue();
-		if (hasListeners) {
-			this.engageSubject();
-			this.fireAspectChanged(oldValue, this.getValue());
-		}
-	}
-
-	/**
-	 * Return the aspect's current value.
-	 */
-	protected abstract Object getValue();
-
-	/**
-	 * Return the class of listener that is interested in the aspect adapter's
-	 * changes.
-	 */
-	protected abstract Class<? extends EventListener> getListenerClass();
-
-	/**
-	 * Return the name of the aspect adapter's aspect (e.g. VALUE).
-	 * This is the name of the aspect adapter's single aspect, not the
-	 * name of the subject's aspect the aspect adapter is adapting.
-	 */
-	protected abstract String getListenerAspectName();
-
-	/**
-	 * Return whether there are any listeners for the aspect.
-	 */
-	protected abstract boolean hasListeners();
-
-	/**
-	 * Return whether there are no listeners for the aspect.
-	 */
-	protected boolean hasNoListeners() {
-		return ! this.hasListeners();
-	}
-
-	/**
-	 * The aspect has changed, notify listeners appropriately.
-	 */
-	protected abstract void fireAspectChanged(Object oldValue, Object newValue);
-
-	protected void engageSubject() {
-		// check for nothing to listen to
-		if (this.subject != null) {
-			this.engageSubject_();
-		}
-	}
-
-	/**
-	 * The subject is not null - add our listener.
-	 */
-	protected abstract void engageSubject_();
-
-	protected void disengageSubject() {
-		// check for nothing to listen to
-		if (this.subject != null) {
-			this.disengageSubject_();
-		}
-	}
-
-	/**
-	 * The subject is not null - remove our listener.
-	 */
-	protected abstract void disengageSubject_();
-
-	protected void engageSubjectHolder() {
-		this.subjectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.subjectChangeListener);
-		// synch our subject *after* we start listening to the subject holder,
-		// since its value might change when a listener is added
-		this.subject = this.subjectHolder.getValue();
-	}
-
-	protected void disengageSubjectHolder() {
-		this.subjectHolder.removePropertyChangeListener(PropertyValueModel.VALUE, this.subjectChangeListener);
-		// clear out the subject when we are not listening to its holder
-		this.subject = null;
-	}
-
-	protected void engageModels() {
-		this.engageSubjectHolder();
-		this.engageSubject();
-	}
-
-	protected void disengageModels() {
-		this.disengageSubject();
-		this.disengageSubjectHolder();
-	}
-
-
-	// ********** local change support **********
-
-	/**
-	 * Extend change support to start listening to the aspect adapter's
-	 * models (the subject holder and the subject itself) when the first
-	 * relevant listener is added.
-	 * Conversely, stop listening to the aspect adapter's models when the
-	 * last relevant listener is removed.
-	 * A relevant listener is a listener of the relevant type and aspect or a
-	 * general-purpose listener.
-	 */
-	protected class LocalChangeSupport extends SingleAspectChangeSupport {
-		private static final long serialVersionUID = 1L;
-
-		public LocalChangeSupport(AspectAdapter<S> source, Class<? extends EventListener> validListenerClass, String validAspectName) {
-			super(source, validListenerClass, validAspectName);
-		}
-
-		protected boolean hasNoListeners() {
-			return this.hasNoListeners(this.validListenerClass, this.validAspectName);
-		}
-
-
-		// ********** overrides **********
-
-		@Override
-		protected synchronized <T extends EventListener> void addListener(Class<T> listenerClass, T listener) {
-			if (this.hasNoListeners()) {
-				AspectAdapter.this.engageModels();
-			}
-			super.addListener(listenerClass, listener);
-		}
-
-		@Override
-		protected synchronized <T extends EventListener> void addListener(Class<T> listenerClass, String aspectName, T listener) {
-			if (this.hasNoListeners()) {
-				AspectAdapter.this.engageModels();
-			}
-			super.addListener(listenerClass, aspectName, listener);
-		}
-
-		@Override
-		protected synchronized <T extends EventListener> void removeListener(Class<T> listenerClass, T listener) {
-			super.removeListener(listenerClass, listener);
-			if (this.hasNoListeners()) {
-				AspectAdapter.this.disengageModels();
-			}
-		}
-
-		@Override
-		protected synchronized <T extends EventListener> void removeListener(Class<T> listenerClass, String aspectName, T listener) {
-			super.removeListener(listenerClass, aspectName, listener);
-			if (this.hasNoListeners()) {
-				AspectAdapter.this.disengageModels();
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectCollectionValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectCollectionValueModelAdapter.java
deleted file mode 100644
index 5976a55..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectCollectionValueModelAdapter.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Collection;
-import java.util.EventListener;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * This {@link AspectAdapter} provides basic collection change support.
- * This converts an "aspect" (as defined by subclasses) into
- * a single {@link #VALUES} collection.
- * <p>
- * The typical subclass will override the following methods:<ul>
- * <li>{@link #engageSubject_()}<p>
- *     implement this method to add the appropriate listener to the subject
- * <li>{@link #disengageSubject_()}<p>
- *     implement this method to remove the appropriate listener from the subject
- * <li>{@link #getIterable()}<p>
- *     at the very minimum, override this method to return an iterable containing the
- *     subject's collection aspect; it does not need to be overridden if either
- *     {@link #iterator_()} or {@link #iterator()} is overridden and its behavior changed
- * <li>{@link #size_()}<p>
- *     override this method to improve performance; it does not need to be overridden if
- *     {@link #size()} is overridden and its behavior changed
- * <li>{@link #iterator_()}<p>
- *     override this method to return an iterator on the
- *     subject's collection aspect if it is not possible to implement {@link #getIterable()};
- *     it does not need to be overridden if
- *     {@link #iterator()} is overridden and its behavior changed
- * <li>{@link #iterator()}<p>
- *     override this method only if returning an empty iterator when the
- *     subject is null is unacceptable
- * <li>{@link #size()}<p>
- *     override this method only if returning a zero when the
- *     subject is null is unacceptable
- * </ul>
- * To notify listeners, subclasses can call {@link #collectionChanged()}
- * whenever the aspect has changed.
- */
-public abstract class AspectCollectionValueModelAdapter<S, E>
-	extends AspectAdapter<S>
-	implements CollectionValueModel<E>
-{
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a collection value model adapter for an aspect of the
-	 * specified subject.
-	 */
-	protected AspectCollectionValueModelAdapter(PropertyValueModel<? extends S> subjectHolder) {
-		super(subjectHolder);
-	}
-
-
-	// ********** CollectionValueModel implementation **********
-
-	/**
-	 * Return the elements of the subject's collection aspect.
-	 */
-	public Iterator<E> iterator() {
-		return (this.subject == null) ? EmptyIterator.<E>instance() : this.iterator_();
-	}
-
-	/**
-	 * Return the elements of the subject's collection aspect.
-	 * At this point we can be sure the subject is not null.
-	 * @see #iterator()
-	 */
-	protected Iterator<E> iterator_() {
-		return this.getIterable().iterator();
-	}
-
-	/**
-	 * Return the elements of the subject's collection aspect.
-	 * At this point we can be sure the subject is not null.
-	 * @see #iterator_()
-	 */
-	protected Iterable<E> getIterable() {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-	/**
-	 * Return the size of the subject's collection aspect.
-	 */
-	public int size() {
-		return (this.subject == null) ? 0 : this.size_();
-	}
-
-	/**
-	 * Return the size of the subject's collection aspect.
-	 * At this point we can be sure the subject is not null.
-	 * @see #size()
-	 */
-	protected int size_() {
-		return CollectionTools.size(this.iterator());
-	}
-
-
-	// ********** AspectAdapter implementation **********
-
-	@Override
-	protected Object getValue() {
-		return this.buildValueCollection();
-	}
-
-	@Override
-	protected Class<? extends EventListener> getListenerClass() {
-		return CollectionChangeListener.class;
-	}
-
-	@Override
-	protected String getListenerAspectName() {
-		return VALUES;
-	}
-
-	@Override
-	protected boolean hasListeners() {
-		return this.hasAnyCollectionChangeListeners(VALUES);
-	}
-
-	@Override
-	protected void fireAspectChanged(Object oldValue, Object newValue) {
-		@SuppressWarnings("unchecked") Collection<E> newCollection = (Collection<E>) newValue;
-		this.fireCollectionChanged(VALUES, newCollection);
-	}
-
-	protected void collectionChanged() {
-		this.fireCollectionChanged(VALUES, this.buildValueCollection());
-	}
-
-	protected Collection<E> buildValueCollection() {
-		return CollectionTools.collection(this.iterator());
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.buildValueCollection());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectListValueModelAdapter.java
deleted file mode 100644
index 2748cea..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectListValueModelAdapter.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.EventListener;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-import org.eclipse.jpt.utility.internal.iterators.EmptyListIterator;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * This {@link AspectAdapter} provides basic list change support.
- * This converts an "aspect" (as defined by subclasses) into
- * a single {@link #LIST_VALUES} list.
- * <p>
- * The typical subclass will override the following methods:<ul>
- * <li>{@link #engageSubject_()}<p>
- *     implement this method to add the appropriate listener to the subject
- * <li>{@link #disengageSubject_()}<p>
- *     implement this method to remove the appropriate listener from the subject
- * <li>{@link #getListIterable()}<p>
- *     at the very minimum, override this method to return a list iterable containing the
- *     subject's list aspect; it does not need to be overridden if either
- *     {@link #listIterator_()} or {@link #listIterator()} is overridden and its behavior changed
- * <li>{@link #get(int)}<p>
- *     override this method to improve performance
- * <li>{@link #size_()}<p>
- *     override this method to improve performance; it does not need to be overridden if
- *     {@link #size()} is overridden and its behavior changed
- * <li>{@link #toArray_()}<p>
- *     override this method to improve performance; it does not need to be overridden if
- *     {@link #toArray()} is overridden and its behavior changed
- * <li>{@link #listIterator_()}<p>
- *     override this method to return a list iterator on the subject's list
- *     aspect if it is not possible to implement {@link #getListIterable()};
- *     it does not need to be overridden if
- *     {@link #listIterator()} is overridden and its behavior changed
- * <li>{@link #listIterator()}<p>
- *     override this method only if returning an empty list iterator when the
- *     subject is null is unacceptable
- * <li>{@link #size()}<p>
- *     override this method only if returning a zero when the
- *     subject is null is unacceptable
- * <li>{@link #toArray()}<p>
- *     override this method only if returning an empty array when the
- *     subject is null is unacceptable
- * </ul>
- * To notify listeners, subclasses can call {@link #listChanged()}
- * whenever the aspect has changed.
- */
-public abstract class AspectListValueModelAdapter<S, E>
-	extends AspectAdapter<S>
-	implements ListValueModel<E>
-{
-	private static final Object[] EMPTY_ARRAY = new Object[0];
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a list value model adapter for an aspect of the
-	 * specified subject.
-	 */
-	protected AspectListValueModelAdapter(PropertyValueModel<? extends S> subjectHolder) {
-		super(subjectHolder);
-	}
-
-
-	// ********** ListValueModel implementation **********
-
-	/**
-	 * Return the elements of the subject's list aspect.
-	 */
-	public ListIterator<E> iterator() {
-		return this.listIterator();
-	}
-
-	/**
-	 * Return the elements of the subject's list aspect.
-	 */
-	public ListIterator<E> listIterator() {
-		return (this.subject == null) ? EmptyListIterator.<E>instance() : this.listIterator_();
-	}
-
-	/**
-	 * Return the elements of the subject's list aspect.
-	 * At this point we can be sure the subject is not null.
-	 * @see #listIterator()
-	 */
-	protected ListIterator<E> listIterator_() {
-		return this.getListIterable().iterator();
-	}
-
-	/**
-	 * Return the elements of the subject's list aspect.
-	 * At this point we can be sure the subject is not null.
-	 * @see #listIterator_()
-	 */
-	protected ListIterable<E> getListIterable() {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-	/**
-	 * Return the element at the specified index of the subject's list aspect.
-	 */
-	public E get(int index) {
-		return CollectionTools.get(this.listIterator(), index);
-	}
-
-	/**
-	 * Return the size of the subject's list aspect.
-	 */
-	public int size() {
-		return this.subject == null ? 0 : this.size_();
-	}
-
-	/**
-	 * Return the size of the subject's list aspect.
-	 * At this point we can be sure the subject is not null.
-	 * @see #size()
-	 */
-	protected int size_() {
-		return CollectionTools.size(this.listIterator());
-	}
-
-	/**
-	 * Return an array manifestation of the subject's list aspect.
-	 */
-	public Object[] toArray() {
-		return this.subject == null ? EMPTY_ARRAY : this.toArray_();
-	}
-
-	/**
-	 * Return an array manifestation of the subject's list aspect.
-	 * At this point we can be sure the subject is not null.
-	 * @see #toArray()
-	 */
-	protected Object[] toArray_() {
-		return ArrayTools.array(this.listIterator(), this.size());
-	}
-
-
-	// ********** AspectAdapter implementation **********
-
-	@Override
-	protected List<E> getValue() {
-		return this.buildValueList();
-	}
-
-	@Override
-	protected Class<? extends EventListener> getListenerClass() {
-		return ListChangeListener.class;
-	}
-
-	@Override
-	protected String getListenerAspectName() {
-		return LIST_VALUES;
-	}
-
-	@Override
-	protected boolean hasListeners() {
-		return this.hasAnyListChangeListeners(LIST_VALUES);
-	}
-
-	@Override
-	protected void fireAspectChanged(Object oldValue, Object newValue) {
-		@SuppressWarnings("unchecked") List<E> newList = (List<E>) newValue;
-		this.fireListChanged(LIST_VALUES, newList);
-	}
-
-	protected void listChanged() {
-		this.fireListChanged(LIST_VALUES, this.buildValueList());
-	}
-
-	protected List<E> buildValueList() {
-		return CollectionTools.list(this.iterator());
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.buildValueList());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectPropertyValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectPropertyValueModelAdapter.java
deleted file mode 100644
index f0c053a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectPropertyValueModelAdapter.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.EventListener;
-
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * This {@link AspectAdapter} provides basic property change support.
- * This converts an "aspect" (as defined by subclasses) into
- * a single {@link #VALUE} property.
- * <p>
- * The typical subclass will override the following methods:<ul>
- * <li>{@link #engageSubject_()}<p>
- *     implement this method to add the appropriate listener to the subject
- * <li>{@link #disengageSubject_()}<p>
- *     implement this method to remove the appropriate listener from the subject
- * <li>{@link #buildValue_()}<p>
- *     at the very minimum, override this method to return the value of the
- *     subject's aspect (or "virtual" aspect); it does not need to be
- *     overridden if {@link #buildValue()} is overridden and its behavior changed
- * <li>{@link #setValue_(Object)}<p>
- *     override this method if the client code needs to <em>set</em> the value of
- *     the subject's aspect; oftentimes, though, the client code (e.g. UI)
- *     will need only to <em>get</em> the value; it does not need to be
- *     overridden if {@link #setValue(Object)} is overridden and its behavior changed
- * <li>{@link #buildValue()}<p>
- *     override this method only if returning a <code>null</code> value when
- *     the subject is <code>null</code> is unacceptable
- * <li>{@link #setValue(Object)}<p>
- *     override this method only if something must be done when the subject
- *     is <code>null</code> (e.g. throw an exception)
- * </ul>
- * To notify listeners, subclasses can call {@link #propertyChanged()}
- * whenever the aspect has changed.
- */
-public abstract class AspectPropertyValueModelAdapter<S, V>
-	extends AspectAdapter<S>
-	implements WritablePropertyValueModel<V>
-{
-	/**
-	 * Cache the current value of the aspect so we
-	 * can pass an "old value" when we fire a property change event.
-	 * We need this because the value may be calculated and may
-	 * not be in the property change event fired by the subject,
-	 * especially when dealing with multiple aspects.
-	 */
-	protected V value;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a property value model adapter for an aspect of the
-	 * specified subject.
-	 */
-	protected AspectPropertyValueModelAdapter(PropertyValueModel<? extends S> subjectHolder) {
-		super(subjectHolder);
-		// our value is null when we are not listening to the subject
-		this.value = null;
-	}
-
-
-	// ********** PropertyValueModel implementation **********
-
-	/**
-	 * Return the value of the subject's aspect.
-	 */
-	@Override
-	public final V getValue() {
-		return this.value;
-	}
-
-
-	// ********** WritablePropertyValueModel implementation **********
-
-	/**
-	 * Set the value of the subject's aspect.
-	 */
-	public void setValue(V value) {
-		if (this.subject != null) {
-			this.setValue_(value);
-		}
-	}
-
-	/**
-	 * Set the value of the subject's aspect.
-	 * At this point we can be sure the subject is not null.
-	 * @see #setValue(Object)
-	 */
-	protected void setValue_(@SuppressWarnings("unused") V value) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-
-	// ********** AspectAdapter implementation **********
-
-	@Override
-	protected Class<? extends EventListener> getListenerClass() {
-		return PropertyChangeListener.class;
-	}
-
-	@Override
-	protected String getListenerAspectName() {
-		return VALUE;
-	}
-
-    @Override
-	protected boolean hasListeners() {
-		return this.hasAnyPropertyChangeListeners(VALUE);
-	}
-
-    @Override
-	protected void fireAspectChanged(Object oldValue, Object newValue) {
-		this.firePropertyChanged(VALUE, oldValue, newValue);
-	}
-
-    @Override
-	protected void engageSubject() {
-		super.engageSubject();
-		// synch our value *after* we start listening to the subject,
-		// since its value might change when a listener is added
-		this.value = this.buildValue();
-	}
-
-    @Override
-	protected void disengageSubject() {
-		super.disengageSubject();
-		// clear out our value when we are not listening to the subject
-		this.value = null;
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Return the aspect's value.
-	 * At this point the subject may be null.
-	 */
-	protected V buildValue() {
-		return (this.subject == null) ? null : this.buildValue_();
-	}
-
-	/**
-	 * Return the value of the subject's aspect.
-	 * At this point we can be sure the subject is not null.
-	 * @see #buildValue()
-	 */
-	protected V buildValue_() {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-	/**
-	 * This method can be called by subclasses whenever the subject's aspect
-	 * has changed; listeners will be notified appropriately.
-	 */
-	protected void propertyChanged() {
-		V old = this.value;
-		this.value = this.buildValue();
-		this.fireAspectChanged(old, this.value);
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.value);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectTreeValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectTreeValueModelAdapter.java
deleted file mode 100644
index 6e5aa1f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/AspectTreeValueModelAdapter.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Collection;
-import java.util.EventListener;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-import org.eclipse.jpt.utility.model.listener.TreeChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.TreeValueModel;
-
-/**
- * This {@link AspectAdapter} provides basic tree change support.
- * This converts an "aspect" (as defined by subclasses) into
- * a single {@link #NODES} tree.
- * <p>
- * The typical subclass will override the following methods:<ul>
- * <li>{@link #engageSubject_()}<p>
- *     implement this method to add the appropriate listener to the subject
- * <li>{@link #disengageSubject_()}<p>
- *     implement this method to remove the appropriate listener from the subject
- * <li>{@link #nodes_()}<p>
- *     at the very minimum, override this method to return an iterator
- *     on the subject's tree aspect; it does not need to be overridden if
- *     {@link #nodes()} is overridden and its behavior changed
- * <li>{@link #nodes()}<p>
- *     override this method only if returning an empty iterator when the
- *     subject is null is unacceptable
- * </ul>
- * To notify listeners, subclasses can call {@link #treeChanged()}
- * whenever the aspect has changed.
- */
-public abstract class AspectTreeValueModelAdapter<S, E>
-	extends AspectAdapter<S>
-	implements TreeValueModel<E>
-{
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a tree value model adapter for an aspect of the
-	 * specified subject.
-	 */
-	protected AspectTreeValueModelAdapter(PropertyValueModel<? extends S> subjectHolder) {
-		super(subjectHolder);
-	}
-
-
-	// ********** TreeValueModel implementation **********
-
-	/**
-	 * Return the nodes of the subject's tree aspect.
-	 */
-	public Iterator<E> nodes() {
-		return (this.subject == null) ? EmptyIterator.<E>instance() : this.nodes_();
-	}
-
-	/**
-	 * Return the nodes of the subject's tree aspect.
-	 * At this point we can be sure the subject is not null.
-	 * @see #nodes()
-	 */
-	protected Iterator<E> nodes_() {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-
-	// ********** AspectAdapter implementation **********
-
-	@Override
-	protected Object getValue() {
-		return this.buildValueCollection();
-	}
-
-	@Override
-	protected Class<? extends EventListener> getListenerClass() {
-		return TreeChangeListener.class;
-	}
-
-	@Override
-	protected String getListenerAspectName() {
-		return NODES;
-	}
-
-    @Override
-	protected boolean hasListeners() {
-		return this.hasAnyTreeChangeListeners(NODES);
-	}
-
-    @Override
-	protected void fireAspectChanged(Object oldValue, Object newValue) {
-		@SuppressWarnings("unchecked") Collection<E> newNodes = (Collection<E>) newValue;
-		this.fireTreeChanged(NODES, newNodes);
-	}
-
-	protected void treeChanged() {
-		this.fireTreeChanged(NODES, this.buildValueCollection());
-	}
-
-	protected Collection<E> buildValueCollection() {
-		return CollectionTools.collection(this.nodes());
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.buildValueCollection());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/BufferedWritablePropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/BufferedWritablePropertyValueModel.java
deleted file mode 100644
index 6477fa4..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/BufferedWritablePropertyValueModel.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * A <code>BufferedWritablePropertyValueModel</code> is used to hold a temporary copy of the value
- * in another property value model (the "wrapped" value holder). The application
- * can modify this temporary copy, ad nauseam; but the temporary copy is only
- * passed through to the "wrapped" value holder when the trigger "accepts" the
- * buffered value. Alternatively, the application can "reset" the buffered value
- * to the original, "wrapped" value.
- * <p>
- * The trigger is another {@link PropertyValueModel} that holds a {@link Boolean}
- * and the application changes the trigger's value to true on "accept", false on "reset".
- * Typically, in a dialog:<ul>
- * <li>pressing the "OK" button will trigger an "accept" and close the dialog
- * <li>pressing the "Cancel" button will simply close the dialog,
- *   dropping the "buffered" values into the bit bucket
- * <li>pressing the "Apply" button will trigger an "accept" and leave the dialog open
- * <li>pressing the "Restore" button will trigger a "reset" and leave the dialog open
- * </ul>
- * <p>
- * A number of buffered property value models can wrap another set of
- * property aspect adapters that adapt the various aspects of a single
- * domain model. All the bufferd property value models can be hooked to the
- * same trigger, and that trigger is controlled by the application, typically
- * via the OK button in a dialog.
- * 
- * @see PropertyAspectAdapter
- */
-public class BufferedWritablePropertyValueModel<T>
-	extends PropertyValueModelWrapper<T>
-	implements WritablePropertyValueModel<T>
-{
-
-	/**
-	 * We cache the value here until it is accepted and passed
-	 * through to the wrapped value holder.
-	 */
-	protected T bufferedValue;
-
-	/**
-	 * This is set to true when we are "accepting" the buffered value
-	 * and passing it through to the wrapped value holder. This allows
-	 * us to ignore the property change event fired by the wrapped
-	 * value holder.
-	 * (We can't stop listening to the wrapped value holder, because
-	 * if we are the only listener that could "deactivate" the wrapped
-	 * value holder.)
-	 */
-	protected boolean accepting;
-
-	/**
-	 * This is the trigger that indicates whether the buffered value
-	 * should be accepted or reset.
-	 */
-	protected final PropertyValueModel<Boolean> triggerHolder;
-
-	/** This listens to the trigger holder. */
-	protected final PropertyChangeListener triggerChangeListener;
-
-	/**
-	 * This flag indicates whether our buffered value has been assigned
-	 * a value and is possibly out of synch with the wrapped value.
-	 */
-	protected boolean buffering;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a buffered property value model with the specified wrapped
-	 * property value model and trigger holder.
-	 */
-	public BufferedWritablePropertyValueModel(WritablePropertyValueModel<T> valueHolder, PropertyValueModel<Boolean> triggerHolder) {
-		super(valueHolder);
-		if (triggerHolder == null) {
-			throw new NullPointerException();
-		}
-		this.triggerHolder = triggerHolder;
-		this.bufferedValue = null;
-		this.buffering = false;
-		this.accepting = false;
-		this.triggerChangeListener = this.buildTriggerChangeListener();
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildTriggerChangeListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				BufferedWritablePropertyValueModel.this.triggerChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "trigger change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ValueModel implementation **********
-
-	/**
-	 * If we are currently "buffering" a value, return that;
-	 * otherwise, return the wrapped value.
-	 */
-	public T getValue() {
-		return this.buffering ? this.bufferedValue : this.valueHolder.getValue();
-	}
-
-	/**
-	 * Assign the new value to our "buffered" value.
-	 * It will be pushed to the wrapped value holder
-	 * when the trigger is "accepted".
-	 */
-	public void setValue(T value) {
-		if (this.buffering) {
-			if (this.valuesAreEqual(value, this.valueHolder.getValue())) {
-				// the buffered value is being set back to the original value
-				this.reset();
-			} else {
-				// the buffered value is being changed
-				Object old = this.bufferedValue;
-				this.bufferedValue = value;
-				this.firePropertyChanged(VALUE, old, value);
-			}
-		} else {
-			if (this.valuesAreEqual(value, this.valueHolder.getValue())) {
-				// the buffered value is being set to the same value as the original value - ignore
-			} else {
-				// the buffered value is being set for the first time
-				Object old = this.valueHolder.getValue();
-				this.bufferedValue = value;
-				this.buffering = true;
-				this.firePropertyChanged(VALUE, old, value);
-			}
-		}
-	}
-
-
-	// ********** PropertyValueModelWrapper extensions **********
-
-	/**
-	 * extend to engage the trigger holder also
-	 */
-	@Override
-	protected void engageModel() {
-		super.engageModel();
-		this.triggerHolder.addPropertyChangeListener(VALUE, this.triggerChangeListener);
-	}
-
-	/**
-	 * extend to disengage the trigger holder also
-	 */
-	@Override
-	protected void disengageModel() {
-		this.triggerHolder.removePropertyChangeListener(VALUE, this.triggerChangeListener);
-		super.disengageModel();
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * If we are currently "accepting" the value (i.e passing it on to the
-	 * "wrapped" model), ignore change notifications, since we caused
-	 * them and our own listeners are already aware of the change.
-	 */
-	@Override
-	protected void valueChanged(PropertyChangeEvent event) {
-		if ( ! this.accepting) {
-			this.valueChanged_(event);
-		}
-	}
-
-	/**
-	 * If we have a "buffered" value, check whether the "wrapped" value has
-	 * changed to be the same as the "buffered" value. If it has, stop "buffering";
-	 * if not, do nothing.
-	 * If we do not yet have a "buffered" value, simply propagate the
-	 * change notification with the buffered model as the source.
-	 */
-	protected void valueChanged_(PropertyChangeEvent event) {
-		if (this.buffering) {
-			if (this.valuesAreEqual(event.getNewValue(), this.bufferedValue)) {
-				// the buffered value is being set back to the original value
-				this.reset();
-			} else {
-				this.handleChangeConflict(event);
-			}
-		} else {
-			this.firePropertyChanged(event.clone(this));
-		}
-	}
-
-	/**
-	 * By default, if we have a "buffered" value and the "wrapped" value changes,
-	 * we simply ignore the new "wrapped" value and simply overlay it with the
-	 * "buffered" value if it is "accepted". ("Last One In Wins" concurrency model)
-	 * Subclasses can override this method to change that behavior with a
-	 * different concurrency model. For example, you could drop the "buffered" value
-	 * and replace it with the new "wrapped" value, or you could throw an
-	 * exception.
-	 */
-	protected void handleChangeConflict(@SuppressWarnings("unused") PropertyChangeEvent event) {
-		// the default is to do nothing
-	}
-
-	/**
-	 * The trigger changed:<ul>
-	 * <li>If it is now true, "accept" the buffered value and push
-	 * it to the wrapped value holder.
-	 * <li>If it is now false, "reset" the buffered value to its original value.
-	 * </ul>
-	 */
-	protected void triggerChanged(PropertyChangeEvent event) {
-		// if nothing has been "buffered", we don't need to do anything:
-		// nothing needs to be passed through; nothing needs to be reset;
-		if (this.buffering) {
-			if (((Boolean) event.getNewValue()).booleanValue()) {
-				this.accept();
-			} else {
-				this.reset();
-			}
-		}
-	}
-
-	protected void accept() {
-		// set the accepting flag so we ignore any events
-		// fired by the wrapped value holder
-		this.accepting = true;
-		try {
-			this.getValueHolder().setValue(this.bufferedValue);
-		} finally {
-			this.bufferedValue = null;
-			this.buffering = false;
-			// clear the flag once the "accept" is complete
-			this.accepting = false;
-		}
-	}
-
-	protected void reset() {
-		// notify our listeners that our value has been reset
-		Object old = this.bufferedValue;
-		this.bufferedValue = null;
-		this.buffering = false;
-		this.firePropertyChanged(VALUE, old, this.valueHolder.getValue());
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.getValue());
-	}
-
-
-	// ********** convenience methods **********
-
-	/**
-	 * Return whether the buffered model is currently "buffering"
-	 * a value.
-	 */
-	public boolean isBuffering() {
-		return this.buffering;
-	}
-
-	/**
-	 * Our constructor accepts only a {@link WritablePropertyValueModel}{@code<T>}.
-	 */
-	@SuppressWarnings("unchecked")
-	protected WritablePropertyValueModel<T> getValueHolder() {
-		return (WritablePropertyValueModel<T>) this.valueHolder;
-	}
-
-
-	// ********** inner class **********
-
-	/**
-	 * <code>Trigger</code> is a special property value model that only maintains its
-	 * value (of <code>true</code> or <code>false</code>) during the change notification caused by
-	 * {@link #setValue(T)}. In other words, a <code>Trigger</code>
-	 * only has a valid value when it is being set.
-	 */
-	public static class Trigger extends SimplePropertyValueModel<Boolean> {
-
-
-		// ********** constructor **********
-
-		/**
-		 * Construct a trigger with a null value.
-		 */
-		public Trigger() {
-			super();
-		}
-
-
-		// ********** ValueModel implementation **********
-
-		/**
-		 * Extend so that this method can only be invoked during
-		 * change notification triggered by {@link #setValue(Object)}.
-		 */
-		@Override
-		public Boolean getValue() {
-			if (this.value == null) {
-				throw new IllegalStateException("The method Trigger.getValue() may only be called during change notification."); //$NON-NLS-1$
-			}
-			return this.value;
-		}
-
-		/**
-		 * Extend to reset the value to <code>null</code> once all the
-		 * listeners have been notified.
-		 */
-		@Override
-		public void setValue(Boolean value) {
-			super.setValue(value);
-			this.value = null;
-		}
-
-
-		// ********** convenience methods **********
-
-		/**
-		 * Set the trigger's value:<ul>
-		 * 	<li><code>true</code> indicates "accept"
-		 * 	<li><code>false</code> indicates "reset"
-		 * </ul>
-		 */
-		public void setValue(boolean value) {
-			this.setValue(Boolean.valueOf(value));
-		}
-
-		/**
-		 * Return the trigger's value:<ul>
-		 * 	<li><code>true</code> indicates "accept"
-		 * 	<li><code>false</code> indicates "reset"
-		 * </ul>
-		 * This method can only be invoked during change notification.
-		 */
-		public boolean booleanValue() {
-			return this.getValue().booleanValue();
-		}
-
-		/**
-		 * Accept the trigger (i.e. set its value to <code>true</code>).
-		 */
-		public void accept() {
-			this.setValue(true);
-		}
-
-		/**
-		 * Return whether the trigger has been accepted
-		 * (i.e. its value was changed to <code>true</code>).
-		 * This method can only be invoked during change notification.
-		 */
-		public boolean isAccepted() {
-			return this.booleanValue();
-		}
-
-		/**
-		 * Reset the trigger (i.e. set its value to <code>false</code>).
-		 */
-		public void reset() {
-			this.setValue(false);
-		}
-
-		/**
-		 * Return whether the trigger has been reset
-		 * (i.e. its value was changed to <code>false</code>).
-		 * This method can only be invoked during change notification.
-		 */
-		public boolean isReset() {
-			return ! this.booleanValue();
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CachingTransformationPropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CachingTransformationPropertyValueModel.java
deleted file mode 100644
index db5930d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CachingTransformationPropertyValueModel.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * A <code>CachingTransformationPropertyValueModel</code> wraps another
- * {@link PropertyValueModel} and uses a {@link Transformer}
- * to transform the wrapped value before it is returned by {@link #getValue()}.
- * The transformed value is calculated and cached during initialization and every
- * time the wrapped value changes. This can be useful when the old value
- * passed in to {@link #valueChanged(org.eclipse.jpt.utility.model.event.PropertyChangeEvent)}
- * can no longer be "transformed" because its state is no longer valid.
- * This caching can also improve time performance in some situations.
- * <p>
- * As an alternative to building a {@link Transformer},
- * a subclass of <code>CachingTransformationPropertyValueModel</code> can
- * either override {@link #transform_(Object)} or,
- * if something other than null should be returned when the wrapped value
- * is null, override {@link #transform(Object)}.
- */
-public class CachingTransformationPropertyValueModel<T1, T2>
-	extends TransformationPropertyValueModel<T1, T2>
-{
-	/**
-	 * Cache the transformed value so that during property change event notification
-	 * we do not have to transform the old value. The old value could no longer be valid in
-	 * the model; as a result, transforming it would not be valid.
-	 */
-	protected T2 cachedValue;
-
-
-	// ********** constructors/initialization **********
-
-	/**
-	 * Construct a property value model with the specified nested
-	 * property value model and the default transformer.
-	 * Use this constructor if you want to override
-	 * {@link #transform_(Object)} or {@link #transform(Object)}
-	 * instead of building a {@link Transformer}.
-	 */
-	public CachingTransformationPropertyValueModel(PropertyValueModel<? extends T1> valueHolder) {
-		super(valueHolder);
-	}
-
-	/**
-	 * Construct an property value model with the specified nested
-	 * property value model and transformer.
-	 */
-	public CachingTransformationPropertyValueModel(PropertyValueModel<? extends T1> valueHolder, Transformer<T1, T2> transformer) {
-		super(valueHolder, transformer);
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * We have listeners, transform the nested value and cache the result.
-	 */
-	@Override
-	protected void engageModel() {
-		super.engageModel();
-		this.cachedValue = this.transform(this.valueHolder.getValue());
-	}
-
-	/**
-	 * We have no more listeners, clear the cached value.
-	 */
-	@Override
-	protected void disengageModel() {
-		this.cachedValue = null;
-		super.disengageModel();
-	}
-
-	/**
-	 * No need to transform the nested value, simply return the cached value,
-	 * which is already transformed.
-	 */
-	@Override
-	public T2 getValue() {
-		return this.cachedValue;
-	}
-
-	/**
-	 * Transform the specified new value, caching it before returning it.
-	 * A bit of a side-effect, but it seems reasonable.
-	 */
-	@Override
-	protected T2 transformNew(T1 value) {
-		this.cachedValue = super.transformNew(value);
-		return this.cachedValue;
-	}
-
-	/**
-	 * No need to transform the old value, simply return the cached value,
-	 * which is already transformed.
-	 */
-	@Override
-	protected T2 transformOld(T1 value) {
-		return this.cachedValue;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CachingTransformationWritablePropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CachingTransformationWritablePropertyValueModel.java
deleted file mode 100644
index f9c7f11..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CachingTransformationWritablePropertyValueModel.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.internal.BidiTransformer;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * A <code>CachingTransformationWritablePropertyValueModel<code> augments the
- * behavior of a {@link TransformationWritablePropertyValueModel} by caching
- * the transformed value.
- * The transformed value is calculated and cached during initialization and every
- * time the wrapped value changes. This can be useful when the old value
- * passed in to {@link #valueChanged(org.eclipse.jpt.utility.model.event.PropertyChangeEvent)}
- * can no longer be "transformed" because its state is no longer valid.
- * This caching can also improve time performance in some situations.
- */
-public class CachingTransformationWritablePropertyValueModel<T1, T2>
-	extends TransformationWritablePropertyValueModel<T1, T2>
-{
-	/**
-	 * Cache the transformed value so that during property change event notification
-	 * we do not have to transform the old value. The old value could no longer be valid in
-	 * the model; as a result, transforming it would not be valid.
-	 */
-	protected T2 cachedValue;
-
-
-	// ********** constructors/initialization **********
-
-	/**
-	 * Construct a writable property value model with the specified nested
-	 * writable property value model and the default bidi transformer.
-	 * Use this constructor if you want to override
-	 * {@link #transform_(Object)} and {@link reverseTransform_(Object)}
-	 * (or {@link #transform(Object)} and {@link #reverseTransform(Object)})
-	 * methods instead of building a {@link BidiTransformer}.
-	 */
-	public CachingTransformationWritablePropertyValueModel(WritablePropertyValueModel<T1> valueHolder) {
-		super(valueHolder);
-	}
-
-	/**
-	 * Construct a writable property value model with the specified nested
-	 * writable property value model and bidi transformer.
-	 */
-	public CachingTransformationWritablePropertyValueModel(WritablePropertyValueModel<T1> valueHolder, BidiTransformer<T1, T2> transformer) {
-		super(valueHolder, transformer);
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * We have listeners, transform the nested value and cache the result.
-	 */
-	@Override
-	protected void engageModel() {
-		super.engageModel();
-		this.cachedValue = this.transform(this.valueHolder.getValue());
-	}
-
-	/**
-	 * We have no more listeners, clear the cached value.
-	 */
-	@Override
-	protected void disengageModel() {
-		this.cachedValue = null;
-		super.disengageModel();
-	}
-
-	/**
-	 * No need to transform the nested value, simply return the cached value,
-	 * which is already transformed.
-	 */
-	@Override
-	public T2 getValue() {
-		return this.cachedValue;
-	}
-
-	/**
-	 * Transform the specified new value, caching it before returning it.
-	 * A bit of a side-effect, but it seems reasonable.
-	 */
-	@Override
-	protected T2 transformNew(T1 value) {
-		this.cachedValue = super.transformNew(value);
-		return this.cachedValue;
-	}
-
-	/**
-	 * No need to transform the old value, simply return the cached value,
-	 * which is already transformed.
-	 */
-	@Override
-	protected T2 transformOld(T1 value) {
-		return this.cachedValue;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ChangePropertyValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ChangePropertyValueModelAdapter.java
deleted file mode 100644
index d86d6da..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ChangePropertyValueModelAdapter.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.ChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.SimpleChangeListener;
-
-/**
- * This abstract class provides the infrastructure needed to wrap
- * a model, "lazily" listen to it, and convert
- * its change notifications into property value model change
- * notifications.
- * <p>
- * Subclasses must override:<ul>
- * <li>{@link #buildValue()}<p>
- *     to return the current property value, as derived from the
- *     current model
- * </ul>
- * Subclasses might want to override the following methods
- * to improve performance (by not recalculating the value, if possible):<ul>
- * <li>{@link #modelChanged(ChangeEvent event)}
- * <li>{@link #buildChangeListener()}
- * </ul>
- */
-public abstract class ChangePropertyValueModelAdapter<T>
-	extends AbstractPropertyValueModelAdapter<T>
-{
-	/** The wrapped model. */
-	protected final Model model;
-
-	/** A listener that allows us to synch with changes to the wrapped collection holder. */
-	protected final ChangeListener changeListener;
-
-
-	// ********** constructor/initialization **********
-
-	/**
-	 * Construct a property value model with the specified wrapped model.
-	 */
-	protected ChangePropertyValueModelAdapter(Model model) {
-		super();
-		this.model = model;
-		this.changeListener = this.buildChangeListener();
-	}
-
-	protected ChangeListener buildChangeListener() {
-		return new SimpleChangeListener() {
-			@Override
-			protected void modelChanged(ChangeEvent event) {
-				ChangePropertyValueModelAdapter.this.modelChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "change listener command"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Start listening to the model.
-	 */
-	@Override
-	protected void engageModel_() {
-		this.model.addChangeListener(this.changeListener);
-	}
-
-	/**
-	 * Stop listening to the model.
-	 */
-	@Override
-	protected void disengageModel_() {
-		this.model.removeChangeListener(this.changeListener);
-	}
-
-	
-	// ********** change support **********
-
-	/**
-	 * The wrapped model has changed;
-	 * propagate the change notification appropriately.
-	 */
-	protected void modelChanged(@SuppressWarnings("unused") ChangeEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CollectionAspectAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CollectionAspectAdapter.java
deleted file mode 100644
index bdcf4b4..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CollectionAspectAdapter.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-import java.util.Collection;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * This extension of {@link AspectCollectionValueModelAdapter} provides
- * basic collection change support.
- * This converts a set of one or more collections into
- * a single {@link #VALUES} collection.
- * <p>
- * The typical subclass will override the following methods (see the descriptions
- * in {@link AspectCollectionValueModelAdapter}):<ul>
- * <li>{@link #getIterable()}
- * <li>{@link #size_()}
- * <li>{@link #iterator_()}
- * <li>{@link #iterator()}
- * <li>{@link #size()}
- * </ul>
- */
-public abstract class CollectionAspectAdapter<S extends Model, E>
-	extends AspectCollectionValueModelAdapter<S, E>
-{
-	/**
-	 * The name of the subject's collections that we use for the value.
-	 */
-	protected final String[] collectionNames;
-		protected static final String[] EMPTY_COLLECTION_NAMES = new String[0];
-
-	/** A listener that listens to the subject's collection aspects. */
-	protected final CollectionChangeListener collectionChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a collection aspect adapter for the specified subject
-	 * and collection.
-	 */
-	protected CollectionAspectAdapter(String collectionName, S subject) {
-		this(new String[] {collectionName}, subject);
-	}
-
-	/**
-	 * Construct a collection aspect adapter for the specified subject
-	 * and collections.
-	 */
-	protected CollectionAspectAdapter(String[] collectionNames, S subject) {
-		this(new StaticPropertyValueModel<S>(subject), collectionNames);
-	}
-
-	/**
-	 * Construct a collection aspect adapter for the specified subject holder
-	 * and collections.
-	 */
-	protected CollectionAspectAdapter(PropertyValueModel<? extends S> subjectHolder, String... collectionNames) {
-		super(subjectHolder);
-		this.collectionNames = collectionNames;
-		this.collectionChangeListener = this.buildCollectionChangeListener();
-	}
-
-	/**
-	 * Construct a collection aspect adapter for the specified subject holder
-	 * and collections.
-	 */
-	protected CollectionAspectAdapter(PropertyValueModel<? extends S> subjectHolder, Collection<String> collectionNames) {
-		this(subjectHolder, collectionNames.toArray(new String[collectionNames.size()]));
-	}
-
-	/**
-	 * Construct a collection aspect adapter for an "unchanging" collection in
-	 * the specified subject. This is useful for a collection aspect that does not
-	 * change for a particular subject; but the subject will change, resulting in
-	 * a new collection.
-	 */
-	protected CollectionAspectAdapter(PropertyValueModel<? extends S> subjectHolder) {
-		this(subjectHolder, EMPTY_COLLECTION_NAMES);
-	}
-
-
-	// ********** initialization **********
-
-	protected CollectionChangeListener buildCollectionChangeListener() {
-		// transform the subject's collection change events into VALUES collection change events
-		return new CollectionChangeListener() {
-			public void itemsAdded(CollectionAddEvent event) {
-				CollectionAspectAdapter.this.itemsAdded(event);
-			}
-			public void itemsRemoved(CollectionRemoveEvent event) {
-				CollectionAspectAdapter.this.itemsRemoved(event);
-			}
-			public void collectionCleared(CollectionClearEvent event) {
-				CollectionAspectAdapter.this.collectionCleared(event);
-			}
-			public void collectionChanged(CollectionChangeEvent event) {
-				CollectionAspectAdapter.this.collectionChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "collection change listener: " + Arrays.asList(CollectionAspectAdapter.this.collectionNames); //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** AspectAdapter implementation **********
-
-	@Override
-	protected void engageSubject_() {
-    	for (String collectionName : this.collectionNames) {
-			((Model) this.subject).addCollectionChangeListener(collectionName, this.collectionChangeListener);
-		}
-	}
-
-	@Override
-	protected void disengageSubject_() {
-    	for (String collectionName : this.collectionNames) {
-			((Model) this.subject).removeCollectionChangeListener(collectionName, this.collectionChangeListener);
-		}
-	}
-
-
-	// ********** behavior **********
-
-	protected void itemsAdded(CollectionAddEvent event) {
-		this.fireItemsAdded(event.clone(this, VALUES));
-	}
-
-	protected void itemsRemoved(CollectionRemoveEvent event) {
-		this.fireItemsRemoved(event.clone(this, VALUES));
-	}
-
-	protected void collectionCleared(CollectionClearEvent event) {
-		this.fireCollectionCleared(event.clone(this, VALUES));
-	}
-
-	protected void collectionChanged(CollectionChangeEvent event) {
-		this.fireCollectionChanged(event.clone(this, VALUES));
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CollectionListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CollectionListValueModelAdapter.java
deleted file mode 100644
index 2a0d236..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CollectionListValueModelAdapter.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyListIterator;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * An adapter that allows us to make a {@link CollectionValueModel} behave like
- * a read-only {@link ListValueModel}, sorta.
- * <p>
- * To maintain a reasonably consistent appearance to client code, we
- * keep an internal list somewhat in synch with the wrapped collection.
- * <p>
- * <strong>NB:</strong> Since we only listen to the wrapped collection when we have
- * listeners ourselves and we can only stay in synch with the wrapped
- * collection while we are listening to it, results to various methods
- * (e.g. {@link #size()}, {@link #get(int)}) will be unpredictable whenever
- * we do not have any listeners. This should not be too painful since,
- * most likely, clients will also be listeners.
- */
-public class CollectionListValueModelAdapter<E>
-	extends AbstractListValueModel
-	implements ListValueModel<E>
-{
-	/** The wrapped collection value model. */
-	protected final CollectionValueModel<? extends E> collectionHolder;
-
-	/** A listener that forwards any events fired by the collection holder. */
-	protected final CollectionChangeListener collectionChangeListener;
-
-	/**
-	 * Our internal list, which holds the same elements as
-	 * the wrapped collection, but keeps them in order.
-	 */
-	// we declare this an ArrayList so we can use #clone() and #ensureCapacity(int)
-	protected final ArrayList<E> list;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Wrap the specified collection value model.
-	 */
-	public CollectionListValueModelAdapter(CollectionValueModel<? extends E> collectionHolder) {
-		super();
-		if (collectionHolder == null) {
-			throw new NullPointerException();
-		}
-		this.collectionHolder = collectionHolder;
-		this.collectionChangeListener = this.buildCollectionChangeListener();
-		this.list = new ArrayList<E>(collectionHolder.size());
-		// postpone building the list and listening to the underlying collection
-		// until we have listeners ourselves...
-	}
-
-
-	// ********** initialization **********
-
-	/**
-	 * The wrapped collection has changed, forward an equivalent
-	 * list change event to our listeners.
-	 */
-	protected CollectionChangeListener buildCollectionChangeListener() {
-		return new CollectionChangeListener() {
-			public void itemsAdded(CollectionAddEvent event) {
-				CollectionListValueModelAdapter.this.itemsAdded(event);
-			}
-			public void itemsRemoved(CollectionRemoveEvent event) {
-				CollectionListValueModelAdapter.this.itemsRemoved(event);
-			}
-			public void collectionCleared(CollectionClearEvent event) {
-				CollectionListValueModelAdapter.this.collectionCleared(event);
-			}
-			public void collectionChanged(CollectionChangeEvent event) {
-				CollectionListValueModelAdapter.this.collectionChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "collection change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ListValueModel implementation **********
-
-	public Iterator<E> iterator() {
-		return this.listIterator();
-	}
-
-	public ListIterator<E> listIterator() {
-		return new ReadOnlyListIterator<E>(this.list);
-	}
-
-	public E get(int index) {
-		return this.list.get(index);
-	}
-
-	public int size() {
-		return this.list.size();
-	}
-
-	public Object[] toArray() {
-		return this.list.toArray();
-	}
-
-
-	// ********** behavior **********
-
-	@Override
-	protected void engageModel() {
-		this.collectionHolder.addCollectionChangeListener(CollectionValueModel.VALUES, this.collectionChangeListener);
-		// synch our list *after* we start listening to the collection holder,
-		// since its value might change when a listener is added
-		this.buildList();
-	}
-
-	@Override
-	protected void disengageModel() {
-		this.collectionHolder.removeCollectionChangeListener(CollectionValueModel.VALUES, this.collectionChangeListener);
-		// clear out the list when we are not listening to the collection holder
-		this.list.clear();
-	}
-
-	protected void buildList() {
-		// if the new collection is empty, do nothing
-		int size = this.collectionHolder.size();
-		if (size != 0) {
-			this.buildList(size);
-		}
-	}
-
-	protected void buildList(int size) {
-		this.list.ensureCapacity(size);
-		for (E each : this.collectionHolder) {
-			this.list.add(each);
-		}
-	}
-
-	protected void itemsAdded(CollectionAddEvent event) {
-		this.addItemsToList(this.indexToAddItems(), this.getItems(event), this.list, LIST_VALUES);
-	}
-	
-	protected int indexToAddItems() {
-		return this.list.size();
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E> getItems(CollectionAddEvent event) {
-		return (Iterable<E>) event.getItems();
-	}
-
-	protected void itemsRemoved(CollectionRemoveEvent event) {
-		this.removeItemsFromList(this.getItems(event), this.list, LIST_VALUES);
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E> getItems(CollectionRemoveEvent event) {
-		return (Iterable<E>) event.getItems();
-	}
-
-	protected void collectionCleared(@SuppressWarnings("unused") CollectionClearEvent event) {
-		this.clearList(this.list, LIST_VALUES);
-	}
-	
-	/**
-	 * synchronize our internal list with the wrapped collection
-	 * and fire the appropriate events
-	 */
-	protected void collectionChanged(@SuppressWarnings("unused") CollectionChangeEvent event) {
-		int size = this.collectionHolder.size();
-		if (size == 0) {
-			if (this.list.isEmpty()) {
-				// no change
-			} else {
-				this.clearList(this.list, LIST_VALUES);
-			}
-		} else {
-			if (this.list.isEmpty()) {
-				this.buildList(size);
-				this.fireItemsAdded(LIST_VALUES, 0, this.list);
-			} else {
-				this.list.clear();
-				this.buildList(size);
-				this.fireListChanged(LIST_VALUES, this.list);
-			}
-		}
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.list);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CollectionPropertyValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CollectionPropertyValueModelAdapter.java
deleted file mode 100644
index d63ed69..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CollectionPropertyValueModelAdapter.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-
-/**
- * This abstract class provides the infrastructure needed to wrap
- * a collection value model, "lazily" listen to it, and convert
- * its change notifications into property value model change
- * notifications.
- * <p>
- * Subclasses must override:<ul>
- * <li>{@link #buildValue()}<p>
- *     to return the current property value, as derived from the
- *     current collection value
- * </ul>
- * Subclasses might want to override the following methods
- * to improve performance (by not recalculating the value, if possible):<ul>
- * <li>{@link #itemsAdded(CollectionAddEvent event)}
- * <li>{@link #itemsRemoved(CollectionRemoveEvent event)}
- * <li>{@link #collectionCleared(CollectionClearEvent event)}
- * <li>{@link #collectionChanged(CollectionChangeEvent event)}
- * </ul>
- */
-public abstract class CollectionPropertyValueModelAdapter<V>
-	extends AbstractPropertyValueModelAdapter<V>
-{
-	/** The wrapped collection value model. */
-	protected final CollectionValueModel<?> collectionModel;
-
-	/** A listener that allows us to synch with changes to the wrapped collection holder. */
-	protected final CollectionChangeListener collectionChangeListener;
-
-
-	// ********** constructor/initialization **********
-
-	/**
-	 * Construct a property value model with the specified wrapped
-	 * collection value model.
-	 */
-	protected CollectionPropertyValueModelAdapter(CollectionValueModel<?> collectionModel) {
-		super();
-		this.collectionModel = collectionModel;
-		this.collectionChangeListener = this.buildCollectionChangeListener();
-	}
-
-	protected CollectionChangeListener buildCollectionChangeListener() {
-		return new CollectionChangeListener() {
-			public void itemsAdded(CollectionAddEvent event) {
-				CollectionPropertyValueModelAdapter.this.itemsAdded(event);
-			}		
-			public void itemsRemoved(CollectionRemoveEvent event) {
-				CollectionPropertyValueModelAdapter.this.itemsRemoved(event);
-			}
-			public void collectionCleared(CollectionClearEvent event) {
-				CollectionPropertyValueModelAdapter.this.collectionCleared(event);
-			}
-			public void collectionChanged(CollectionChangeEvent event) {
-				CollectionPropertyValueModelAdapter.this.collectionChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "collection change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Start listening to the collection holder.
-	 */
-	@Override
-	protected void engageModel_() {
-		this.collectionModel.addCollectionChangeListener(CollectionValueModel.VALUES, this.collectionChangeListener);
-	}
-
-	/**
-	 * Stop listening to the collection holder.
-	 */
-	@Override
-	protected void disengageModel_() {
-		this.collectionModel.removeCollectionChangeListener(CollectionValueModel.VALUES, this.collectionChangeListener);
-	}
-
-	
-	// ********** collection change support **********
-
-	/**
-	 * Items were added to the wrapped collection holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected void itemsAdded(@SuppressWarnings("unused") CollectionAddEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-	/**
-	 * Items were removed from the wrapped collection holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected void itemsRemoved(@SuppressWarnings("unused") CollectionRemoveEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-	/**
-	 * The wrapped collection holder was cleared;
-	 * propagate the change notification appropriately.
-	 */
-	protected void collectionCleared(@SuppressWarnings("unused") CollectionClearEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-	/**
-	 * The value of the wrapped collection holder has changed;
-	 * propagate the change notification appropriately.
-	 */
-	protected void collectionChanged(@SuppressWarnings("unused") CollectionChangeEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CollectionValueModelWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CollectionValueModelWrapper.java
deleted file mode 100644
index 58d4323..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CollectionValueModelWrapper.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-
-/**
- * This abstract class provides the infrastructure needed to wrap
- * another collection value model, "lazily" listen to it, and propagate
- * its change notifications. Subclasses must implement the appropriate
- * {@link CollectionValueModel}.
- */
-public abstract class CollectionValueModelWrapper<E>
-	extends AbstractCollectionValueModel
-{
-	/** The wrapped collection value model. */
-	protected final CollectionValueModel<? extends E> collectionHolder;
-
-	/** A listener that allows us to synch with changes to the wrapped collection holder. */
-	protected final CollectionChangeListener collectionChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a collection value model with the specified wrapped
-	 * collection value model.
-	 */
-	protected CollectionValueModelWrapper(CollectionValueModel<? extends E> collectionHolder) {
-		super();
-		this.collectionHolder = collectionHolder;
-		this.collectionChangeListener = this.buildCollectionChangeListener();
-	}
-
-
-	// ********** initialization **********
-
-	protected CollectionChangeListener buildCollectionChangeListener() {
-		return new CollectionChangeListener() {
-			public void itemsAdded(CollectionAddEvent event) {
-				CollectionValueModelWrapper.this.itemsAdded(event);
-			}
-			public void itemsRemoved(CollectionRemoveEvent event) {
-				CollectionValueModelWrapper.this.itemsRemoved(event);
-			}
-			public void collectionCleared(CollectionClearEvent event) {
-				CollectionValueModelWrapper.this.collectionCleared(event);
-			}
-			public void collectionChanged(CollectionChangeEvent event) {
-				CollectionValueModelWrapper.this.collectionChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "collection change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** AbstractCollectionValueModel implementation **********
-
-	/**
-	 * Start listening to the collection holder.
-	 */
-	@Override
-	protected void engageModel() {
-		this.collectionHolder.addCollectionChangeListener(CollectionValueModel.VALUES, this.collectionChangeListener);
-	}
-
-	/**
-	 * Stop listening to the collection holder.
-	 */
-	@Override
-	protected void disengageModel() {
-		this.collectionHolder.removeCollectionChangeListener(CollectionValueModel.VALUES, this.collectionChangeListener);
-	}
-
-
-	// ********** helper methods **********
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E> getItems(CollectionAddEvent event) {
-		return (Iterable<E>) event.getItems();
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E> getItems(CollectionRemoveEvent event) {
-		return (Iterable<E>) event.getItems();
-	}
-
-
-	// ********** collection change support **********
-
-	/**
-	 * Items were added to the wrapped collection holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected abstract void itemsAdded(CollectionAddEvent event);
-
-	/**
-	 * Items were removed from the wrapped collection holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected abstract void itemsRemoved(CollectionRemoveEvent event);
-
-	/**
-	 * The wrapped collection holder was cleared;
-	 * propagate the change notification appropriately.
-	 */
-	protected abstract void collectionCleared(CollectionClearEvent event);
-
-	/**
-	 * The value of the wrapped collection holder has changed;
-	 * propagate the change notification appropriately.
-	 */
-	protected abstract void collectionChanged(CollectionChangeEvent event);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CompositeBooleanPropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CompositeBooleanPropertyValueModel.java
deleted file mode 100644
index 1bf5d25..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CompositeBooleanPropertyValueModel.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * A <code>CompositeBooleanPropertyValueModel</code> adapts a
- * {@link CollectionValueModel} holding boolean {@link PropertyValueModel}s
- * to a single boolean {@link PropertyValueModel}. The composite value is
- * determined by the {@link CompositeBooleanPropertyValueModel.Adapter} provided
- * at construction. Typically the composite will be either an AND or an OR of
- * all the boolean values.
- * <p>
- * If there are <em>no</em> boolean {@link PropertyValueModel}s, the composite
- * will return its default value; which, by default, is <code>null</code>.
- * <p>
- * <strong>NB:</strong> None of the wrapped boolean models can return a
- * <code>null</code> value or this class will throw an exception. The assumption
- * is that all the wrapped boolean models are configured with "default" values
- * that determine the model's value (TRUE or FALSE) when <code>null</code>.
- */
-public class CompositeBooleanPropertyValueModel
-	extends CompositePropertyValueModel<Boolean>
-{
-	/**
-	 * Calculation of the model's value is delegated to this adapter.
-	 */
-	protected final Adapter adapter;
-
-	/**
-	 * The default setting for the composite boolean property value model;
-	 * for when the underlying collection model is empty.
-	 * The default [default value] is <code>null</code>.
-	 */
-	private final Boolean defaultValue;
-
-
-	// ********** AND factory methods **********
-
-	/**
-	 * Construct a boolean property value model that is a composite AND of the
-	 * specified boolean property value models; i.e. the model's value is true
-	 * if all the contained models are true, otherwise its value is false.
-	 * The model's default value, when it contains no nested models, is
-	 * <code>null</code>.
-	 */
-	public static CompositeBooleanPropertyValueModel and(PropertyValueModel<Boolean>... array) {
-		return new CompositeBooleanPropertyValueModel(AND_ADAPTER, array);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite AND of the
-	 * specified boolean property value models; i.e. the model's value is true
-	 * if all the contained models are true, otherwise its value is false.
-	 * When the model contains no nested models, its value will be the
-	 * specified default.
-	 */
-	public static CompositeBooleanPropertyValueModel and(Boolean defaultValue, PropertyValueModel<Boolean>... array) {
-		return new CompositeBooleanPropertyValueModel(AND_ADAPTER, defaultValue, array);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite AND of the
-	 * specified boolean property value models; i.e. the model's value is true
-	 * if all the contained models are true, otherwise its value is false.
-	 * The model's default value, when it contains no nested models, is
-	 * <code>null</code>.
-	 */
-	public static <E extends PropertyValueModel<Boolean>> CompositeBooleanPropertyValueModel and(Collection<E> collection) {
-		return new CompositeBooleanPropertyValueModel(AND_ADAPTER, collection);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite AND of the
-	 * specified boolean property value models; i.e. the model's value is true
-	 * if all the contained models are true, otherwise its value is false.
-	 * When the model contains no nested models, its value will be the
-	 * specified default.
-	 */
-	public static <E extends PropertyValueModel<Boolean>> CompositeBooleanPropertyValueModel and(Boolean defaultValue, Collection<E> collection) {
-		return new CompositeBooleanPropertyValueModel(AND_ADAPTER, defaultValue, collection);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite AND of the
-	 * specified boolean property value models; i.e. the model's value is true
-	 * if all the contained models are true, otherwise its value is false.
-	 * The model's default value, when it contains no nested models, is
-	 * <code>null</code>.
-	 */
-	public static CompositeBooleanPropertyValueModel and(CollectionValueModel<? extends PropertyValueModel<Boolean>> collectionModel) {
-		return new CompositeBooleanPropertyValueModel(AND_ADAPTER, collectionModel);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite AND of the
-	 * specified boolean property value models; i.e. the model's value is true
-	 * if all the contained models are true, otherwise its value is false.
-	 * When the model contains no nested models, its value will be the
-	 * specified default.
-	 */
-	public static CompositeBooleanPropertyValueModel and(Boolean defaultValue, CollectionValueModel<? extends PropertyValueModel<Boolean>> collectionModel) {
-		return new CompositeBooleanPropertyValueModel(AND_ADAPTER, defaultValue, collectionModel);
-	}
-
-
-	// ********** OR factory methods **********
-
-	/**
-	 * Construct a boolean property value model that is a composite OR of the
-	 * specified boolean property value models; i.e. the model's value is false
-	 * if all the contained models are false, otherwise its value is true.
-	 * The model's default value, when it contains no nested models, is
-	 * <code>null</code>.
-	 */
-	public static CompositeBooleanPropertyValueModel or(PropertyValueModel<Boolean>... array) {
-		return new CompositeBooleanPropertyValueModel(OR_ADAPTER, array);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite OR of the
-	 * specified boolean property value models; i.e. the model's value is false
-	 * if all the contained models are false, otherwise its value is true.
-	 * When the model contains no nested models, its value will be the
-	 * specified default.
-	 */
-	public static CompositeBooleanPropertyValueModel or(Boolean defaultValue, PropertyValueModel<Boolean>... array) {
-		return new CompositeBooleanPropertyValueModel(OR_ADAPTER, defaultValue, array);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite OR of the
-	 * specified boolean property value models; i.e. the model's value is false
-	 * if all the contained models are false, otherwise its value is true.
-	 * The model's default value, when it contains no nested models, is
-	 * <code>null</code>.
-	 */
-	public static <E extends PropertyValueModel<Boolean>> CompositeBooleanPropertyValueModel or(Collection<E> collection) {
-		return new CompositeBooleanPropertyValueModel(OR_ADAPTER, collection);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite OR of the
-	 * specified boolean property value models; i.e. the model's value is false
-	 * if all the contained models are false, otherwise its value is true.
-	 * When the model contains no nested models, its value will be the
-	 * specified default.
-	 */
-	public static <E extends PropertyValueModel<Boolean>> CompositeBooleanPropertyValueModel or(Boolean defaultValue, Collection<E> collection) {
-		return new CompositeBooleanPropertyValueModel(OR_ADAPTER, defaultValue, collection);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite OR of the
-	 * specified boolean property value models; i.e. the model's value is false
-	 * if all the contained models are false, otherwise its value is true.
-	 * The model's default value, when it contains no nested models, is
-	 * <code>null</code>.
-	 */
-	public static CompositeBooleanPropertyValueModel or(CollectionValueModel<? extends PropertyValueModel<Boolean>> collectionModel) {
-		return new CompositeBooleanPropertyValueModel(OR_ADAPTER, collectionModel);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite OR of the
-	 * specified boolean property value models; i.e. the model's value is false
-	 * if all the contained models are false, otherwise its value is true.
-	 * When the model contains no nested models, its value will be the
-	 * specified default.
-	 */
-	public static CompositeBooleanPropertyValueModel or(Boolean defaultValue, CollectionValueModel<? extends PropertyValueModel<Boolean>> collectionModel) {
-		return new CompositeBooleanPropertyValueModel(OR_ADAPTER, defaultValue, collectionModel);
-	}
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a boolean property value model that is a composite of the specified
-	 * boolean property value models, as defined by the specified adapter.
-	 * The model's default value, when it contains no nested models, is
-	 * <code>null</code>.
-	 */
-	public CompositeBooleanPropertyValueModel(Adapter adapter, PropertyValueModel<Boolean>... array) {
-		this(adapter, null, array);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite of the specified
-	 * boolean property value models, as defined by the specified adapter.
-	 * When the model contains no nested models, its value will be the
-	 * specified default.
-	 */
-	public CompositeBooleanPropertyValueModel(Adapter adapter, Boolean defaultValue, PropertyValueModel<Boolean>... array) {
-		super(array);
-		this.adapter = adapter;
-		this.defaultValue = defaultValue;
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite of the specified
-	 * boolean property value models, as defined by the specified adapter.
-	 * The model's default value, when it contains no nested models, is
-	 * <code>null</code>.
-	 */
-	public <E extends PropertyValueModel<Boolean>> CompositeBooleanPropertyValueModel(Adapter adapter, Collection<E> collection) {
-		this(adapter, null, collection);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite of the specified
-	 * boolean property value models, as defined by the specified adapter.
-	 * When the model contains no nested models, its value will be the
-	 * specified default.
-	 */
-	public <E extends PropertyValueModel<Boolean>> CompositeBooleanPropertyValueModel(Adapter adapter, Boolean defaultValue, Collection<E> collection) {
-		super(collection);
-		this.adapter = adapter;
-		this.defaultValue = defaultValue;
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite of the specified
-	 * boolean property value models, as defined by the specified adapter.
-	 * The model's default value, when it contains no nested models, is
-	 * <code>null</code>.
-	 */
-	public CompositeBooleanPropertyValueModel(Adapter adapter, CollectionValueModel<? extends PropertyValueModel<Boolean>> collectionModel) {
-		this(adapter, null, collectionModel);
-	}
-
-	/**
-	 * Construct a boolean property value model that is a composite of the specified
-	 * boolean property value models, as defined by the specified adapter.
-	 * When the model contains no nested models, its value will be the
-	 * specified default.
-	 */
-	public CompositeBooleanPropertyValueModel(Adapter adapter, Boolean defaultValue, CollectionValueModel<? extends PropertyValueModel<Boolean>> collectionModel) {
-		super(collectionModel);
-		this.adapter = adapter;
-		this.defaultValue = defaultValue;
-	}
-
-
-	// ********** implementation **********
-
-	/**
-	 * Return true if all the contained booleans are true; otherwise return
-	 * false.
-	 */
-	@Override
-	protected Boolean buildValue() {
-		return (this.collectionModel.size() == 0) ? this.defaultValue : this.buildValue_();
-	}
-
-	protected Boolean buildValue_() {
-		return this.adapter.buildValue(this.getBooleans());
-	}
-
-	protected Iterable<Boolean> getBooleans() {
-		return new TransformationIterable<PropertyValueModel<Boolean>, Boolean>(this.getCollectionModel()) {
-			@Override
-			protected Boolean transform(PropertyValueModel<Boolean> booleanModel) {
-				return booleanModel.getValue();
-			}
-		};
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	protected CollectionValueModel<? extends PropertyValueModel<Boolean>> getCollectionModel() {
-		return (CollectionValueModel<? extends PropertyValueModel<Boolean>>) super.getCollectionModel();
-	}
-
-
-	// ********** adapter **********
-
-	/**
-	 * This adapter allows the {@link CompositeBooleanPropertyValueModel} to be
-	 * pluggable.
-	 */
-	public interface Adapter {
-		/**
-		 * Return the composite boolean value of the specified collection
-		 * of boolean models.
-		 */
-		Boolean buildValue(Iterable<Boolean> booleans);
-	}
-
-	/**
-	 * Return true if all the booleans are true; otherwise return false.
-	 */
-	public static final Adapter AND_ADAPTER = new Adapter() {
-		public Boolean buildValue(Iterable<Boolean> booleans) {
-			for (Boolean b : booleans) {
-				if ( ! b.booleanValue()) {
-					return Boolean.FALSE;
-				}
-			}
-			return Boolean.TRUE;
-		}
-		@Override
-		public String toString() {
-			return "AND_ADAPTER"; //$NON-NLS-1$
-		}
-	};
-
-	/**
-	 * Return false if all the booleans are false; otherwise return true.
-	 */
-	public static final Adapter OR_ADAPTER = new Adapter() {
-		public Boolean buildValue(Iterable<Boolean> booleans) {
-			for (Boolean b : booleans) {
-				if (b.booleanValue()) {
-					return Boolean.TRUE;
-				}
-			}
-			return Boolean.FALSE;
-		}
-		@Override
-		public String toString() {
-			return "OR_ADAPTER"; //$NON-NLS-1$
-		}
-	};
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CompositeCollectionValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CompositeCollectionValueModel.java
deleted file mode 100644
index 66881df..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CompositeCollectionValueModel.java
+++ /dev/null
@@ -1,448 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.IdentityHashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.NullList;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * A <code>CompositeCollectionValueModel</code> wraps another
- * {@link CollectionValueModel} and uses a {@link Transformer}
- * to convert each item in the wrapped collection to yet another
- * {@link CollectionValueModel}. This composite collection contains
- * the combined items from all these component collections.
- * <p>
- * <strong>NB:</strong> The wrapped collection must be an "identity set" that does not
- * contain the same item twice or this class will throw an exception.
- * <p>
- * Terminology:<ul>
- * <li><em>sources</em> - the items in the wrapped collection value model; these
- *    are converted into component CVMs by the transformer
- * <li><em>component CVMs</em> - the component collection value models that are combined
- *    by this composite collection value model
- * <li><em>items</em> - the items held by the component CVMs
- * </ul>
- */
-public class CompositeCollectionValueModel<E1, E2>
-	extends CollectionValueModelWrapper<E1>
-	implements CollectionValueModel<E2>
-{
-	/**
-	 * This is the (optional) user-supplied object that transforms
-	 * the items in the wrapped collection to collection value models.
-	 */
-	private final Transformer<E1, CollectionValueModel<E2>> transformer;
-
-	/**
-	 * Cache of the component collection value models that
-	 * were generated by the transformer; keyed by the item
-	 * in the wrapped collection that was passed to the transformer.
-	 */
-	private final IdentityHashMap<E1, CollectionValueModel<E2>> componentCVMs =
-			new IdentityHashMap<E1, CollectionValueModel<E2>>();
-
-	/**
-	 * Cache of the collections corresponding to the component
-	 * collection value models above; keyed by the component
-	 * collection value models.
-	 * Use {@link ArrayList}s so we can use {@link ArrayList}-specific methods
-	 * (e.g. {@link ArrayList#clone()} and {@link ArrayList#ensureCapacity(int)}).
-	 */
-	private final IdentityHashMap<CollectionValueModel<E2>, ArrayList<E2>> collections =
-			new IdentityHashMap<CollectionValueModel<E2>, ArrayList<E2>>();
-
-	/** Listener that listens to all the component collection value models. */
-	private final CollectionChangeListener componentCVMListener;
-
-	/** Cache the size of the composite collection. */
-	private int size;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a collection value model with the specified wrapped
-	 * collection value model. Use this constructor if<ul>
-	 * <li> the wrapped collection value model already contains other
-	 *       collection value models, or
-	 * <li> you want to override {@link #transform(E1)}
-	 *       instead of building a {@link Transformer}
-	 * </ul>
-	 */
-	public CompositeCollectionValueModel(CollectionValueModel<? extends E1> collectionHolder) {
-		this(collectionHolder, Transformer.Null.<E1, CollectionValueModel<E2>>instance());
-	}
-
-	/**
-	 * Construct a collection value model with the specified wrapped
-	 * collection value model and transformer.
-	 */
-	public CompositeCollectionValueModel(CollectionValueModel<? extends E1> collectionHolder, Transformer<E1, CollectionValueModel<E2>> transformer) {
-		super(collectionHolder);
-		this.transformer = transformer;
-		this.componentCVMListener = this.buildComponentListener();
-		this.size = 0;
-	}
-
-	/**
-	 * Construct a collection value model with the specified wrapped
-	 * list value model. Use this constructor if<ul>
-	 * <li> the wrapped collection value model already contains other
-	 *       collection value models, or
-	 * <li> you want to override {@link #transform(E1)}
-	 *       instead of building a {@link Transformer}
-	 * </ul>
-	 */
-	public CompositeCollectionValueModel(ListValueModel<? extends E1> listHolder) {
-		this(new ListCollectionValueModelAdapter<E1>(listHolder));
-	}
-
-	/**
-	 * Construct a collection value model with the specified wrapped
-	 * list value model and transformer.
-	 */
-	public CompositeCollectionValueModel(ListValueModel<? extends E1> listHolder, Transformer<E1, CollectionValueModel<E2>> transformer) {
-		this(new ListCollectionValueModelAdapter<E1>(listHolder), transformer);
-	}
-
-	/**
-	 * Construct a collection value model with the specified, unchanging, wrapped
-	 * collection. Use this constructor if<ul>
-	 * <li> the wrapped collection value model already contains other
-	 *       collection value models, or
-	 * <li> you want to override {@link #transform(E1)}
-	 *       instead of building a {@link Transformer}
-	 * </ul>
-	 */
-	public CompositeCollectionValueModel(Collection<? extends E1> collection) {
-		this(new StaticCollectionValueModel<E1>(collection));
-	}
-
-	/**
-	 * Construct a collection value model with the specified, unchanging, wrapped
-	 * collection and transformer.
-	 */
-	public CompositeCollectionValueModel(Collection<? extends E1> collection, Transformer<E1, CollectionValueModel<E2>> transformer) {
-		this(new StaticCollectionValueModel<E1>(collection), transformer);
-	}
-
-	/**
-	 * Construct a collection value model with the specified, unchanging, wrapped
-	 * collection. Use this constructor if<ul>
-	 * <li> the wrapped collection value model already contains other
-	 *       collection value models, or
-	 * <li> you want to override {@link #transform(E1)}
-	 *       instead of building a {@link Transformer}
-	 * </ul>
-	 */
-	public CompositeCollectionValueModel(E1... collection) {
-		this(new StaticCollectionValueModel<E1>(collection));
-	}
-
-	/**
-	 * Construct a collection value model with the specified, unchanging, wrapped
-	 * collection and transformer.
-	 */
-	public CompositeCollectionValueModel(E1[] collection, Transformer<E1, CollectionValueModel<E2>> transformer) {
-		this(new StaticCollectionValueModel<E1>(collection), transformer);
-	}
-
-
-	// ********** initialization **********
-
-	protected CollectionChangeListener buildComponentListener() {
-		return new CollectionChangeListener() {
-			public void itemsAdded(CollectionAddEvent event) {
-				CompositeCollectionValueModel.this.componentItemsAdded(event);
-			}		
-			public void itemsRemoved(CollectionRemoveEvent event) {
-				CompositeCollectionValueModel.this.componentItemsRemoved(event);
-			}
-			public void collectionCleared(CollectionClearEvent event) {
-				CompositeCollectionValueModel.this.componentCollectionCleared(event);
-			}
-			public void collectionChanged(CollectionChangeEvent event) {
-				CompositeCollectionValueModel.this.componentCollectionChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "component listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** CollectionValueModel implementation **********
-
-	public Iterator<E2> iterator() {
-		return new CompositeIterator<E2>(this.buildCollectionsIterators());
-	}
-
-	protected Iterator<Iterator<E2>> buildCollectionsIterators() {
-		return new TransformationIterator<ArrayList<E2>, Iterator<E2>>(this.collections.values().iterator()) {
-			@Override
-			protected Iterator<E2> transform(ArrayList<E2> next) {
-				return next.iterator();
-			}
-		};
-	}
-
-	public int size() {
-		return this.size;
-	}
-
-
-	// ********** CollectionValueModelWrapper overrides/implementation **********
-
-	@Override
-	protected void engageModel() {
-		super.engageModel();
-		// synch our cache *after* we start listening to the wrapped collection,
-		// since its value might change when a listener is added
-		this.addAllComponentSources();
-	}
-
-	/**
-	 * Transform all the sources to collection value models
-	 * and add their items to our cache, with no event notification.
-	 */
-	protected void addAllComponentSources() {
-		for (E1 source : this.collectionHolder) {
-			this.addComponentSource(source, NullList.<E2>instance());
-		}
-	}
-
-	@Override
-	protected void disengageModel() {
-		super.disengageModel();
-		// stop listening to the components...
-		for (CollectionValueModel<E2> componentCVM : this.componentCVMs.values()) {
-			componentCVM.removeCollectionChangeListener(VALUES, this.componentCVMListener);
-		}
-		// ...and clear the cache
-		this.componentCVMs.clear();
-		this.collections.clear();
-		this.size = 0;
-	}
-
-	/**
-	 * Some component sources were added;
-	 * add their corresponding items to our cache.
-	 */
-	@Override
-	protected void itemsAdded(CollectionAddEvent event) {
-		ArrayList<E2> addedItems = new ArrayList<E2>();
-		for (E1 item : this.getItems(event)) {
-			this.addComponentSource(item, addedItems);
-		}
-		this.fireItemsAdded(VALUES, addedItems);
-	}
-
-	/**
-	 * Transform the specified source to a collection value model
-	 * and add its items to our cache and the "collecting parameter".
-	 */
-	protected void addComponentSource(E1 source, List<E2> addedItems) {
-		CollectionValueModel<E2> componentCVM = this.transform(source);
-		if (this.componentCVMs.put(source, componentCVM) != null) {
-			throw new IllegalStateException("duplicate component: " + source); //$NON-NLS-1$
-		}
-		componentCVM.addCollectionChangeListener(VALUES, this.componentCVMListener);
-		ArrayList<E2> componentCollection = new ArrayList<E2>(componentCVM.size());
-		if (this.collections.put(componentCVM, componentCollection) != null) {
-			throw new IllegalStateException("duplicate collection: " + source); //$NON-NLS-1$
-		}
-		this.addComponentItems(componentCVM, componentCollection);
-		addedItems.addAll(componentCollection);
-	}
-
-	/**
-	 * Add the items in the specified component CVM to the specified component
-	 * collection.
-	 */
-	protected void addComponentItems(CollectionValueModel<E2> componentCVM, ArrayList<E2> componentCollection) {
-		int itemsSize = componentCVM.size();
-		this.size += itemsSize;
-		componentCollection.ensureCapacity(componentCollection.size() + itemsSize);
-		CollectionTools.addAll(componentCollection, componentCVM);
-	}
-
-	/**
-	 * Some component sources were removed;
-	 * remove their corresponding items from our cache.
-	 */
-	@Override
-	protected void itemsRemoved(CollectionRemoveEvent event) {
-		ArrayList<E2> removedItems = new ArrayList<E2>();
-		for (E1 item : this.getItems(event)) {
-			this.removeComponentSource(item, removedItems);
-		}
-		this.fireItemsRemoved(VALUES, removedItems);
-	}
-
-	/**
-	 * Remove the items corresponding to the specified source
-	 * from our cache.
-	 */
-	protected void removeComponentSource(E1 source, List<E2> removedItems) {
-		CollectionValueModel<E2> componentCVM = this.componentCVMs.remove(source);
-		if (componentCVM == null) {
-			throw new IllegalStateException("missing component: " + source); //$NON-NLS-1$
-		}
-		componentCVM.removeCollectionChangeListener(VALUES, this.componentCVMListener);
-		ArrayList<E2> componentCollection = this.collections.remove(componentCVM);
-		if (componentCollection == null) {
-			throw new IllegalStateException("missing collection: " + source); //$NON-NLS-1$
-		}
-		removedItems.addAll(componentCollection);
-		this.removeComponentItems(componentCollection);
-	}
-
-	/**
-	 * Update our size and collection cache.
-	 */
-	protected void removeComponentItems(ArrayList<E2> componentCollection) {
-		this.size -= componentCollection.size();
-		componentCollection.clear();
-	}
-
-	/**
-	 * The component sources cleared;
-	 * clear our cache.
-	 */
-	@Override
-	protected void collectionCleared(CollectionClearEvent event) {
-		this.removeAllComponentSources();
-		this.fireCollectionCleared(VALUES);
-	}
-
-	protected void removeAllComponentSources() {
-		// copy the keys so we don't eat our own tail
-		ArrayList<E1> copy = new ArrayList<E1>(this.componentCVMs.keySet());
-		for (E1 source : copy) {
-			this.removeComponentSource(source, NullList.<E2>instance());
-		}
-	}
-
-	/**
-	 * The component sources changed;
-	 * rebuild our cache.
-	 */
-	@Override
-	protected void collectionChanged(CollectionChangeEvent event) {
-		this.removeAllComponentSources();
-		this.addAllComponentSources();
-		this.fireCollectionChanged(VALUES, CollectionTools.collection(this.iterator()));
-	}
-
-
-	// ********** internal methods **********
-
-	/**
-	 * Transform the specified object into a collection value model.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link Transformer}.
-	 */
-	protected CollectionValueModel<E2> transform(E1 value) {
-		return this.transformer.transform(value);
-	}
-
-	/**
-	 * One of the component collections had items added;
-	 * synchronize our caches.
-	 */
-	protected void componentItemsAdded(CollectionAddEvent event) {
-		int itemsSize = event.getItemsSize();
-		this.size += itemsSize;
-
-		ArrayList<E2> componentCollection = this.collections.get(this.componentCVM(event));
-		componentCollection.ensureCapacity(componentCollection.size() + itemsSize);
-
-		this.addItemsToCollection(this.getComponentItems(event), componentCollection, VALUES);
-	}
-
-	/**
-	 * One of the component collections had items removed;
-	 * synchronize our caches.
-	 */
-	protected void componentItemsRemoved(CollectionRemoveEvent event) {
-		this.size -= event.getItemsSize();
-		ArrayList<E2> componentCollection = this.collections.get(this.componentCVM(event));
-		this.removeItemsFromCollection(this.getComponentItems(event), componentCollection, VALUES);
-	}
-
-	/**
-	 * One of the component collections was cleared;
-	 * synchronize our caches by clearing out the appropriate
-	 * collection.
-	 */
-	protected void componentCollectionCleared(CollectionClearEvent event) {
-		ArrayList<E2> componentCollection = this.collections.get(this.componentCVM(event));
-		ArrayList<E2> removedItems = new ArrayList<E2>(componentCollection);
-		this.removeComponentItems(componentCollection);
-		this.fireItemsRemoved(VALUES, removedItems);
-	}
-
-	/**
-	 * One of the component collections changed;
-	 * synchronize our caches by clearing out the appropriate
-	 * collection and then rebuilding it.
-	 */
-	protected void componentCollectionChanged(CollectionChangeEvent event) {
-		CollectionValueModel<E2> componentCVM = this.componentCVM(event);
-		ArrayList<E2> componentCollection = this.collections.get(componentCVM);
-		this.removeComponentItems(componentCollection);
-		this.addComponentItems(componentCVM, componentCollection);
-		this.fireCollectionChanged(VALUES, CollectionTools.collection(this.iterator()));
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E2> getComponentItems(CollectionAddEvent event) {
-		return (Iterable<E2>) event.getItems();
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E2> getComponentItems(CollectionRemoveEvent event) {
-		return (Iterable<E2>) event.getItems();
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected CollectionValueModel<E2> componentCVM(CollectionEvent event) {
-		return (CollectionValueModel<E2>) event.getSource();
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		StringTools.append(sb, this);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CompositeListValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CompositeListValueModel.java
deleted file mode 100644
index b454a01..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CompositeListValueModel.java
+++ /dev/null
@@ -1,683 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.iterables.SingleElementIterable;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyCompositeListIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationListIterator;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * A <code>CompositeListValueModel</code> wraps another
- * {@link ListValueModel} and uses a {@link Transformer}
- * to convert each item in the wrapped list to yet another
- * {@link ListValueModel}. This composite list contains
- * the combined items from all these component lists.
- * <p>
- * Terminology:<ul>
- * <li><em>sources</em> - the items in the wrapped list value model; these
- *    are converted into component LVMs by the transformer
- * <li><em>component LVMs</em> - the component list value models that are combined
- *    by this composite list value model
- * <li><em>items</em> - the items held by the component LVMs
- * </ul>
- */
-public class CompositeListValueModel<E1, E2>
-	extends ListValueModelWrapper<E1>
-	implements ListValueModel<E2>
-{
-	/**
-	 * This is the (optional) user-supplied object that transforms
-	 * the items in the wrapped list to list value models.
-	 */
-	private final Transformer<E1, ListValueModel<E2>> transformer;
-
-	/**
-	 * Cache of the sources, component LVMs, lists.
-	 */
-	private final ArrayList<Info> infoList = new ArrayList<Info>();
-	protected class Info {
-		// the object passed to the transformer
-		final E1 source;
-		// the list value model generated by the transformer
-		final ListValueModel<E2> componentLVM;
-		// cache of the items held by the component LVM
-		final ArrayList<E2> items;
-		// the component LVM's beginning index within the composite LVM
-		int begin;
-		protected Info(E1 source, ListValueModel<E2> componentLVM, ArrayList<E2> items, int begin) {
-			super();
-			this.source = source;
-			this.componentLVM = componentLVM;
-			this.items = items;
-			this.begin = begin;
-		}
-	}
-
-	/** Listener that listens to all the component list value models. */
-	private final ListChangeListener componentLVMListener;
-
-	/** Cache the size of the composite list. */
-	private int size;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a list value model with the specified wrapped
-	 * list value model. Use this constructor if<ul>
-	 * <li> the wrapped list value model already contains other
-	 *       list value models, or
-	 * <li> you want to override {@link #transform(E1)}
-	 *       instead of building a {@link Transformer}
-	 * </ul>
-	 */
-	public CompositeListValueModel(ListValueModel<? extends E1> listHolder) {
-		this(listHolder, Transformer.Null.<E1, ListValueModel<E2>>instance());
-	}
-
-	/**
-	 * Construct a list value model with the specified wrapped
-	 * list value model and transformer.
-	 */
-	public CompositeListValueModel(ListValueModel<? extends E1> listHolder, Transformer<E1, ListValueModel<E2>> transformer) {
-		super(listHolder);
-		this.transformer = transformer;
-		this.componentLVMListener = this.buildComponentLVMListener();
-		this.size = 0;
-	}
-
-	/**
-	 * Construct a list value model with the specified, unchanging, wrapped
-	 * list. Use this constructor if<ul>
-	 * <li> the wrapped list value model already contains other
-	 *       list value models, or
-	 * <li> you want to override {@link #transform(E1)}
-	 *       instead of building a {@link Transformer}
-	 * </ul>
-	 */
-	public CompositeListValueModel(List<? extends E1> list) {
-		this(new StaticListValueModel<E1>(list));
-	}
-
-	/**
-	 * Construct a list value model with the specified, unchanging, wrapped
-	 * list and transformer.
-	 */
-	public CompositeListValueModel(List<? extends E1> list, Transformer<E1, ListValueModel<E2>> transformer) {
-		this(new StaticListValueModel<E1>(list), transformer);
-	}
-
-	/**
-	 * Construct a list value model with the specified, unchanging, wrapped
-	 * list. Use this constructor if<ul>
-	 * <li> the wrapped list value model already contains other
-	 *       list value models, or
-	 * <li> you want to override {@link #transform(E1)}
-	 *       instead of building a {@link Transformer}
-	 * </ul>
-	 */
-	public CompositeListValueModel(E1... list) {
-		this(new StaticListValueModel<E1>(list));
-	}
-
-	/**
-	 * Construct a list value model with the specified, unchanging, wrapped
-	 * list and transformer.
-	 */
-	public CompositeListValueModel(E1[] list, Transformer<E1, ListValueModel<E2>> transformer) {
-		this(new StaticListValueModel<E1>(list), transformer);
-	}
-
-
-	// ********** initialization **********
-
-	protected ListChangeListener buildComponentLVMListener() {
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent event) {
-				CompositeListValueModel.this.componentItemsAdded(event);
-			}		
-			public void itemsRemoved(ListRemoveEvent event) {
-				CompositeListValueModel.this.componentItemsRemoved(event);
-			}
-			public void itemsReplaced(ListReplaceEvent event) {
-				CompositeListValueModel.this.componentItemsReplaced(event);
-			}
-			public void itemsMoved(ListMoveEvent event) {
-				CompositeListValueModel.this.componentItemsMoved(event);
-			}
-			public void listCleared(ListClearEvent event) {
-				CompositeListValueModel.this.componentListCleared(event);
-			}
-			public void listChanged(ListChangeEvent event) {
-				CompositeListValueModel.this.componentListChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "component LVM listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ListValueModel implementation **********
-
-	public E2 get(int index) {
-		if ((index < 0) || (index >= this.size)) {
-			throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + this.size); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		// move backwards through the info list
-		for (int i = this.infoList.size(); i-- > 0; ) {
-			Info info = this.infoList.get(i);
-			if (index >= info.begin) {
-				return info.items.get(index - info.begin);
-			}
-		}
-		throw new IllegalStateException();  // something is wack
-	}
-
-	public Iterator<E2> iterator() {
-		return this.listIterator();
-	}
-
-	public ListIterator<E2> listIterator() {
-		return new ReadOnlyCompositeListIterator<E2>(this.buildListsIterators());
-	}
-
-	protected ListIterator<ListIterator<E2>> buildListsIterators() {
-		return new TransformationListIterator<Info, ListIterator<E2>>(this.infoList.listIterator()) {
-			@Override
-			protected ListIterator<E2> transform(Info info) {
-				return info.items.listIterator();
-			}
-		};
-	}
-
-	public int size() {
-		return this.size;
-	}
-
-	public Object[] toArray() {
-		return ArrayTools.array(this.listIterator(), this.size);
-	}
-
-
-	// ********** ListValueModelWrapper overrides/implementation **********
-
-	@Override
-	protected void engageModel() {
-		super.engageModel();
-		// synch our cache *after* we start listening to the wrapped list,
-		// since its value might change when a listener is added
-		this.addComponentSources(0, this.listHolder, this.listHolder.size(), false);  // false = do not fire event
-	}
-
-	@Override
-	protected void disengageModel() {
-		super.disengageModel();
-		// stop listening to the component LVMs...
-		for (Info info : this.infoList) {
-			info.componentLVM.removeListChangeListener(LIST_VALUES, this.componentLVMListener);
-		}
-		// ...and clear the cache
-		this.infoList.clear();
-		this.size = 0;
-	}
-
-	/**
-	 * Some component sources were added; update our cache.
-	 */
-	@Override
-	protected void itemsAdded(ListAddEvent event) {
-		this.addComponentSources(event.getIndex(), this.getItems(event), event.getItemsSize(), true);  // true = fire event
-	}
-
-	/**
-	 * Add infos corresponding to the specified sources to our cache.
-	 * Fire the appropriate event if requested.
-	 */
-	protected void addComponentSources(int addedSourcesIndex, Iterable<? extends E1> addedSources, int addedSourcesSize, boolean fireEvent) {
-		ArrayList<Info> newInfoList = new ArrayList<Info>(addedSourcesSize);
-		// the 'items' are either tacked on to the end or
-		// at the 'begin' index of the first 'info' that is being pushed back
-		int newItemsIndex = (addedSourcesIndex == this.infoList.size()) ? this.size : this.infoList.get(addedSourcesIndex).begin;
-
-		int begin = newItemsIndex;
-		for (E1 source : addedSources) {
-			ListValueModel<E2> componentLVM = this.transform(source);
-			componentLVM.addListChangeListener(LIST_VALUES, this.componentLVMListener);
-			ArrayList<E2> items = new ArrayList<E2>(componentLVM.size());
-			CollectionTools.addAll(items, componentLVM.listIterator());
-			newInfoList.add(new Info(source, componentLVM, items, begin));
-			begin += items.size();
-		}
-		this.infoList.addAll(addedSourcesIndex, newInfoList);
-		int newItemsSize = begin - newItemsIndex;
-		this.size += newItemsSize;
-
-		// bump the 'begin' index for all the infos that were pushed back by the insert
-		int movedInfosIndex = addedSourcesIndex + addedSourcesSize;
-		for (int i = movedInfosIndex; i < this.infoList.size(); i++) {
-			this.infoList.get(i).begin += newItemsSize;
-		}
-
-		if (fireEvent) {
-			ArrayList<E2> newItems = new ArrayList<E2>(newItemsSize);
-			for (int i = addedSourcesIndex; i < movedInfosIndex; i++) {
-				newItems.addAll(this.infoList.get(i).items);
-			}
-			this.fireItemsAdded(LIST_VALUES, newItemsIndex, newItems);
-		}
-	}
-
-	/**
-	 * Some component sources were removed; update our cache.
-	 */
-	@Override
-	protected void itemsRemoved(ListRemoveEvent event) {
-		this.removeComponentSources(event.getIndex(), event.getItemsSize(), true);  // true = fire event
-	}
-
-	/**
-	 * Remove the infos corresponding to the specified sources from our cache.
-	 */
-	protected void removeComponentSources(int removedSourcesIndex, int removedSourcesSize, boolean fireEvent) {
-		int removedItemsIndex = this.infoList.get(removedSourcesIndex).begin;
-		int movedSourcesIndex = removedSourcesIndex + removedSourcesSize;
-		int movedItemsIndex = (movedSourcesIndex == this.infoList.size()) ? this.size : this.infoList.get(movedSourcesIndex).begin;
-		int removedItemsSize = movedItemsIndex - removedItemsIndex;
-		this.size -= removedItemsSize;
-
-		List<Info> subList = this.infoList.subList(removedSourcesIndex, removedSourcesIndex + removedSourcesSize);
-		ArrayList<Info> removedInfoList = new ArrayList<Info>(subList);  // make a copy
-		subList.clear();
-
-		// decrement the 'begin' index for all the infos that were moved forward by the deletes
-		for (int i = removedSourcesIndex; i < this.infoList.size(); i++) {
-			this.infoList.get(i).begin -= removedItemsSize;
-		}
-
-		for (Info removedInfo : removedInfoList) {
-			removedInfo.componentLVM.removeListChangeListener(LIST_VALUES, this.componentLVMListener);
-		}
-
-		if (fireEvent) {
-			ArrayList<E2> removedItems = new ArrayList<E2>(removedItemsSize);
-			for (Info removedInfo : removedInfoList) {
-				removedItems.addAll(removedInfo.items);
-			}
-			this.fireItemsRemoved(LIST_VALUES, removedItemsIndex, removedItems);
-		}
-	}
-
-	/**
-	 * Some component sources were replaced; update our cache.
-	 */
-	@Override
-	protected void itemsReplaced(ListReplaceEvent event) {
-		this.replaceComponentSources(event.getIndex(), this.getNewItems(event), event.getItemsSize(), true);  // true = fire event
-	}
-
-	/**
-	 * Replaced component sources will not (typically) map to a set of replaced
-	 * items, so we remove and add the corresponding lists of items, resulting in
-	 * two events.
-	 */
-	protected void replaceComponentSources(int replacedSourcesIndex, Iterable<? extends E1> newSources, int replacedSourcesSize, boolean fireEvent) {
-		this.removeComponentSources(replacedSourcesIndex, replacedSourcesSize, fireEvent);
-		this.addComponentSources(replacedSourcesIndex, newSources, replacedSourcesSize, fireEvent);
-	}
-
-	/**
-	 * Some component sources were moved; update our cache.
-	 */
-	@Override
-	protected void itemsMoved(ListMoveEvent event) {
-		this.moveComponentSources(event.getTargetIndex(), event.getSourceIndex(), event.getLength(), true);  // true = fire event
-	}
-
-	protected void moveComponentSources(int targetSourcesIndex, int sourceSourcesIndex, int movedSourcesLength, boolean fireEvent) {
-		int sourceItemsIndex = this.infoList.get(sourceSourcesIndex).begin;
-
-		int nextSourceSourceIndex = sourceSourcesIndex + movedSourcesLength;
-		int nextSourceItemIndex = (nextSourceSourceIndex == this.infoList.size()) ? this.size : this.infoList.get(nextSourceSourceIndex).begin;
-		int moveItemsLength = nextSourceItemIndex - sourceItemsIndex;
-
-		int targetItemsIndex = -1;
-		if (sourceSourcesIndex > targetSourcesIndex) {
-			// move from high to low index
-			targetItemsIndex = this.infoList.get(targetSourcesIndex).begin;
-		} else {
-			// move from low to high index (higher items move down during move)
-			int nextTargetSourceIndex = targetSourcesIndex + movedSourcesLength;
-			targetItemsIndex = (nextTargetSourceIndex == this.infoList.size()) ? this.size : this.infoList.get(nextTargetSourceIndex).begin;
-			targetItemsIndex = targetItemsIndex - moveItemsLength;
-		}
-
-		CollectionTools.move(this.infoList, targetSourcesIndex, sourceSourcesIndex, movedSourcesLength);
-
-		// update the 'begin' indexes of all the affected 'infos'
-		int min = Math.min(targetSourcesIndex, sourceSourcesIndex);
-		int max = Math.max(targetSourcesIndex, sourceSourcesIndex) + movedSourcesLength;
-		int begin = Math.min(targetItemsIndex, sourceItemsIndex);
-		for (int i = min; i < max; i++) {
-			Info info = this.infoList.get(i);
-			info.begin = begin;
-			begin += info.componentLVM.size();
-		}
-
-		if (fireEvent) {
-			this.fireItemsMoved(LIST_VALUES, targetItemsIndex, sourceItemsIndex, moveItemsLength);
-		}
-	}
-
-	/**
-	 * The component sources were cleared; clear our cache.
-	 */
-	@Override
-	protected void listCleared(ListClearEvent event) {
-		this.clearComponentSources();
-	}
-
-	protected void clearComponentSources() {
-		this.removeComponentSources(0, this.infoList.size(), false);  // false = do not fire event
-		this.fireListCleared(LIST_VALUES);
-	}
-
-	/**
-	 * The component sources changed; rebuild our cache.
-	 */
-	@Override
-	protected void listChanged(ListChangeEvent event) {
-		int newSize = this.listHolder.size();
-		if (newSize == 0) {
-			this.clearComponentSources();
-			return;
-		}
-
-		int oldSize = this.infoList.size();
-		if (oldSize == 0) {
-			this.addComponentSources(0, this.listHolder, newSize, true);  // true = fire event
-			return;
-		}
-
-		int min = Math.min(newSize, oldSize);
-		// handle replaced sources individually so we don't fire events for unchanged sources
-		for (int i = 0; i < min; i++) {
-			E1 newSource = this.listHolder.get(i);
-			E1 oldSource = this.infoList.get(i).source;
-			if (this.valuesAreDifferent(newSource, oldSource)) {
-				this.replaceComponentSources(i, new SingleElementIterable<E1>(newSource), 1, true);  // true = fire event
-			}
-		}
-
-		if (newSize == oldSize) {
-			return;
-		}
-
-		if (newSize < oldSize) {
-			this.removeComponentSources(min, oldSize - newSize, true);  // true = fire event
-			return;
-		}
-
-		// newSize > oldSize
-		this.addComponentSources(min, this.buildSubListHolder(min), newSize - oldSize, true);  // true = fire event
-	}
-
-	protected Iterable<? extends E1> buildSubListHolder(int fromIndex) {
-		int listHolderSize = this.listHolder.size();
-		return CollectionTools.list(this.listHolder, listHolderSize).subList(fromIndex, listHolderSize);
-	}
-
-	protected Iterable<? extends E1> buildSubListHolder(int fromIndex, int toIndex) {
-		int listHolderSize = this.listHolder.size();
-		return ((fromIndex == 0) && (toIndex == listHolderSize)) ?
-				this.listHolder :
-				CollectionTools.list(this.listHolder, listHolderSize).subList(fromIndex, toIndex);
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		StringTools.append(sb, this);
-	}
-
-
-	// ********** internal methods **********
-
-	/**
-	 * Transform the specified object into a list value model.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link Transformer}.
-	 */
-	protected ListValueModel<E2> transform(E1 value) {
-		return this.transformer.transform(value);
-	}
-
-	/**
-	 * Return the index of the specified component LVM.
-	 */
-	protected int indexOf(ListValueModel<E2> componentLVM) {
-		for (int i = 0; i < this.infoList.size(); i++) {
-			if (this.infoList.get(i).componentLVM == componentLVM) {
-				return i;
-			}
-		}
-		throw new IllegalArgumentException("invalid component LVM: " + componentLVM); //$NON-NLS-1$
-	}
-
-	/**
-	 * Return the index of the specified event's component LVM.
-	 */
-	protected int indexFor(ListEvent event) {
-		return this.indexOf(this.getComponentLVM(event));
-	}
-
-	/**
-	 * Items were added to one of the component lists;
-	 * synchronize our cache.
-	 */
-	protected void componentItemsAdded(ListAddEvent event) {
-		int componentLVMIndex = this.indexFor(event);
-		this.addComponentItems(componentLVMIndex, this.infoList.get(componentLVMIndex), event.getIndex(), this.getComponentItems(event), event.getItemsSize());
-	}
-
-	protected void addComponentItems(int componentLVMIndex, Info info, int addedItemsIndex, Iterable<E2> addedItems, int addedItemsSize) {
-		// update the affected 'begin' indices
-		for (int i = componentLVMIndex + 1; i < this.infoList.size(); i++) {
-			this.infoList.get(i).begin += addedItemsSize;
-		}
-		this.size += addedItemsSize;
-
-		// synchronize the cached list
-		CollectionTools.addAll(info.items, addedItemsIndex, addedItems, addedItemsSize);
-
-		// translate the event
-		this.fireItemsAdded(LIST_VALUES, info.begin + addedItemsIndex, info.items.subList(addedItemsIndex, addedItemsIndex + addedItemsSize));
-	}
-
-	/**
-	 * Items were removed from one of the component lists;
-	 * synchronize our cache.
-	 */
-	protected void componentItemsRemoved(ListRemoveEvent event) {
-		// update the affected 'begin' indices
-		int componentLVMIndex = this.indexFor(event);
-		int removedItemsSize = event.getItemsSize();
-		for (int i = componentLVMIndex + 1; i < this.infoList.size(); i++) {
-			this.infoList.get(i).begin -= removedItemsSize;
-		}
-		this.size -= removedItemsSize;
-
-		// synchronize the cached list
-		Info info = this.infoList.get(componentLVMIndex);
-		int itemIndex = event.getIndex();
-		info.items.subList(itemIndex, itemIndex + event.getItemsSize()).clear();
-
-		// translate the event
-		this.fireItemsRemoved(event.clone(this, LIST_VALUES, info.begin));
-	}
-
-	/**
-	 * Items were replaced in one of the component lists;
-	 * synchronize our cache.
-	 */
-	protected void componentItemsReplaced(ListReplaceEvent event) {
-		// no changes to the 'begin' indices or size
-
-		// synchronize the cached list
-		int componentLVMIndex = this.indexFor(event);
-		Info info = this.infoList.get(componentLVMIndex);
-		int i = event.getIndex();
-		for (E2 item : this.getComponentItems(event)) {
-			info.items.set(i++, item);
-		}
-
-		// translate the event
-		this.fireItemsReplaced(event.clone(this, LIST_VALUES, info.begin));
-	}
-
-	/**
-	 * Items were moved in one of the component lists;
-	 * synchronize our cache.
-	 */
-	protected void componentItemsMoved(ListMoveEvent event) {
-		// no changes to the 'begin' indices or size
-
-		// synchronize the cached list
-		int componentLVMIndex = this.indexFor(event);
-		Info info = this.infoList.get(componentLVMIndex);
-		CollectionTools.move(info.items, event.getTargetIndex(), event.getSourceIndex(), event.getLength());
-
-		// translate the event
-		this.fireItemsMoved(event.clone(this, LIST_VALUES, info.begin));
-	}
-
-	/**
-	 * One of the component lists was cleared;
-	 * synchronize our cache.
-	 */
-	protected void componentListCleared(ListClearEvent event) {
-		int componentLVMIndex = this.indexFor(event);
-		this.clearComponentList(componentLVMIndex, this.infoList.get(componentLVMIndex));
-	}
-
-	protected void clearComponentList(int componentLVMIndex, Info info) {
-		// update the affected 'begin' indices
-		int removedItemsSize = info.items.size();
-		if (removedItemsSize == 0) {
-			return;
-		}
-
-		for (int i = componentLVMIndex + 1; i < this.infoList.size(); i++) {
-			this.infoList.get(i).begin -= removedItemsSize;
-		}
-		this.size -= removedItemsSize;
-
-		// synchronize the cached list
-		ArrayList<E2> items = new ArrayList<E2>(info.items);  // make a copy
-		info.items.clear();
-
-		// translate the event
-		this.fireItemsRemoved(LIST_VALUES, info.begin, items);
-	}
-
-	/**
-	 * One of the component lists changed;
-	 * synchronize our cache by synchronizing the appropriate
-	 * list and firing the appropriate events.
-	 */
-	protected void componentListChanged(ListChangeEvent event) {
-		int componentLVMIndex = this.indexFor(event);
-		Info info = this.infoList.get(componentLVMIndex);
-
-		int newItemsSize = info.componentLVM.size();
-		if (newItemsSize == 0) {
-			this.clearComponentList(componentLVMIndex, info);
-			return;
-		}
-
-		int oldItemsSize = info.items.size();
-		if (oldItemsSize == 0) {
-			this.addComponentItems(componentLVMIndex, info, 0, info.componentLVM, newItemsSize);
-			return;
-		}
-
-		int min = Math.min(newItemsSize, oldItemsSize);
-		// handle replaced items individually so we don't fire events for unchanged items
-		for (int i = 0; i < min; i++) {
-			E2 newItem = info.componentLVM.get(i);
-			E2 oldItem = info.items.set(i, newItem);
-			this.fireItemReplaced(LIST_VALUES, info.begin + i, newItem, oldItem);
-		}
-
-		int delta = newItemsSize - oldItemsSize;
-		if (delta == 0) {  // newItemsSize == oldItemsSize
-			return;
-		}
-
-		for (int i = componentLVMIndex + 1; i < this.infoList.size(); i++) {
-			this.infoList.get(i).begin += delta;
-		}
-		this.size += delta;
-
-		if (delta < 0) {  // newItemsSize < oldItemsSize
-			List<E2> subList = info.items.subList(newItemsSize, oldItemsSize);
-			ArrayList<E2> removedItems = new ArrayList<E2>(subList);  // make a copy
-			subList.clear();
-			this.fireItemsRemoved(LIST_VALUES, info.begin + newItemsSize, removedItems);
-			return;
-		}
-
-		// newItemsSize > oldItemsSize
-		ArrayList<E2> addedItems = new ArrayList<E2>(delta);
-		for (int i = oldItemsSize; i < newItemsSize; i++) {
-			addedItems.add(info.componentLVM.get(i));
-		}
-		info.items.addAll(addedItems);
-		this.fireItemsAdded(LIST_VALUES, info.begin + oldItemsSize, addedItems);
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E2> getComponentItems(ListAddEvent event) {
-		return (Iterable<E2>) event.getItems();
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E2> getComponentItems(ListReplaceEvent event) {
-		return (Iterable<E2>) event.getNewItems();
-	}
-
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected ListValueModel<E2> getComponentLVM(ListEvent event) {
-		return (ListValueModel<E2>) event.getSource();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CompositePropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CompositePropertyValueModel.java
deleted file mode 100644
index 149500c..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/CompositePropertyValueModel.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-
-import org.eclipse.jpt.utility.internal.IdentityHashBag;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * A <code>CompositePropertyValueModel</code> adapts a
- * {@link CollectionValueModel} holding other {@link PropertyValueModel}s
- * to a single {@link PropertyValueModel}.
- * <p>
- * Subclasses must implement:<ul>
- * <li>{@link #buildValue()}<p>
- *     to return the current property value, as derived from the
- *     component values
- * </ul>
- * <strong>NB:</strong> The wrapped collection must not contain any duplicates
- * or this class will throw an exception.
- */
-public abstract class CompositePropertyValueModel<V>
-	extends CollectionPropertyValueModelAdapter<V>
-{
-	/**
-	 * Cache the component property value models so we can stop listening to
-	 * them when they are removed from the collection value model.
-	 */
-	protected final IdentityHashBag<PropertyValueModel<?>> componentPVMs = 
-			new IdentityHashBag<PropertyValueModel<?>>();
-
-	/**
-	 * Listen to every property value model in the collection value model.
-	 * If one changes, we need to re-calculate our value.
-	 */
-	protected final PropertyChangeListener propertyChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a property value model that is a composite of the specified
-	 * property value models.
-	 */
-	public CompositePropertyValueModel(PropertyValueModel<?>... collection) {
-		this(Arrays.asList(collection));
-	}
-
-	/**
-	 * Construct a property value model that is a composite of the specified
-	 * property value models.
-	 */
-	public <E extends PropertyValueModel<?>> CompositePropertyValueModel(Collection<E> collection) {
-		this(new StaticCollectionValueModel<E>(collection));
-	}
-
-	/**
-	 * Construct a property value model that is a composite of the specified
-	 * property value models.
-	 */
-	public CompositePropertyValueModel(CollectionValueModel<? extends PropertyValueModel<?>> collectionModel) {
-		super(collectionModel);
-		this.propertyChangeListener = this.buildPropertyChangeListener();
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildPropertyChangeListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				CompositePropertyValueModel.this.propertyChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "property change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Subclasses can override this method if the event can be used to improve
-	 * the performance of building a new value (e.g. some property changes may
-	 * not necessitate the re-calculation of the value).
-	 */
-	protected void propertyChanged(@SuppressWarnings("unused") PropertyChangeEvent event) {
-		this.propertyChanged();
-	}
-
-
-	// ********** CollectionPropertyValueModelAdapter overrides **********
-
-	@Override
-	protected void engageModel_() {
-		super.engageModel_();
-		this.addComponentPVMs(this.getCollectionModel());
-	}
-
-	protected <E extends PropertyValueModel<?>> void addComponentPVMs(Iterable<E> pvms) {
-		for (PropertyValueModel<?> each : pvms) {
-			this.componentPVMs.add(each);
-			each.addPropertyChangeListener(VALUE, this.propertyChangeListener);
-		}
-	}
-
-	@Override
-	protected void disengageModel_() {
-		this.removeComponentPVMs(this.getCollectionModel());
-		super.disengageModel_();
-	}
-
-	protected <E extends PropertyValueModel<?>> void removeComponentPVMs(Iterable<E> pvms) {
-		for (PropertyValueModel<?> each : pvms) {
-			each.removePropertyChangeListener(VALUE, this.propertyChangeListener);
-			this.componentPVMs.remove(each);
-		}
-	}
-
-	@Override
-	protected void itemsAdded(CollectionAddEvent event) {
-		this.addComponentPVMs(this.getItems(event));
-		super.itemsAdded(event);
-	}
-
-	@Override
-	protected void itemsRemoved(CollectionRemoveEvent event) {
-		this.removeComponentPVMs(this.getItems(event));
-		super.itemsRemoved(event);
-	}
-
-	@Override
-	protected void collectionCleared(CollectionClearEvent event) {
-		this.removeAllComponentPVMs();
-		super.collectionCleared(event);
-	}
-
-	protected void removeAllComponentPVMs() {
-		// copy the list so we don't eat our own tail
-		ArrayList<PropertyValueModel<?>> copy = new ArrayList<PropertyValueModel<?>>(this.componentPVMs);
-		this.removeComponentPVMs(copy);
-	}
-
-	@Override
-	protected void collectionChanged(CollectionChangeEvent event) {
-		this.removeAllComponentPVMs();
-		this.addComponentPVMs(this.getCollectionModel());
-		super.collectionChanged(event);
-	}
-
-
-	// ********** convenience methods **********
-
-	/**
-	 * Our constructor accepts only a {@link CollectionValueModel}{@code<? extends }{@link PropertyValueModel}{@code<?>>}.
-	 */
-	// minimize scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected CollectionValueModel<? extends PropertyValueModel<?>> getCollectionModel() {
-		return (CollectionValueModel<? extends PropertyValueModel<?>>) this.collectionModel;
-	}
-
-	/**
-	 * Our constructor accepts only a {@link CollectionValueModel}{@code<? extends }{@link PropertyValueModel}{@code<?>>}.
-	 */
-	@SuppressWarnings("unchecked")
-	protected Iterable<? extends PropertyValueModel<?>> getItems(CollectionAddEvent event) {
-		return (Iterable<? extends PropertyValueModel<?>>) event.getItems();
-	}
-
-	/**
-	 * Our constructor accepts only a {@link CollectionValueModel}{@code<? extends }{@link PropertyValueModel}{@code<?>>}.
-	 */
-	@SuppressWarnings("unchecked")
-	protected Iterable<? extends PropertyValueModel<?>> getItems(CollectionRemoveEvent event) {
-		return (Iterable<? extends PropertyValueModel<?>>) event.getItems();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ExtendedListValueModelWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ExtendedListValueModelWrapper.java
deleted file mode 100644
index 2708144..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ExtendedListValueModelWrapper.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyCompositeListIterator;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyListIterator;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * This wrapper extends a {@link ListValueModel} (or {@link CollectionValueModel})
- * with fixed collections of items on either end.
- * <p>
- * <strong>NB:</strong> Be careful using or wrapping this list value model, since the
- * "extended" items may be unexpected by the client code or wrapper.
- */
-public class ExtendedListValueModelWrapper<E>
-	extends ListValueModelWrapper<E>
-	implements ListValueModel<E>
-{
-	/** the items "prepended" to the wrapped list */
-	protected List<E> prefix;
-
-	/** the items "appended" to the wrapped list */
-	protected List<E> suffix;
-
-
-	// ********** lots o' constructors **********
-
-	/**
-	 * Extend the specified list with a prefix and suffix.
-	 */
-	public ExtendedListValueModelWrapper(List<? extends E> prefix, ListValueModel<? extends E> listHolder, List<? extends E> suffix) {
-		super(listHolder);
-		this.prefix = new ArrayList<E>(prefix);
-		this.suffix = new ArrayList<E>(suffix);
-	}
-
-	/**
-	 * Extend the specified list with a prefix and suffix.
-	 */
-	public ExtendedListValueModelWrapper(E prefix, ListValueModel<? extends E> listHolder, E suffix) {
-		super(listHolder);
-		this.prefix = Collections.singletonList(prefix);
-		this.suffix = Collections.singletonList(suffix);
-	}
-
-	/**
-	 * Extend the specified list with a prefix.
-	 */
-	public ExtendedListValueModelWrapper(List<? extends E> prefix, ListValueModel<? extends E> listHolder) {
-		super(listHolder);
-		this.prefix = new ArrayList<E>(prefix);
-		this.suffix = Collections.emptyList();
-	}
-
-	/**
-	 * Extend the specified list with a prefix.
-	 */
-	public ExtendedListValueModelWrapper(E prefix, ListValueModel<? extends E> listHolder) {
-		super(listHolder);
-		this.prefix = Collections.singletonList(prefix);
-		this.suffix = Collections.emptyList();
-	}
-
-	/**
-	 * Extend the specified list with a suffix.
-	 */
-	public ExtendedListValueModelWrapper(ListValueModel<? extends E> listHolder, List<? extends E> suffix) {
-		super(listHolder);
-		this.prefix = Collections.emptyList();
-		this.suffix = new ArrayList<E>(suffix);
-	}
-
-	/**
-	 * Extend the specified list with a suffix.
-	 */
-	public ExtendedListValueModelWrapper(ListValueModel<? extends E> listHolder, E suffix) {
-		super(listHolder);
-		this.prefix = Collections.emptyList();
-		this.suffix = Collections.singletonList(suffix);
-	}
-
-	/**
-	 * Extend the specified list with a prefix containing a single null item.
-	 */
-	public ExtendedListValueModelWrapper(ListValueModel<? extends E> listHolder) {
-		super(listHolder);
-		this.prefix = Collections.singletonList(null);
-		this.suffix = Collections.emptyList();
-	}
-
-
-	// ********** ListValueModel implementation **********
-
-	public Iterator<E> iterator() {
-		return this.listIterator();
-	}
-
-	public ListIterator<E> listIterator() {
-		return new ReadOnlyListIterator<E>(this.listIterator_());
-	}
-
-	@SuppressWarnings("unchecked")
-	protected ListIterator<E> listIterator_() {
-		return new ReadOnlyCompositeListIterator<E>(
-			this.prefix.listIterator(),
-			this.listHolder.listIterator(),
-			this.suffix.listIterator()
-		);
-	}
-
-	public E get(int index) {
-		int prefixSize = this.prefix.size();
-		if (index < prefixSize) {
-			return this.prefix.get(index);
-		} else if (index >= prefixSize + this.listHolder.size()) {
-			return this.suffix.get(index - (prefixSize + this.listHolder.size()));
-		} else {
-			return this.listHolder.get(index - prefixSize);
-		}
-	}
-
-	public int size() {
-		return this.prefix.size() + this.listHolder.size() + this.suffix.size();
-	}
-
-	public Object[] toArray() {
-		ArrayList<E> list = new ArrayList<E>(this.size());
-		list.addAll(this.prefix);
-		CollectionTools.addAll(list, this.listHolder.iterator());
-		list.addAll(this.suffix);
-		return list.toArray();
-	}
-
-
-	// ********** ListValueModelWrapper implementation/overrides **********
-
-	@Override
-	protected void itemsAdded(ListAddEvent event) {
-		this.fireItemsAdded(event.clone(this, LIST_VALUES, this.prefix.size()));
-	}
-
-	@Override
-	protected void itemsRemoved(ListRemoveEvent event) {
-		this.fireItemsRemoved(event.clone(this, LIST_VALUES, this.prefix.size()));
-	}
-
-	@Override
-	protected void itemsReplaced(ListReplaceEvent event) {
-		this.fireItemsReplaced(event.clone(this, LIST_VALUES, this.prefix.size()));
-	}
-
-	@Override
-	protected void itemsMoved(ListMoveEvent event) {
-		this.fireItemsMoved(event.clone(this, LIST_VALUES, this.prefix.size()));
-	}
-
-	@Override
-	protected void listCleared(ListClearEvent event) {
-		this.fireListChanged(LIST_VALUES, this.buildList());  // not "cleared"
-	}
-
-	@Override
-	protected void listChanged(ListChangeEvent event) {
-		this.fireListChanged(LIST_VALUES, this.buildList());
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		StringTools.append(sb, this);
-	}
-
-
-	// ********** miscellaneous **********
-
-	public void setPrefix(List<E> prefix) {
-		this.prefix = prefix;
-		this.fireListChanged(LIST_VALUES, this.buildList());
-	}
-
-	public void setSuffix(List<E> suffix) {
-		this.suffix = suffix;
-		this.fireListChanged(LIST_VALUES, this.buildList());
-	}
-
-	private List<E> buildList() {
-		return CollectionTools.list(this.listIterator_());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/FilteringCollectionValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/FilteringCollectionValueModel.java
deleted file mode 100644
index b7a2884..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/FilteringCollectionValueModel.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.Filter;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterables.FilteringIterable;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyIterator;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * A <code>FilteringCollectionValueModel</code> wraps another
- * {@link CollectionValueModel} and uses a {@link Filter}
- * to determine which items in the collection are returned by calls
- * to {@link #iterator()}.
- * <p>
- * The filter can be changed at any time; allowing the same
- * adapter to be used with different filter criteria (e.g. when the user
- * wants to view a list of <code>.java</code> files).
- * <p>
- * <strong>NB:</strong> If the objects in the "filtered" collection can change in such a way
- * that they should be removed from the "filtered" collection, you will
- * need to wrap the original collection in an {@link ItemAspectListValueModelAdapter}.
- * For example, if the filter only "accepts" items whose names begin
- * with "X" and the names of the items can change, you will need to
- * wrap the original list of unfiltered items with an
- * {@link ItemPropertyListValueModelAdapter} that listens for changes to each
- * item's name and fires the appropriate event whenever an item's name
- * changes. The event will cause this wrapper to re-filter the changed
- * item and add or remove it from the "filtered" collection as appropriate.
- */
-public class FilteringCollectionValueModel<E>
-	extends CollectionValueModelWrapper<E>
-	implements CollectionValueModel<E>
-{
-	/** This filters the items in the nested collection. */
-	private Filter<E> filter;
-
-	/** Cache the items that were accepted by the filter */
-	private final Collection<E> filteredItems = new ArrayList<E>();
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a collection value model with the specified wrapped
-	 * collection value model and a filter that simply accepts every object.
-	 */
-	public FilteringCollectionValueModel(CollectionValueModel<? extends E> collectionHolder) {
-		this(collectionHolder, Filter.Null.<E>instance());
-	}
-
-	/**
-	 * Construct a collection value model with the specified wrapped
-	 * collection value model and filter.
-	 */
-	public FilteringCollectionValueModel(CollectionValueModel<? extends E> collectionHolder, Filter<E> filter) {
-		super(collectionHolder);
-		this.filter = filter;
-	}
-
-	/**
-	 * Construct a collection value model with the specified wrapped
-	 * list value model and a filter that simply accepts every object.
-	 */
-	public FilteringCollectionValueModel(ListValueModel<E> listHolder) {
-		this(new ListCollectionValueModelAdapter<E>(listHolder));
-	}
-
-	/**
-	 * Construct a collection value model with the specified wrapped
-	 * list value model and filter.
-	 */
-	public FilteringCollectionValueModel(ListValueModel<E> listHolder, Filter<E> filter) {
-		this(new ListCollectionValueModelAdapter<E>(listHolder), filter);
-	}
-
-
-	// ********** CollectionValueModel implementation **********
-
-	public Iterator<E> iterator() {
-		return new ReadOnlyIterator<E>(this.filteredItems);
-	}
-
-	public int size() {
-		return this.filteredItems.size();
-	}
-
-
-	// ********** CollectionValueModelWrapper overrides/implementation **********
-
-	@Override
-	protected void engageModel() {
-		super.engageModel();
-		// synch our cache *after* we start listening to the nested collection,
-		// since its value might change when a listener is added
-		CollectionTools.addAll(this.filteredItems, this.filter(this.collectionHolder));
-	}
-
-	@Override
-	protected void disengageModel() {
-		super.disengageModel();
-		// clear out the cache when we are not listening to the nested collection
-		this.filteredItems.clear();
-	}
-
-	@Override
-	protected void itemsAdded(CollectionAddEvent event) {
-		// filter the values before propagating the change event
-		this.addItemsToCollection(this.filter(this.getItems(event)), this.filteredItems, VALUES);
-	}
-
-	@Override
-	protected void itemsRemoved(CollectionRemoveEvent event) {
-		// do *not* filter the values, because they may no longer be
-		// "accepted" and that might be why they were removed in the first place;
-		// anyway, any extraneous items are harmless
-		this.removeItemsFromCollection(event.getItems(), this.filteredItems, VALUES);
-	}
-
-	@Override
-	protected void collectionCleared(CollectionClearEvent event) {
-		this.clearCollection(this.filteredItems, VALUES);
-	}
-
-	@Override
-	protected void collectionChanged(CollectionChangeEvent event) {
-		this.rebuildFilteredItems();
-	}
-
-
-	// ********** miscellaneous **********
-
-	/**
-	 * Change the filter and rebuild the collection.
-	 */
-	public void setFilter(Filter<E> filter) {
-		this.filter = filter;
-		this.rebuildFilteredItems();
-	}
-
-	/**
-	 * Return an iterable that filters the specified iterable.
-	 */
-	protected Iterable<E> filter(Iterable<? extends E> items) {
-		return new FilteringIterable<E>(items, this.filter);
-	}
-
-	/**
-	 * Synchronize our cache with the wrapped collection.
-	 */
-	protected void rebuildFilteredItems() {
-		this.filteredItems.clear();
-		CollectionTools.addAll(this.filteredItems, this.filter(this.collectionHolder));
-		this.fireCollectionChanged(VALUES, this.filteredItems);
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.filteredItems);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/FilteringPropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/FilteringPropertyValueModel.java
deleted file mode 100644
index 5e201d0..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/FilteringPropertyValueModel.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.Filter;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * A <code>FilteringPropertyValueModel</code> wraps another
- * {@link PropertyValueModel} and uses a {@link Filter}
- * to determine when the wrapped value is to be returned by calls
- * to {@link #getValue()}.
- * <p>
- * As an alternative to building a {@link Filter}, a subclass
- * can override {@link #accept(T)}.
- * <p>
- * One, possibly undesirable, side-effect of using this value model is that
- * it must return *something* as the value. The default behavior is
- * to return <code>null</code> whenever the wrapped value is not "accepted",
- * which can be configured and/or overridden ({@link #getDefaultValue()}).
- */
-public class FilteringPropertyValueModel<T>
-	extends PropertyValueModelWrapper<T>
-	implements PropertyValueModel<T>
-{
-	protected final Filter<T> filter;
-	protected final T defaultValue;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a filtering property value model with the specified nested
-	 * property value model and a disabled filter.
-	 * Use this constructor if you want to override {@link #accept(T)}
-	 * instead of building a {@link Filter}.
-	 * The default value will be <code>null</code>.
-	 */
-	public FilteringPropertyValueModel(PropertyValueModel<? extends T> valueHolder) {
-		this(valueHolder, Filter.Disabled.<T>instance(), null);
-	}
-
-	/**
-	 * Construct a filtering property value model with the specified nested
-	 * property value model, specified default value, and a disabled filter.
-	 * Use this constructor if you want to override {@link #accept(T)}
-	 * instead of building a {@link Filter}
-	 * <em>and</em> you need to specify
-	 * a default value other than <code>null</code>.
-	 */
-	public FilteringPropertyValueModel(PropertyValueModel<? extends T> valueHolder, T defaultValue) {
-		this(valueHolder, Filter.Disabled.<T>instance(), defaultValue);
-	}
-
-	/**
-	 * Construct a filtering property value model with the specified nested
-	 * property value model and filter.
-	 * The default value will be <code>null</code>.
-	 */
-	public FilteringPropertyValueModel(PropertyValueModel<? extends T> valueHolder, Filter<T> filter) {
-		this(valueHolder, filter, null);
-	}
-
-	/**
-	 * Construct a filtering property value model with the specified nested
-	 * property value model, filter, and default value.
-	 */
-	public FilteringPropertyValueModel(PropertyValueModel<? extends T> valueHolder, Filter<T> filter, T defaultValue) {
-		super(valueHolder);
-		this.filter = filter;
-		this.defaultValue = defaultValue;
-	}
-
-
-	// ********** PropertyValueModel implementation **********
-
-	public T getValue() {
-		return this.filterValue(this.valueHolder.getValue());
-	}
-
-
-	// ********** PropertyValueModelWrapper implementation **********
-
-	@Override
-	protected void valueChanged(PropertyChangeEvent event) {
-		// filter the values before propagating the change event
-		@SuppressWarnings("unchecked")
-		T eventOldValue = (T) event.getOldValue();
-		Object oldValue = this.filterValue(eventOldValue);
-		@SuppressWarnings("unchecked")
-		T eventNewValue = (T) event.getNewValue();
-		Object newValue = this.filterValue(eventNewValue);
-		this.firePropertyChanged(VALUE, oldValue, newValue);
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * If the specified value is "accepted" simply return it,
-	 * otherwise return the default value.
-	 */
-	protected T filterValue(T value) {
-		return this.accept(value) ? value : this.getDefaultValue();
-	}
-
-	/**
-	 * Return whether the filtering property value model should
-	 * return the specified value from a call to
-	 * {@link #getValue()}; the value came
-	 * from the nested property value model
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link Filter}.
-	 */
-	protected boolean accept(T value) {
-		return this.filter.accept(value);
-	}
-
-	/**
-	 * Return the object that should be returned if
-	 * the nested value was rejected by the filter.
-	 * The default is <code>null</code>.
-	 */
-	protected T getDefaultValue() {
-		return this.defaultValue;
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.getValue());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/FilteringWritablePropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/FilteringWritablePropertyValueModel.java
deleted file mode 100644
index 455c86f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/FilteringWritablePropertyValueModel.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.internal.BidiFilter;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * A <code>FilteringWritablePropertyValueModel</code> wraps another
- * {@link WritablePropertyValueModel} and uses a {@link BidiFilter}
- * to determine when the wrapped value is to be returned by calls
- * to {@link FilteringPropertyValueModel#getValue() getValue()} and modified by calls to
- * {@link #setValue(T)}.
- * <p>
- * As an alternative to building a {@link BidiFilter}, a subclass
- * can override {@link FilteringPropertyValueModel#accept(T) accept(T)} and {@link #reverseAccept(T)}.
- * <p>
- * One, possibly undesirable, side-effect of using this value model is that
- * it must return *something* as the value. The default behavior is
- * to return <code>null</code> whenever the wrapped value is not "accepted",
- * which can be configured and/or overridden ({@link FilteringPropertyValueModel#getDefaultValue() getDefaultValue()}).
- * <p>
- * Similarly, if an incoming value is not "reverse accepted", <em>nothing</em>
- * will passed through to the wrapped value holder, not even <code>null</code>.
- */
-public class FilteringWritablePropertyValueModel<T>
-	extends FilteringPropertyValueModel<T>
-	implements WritablePropertyValueModel<T>
-{
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a filtering property value model with the specified nested
-	 * property value model and a disabled filter.
-	 * Use this constructor if you want to override
-	 * {@link #accept(T)} and {@link #reverseAccept(T)}
-	 * instead of building a {@link BidiFilter}.
-	 * The default value will be <code>null</code>.
-	 */
-	public FilteringWritablePropertyValueModel(WritablePropertyValueModel<T> valueHolder) {
-		this(valueHolder, BidiFilter.Disabled.<T>instance(), null);
-	}
-
-	/**
-	 * Construct a filtering property value model with the specified nested
-	 * property value model, specified default value, and a disabled filter.
-	 * Use this constructor if you want to override
-	 * {@link #accept(T)} and {@link #reverseAccept(T)}
-	 * instead of building a {@link BidiFilter}.
-	 * <em>and</em> you need to specify
-	 * a default value other than <code>null</code>.
-	 */
-	public FilteringWritablePropertyValueModel(WritablePropertyValueModel<T> valueHolder, T defaultValue) {
-		this(valueHolder, BidiFilter.Disabled.<T>instance(), defaultValue);
-	}
-
-	/**
-	 * Construct an property value model with the specified nested
-	 * property value model and filter.
-	 * The default value will be <code>null</code>.
-	 */
-	public FilteringWritablePropertyValueModel(WritablePropertyValueModel<T> valueHolder, BidiFilter<T> filter) {
-		this(valueHolder, filter, null);
-	}
-
-	/**
-	 * Construct an property value model with the specified nested
-	 * property value model, filter, and default value.
-	 */
-	public FilteringWritablePropertyValueModel(WritablePropertyValueModel<T> valueHolder, BidiFilter<T> filter, T defaultValue) {
-		super(valueHolder, filter, defaultValue);
-	}
-
-
-	// ********** WritablePropertyValueModel implementation **********
-
-	public void setValue(T value) {
-		if (this.reverseAccept(value)) {
-			this.getValueHolder().setValue(value);
-		}
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * Return whether the filtering writable property value model
-	 * should pass through the specified value to the nested
-	 * writable property value model in a call to
-	 * {@link #setValue(T)}.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a {@link BidiFilter}.
-	 */
-	protected boolean reverseAccept(T value) {
-		return this.getFilter().reverseAccept(value);
-	}
-
-	/**
-	 * Our constructor accepts only a {@link WritablePropertyValueModel}{@code<T>}.
-	 */
-	@SuppressWarnings("unchecked")
-	protected WritablePropertyValueModel<T> getValueHolder() {
-		return (WritablePropertyValueModel<T>) this.valueHolder;
-	}
-
-	/**
-	 * Our constructors accept only a bidirectional filter.
-	 */
-	protected BidiFilter<T> getFilter() {
-		return (BidiFilter<T>) this.filter;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemAspectListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemAspectListValueModelAdapter.java
deleted file mode 100644
index ffa6da9..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemAspectListValueModelAdapter.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.EventObject;
-import java.util.IdentityHashMap;
-import java.util.Iterator;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.IntReference;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyListIterator;
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * Abstract list value model that provides behavior for wrapping a {@link ListValueModel}
- * (or {@link CollectionValueModel}) and listening for changes to aspects of the
- * <em>items</em> held by the list (or collection). Changes to the actual list
- * (or collection) are also monitored.
- * 
- * This is useful if you have a collection of items that can be modified by adding
- * or removing items or the items themselves might change in a fashion that
- * might change the list or collection's external appearance.
- * 
- * Subclasses need to override two methods:<ul>
- * <li>{@link #engageItem_(Model)}<p>
- *     begin listening to the appropriate aspect of the specified item and call
- *     {@link #itemAspectChanged(EventObject)} whenever the aspect changes
- * <li>{@link #disengageItem_(Model)}<p>
- *     stop listening to the appropriate aspect of the specified item
- * </ul>
- */
-public abstract class ItemAspectListValueModelAdapter<E>
-	extends ListValueModelWrapper<E>
-	implements ListValueModel<E>
-{
-
-	/**
-	 * Maintain a counter for each of the items in the
-	 * wrapped list holder we are listening to.
-	 */
-	protected final IdentityHashMap<E, IntReference> counters;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Constructor - the list holder is required.
-	 */
-	protected ItemAspectListValueModelAdapter(ListValueModel<? extends E> listHolder) {
-		super(listHolder);
-		this.counters = new IdentityHashMap<E, IntReference>();
-	}
-
-	/**
-	 * Constructor - the collection holder is required.
-	 */
-	protected ItemAspectListValueModelAdapter(CollectionValueModel<? extends E> collectionHolder) {
-		this(new CollectionListValueModelAdapter<E>(collectionHolder));
-	}
-
-
-	// ********** ListValueModel implementation **********
-
-	public Iterator<E> iterator() {
-		return this.listIterator();
-	}
-
-	public ListIterator<E> listIterator() {
-		return new ReadOnlyListIterator<E>(this.listHolder.listIterator());
-	}
-
-	public E get(int index) {
-		return this.listHolder.get(index);
-	}
-
-	public int size() {
-		return this.listHolder.size();
-	}
-
-	public Object[] toArray() {
-		return this.listHolder.toArray();
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Start listening to the list holder and the items in the list.
-	 */
-	@Override
-	protected void engageModel() {
-		super.engageModel();
-		this.engageAllItems();
-	}
-
-	protected void engageAllItems() {
-		this.engageItems(this.listHolder);
-	}
-
-	protected void engageItems(Iterable<? extends E> items) {
-		for (E item : items) {
-			this.engageItem(item);
-		}
-	}
-
-	protected void engageItem(E item) {
-		// listen to each item only once
-		IntReference counter = this.counters.get(item);
-		if (counter == null) {
-			counter = new IntReference();
-			this.counters.put(item, counter);
-			this.engageItem_((Model) item);
-		}
-		counter.increment();
-	}
-
-	/**
-	 * Start listening to the specified item.
-	 */
-	protected abstract void engageItem_(Model item);
-
-	/**
-	 * Stop listening to the list holder and the items in the list.
-	 */
-	@Override
-	protected void disengageModel() {
-		this.disengageAllItems();
-		super.disengageModel();
-	}
-
-	protected void disengageAllItems() {
-		this.disengageItems(this.listHolder);
-	}
-
-	protected void disengageItems(Iterable<? extends E> items) {
-		for (E item : items) {
-			this.disengageItem(item);
-		}
-	}
-
-	protected void disengageItem(E item) {
-		// stop listening to each item only once
-		IntReference counter = this.counters.get(item);
-		if (counter == null) {
-			// something is wrong if this happens...  ~bjv
-			throw new IllegalStateException("missing counter: " + item); //$NON-NLS-1$
-		}
-		if (counter.decrement() == 0) {
-			this.counters.remove(item);
-			this.disengageItem_((Model) item);
-		}
-	}
-
-	/**
-	 * Stop listening to the specified item.
-	 */
-	protected abstract void disengageItem_(Model item);
-
-	@Override
-	public void toString(StringBuilder sb) {
-		StringTools.append(sb, this);
-	}
-
-
-	// ********** list change support **********
-
-	/**
-	 * Items were added to the wrapped list holder.
-	 * Forward the event and begin listening to the added items.
-	 */
-	@Override
-	protected void itemsAdded(ListAddEvent event) {
-		// re-fire event with the wrapper as the source
-		this.fireItemsAdded(event.clone(this, LIST_VALUES));
-		this.engageItems(this.getItems(event));
-	}
-
-	/**
-	 * Items were removed from the wrapped list holder.
-	 * Stop listening to the removed items and forward the event.
-	 */
-	@Override
-	protected void itemsRemoved(ListRemoveEvent event) {
-		this.disengageItems(this.getItems(event));
-		// re-fire event with the wrapper as the source
-		this.fireItemsRemoved(event.clone(this, LIST_VALUES));
-	}
-
-	/**
-	 * Items were replaced in the wrapped list holder.
-	 * Stop listening to the removed items, forward the event,
-	 * and begin listening to the added items.
-	 */
-	@Override
-	protected void itemsReplaced(ListReplaceEvent event) {
-		this.disengageItems(this.getOldItems(event));
-		// re-fire event with the wrapper as the source
-		this.fireItemsReplaced(event.clone(this, LIST_VALUES));
-		this.engageItems(this.getNewItems(event));
-	}
-
-	/**
-	 * Items were moved in the wrapped list holder.
-	 * No need to change any listeners; just forward the event.
-	 */
-	@Override
-	protected void itemsMoved(ListMoveEvent event) {
-		// re-fire event with the wrapper as the source
-		this.fireItemsMoved(event.clone(this, LIST_VALUES));
-	}
-
-	/**
-	 * The wrapped list holder was cleared.
-	 * Stop listening to the removed items and forward the event.
-	 */
-	@Override
-	protected void listCleared(ListClearEvent event) {
-		// we should only need to disengage each item once...
-		// make a copy to prevent a ConcurrentModificationException
-		Collection<E> keys = new ArrayList<E>(this.counters.keySet());
-		this.disengageItems(keys);
-		this.counters.clear();
-		// re-fire event with the wrapper as the source
-		this.fireListCleared(LIST_VALUES);
-	}
-
-	/**
-	 * The wrapped list holder has changed in some dramatic fashion.
-	 * Reconfigure our listeners and forward the event.
-	 */
-	@Override
-	protected void listChanged(ListChangeEvent event) {
-		// we should only need to disengage each item once...
-		// make a copy to prevent a ConcurrentModificationException
-		Collection<E> keys = new ArrayList<E>(this.counters.keySet());
-		this.disengageItems(keys);
-		this.counters.clear();
-		// re-fire event with the wrapper as the source
-		this.fireListChanged(event.clone(this));
-		this.engageAllItems();
-	}
-
-
-	// ********** item change support **********
-
-	/**
-	 * The specified item has a bound property that has changed.
-	 * Notify listeners of the change. The listeners will have to determine
-	 * whether the item aspect change is significant.
-	 */
-	protected void itemAspectChanged(@SuppressWarnings("unused") EventObject event) {
-		this.fireListChanged(LIST_VALUES, CollectionTools.list(this.listHolder, this.listHolder.size()));
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemChangeListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemChangeListValueModelAdapter.java
deleted file mode 100644
index 6eda968..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemChangeListValueModelAdapter.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.ChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.SimpleChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * Extend {@link ItemAspectListValueModelAdapter} to listen to all of the changes
- * of each item in the wrapped list model.
- */
-public class ItemChangeListValueModelAdapter<E>
-	extends ItemAspectListValueModelAdapter<E>
-{
-	/** Listener that listens to all the items in the list. */
-	protected final ChangeListener itemChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the specified items.
-	 */
-	public ItemChangeListValueModelAdapter(ListValueModel<E> listHolder) {
-		super(listHolder);
-		this.itemChangeListener = this.buildItemChangeListener();
-	}
-
-
-	// ********** initialization **********
-
-	protected ChangeListener buildItemChangeListener() {
-		return new SimpleChangeListener() {
-			@Override
-			protected void modelChanged(ChangeEvent event) {
-				ItemChangeListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "item change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** behavior **********
-
-	@Override
-	protected void engageItem_(Model item) {
-		item.addChangeListener(this.itemChangeListener);
-	}
-
-	@Override
-	protected void disengageItem_(Model item) {
-		item.removeChangeListener(this.itemChangeListener);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemCollectionListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemCollectionListValueModelAdapter.java
deleted file mode 100644
index f58bf96..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemCollectionListValueModelAdapter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * Extend {@link ItemAspectListValueModelAdapter} to listen to one or more collection
- * aspects of each item in the wrapped list model.
- */
-public class ItemCollectionListValueModelAdapter<E>
-	extends ItemAspectListValueModelAdapter<E>
-{
-
-	/** The names of the items' collections that we listen to. */
-	protected final String[] collectionNames;
-
-	/** Listener that listens to all the items in the list. */
-	protected final CollectionChangeListener itemCollectionListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the specified item Collections.
-	 */
-	public ItemCollectionListValueModelAdapter(ListValueModel<E> listHolder, String... collectionNames) {
-		super(listHolder);
-		this.collectionNames = collectionNames;
-		this.itemCollectionListener = this.buildItemCollectionListener();
-	}
-
-	/**
-	 * Construct an adapter for the specified item Collections.
-	 */
-	public ItemCollectionListValueModelAdapter(CollectionValueModel<E> collectionHolder, String... collectionNames) {
-		this(new CollectionListValueModelAdapter<E>(collectionHolder), collectionNames);
-	}
-
-
-	// ********** initialization **********
-
-	/**
-	 * All we really care about is the fact that a Collection aspect has 
-	 * changed.  Do the same thing no matter which event occurs.
-	 */
-	protected CollectionChangeListener buildItemCollectionListener() {
-		return new CollectionChangeListener() {
-			public void itemsAdded(CollectionAddEvent event) {
-				ItemCollectionListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			public void itemsRemoved(CollectionRemoveEvent event) {
-				ItemCollectionListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			public void collectionCleared(CollectionClearEvent event) {
-				ItemCollectionListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			public void collectionChanged(CollectionChangeEvent event) {
-				ItemCollectionListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "item collection listener: " + Arrays.asList(ItemCollectionListValueModelAdapter.this.collectionNames); //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** behavior **********
-
-	@Override
-	protected void engageItem_(Model item) {
-		for (String collectionName : this.collectionNames) {
-			item.addCollectionChangeListener(collectionName, this.itemCollectionListener);
-		}
-	}
-
-	@Override
-	protected void disengageItem_(Model item) {
-		for (String collectionName : this.collectionNames) {
-			item.removeCollectionChangeListener(collectionName, this.itemCollectionListener);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemListListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemListListValueModelAdapter.java
deleted file mode 100644
index d58a607..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemListListValueModelAdapter.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * Extend {@link ItemAspectListValueModelAdapter} to listen to one or more list
- * aspects of each item in the wrapped list model.
- */
-public class ItemListListValueModelAdapter<E>
-	extends ItemAspectListValueModelAdapter<E>
-{
-
-	/** The names of the subject's lists that we listen to. */
-	protected final String[] listNames;
-
-	/** Listener that listens to all the items in the list. */
-	protected final ListChangeListener itemListListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the specified item List aspects.
-	 */
-	public ItemListListValueModelAdapter(ListValueModel<E> listHolder, String... listNames) {
-		super(listHolder);
-		this.listNames = listNames;
-		this.itemListListener = this.buildItemListListener();
-	}
-
-	/**
-	 * Construct an adapter for the specified item List aspects.
-	 */
-	public ItemListListValueModelAdapter(CollectionValueModel<E> collectionHolder, String... listNames) {
-		this(new CollectionListValueModelAdapter<E>(collectionHolder), listNames);
-	}
-
-
-	// ********** initialization **********
-
-	/**
-	 * All we really care about is the fact that the List aspect has 
-	 * changed.  Do the same thing no matter which event occurs.
-	 */
-	protected ListChangeListener buildItemListListener() {
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent event) {
-				ItemListListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			public void itemsRemoved(ListRemoveEvent event) {
-				ItemListListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			public void itemsReplaced(ListReplaceEvent event) {
-				ItemListListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			public void itemsMoved(ListMoveEvent event) {
-				ItemListListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			public void listCleared(ListClearEvent event) {
-				ItemListListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			public void listChanged(ListChangeEvent event) {
-				ItemListListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "item list listener: " + Arrays.asList(ItemListListValueModelAdapter.this.listNames); //$NON-NLS-1$
-			}
-		};
-	}
-	
-
-	// ********** behavior **********
-
-	@Override
-	protected void engageItem_(Model item) {
-		for (String listName : this.listNames) {
-			item.addListChangeListener(listName, this.itemListListener);
-		}
-	}
-
-	@Override
-	protected void disengageItem_(Model item) {
-		for (String listName : this.listNames) {
-			item.removeListChangeListener(listName, this.itemListListener);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemPropertyListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemPropertyListValueModelAdapter.java
deleted file mode 100644
index e4bd993..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemPropertyListValueModelAdapter.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * Extend {@link ItemAspectListValueModelAdapter} to listen to one or more
- * properties of each item in the wrapped list model.
- */
-public class ItemPropertyListValueModelAdapter<E>
-	extends ItemAspectListValueModelAdapter<E>
-{
-
-	/** The names of the items' properties that we listen to. */
-	protected final String[] propertyNames;
-
-	/** Listener that listens to all the items in the list. */
-	protected final PropertyChangeListener itemPropertyListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the specified item properties.
-	 */
-	public ItemPropertyListValueModelAdapter(ListValueModel<E> listHolder, String... propertyNames) {
-		super(listHolder);
-		this.propertyNames = propertyNames;
-		this.itemPropertyListener = this.buildItemPropertyListener();
-	}
-
-	/**
-	 * Construct an adapter for the specified item properties.
-	 */
-	public ItemPropertyListValueModelAdapter(CollectionValueModel<E> collectionHolder, String... propertyNames) {
-		this(new CollectionListValueModelAdapter<E>(collectionHolder), propertyNames);
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildItemPropertyListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				ItemPropertyListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "item property listener: " + Arrays.asList(ItemPropertyListValueModelAdapter.this.propertyNames); //$NON-NLS-1$
-			}
-		};
-	}
-	
-
-	// ********** behavior **********
-
-	@Override
-	protected void engageItem_(Model item) {
-		for (String propertyName : this.propertyNames) {
-			item.addPropertyChangeListener(propertyName, this.itemPropertyListener);
-		}
-	}
-
-	@Override
-	protected void disengageItem_(Model item) {
-		for (String propertyName : this.propertyNames) {
-			item.removePropertyChangeListener(propertyName, this.itemPropertyListener);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemStateListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemStateListValueModelAdapter.java
deleted file mode 100644
index ccf3021..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemStateListValueModelAdapter.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * Extend {@link ItemAspectListValueModelAdapter} to listen to the
- * "state" of each item in the wrapped list model.
- */
-public class ItemStateListValueModelAdapter<E>
-	extends ItemAspectListValueModelAdapter<E>
-{
-	/** Listener that listens to all the items in the list. */
-	protected final StateChangeListener itemStateListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the item state.
-	 */
-	public ItemStateListValueModelAdapter(ListValueModel<E> listHolder) {
-		super(listHolder);
-		this.itemStateListener = this.buildItemStateListener();
-	}
-
-	/**
-	 * Construct an adapter for the item state.
-	 */
-	public ItemStateListValueModelAdapter(CollectionValueModel<E> collectionHolder) {
-		this(new CollectionListValueModelAdapter<E>(collectionHolder));
-	}
-
-
-	// ********** initialization **********
-
-	protected StateChangeListener buildItemStateListener() {
-		return new StateChangeListener() {
-			public void stateChanged(StateChangeEvent event) {
-				ItemStateListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "item state listener"; //$NON-NLS-1$
-			}
-		};
-	}
-	
-
-	// ********** behavior **********
-
-	@Override
-	protected void engageItem_(Model item) {
-		item.addStateChangeListener(this.itemStateListener);
-	}
-
-	@Override
-	protected void disengageItem_(Model item) {
-		item.removeStateChangeListener(this.itemStateListener);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemTreeListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemTreeListValueModelAdapter.java
deleted file mode 100644
index 3b55b5e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ItemTreeListValueModelAdapter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.TreeChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * Extend {@link ItemAspectListValueModelAdapter} to listen to one or more tree
- * aspects of each item in the wrapped list model.
- */
-public class ItemTreeListValueModelAdapter<E>
-	extends ItemAspectListValueModelAdapter<E>
-{
-
-	/** The names of the items' tree that we listen to. */
-	protected final String[] treeNames;
-
-	/** Listener that listens to all the items in the list. */
-	protected final TreeChangeListener itemTreeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the specified item trees.
-	 */
-	public ItemTreeListValueModelAdapter(ListValueModel<E> listHolder, String... treeNames) {
-		super(listHolder);
-		this.treeNames = treeNames;
-		this.itemTreeListener = this.buildItemTreeListener();
-	}
-
-	/**
-	 * Construct an adapter for the specified item trees.
-	 */
-	public ItemTreeListValueModelAdapter(CollectionValueModel<E> collectionHolder, String... treeNames) {
-		this(new CollectionListValueModelAdapter<E>(collectionHolder), treeNames);
-	}
-
-
-	// ********** initialization **********
-
-	/**
-	 * All we really care about is the fact that a tree aspect has 
-	 * changed.  Do the same thing no matter which event occurs.
-	 */
-	protected TreeChangeListener buildItemTreeListener() {
-		return new TreeChangeListener() {
-			public void nodeAdded(TreeAddEvent event) {
-				ItemTreeListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			public void nodeRemoved(TreeRemoveEvent event) {
-				ItemTreeListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			public void treeCleared(TreeClearEvent event) {
-				ItemTreeListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			public void treeChanged(TreeChangeEvent event) {
-				ItemTreeListValueModelAdapter.this.itemAspectChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "item tree listener: " + Arrays.asList(ItemTreeListValueModelAdapter.this.treeNames); //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** behavior **********
-
-	@Override
-	protected void engageItem_(Model item) {
-		for (String treeName : this.treeNames) {
-			item.addTreeChangeListener(treeName, this.itemTreeListener);
-		}
-	}
-
-	@Override
-	protected void disengageItem_(Model item) {
-		for (String treeName : this.treeNames) {
-			item.removeTreeChangeListener(treeName, this.itemTreeListener);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListAspectAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListAspectAdapter.java
deleted file mode 100644
index df8dfa0..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListAspectAdapter.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-import java.util.Collection;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * This extension of {@link AspectListValueModelAdapter} provides
- * basic list change support.
- * This converts a set of one or more lists into
- * a single {@link #LIST_VALUES} list.
- * <p>
- * The typical subclass will override the following methods (see the descriptions
- * in {@link AspectListValueModelAdapter}):<ul>
- * <li>{@link #listIterator_()}
- * <li>{@link #get(int)}
- * <li>{@link #size_()}
- * <li>{@link #toArray_()}
- * <li>{@link #listIterator()}
- * <li>{@link #size()}
- * <li>{@link #toArray()}
- * </ul>
- */
-public abstract class ListAspectAdapter<S extends Model, E>
-	extends AspectListValueModelAdapter<S, E>
-{
-	/**
-	 * The name of the subject's lists that we use for the value.
-	 */
-	protected final String[] listNames;
-		protected static final String[] EMPTY_LIST_NAMES = new String[0];
-
-	/** A listener that listens to the subject's list aspects. */
-	protected final ListChangeListener listChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a list aspect adapter for the specified subject
-	 * and list.
-	 */
-	protected ListAspectAdapter(String listName, S subject) {
-		this(new String[] {listName}, subject);
-	}
-
-	/**
-	 * Construct a list aspect adapter for the specified subject
-	 * and lists.
-	 */
-	protected ListAspectAdapter(String[] listNames, S subject) {
-		this(new StaticPropertyValueModel<S>(subject), listNames);
-	}
-
-	/**
-	 * Construct a list aspect adapter for the specified subject holder
-	 * and lists.
-	 */
-	protected ListAspectAdapter(PropertyValueModel<? extends S> subjectHolder, String... listNames) {
-		super(subjectHolder);
-		this.listNames = listNames;
-		this.listChangeListener = this.buildListChangeListener();
-	}
-
-	/**
-	 * Construct a list aspect adapter for the specified subject holder
-	 * and lists.
-	 */
-	protected ListAspectAdapter(PropertyValueModel<? extends S> subjectHolder, Collection<String> listNames) {
-		this(subjectHolder, listNames.toArray(new String[listNames.size()]));
-	}
-
-	/**
-	 * Construct a list aspect adapter for an "unchanging" list in
-	 * the specified subject. This is useful for a list aspect that does not
-	 * change for a particular subject; but the subject will change, resulting in
-	 * a new list.
-	 */
-	protected ListAspectAdapter(PropertyValueModel<? extends S> subjectHolder) {
-		this(subjectHolder, EMPTY_LIST_NAMES);
-	}
-
-
-	// ********** initialization **********
-
-	protected ListChangeListener buildListChangeListener() {
-		// transform the subject's list change events into VALUE list change events
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent event) {
-				ListAspectAdapter.this.itemsAdded(event);
-			}
-			public void itemsRemoved(ListRemoveEvent event) {
-				ListAspectAdapter.this.itemsRemoved(event);
-			}
-			public void itemsReplaced(ListReplaceEvent event) {
-				ListAspectAdapter.this.itemsReplaced(event);
-			}
-			public void itemsMoved(ListMoveEvent event) {
-				ListAspectAdapter.this.itemsMoved(event);
-			}
-			public void listCleared(ListClearEvent event) {
-				ListAspectAdapter.this.listCleared(event);
-			}
-			public void listChanged(ListChangeEvent event) {
-				ListAspectAdapter.this.listChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "list change listener: " + Arrays.asList(ListAspectAdapter.this.listNames); //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** AspectAdapter implementation **********
-
-	@Override
-	protected void engageSubject_() {
-    	for (String listName : this.listNames) {
-			((Model) this.subject).addListChangeListener(listName, this.listChangeListener);
-		}
-	}
-
-	@Override
-	protected void disengageSubject_() {
-    	for (String listName : this.listNames) {
-			((Model) this.subject).removeListChangeListener(listName, this.listChangeListener);
-		}
-	}
-
-
-	// ********** behavior **********
-
-	protected void itemsAdded(ListAddEvent event) {
-		this.fireItemsAdded(event.clone(this, LIST_VALUES));
-	}
-
-	protected void itemsRemoved(ListRemoveEvent event) {
-		this.fireItemsRemoved(event.clone(this, LIST_VALUES));
-	}
-
-	protected void itemsReplaced(ListReplaceEvent event) {
-		this.fireItemsReplaced(event.clone(this, LIST_VALUES));
-	}
-
-	protected void itemsMoved(ListMoveEvent event) {
-		this.fireItemsMoved(event.clone(this, LIST_VALUES));
-	}
-
-	protected void listCleared(ListClearEvent event) {
-		this.fireListCleared(event.clone(this, LIST_VALUES));
-	}
-
-	protected void listChanged(ListChangeEvent event) {
-		this.fireListChanged(event.clone(this, LIST_VALUES));
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListCollectionValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListCollectionValueModelAdapter.java
deleted file mode 100644
index 1450f14..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListCollectionValueModelAdapter.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyIterator;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * An adapter that allows us to make a {@link ListValueModel} behave like
- * a read-only {@link CollectionValueModel}, sorta.
- * <p>
- * We keep an internal collection somewhat in synch with the wrapped list.
- * <p>
- * <strong>NB:</strong> Since we only listen to the wrapped list when we have
- * listeners ourselves and we can only stay in synch with the wrapped
- * list while we are listening to it, results to various methods
- * (e.g. {@link #size()}, {@link iterator()}) will be unpredictable whenever
- * we do not have any listeners. This should not be too painful since,
- * most likely, client objects will also be listeners.
- */
-public class ListCollectionValueModelAdapter<E>
-	extends AbstractCollectionValueModel
-	implements CollectionValueModel<E>
-{
-	/** The wrapped list value model. */
-	protected final ListValueModel<? extends E> listHolder;
-
-	/** A listener that forwards any events fired by the list holder. */
-	protected final ListChangeListener listChangeListener;
-
-	/**
-	 * Our internal collection, which holds the same elements as
-	 * the wrapped list.
-	 */
-	// we declare this an ArrayList so we can use #clone() and #ensureCapacity(int)
-	protected final ArrayList<E> collection;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Wrap the specified list value model.
-	 */
-	public ListCollectionValueModelAdapter(ListValueModel<? extends E> listHolder) {
-		super();
-		if (listHolder == null) {
-			throw new NullPointerException();
-		}
-		this.listHolder = listHolder;
-		this.listChangeListener = this.buildListChangeListener();
-		this.collection = new ArrayList<E>();
-		// postpone building the collection and listening to the underlying list
-		// until we have listeners ourselves...
-	}
-
-
-	// ********** initialization **********
-
-	/**
-	 * The wrapped list has changed, forward an equivalent
-	 * collection change event to our listeners.
-	 */
-	protected ListChangeListener buildListChangeListener() {
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent event) {
-				ListCollectionValueModelAdapter.this.itemsAdded(event);
-			}
-			public void itemsRemoved(ListRemoveEvent event) {
-				ListCollectionValueModelAdapter.this.itemsRemoved(event);
-			}
-			public void itemsReplaced(ListReplaceEvent event) {
-				ListCollectionValueModelAdapter.this.itemsReplaced(event);
-			}
-			public void itemsMoved(ListMoveEvent event) {
-				ListCollectionValueModelAdapter.this.itemsMoved(event);
-			}
-			public void listCleared(ListClearEvent event) {
-				ListCollectionValueModelAdapter.this.listCleared(event);
-			}
-			public void listChanged(ListChangeEvent event) {
-				ListCollectionValueModelAdapter.this.listChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "list change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** CollectionValueModel implementation **********
-
-	public Iterator<E> iterator() {
-		// try to prevent backdoor modification of the list
-		return new ReadOnlyIterator<E>(this.collection);
-	}
-
-	public int size() {
-		return this.collection.size();
-	}
-
-
-	// ********** AbstractCollectionValueModel implementation **********
-
-	@Override
-	protected void engageModel() {
-		this.listHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.listChangeListener);
-		// synch our collection *after* we start listening to the list holder,
-		// since its value might change when a listener is added
-		this.buildCollection();
-	}
-
-	@Override
-	protected void disengageModel() {
-		this.listHolder.removeListChangeListener(ListValueModel.LIST_VALUES, this.listChangeListener);
-		// clear out the collection when we are not listening to the list holder
-		this.collection.clear();
-	}
-
-
-	// ********** behavior **********
-
-	protected void itemsAdded(ListAddEvent event) {
-		this.addItemsToCollection(this.getItems(event), this.collection, VALUES);
-	}
-
-	// minimized scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E> getItems(ListAddEvent event) {
-		return (Iterable<E>) event.getItems();
-	}
-
-	protected void itemsRemoved(ListRemoveEvent event) {
-		this.removeItemsFromCollection(this.getItems(event), this.collection, VALUES);
-	}
-
-	// minimized scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E> getItems(ListRemoveEvent event) {
-		return (Iterable<E>) event.getItems();
-	}
-
-	protected void itemsReplaced(ListReplaceEvent event) {
-		this.removeItemsFromCollection(this.getOldItems(event), this.collection, VALUES);
-		this.addItemsToCollection(this.getNewItems(event), this.collection, VALUES);
-	}
-
-	// minimized scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E> getOldItems(ListReplaceEvent event) {
-		return (Iterable<E>) event.getOldItems();
-	}
-
-	// minimized scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E> getNewItems(ListReplaceEvent event) {
-		return (Iterable<E>) event.getNewItems();
-	}
-
-	protected void itemsMoved(@SuppressWarnings("unused") ListMoveEvent event) {
-		// do nothing? moving items in a list has no net effect on a collection...
-	}
-
-	protected void listCleared(@SuppressWarnings("unused") ListClearEvent event) {
-		// put in empty check so we don't fire events unnecessarily
-		if ( ! this.collection.isEmpty()) {
-			this.collection.clear();
-			this.fireCollectionCleared(VALUES);
-		}
-	}
-
-	/**
-	 * synchronize our internal collection with the wrapped list
-	 * and fire the appropriate events
-	 */
-	protected void listChanged(@SuppressWarnings("unused") ListChangeEvent event) {
-		if (this.listHolder.size() == 0) {
-			if (this.collection.isEmpty()) {
-				// no change
-			} else {
-				this.clearCollection(this.collection, VALUES);
-			}
-		} else {
-			if (this.collection.isEmpty()) {
-				this.buildCollection();
-				this.fireItemsAdded(VALUES, this.collection);
-			} else {
-				this.collection.clear();
-				this.buildCollection();
-				this.fireCollectionChanged(VALUES, this.collection);
-			}
-		}
-	}
-
-	protected void buildCollection() {
-		// if the new list is empty, do nothing
-		int size = this.listHolder.size();
-		if (size != 0) {
-			this.buildCollection(size);
-		}
-	}
-
-	protected void buildCollection(int size) {
-		this.collection.ensureCapacity(size);
-		for (E each : this.listHolder) {
-			this.collection.add(each);
-		}
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.collection);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListCurator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListCurator.java
deleted file mode 100644
index 9d32bbc..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListCurator.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.EventListener;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyListIterator;
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * This extension of {@link AspectAdapter} provides list change support
- * by adapting a subject's state change events to a minimum set
- * of list change events.
- */
-public abstract class ListCurator<S extends Model, E>
-	extends AspectAdapter<S>
-	implements ListValueModel<E>
-{
-	/** How the list looked before the last state change */
-	private final ArrayList<E> record;
-
-	/** A listener that listens for the subject's state to change */
-	private final StateChangeListener stateChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a curator for the specified subject.
-	 */
-	protected ListCurator(S subject) {
-		this(new StaticPropertyValueModel<S>(subject));
-	}
-
-	/**
-	 * Construct a curator for the specified subject holder.
-	 * The subject holder cannot be null.
-	 */
-	protected ListCurator(PropertyValueModel<? extends S> subjectHolder) {
-		super(subjectHolder);
-		this.record = new ArrayList<E>();
-		this.stateChangeListener = this.buildStateChangeListener();
-	}
-
-
-	// ********** initialization **********
-
-	/**
-	 * The subject's state has changed, do inventory and report to listeners.
-	 */
-	protected StateChangeListener buildStateChangeListener() {
-		return new StateChangeListener() {
-			public void stateChanged(StateChangeEvent event) {
-				ListCurator.this.submitInventoryReport();
-			}
-			@Override
-			public String toString() {
-				return "state change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ListValueModel implementation **********
-
-	public ListIterator<E> iterator() {
-		return this.listIterator();
-	}
-
-	public ListIterator<E> listIterator() {
-		return new ReadOnlyListIterator<E>(this.record);
-	}
-
-	/**
-	 * Return the item at the specified index of the subject's list aspect.
-	 */
-	public E get(int index) {
-		return this.record.get(index);
-	}
-
-	/**
-	 * Return the size of the subject's list aspect.
-	 */
-	public int size() {
-		return this.record.size();
-	}
-
-	/**
-	 * Return an array manifestation of the subject's list aspect.
-	 */
-	public Object[] toArray() {
-		return this.record.toArray();
-	}
-
-
-	// ********** AspectAdapter implementation **********
-
-	@Override
-	protected ListIterator<E> getValue() {
-		return this.iterator();
-	}
-
-	@Override
-	protected Class<? extends EventListener> getListenerClass() {
-		return ListChangeListener.class;
-	}
-
-	@Override
-	protected String getListenerAspectName() {
-		return LIST_VALUES;
-	}
-
-	@Override
-	protected boolean hasListeners() {
-		return this.hasAnyListChangeListeners(LIST_VALUES);
-	}
-
-	/**
-	 * The aspect has changed, notify listeners appropriately.
-	 */
-	@Override
-	protected void fireAspectChanged(Object oldValue, Object newValue) {
-		this.fireListChanged(LIST_VALUES, this.record);
-	}
-
-	/**
-	 * The subject is not null - add our listener.
-	 */
-	@Override
-	protected void engageSubject_() {
-		((Model) this.subject).addStateChangeListener(this.stateChangeListener);
-		// synch our list *after* we start listening to the subject,
-		// since its value might change when a listener is added
-		CollectionTools.addAll(this.record, this.iteratorForRecord());
-	}
-
-	/**
-	 * The subject is not null - remove our listener.
-	 */
-	@Override
-	protected void disengageSubject_() {
-		((Model) this.subject).removeStateChangeListener(this.stateChangeListener);
-		// clear out the list when we are not listening to the subject
-		this.record.clear();
-	}
-
-
-	// ********** ListCurator protocol **********
-
-	/**
-	 * This is intended to be different from {@link ListValueModel#iterator()}.
-	 * It is intended to be used only when the subject changes or the
-	 * subject's "state" changes (as signified by a state change event).
-	 */
-	protected abstract Iterator<E> iteratorForRecord();
-
-
-	// ********** behavior **********
-
-	void submitInventoryReport() {
-		List<E> newRecord = CollectionTools.list(this.iteratorForRecord());
-		int recordIndex = 0;
-
-		// add items from the new record
-		for (E newItem : newRecord) {
-			this.inventoryNewItem(recordIndex, newItem);
-			recordIndex++;
-		}
-
-		// clean out items that are no longer in the new record
-		for (recordIndex = 0; recordIndex < this.record.size(); ) {
-			E item = this.record.get(recordIndex);
-
-			if (newRecord.contains(item)) {
-				recordIndex++;
-			} else {
-				this.removeItemFromInventory(recordIndex, item);
-			}
-		}
-	}
-
-	private void inventoryNewItem(int recordIndex, E newItem) {
-		List<E> rec = new ArrayList<E>(this.record);
-
-		if ((recordIndex < rec.size()) && rec.get(recordIndex).equals(newItem)) {
-			return;
-		}
-		if (rec.contains(newItem)) {
-			this.removeItemFromInventory(recordIndex, rec.get(recordIndex));
-			this.inventoryNewItem(recordIndex, newItem);
-		} else {
-			this.addItemToInventory(recordIndex, newItem);
-		}
-	}
-
-	private void addItemToInventory(int index, E item) {
-		this.addItemToList(index, item, this.record, LIST_VALUES);
-	}
-
-	private void removeItemFromInventory(int index, @SuppressWarnings("unused") E item) {
-		this.removeItemFromList(index, this.record, LIST_VALUES);
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.record);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListPropertyValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListPropertyValueModelAdapter.java
deleted file mode 100644
index b468f9a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListPropertyValueModelAdapter.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * This abstract class provides the infrastructure needed to wrap
- * a list value model, "lazily" listen to it, and convert
- * its change notifications into property value model change
- * notifications.
- * <p>
- * Subclasses must override:<ul>
- * <li>{@link #buildValue()}<p>
- *     to return the current property value, as derived from the
- *     current list value
- * </ul>
- * Subclasses might want to override the following methods
- * to improve performance (by not recalculating the value, if possible):<ul>
- * <li>{@link #itemsAdded(ListAddEvent event)}
- * <li>{@link #itemsRemoved(ListRemoveEvent event)}
- * <li>{@link #itemsReplaced(ListReplaceEvent event)}
- * <li>{@link #itemsMoved(ListMoveEvent event)}
- * <li>{@link #listCleared(ListClearEvent event)}
- * <li>{@link #listChanged(ListChangeEvent event)}
- * </ul>
- */
-public abstract class ListPropertyValueModelAdapter<T>
-	extends AbstractPropertyValueModelAdapter<T>
-{
-	/** The wrapped list value model. */
-	protected final ListValueModel<?> listHolder;
-
-	/** A listener that allows us to synch with changes to the wrapped list holder. */
-	protected final ListChangeListener listChangeListener;
-
-
-	// ********** constructor/initialization **********
-
-	/**
-	 * Construct a property value model with the specified wrapped
-	 * list value model.
-	 */
-	protected ListPropertyValueModelAdapter(ListValueModel<?> listHolder) {
-		super();
-		this.listHolder = listHolder;
-		this.listChangeListener = this.buildListChangeListener();
-	}
-
-	protected ListChangeListener buildListChangeListener() {
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent event) {
-				ListPropertyValueModelAdapter.this.itemsAdded(event);
-			}		
-			public void itemsRemoved(ListRemoveEvent event) {
-				ListPropertyValueModelAdapter.this.itemsRemoved(event);
-			}
-			public void itemsReplaced(ListReplaceEvent event) {
-				ListPropertyValueModelAdapter.this.itemsReplaced(event);
-			}
-			public void itemsMoved(ListMoveEvent event) {
-				ListPropertyValueModelAdapter.this.itemsMoved(event);
-			}
-			public void listCleared(ListClearEvent event) {
-				ListPropertyValueModelAdapter.this.listCleared(event);
-			}
-			public void listChanged(ListChangeEvent event) {
-				ListPropertyValueModelAdapter.this.listChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "list change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Start listening to the list holder.
-	 */
-	@Override
-	protected void engageModel_() {
-		this.listHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.listChangeListener);
-	}
-
-	/**
-	 * Stop listening to the list holder.
-	 */
-	@Override
-	protected void disengageModel_() {
-		this.listHolder.removeListChangeListener(ListValueModel.LIST_VALUES, this.listChangeListener);
-	}
-
-	
-	// ********** collection change support **********
-
-	/**
-	 * Items were added to the wrapped list holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected void itemsAdded(@SuppressWarnings("unused") ListAddEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-	/**
-	 * Items were removed from the wrapped list holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected void itemsRemoved(@SuppressWarnings("unused") ListRemoveEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-	/**
-	 * Items were replaced in the wrapped list holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected void itemsReplaced(@SuppressWarnings("unused") ListReplaceEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-	/**
-	 * Items were moved in the wrapped list holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected void itemsMoved(@SuppressWarnings("unused") ListMoveEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-	/**
-	 * The wrapped list holder was cleared;
-	 * propagate the change notification appropriately.
-	 */
-	protected void listCleared(@SuppressWarnings("unused") ListClearEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-	/**
-	 * The value of the wrapped list holder has changed;
-	 * propagate the change notification appropriately.
-	 */
-	protected void listChanged(@SuppressWarnings("unused") ListChangeEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListValueModelWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListValueModelWrapper.java
deleted file mode 100644
index a134101..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ListValueModelWrapper.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * This abstract class provides the infrastructure needed to wrap
- * another list value model, "lazily" listen to it, and propagate
- * its change notifications. Subclasses must implement the appropriate
- * {@link ListValueModel}.
- */
-public abstract class ListValueModelWrapper<E>
-	extends AbstractListValueModel
-{
-	/** The wrapped list value model. */
-	protected final ListValueModel<? extends E> listHolder;
-
-	/** A listener that allows us to synch with changes to the wrapped list holder. */
-	protected final ListChangeListener listChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a list value model with the specified wrapped
-	 * list value model.
-	 */
-	protected ListValueModelWrapper(ListValueModel<? extends E> listHolder) {
-		super();
-		if (listHolder == null) {
-			throw new NullPointerException();
-		}
-		this.listHolder = listHolder;
-		this.listChangeListener = this.buildListChangeListener();
-	}
-
-
-	// ********** initialization **********
-
-	protected ListChangeListener buildListChangeListener() {
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent event) {
-				ListValueModelWrapper.this.itemsAdded(event);
-			}
-			public void itemsRemoved(ListRemoveEvent event) {
-				ListValueModelWrapper.this.itemsRemoved(event);
-			}
-			public void itemsReplaced(ListReplaceEvent event) {
-				ListValueModelWrapper.this.itemsReplaced(event);
-			}
-			public void itemsMoved(ListMoveEvent event) {
-				ListValueModelWrapper.this.itemsMoved(event);
-			}
-			public void listCleared(ListClearEvent event) {
-				ListValueModelWrapper.this.listCleared(event);
-			}
-			public void listChanged(ListChangeEvent event) {
-				ListValueModelWrapper.this.listChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "list change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Start listening to the list holder.
-	 */
-	@Override
-	protected void engageModel() {
-		this.listHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.listChangeListener);
-	}
-
-	/**
-	 * Stop listening to the list holder.
-	 */
-	@Override
-	protected void disengageModel() {
-		this.listHolder.removeListChangeListener(ListValueModel.LIST_VALUES, this.listChangeListener);
-	}
-
-	// minimized scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E> getItems(ListAddEvent event) {
-		return (Iterable<E>) event.getItems();
-	}
-
-	// minimized scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E> getItems(ListRemoveEvent event) {
-		return (Iterable<E>) event.getItems();
-	}
-
-	// minimized scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E> getNewItems(ListReplaceEvent event) {
-		return (Iterable<E>) event.getNewItems();
-	}
-
-	// minimized scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	protected Iterable<E> getOldItems(ListReplaceEvent event) {
-		return (Iterable<E>) event.getOldItems();
-	}
-
-
-	// ********** list change support **********
-
-	/**
-	 * Items were added to the wrapped list holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected abstract void itemsAdded(ListAddEvent event);
-
-	/**
-	 * Items were removed from the wrapped list holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected abstract void itemsRemoved(ListRemoveEvent event);
-
-	/**
-	 * Items were replaced in the wrapped list holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected abstract void itemsReplaced(ListReplaceEvent event);
-
-	/**
-	 * Items were moved in the wrapped list holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected abstract void itemsMoved(ListMoveEvent event);
-
-	/**
-	 * The wrapped list holder was cleared;
-	 * propagate the change notification appropriately.
-	 */
-	protected abstract void listCleared(ListClearEvent event);
-
-	/**
-	 * The value of the wrapped list holder has changed;
-	 * propagate the change notification appropriately.
-	 */
-	protected abstract void listChanged(ListChangeEvent event);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/NullCollectionValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/NullCollectionValueModel.java
deleted file mode 100644
index 0ac4931..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/NullCollectionValueModel.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-
-/**
- * A read-only collection value model for when you
- * don't need to support a collection. In particular, this
- * is useful for the leaf nodes of a tree that never have
- * children.
- * <p>
- * We don't use a singleton because we hold on to listeners.
- */
-public final class NullCollectionValueModel<E>
-	extends AbstractModel
-	implements CollectionValueModel<E>
-{
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Default constructor.
-	 */
-	public NullCollectionValueModel() {
-		super();
-	}
-	
-
-	// ********** CollectionValueModel implementation **********
-
-	public int size() {
-		return 0;
-	}
-
-	public Iterator<E> iterator() {
-		return EmptyIterator.instance();
-	}
-
-
-	// ********** Object overrides **********
-
-    @Override
-	public String toString() {
-    	return this.getClass().getSimpleName();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/NullListValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/NullListValueModel.java
deleted file mode 100644
index 35a46b0..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/NullListValueModel.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Iterator;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-import org.eclipse.jpt.utility.internal.iterators.EmptyListIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * An empty list value model for when you don't
- * need to support a list.
- * <p>
- * We don't use a singleton because we hold on to listeners.
- */
-public final class NullListValueModel<E>
-	extends AbstractModel
-	implements ListValueModel<E>
-{
-	private static final Object[] EMPTY_ARRAY = new Object[0];
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Default constructor.
-	 */
-	public NullListValueModel() {
-		super();
-	}
-
-
-	// ********** ListValueModel implementation **********
-
-	public Iterator<E> iterator() {
-		return EmptyIterator.instance();
-	}
-
-	public ListIterator<E> listIterator() {
-		return EmptyListIterator.instance();
-	}
-
-	public int size() {
-		return 0;
-	}
-
-	public E get(int index) {
-		throw new IndexOutOfBoundsException("Index: " + index + ", Size: 0"); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	public Object[] toArray() {
-		return EMPTY_ARRAY;
-	}
-
-
-	// ********** Object overrides **********
-
-	@Override
-	public String toString() {
-		return this.getClass().getSimpleName();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/NullPropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/NullPropertyValueModel.java
deleted file mode 100644
index 500f176..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/NullPropertyValueModel.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * A property value model for when you
- * don't need to support a value.
- * <p>
- * We don't use a singleton because we hold on to listeners.
- */
-public final class NullPropertyValueModel<T>
-	extends AbstractModel
-	implements PropertyValueModel<T>
-{
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Default constructor.
-	 */
-	public NullPropertyValueModel() {
-		super();
-	}
-	
-
-	// ********** PropertyValueModel implementation **********
-
-	public T getValue() {
-		return null;
-	}
-
-
-	// ********** Object overrides **********
-
-    @Override
-	public String toString() {
-		return this.getClass().getSimpleName();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/NullTreeValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/NullTreeValueModel.java
deleted file mode 100644
index fbcc8b1..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/NullTreeValueModel.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.value.TreeValueModel;
-
-/**
- * A tree value model for when you
- * don't need to support any nodes.
- * <p>
- * We don't use a singleton because we hold on to listeners.
- */
-public final class NullTreeValueModel<E>
-	extends AbstractModel
-	implements TreeValueModel<E>
-{
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Default constructor.
-	 */
-	public NullTreeValueModel() {
-		super();
-	}
-	
-
-	// ********** TreeValueModel implementation **********
-
-	public Iterator<E> nodes() {
-		return EmptyIterator.instance();
-	}
-
-
-	// ********** Object overrides **********
-
-    @Override
-	public String toString() {
-		return this.getClass().getSimpleName();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/PropertyAspectAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/PropertyAspectAdapter.java
deleted file mode 100644
index ecf7b77..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/PropertyAspectAdapter.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-import java.util.Collection;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * This {@link AspectPropertyValueModelAdapter} provides basic property change support.
- * This converts a set of one or more standard properties into
- * a single {@link #VALUE} property.
- * <p>
- * The typical subclass will override the following methods (see the descriptions
- * in {@link AspectPropertyValueModelAdapter}):<ul>
- * <li>{@link #buildValue_()}
- * <li>{@link #setValue_(Object)}
- * <li>{@link #buildValue()}
- * <li>{@link #setValue(Object)}
- * </ul>
- */
-public abstract class PropertyAspectAdapter<S extends Model, V>
-	extends AspectPropertyValueModelAdapter<S, V>
-{
-	/** The name of the subject's properties that we use for the value. */
-	protected final String[] propertyNames;
-		protected static final String[] EMPTY_PROPERTY_NAMES = new String[0];
-
-	/** A listener that listens to the appropriate properties of the subject. */
-	protected final PropertyChangeListener propertyChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a property aspect adapter for the specified subject
-	 * and property.
-	 */
-	protected PropertyAspectAdapter(String propertyName, S subject) {
-		this(new String[] {propertyName}, subject);
-	}
-
-	/**
-	 * Construct a property aspect adapter for the specified subject
-	 * and properties.
-	 */
-	protected PropertyAspectAdapter(String[] propertyNames, S subject) {
-		this(new StaticPropertyValueModel<S>(subject), propertyNames);
-	}
-
-	/**
-	 * Construct a property aspect adapter for the specified subject holder
-	 * and properties.
-	 */
-	protected PropertyAspectAdapter(PropertyValueModel<? extends S> subjectHolder, String... propertyNames) {
-		super(subjectHolder);
-		this.propertyNames = propertyNames;
-		this.propertyChangeListener = this.buildPropertyChangeListener();
-	}
-
-	/**
-	 * Construct a property aspect adapter for the specified subject holder
-	 * and properties.
-	 */
-	protected PropertyAspectAdapter(PropertyValueModel<? extends S> subjectHolder, Collection<String> propertyNames) {
-		this(subjectHolder, propertyNames.toArray(new String[propertyNames.size()]));
-	}
-
-	/**
-	 * Construct a property aspect adapter for an "unchanging" property in
-	 * the specified subject. This is useful for a property aspect that does not
-	 * change for a particular subject; but the subject will change, resulting in
-	 * a new property. (A {@link TransformationPropertyValueModel} could also be
-	 * used in this situation.)
-	 */
-	protected PropertyAspectAdapter(PropertyValueModel<? extends S> subjectHolder) {
-		this(subjectHolder, EMPTY_PROPERTY_NAMES);
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildPropertyChangeListener() {
-		// transform the subject's property change events into VALUE property change events
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				PropertyAspectAdapter.this.propertyChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "property change listener: " + Arrays.asList(PropertyAspectAdapter.this.propertyNames); //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** AspectAdapter implementation **********
-
-    @Override
-	protected void engageSubject_() {
-    	for (String propertyName : this.propertyNames) {
-			((Model) this.subject).addPropertyChangeListener(propertyName, this.propertyChangeListener);
-		}
-	}
-
-    @Override
-	protected void disengageSubject_() {
-    	for (String propertyName : this.propertyNames) {
-			((Model) this.subject).removePropertyChangeListener(propertyName, this.propertyChangeListener);
-		}
-	}
-
-    protected void propertyChanged(@SuppressWarnings("unused") PropertyChangeEvent event) {
-		this.propertyChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/PropertyCollectionValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/PropertyCollectionValueModelAdapter.java
deleted file mode 100644
index 6ad280e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/PropertyCollectionValueModelAdapter.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Collections;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementIterator;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * An adapter that allows us to make a {@link PropertyValueModel} behave like
- * a read-only, single-element {@link CollectionValueModel}, sorta.
- * <p>
- * If the property's value is null, an empty iterator is returned
- * (i.e. you can't have a collection with a <code>null</code> element).
- */
-public class PropertyCollectionValueModelAdapter<E>
-	extends AbstractCollectionValueModel
-	implements CollectionValueModel<E>
-{
-	/** The wrapped property value model. */
-	protected final PropertyValueModel<? extends E> valueHolder;
-
-	/** A listener that forwards any events fired by the value holder. */
-	protected final PropertyChangeListener propertyChangeListener;
-
-	/** Cache the value. */
-	protected E value;
-
-
-	// ********** constructors/initialization **********
-
-	/**
-	 * Convert the specified property value model to a collection
-	 * value model.
-	 */
-	public PropertyCollectionValueModelAdapter(PropertyValueModel<? extends E> valueHolder) {
-		super();
-		if (valueHolder == null) {
-			throw new NullPointerException();
-		}
-		this.valueHolder = valueHolder;
-		this.propertyChangeListener = this.buildPropertyChangeListener();
-		this.value = null;
-		// postpone building the value and listening to the underlying value
-		// until we have listeners ourselves...
-	}
-
-	/**
-	 * The wrapped value has changed, forward an equivalent
-	 * collection change event to our listeners.
-	 */
-	protected PropertyChangeListener buildPropertyChangeListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				@SuppressWarnings("unchecked")
-				E eventNewValue = (E) event.getNewValue();
-				PropertyCollectionValueModelAdapter.this.valueChanged(eventNewValue);
-			}
-			@Override
-			public String toString() {
-				return "property change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** CollectionValueModel implementation **********
-
-	public Iterator<E> iterator() {
-		return (this.value == null) ? EmptyIterator.<E>instance() : this.iterator_();
-	}
-
-	protected Iterator<E> iterator_() {
-		return new SingleElementIterator<E>(this.value);
-	}
-
-	public int size() {
-		return (this.value == null) ? 0 : 1;
-	}
-
-
-	// ********** AbstractCollectionValueModel implementation **********
-
-	@Override
-	protected void engageModel() {
-		this.valueHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.propertyChangeListener);
-		// synch our value *after* we start listening to the value holder,
-		// since its value might change when a listener is added
-		this.value = this.valueHolder.getValue();
-	}
-
-	@Override
-	protected void disengageModel() {
-		this.valueHolder.removePropertyChangeListener(PropertyValueModel.VALUE, this.propertyChangeListener);
-		// clear out the value when we are not listening to the value holder
-		this.value = null;
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * synchronize our internal value with the wrapped value
-	 * and fire the appropriate events
-	 */
-	protected void valueChanged(E newValue) {
-		E oldValue = this.value;
-		this.value = newValue;
-		if (oldValue == null) {
-			// we wouldn't get the event if the new value were null too
-			this.fireItemAdded(VALUES, newValue);
-		} else {
-			if (newValue == null) {
-				this.fireItemRemoved(VALUES, oldValue);
-			} else {
-				// we wouldn't get the event if the new value was the same as the old
-				this.fireCollectionChanged(VALUES, Collections.singleton(newValue));
-			}
-		}
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		StringTools.append(sb, this);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/PropertyListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/PropertyListValueModelAdapter.java
deleted file mode 100644
index 1cc5b19..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/PropertyListValueModelAdapter.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Iterator;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.EmptyListIterator;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementListIterator;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * An adapter that allows us to make a {@link PropertyValueModel} behave like
- * a read-only, single-element {@link ListValueModel}, sorta.
- * <p>
- * If the property's value is null, an empty iterator is returned
- * (i.e. you can't have a collection with a <code>null</code> element).
- */
-public class PropertyListValueModelAdapter<E>
-	extends AbstractListValueModel
-	implements ListValueModel<E>
-{
-	/** The wrapped property value model. */
-	protected final PropertyValueModel<? extends E> valueHolder;
-
-	/** A listener that forwards any events fired by the value holder. */
-	protected final PropertyChangeListener propertyChangeListener;
-
-	/** Cache the value. */
-	protected E value;
-
-
-	// ********** constructors/initialization **********
-
-	/**
-	 * Convert the specified property value model to a list
-	 * value model.
-	 */
-	public PropertyListValueModelAdapter(PropertyValueModel<? extends E> valueHolder) {
-		super();
-		if (valueHolder == null) {
-			throw new NullPointerException();
-		}
-		this.valueHolder = valueHolder;
-		this.propertyChangeListener = this.buildPropertyChangeListener();
-		// postpone building the value and listening to the underlying value
-		// until we have listeners ourselves...
-	}
-
-	/**
-	 * The wrapped value has changed, forward an equivalent
-	 * list change event to our listeners.
-	 */
-	protected PropertyChangeListener buildPropertyChangeListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				@SuppressWarnings("unchecked")
-				E eventNewValue = (E) event.getNewValue();
-				PropertyListValueModelAdapter.this.valueChanged(eventNewValue);
-			}
-			@Override
-			public String toString() {
-				return "property change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ListValueModel implementation **********
-
-	public Iterator<E> iterator() {
-		return this.listIterator();
-	}
-
-	public ListIterator<E> listIterator() {
-		return (this.value == null) ?
-					EmptyListIterator.<E>instance()
-				:
-					new SingleElementListIterator<E>(this.value);
-	}
-
-	public int size() {
-		return (this.value == null) ? 0 : 1;
-	}
-
-	public E get(int index) {
-		if (this.value == null) {
-			throw this.buildIOOBE(index, 0);
-		}
-		if (index > 0) {
-			throw this.buildIOOBE(index, 1);
-		}
-		return this.value;
-	}
-
-	protected static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
-	public Object[] toArray() {
-		return (this.value == null) ? EMPTY_OBJECT_ARRAY : new Object[] {this.value};
-	}
-
-
-	// ********** behavior **********
-
-	protected IndexOutOfBoundsException buildIOOBE(int index, int size) {
-		return new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	@Override
-	protected void engageModel() {
-		this.valueHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.propertyChangeListener);
-		// synch our value *after* we start listening to the value holder,
-		// since its value might change when a listener is added
-		this.value = this.valueHolder.getValue();
-	}
-
-	@Override
-	protected void disengageModel() {
-		this.valueHolder.removePropertyChangeListener(PropertyValueModel.VALUE, this.propertyChangeListener);
-		// clear out the value when we are not listening to the value holder
-		this.value = null;
-	}
-
-	/**
-	 * synchronize our internal value with the wrapped value
-	 * and fire the appropriate events
-	 */
-	protected void valueChanged(E newValue) {
-		E oldValue = this.value;
-		this.value = newValue;
-		if (oldValue == null) {
-			this.fireItemAdded(LIST_VALUES, 0, newValue);
-		} else {
-			if (newValue == null) {
-				this.fireItemRemoved(LIST_VALUES, 0, oldValue);
-			} else {
-				this.fireItemReplaced(LIST_VALUES, 0, newValue, oldValue);
-			}
-		}
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		StringTools.append(sb, this);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/PropertyValueModelWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/PropertyValueModelWrapper.java
deleted file mode 100644
index 66a2f4c..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/PropertyValueModelWrapper.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * This abstract class provides the infrastructure needed to wrap
- * another property value model, "lazily" listen to it, and propagate
- * its change notifications. Subclasses must implement the appropriate
- * {@link PropertyValueModel}.
- * <p>
- * Subclasses must implement the following methods:<ul>
- * <li>{@link #valueChanged(PropertyChangeEvent)}<p>
- *     implement this method to propagate the appropriate change notification
- * </ul>
- */
-public abstract class PropertyValueModelWrapper<V>
-	extends AbstractPropertyValueModel
-{
-	/** The wrapped property value model. */
-	protected final PropertyValueModel<? extends V> valueHolder;
-
-	/** A listener that allows us to synch with changes to the wrapped value holder. */
-	protected final PropertyChangeListener valueChangeListener;
-
-
-	// ********** constructors/initialization **********
-
-	/**
-	 * Construct a property value model with the specified wrapped
-	 * property value model. The value holder is required.
-	 */
-	protected PropertyValueModelWrapper(PropertyValueModel<? extends V> valueHolder) {
-		super();
-		if (valueHolder == null) {
-			throw new NullPointerException();
-		}
-		this.valueHolder = valueHolder;
-		this.valueChangeListener = this.buildValueChangeListener();
-	}
-	
-	protected PropertyChangeListener buildValueChangeListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				PropertyValueModelWrapper.this.valueChanged(event);
-			}
-		    @Override
-			public String toString() {
-				return "value change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-	
-
-	// ********** behavior **********
-	
-	/**
-	 * Begin listening to the value holder.
-	 */
-	@Override
-	protected void engageModel() {
-		this.valueHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.valueChangeListener);
-	}
-	
-	/**
-	 * Stop listening to the value holder.
-	 */
-	@Override
-	protected void disengageModel() {
-		this.valueHolder.removePropertyChangeListener(PropertyValueModel.VALUE, this.valueChangeListener);
-	}
-	
-
-	// ********** property change support **********
-
-	/**
-	 * The value of the wrapped value holder has changed;
-	 * propagate the change notification appropriately.
-	 */
-	protected abstract void valueChanged(PropertyChangeEvent event);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ReadOnlyWritablePropertyValueModelWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ReadOnlyWritablePropertyValueModelWrapper.java
deleted file mode 100644
index 1c3872a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ReadOnlyWritablePropertyValueModelWrapper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * A simple implementation of {@link WritablePropertyValueModel} that actually
- * ... <em>isn't</em> ... writable.  It can however be used in places that require a 
- * {@link WritablePropertyValueModel} and where the developer is sure that no 
- * attempt will be made to write to it.
- */
-public class ReadOnlyWritablePropertyValueModelWrapper<T>
-	extends PropertyValueModelWrapper<T>
-	implements WritablePropertyValueModel<T>
-{
-	public ReadOnlyWritablePropertyValueModelWrapper(PropertyValueModel<? extends T> valueHolder) {
-		super(valueHolder);
-	}
-
-
-	public T getValue() {
-		return this.valueHolder.getValue();
-	}
-
-	public void setValue(T value) {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	protected void valueChanged(PropertyChangeEvent event) {
-		this.firePropertyChanged(event.clone(this));
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.getValue());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SetCollectionValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SetCollectionValueModel.java
deleted file mode 100644
index 2562b5d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SetCollectionValueModel.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyIterator;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * A <code>SetCollectionValueModel</code> wraps another
- * {@link CollectionValueModel} and returns the items in the collection
- * only once.
- */
-public class SetCollectionValueModel<E>
-	extends CollectionValueModelWrapper<E>
-	implements CollectionValueModel<E>
-{
-	private final HashBag<E> bag = new HashBag<E>();
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a collection value model with the specified wrapped
-	 * collection value model and a filter that simply accepts every object.
-	 */
-	public SetCollectionValueModel(CollectionValueModel<? extends E> collectionHolder) {
-		super(collectionHolder);
-	}
-
-	/**
-	 * Construct a collection value model with the specified wrapped
-	 * list value model and a filter that simply accepts every object.
-	 */
-	public SetCollectionValueModel(ListValueModel<E> listHolder) {
-		this(new ListCollectionValueModelAdapter<E>(listHolder));
-	}
-
-
-	// ********** CollectionValueModel implementation **********
-
-	public Iterator<E> iterator() {
-		return new ReadOnlyIterator<E>(this.bag.uniqueIterator());
-	}
-
-	public int size() {
-		return this.bag.uniqueCount();
-	}
-
-
-	// ********** CollectionValueModelWrapper overrides/implementation **********
-
-	@Override
-	protected void engageModel() {
-		super.engageModel();
-		// synch our cache *after* we start listening to the nested collection,
-		// since its value might change when a listener is added
-		CollectionTools.addAll(this.bag, this.collectionHolder);
-	}
-
-	@Override
-	protected void disengageModel() {
-		super.disengageModel();
-		// clear out the cache when we are not listening to the nested collection
-		this.bag.clear();
-	}
-
-	@Override
-	protected void itemsAdded(CollectionAddEvent event) {
-		ArrayList<E> addedItems = new ArrayList<E>(event.getItemsSize());
-		int uniqueCount = this.bag.uniqueCount();
-		for (E item : this.getItems(event)) {
-			this.bag.add(item);
-			if (this.bag.uniqueCount() > uniqueCount) {
-				uniqueCount = this.bag.uniqueCount();
-				addedItems.add(item);
-			}
-		}
-		this.fireItemsAdded(VALUES, addedItems);
-	}
-
-	@Override
-	protected void itemsRemoved(CollectionRemoveEvent event) {
-		ArrayList<E> removedItems = new ArrayList<E>(event.getItemsSize());
-		int uniqueCount = this.bag.uniqueCount();
-		for (E item : this.getItems(event)) {
-			if (this.bag.remove(item)) {
-				if (this.bag.uniqueCount() < uniqueCount) {
-					uniqueCount = this.bag.uniqueCount();
-					removedItems.add(item);
-				}
-			} else {
-				throw new IllegalStateException("missing item: " + item); //$NON-NLS-1$
-			}
-		}
-		this.fireItemsRemoved(VALUES, removedItems);
-	}
-
-	@Override
-	protected void collectionCleared(CollectionClearEvent event) {
-		this.clearCollection(this.bag, VALUES);
-	}
-
-	@Override
-	protected void collectionChanged(CollectionChangeEvent event) {
-		this.bag.clear();
-		CollectionTools.addAll(this.bag, this.collectionHolder);
-		this.fireCollectionChanged(VALUES, new HashSet<E>(this.bag));
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		StringTools.append(sb, this);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SimpleCollectionValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SimpleCollectionValueModel.java
deleted file mode 100644
index 87cab8e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SimpleCollectionValueModel.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Collection;
-import java.util.Iterator;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-import org.eclipse.jpt.utility.internal.model.SingleAspectChangeSupport;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.WritableCollectionValueModel;
-
-/**
- * Implementation of {@link WritableCollectionValueModel} and {@link Collection}
- * that simply holds a collection and notifies listeners of any changes.
- */
-public class SimpleCollectionValueModel<E>
-	extends AbstractModel
-	implements WritableCollectionValueModel<E>, Collection<E>
-{
-	/** The collection. */
-	protected final Collection<E> collection;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a collection value model for the specified collection.
-	 */
-	public SimpleCollectionValueModel(Collection<E> collection) {
-		super();
-		if (collection == null) {
-			throw new NullPointerException();
-		}
-		this.collection = collection;
-	}
-
-	/**
-	 * Construct a collection value model with an empty initial collection.
-	 */
-	public SimpleCollectionValueModel() {
-		this(new HashBag<E>());
-	}
-
-	@Override
-	protected ChangeSupport buildChangeSupport() {
-		return new SingleAspectChangeSupport(this, CollectionChangeListener.class, VALUES);
-	}
-
-
-	// ********** CollectionValueModel implementation **********
-
-	public Iterator<E> iterator() {
-		return new LocalIterator<E>(this.collection.iterator());
-	}
-
-	public int size() {
-		return this.collection.size();
-	}
-
-
-	// ********** WritableCollectionValueModel implementation **********
-
-	/**
-	 * Allow the collection's elements to be replaced.
-	 */
-	public void setValues(Iterable<E> values) {
-		if (values == null) {
-			throw new NullPointerException();
-		}
-		this.collection.clear();
-		CollectionTools.addAll(this.collection, values);
-		this.fireCollectionChanged(VALUES, this.collection);
-	}
-
-
-	// ********** Collection implementation **********
-
-	public boolean isEmpty() {
-		return this.collection.isEmpty();
-	}
-
-	public boolean contains(Object o) {
-		return this.collection.contains(o);
-	}
-
-	public Object[] toArray() {
-		return this.collection.toArray();
-	}
-
-	public <T extends Object> T[] toArray(T[] a) {
-		return this.collection.toArray(a);
-	}
-
-	public boolean add(E o) {
-		return this.addItemToCollection(o, this.collection, VALUES);
-	}
-
-	public boolean remove(Object o) {
-		return this.removeItemFromCollection(o, this.collection, VALUES);
-	}
-
-	public boolean containsAll(Collection<?> c) {
-		return this.collection.containsAll(c);
-	}
-
-	public boolean addAll(Collection<? extends E> c) {
-		return this.addItemsToCollection(c, this.collection, VALUES);
-	}
-
-	public boolean removeAll(Collection<?> c) {
-		return this.removeItemsFromCollection(c, this.collection, VALUES);
-	}
-
-	public boolean retainAll(Collection<?> c) {
-		return this.retainItemsInCollection(c, this.collection, VALUES);
-	}
-
-	public void clear() {
-		this.clearCollection(this.collection, VALUES);
-	}
-
-	@Override
-	public boolean equals(Object o) {
-		if (o == this) {
-			return true;
-		}
-		if ((o instanceof Collection<?>) && (o instanceof CollectionValueModel<?>)) {
-			Collection<E> c1 = CollectionTools.collection(this.collection);
-			@SuppressWarnings("unchecked")
-			Collection<E> c2 = CollectionTools.collection(((Collection<E>) o).iterator());
-			return c1.equals(c2);
-		}
-		return false;
-	}
-
-	@Override
-	public int hashCode() {
-		return CollectionTools.collection(this.collection).hashCode();
-	}
-
-
-	// ********** miscellaneous **********
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.collection);
-	}
-
-
-	// ********** iterator **********
-
-	private class LocalIterator<T> implements Iterator<T> {
-		private final Iterator<T> iterator;
-		private T next;
-
-		LocalIterator(Iterator<T> iterator) {
-			super();
-			this.iterator = iterator;
-		}
-
-		public boolean hasNext() {
-			return this.iterator.hasNext();
-		}
-
-		public T next() {
-			return this.next = this.iterator.next();
-		}
-
-		@SuppressWarnings("synthetic-access")
-		public void remove() {
-			this.iterator.remove();
-			SimpleCollectionValueModel.this.fireItemRemoved(VALUES, this.next);
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SimpleListValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SimpleListValueModel.java
deleted file mode 100644
index 5a91096..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SimpleListValueModel.java
+++ /dev/null
@@ -1,322 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-import org.eclipse.jpt.utility.internal.model.SingleAspectChangeSupport;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.WritableListValueModel;
-
-/**
- * Implementation of {@link ListValueModel} and {@link List} that simply holds a
- * list and notifies listeners of any changes.
- */
-public class SimpleListValueModel<E>
-	extends AbstractModel
-	implements WritableListValueModel<E>, List<E>
-{
-	/** The list. */
-	protected List<E> list;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a list value model for the specified list.
-	 */
-	public SimpleListValueModel(List<E> list) {
-		super();
-		if (list == null) {
-			throw new NullPointerException();
-		}
-		this.list = list;
-	}
-
-	/**
-	 * Construct a list value model with an empty initial list.
-	 */
-	public SimpleListValueModel() {
-		this(new ArrayList<E>());
-	}
-
-	@Override
-	protected ChangeSupport buildChangeSupport() {
-		return new SingleAspectChangeSupport(this, ListChangeListener.class, LIST_VALUES);
-	}
-
-
-	// ********** ListValueModel implementation **********
-
-	public Iterator<E> iterator() {
-		return new LocalIterator<E>(this.list.iterator());
-	}
-
-	public ListIterator<E> listIterator() {
-		return new LocalListIterator<E>(this.list.listIterator());
-	}
-
-	public int size() {
-		return this.list.size();
-	}
-
-	public E get(int index) {
-		return this.list.get(index);
-	}
-
-
-	// ********** WritableListValueModel implementation **********
-
-	/**
-	 * Allow the list's elements to be replaced.
-	 */
-	public void setListValues(Iterable<E> list) {
-		if (list == null) {
-			throw new NullPointerException();
-		}
-		this.list.clear();
-		CollectionTools.addAll(this.list, list);
-		this.fireListChanged(LIST_VALUES, this.list);
-	}
-
-
-	// ********** List implementation **********
-
-	public boolean isEmpty() {
-		return this.list.isEmpty();
-	}
-
-	public boolean contains(Object o) {
-		return this.list.contains(o);
-	}
-
-	public Object[] toArray() {
-		return this.list.toArray();
-	}
-
-	public <T extends Object> T[] toArray(T[] a) {
-		return this.list.toArray(a);
-	}
-
-	public boolean add(E o) {
-		return this.addItemToList(o, this.list, LIST_VALUES);
-	}
-
-	public boolean remove(Object o) {
-		return this.removeItemFromList(o, this.list, LIST_VALUES);
-	}
-
-	public boolean containsAll(Collection<?> c) {
-		return this.list.containsAll(c);
-	}
-
-	public boolean addAll(Collection<? extends E> c) {
-		return this.addItemsToList(c, this.list, LIST_VALUES);
-	}
-
-	public boolean addAll(int index, Collection<? extends E> c) {
-		return this.addItemsToList(index, c, this.list, LIST_VALUES);
-	}
-
-	public boolean removeAll(Collection<?> c) {
-		return this.removeItemsFromList(c, this.list, LIST_VALUES);
-	}
-
-	public boolean retainAll(Collection<?> c) {
-		return this.retainItemsInList(c, this.list, LIST_VALUES);
-	}
-
-	public void clear() {
-		this.clearList(this.list, LIST_VALUES);
-	}
-
-	@Override
-	public boolean equals(Object o) {
-		if (o == this) {
-			return true;
-		}
-		if ((o instanceof List<?>) && (o instanceof ListValueModel<?>)) {
-			List<E> l1 = CollectionTools.list(this.list);
-			@SuppressWarnings("unchecked")
-			List<E> l2 = CollectionTools.list(((List<E>) o).iterator());
-			return l1.equals(l2);
-		}
-		return false;
-	}
-
-	@Override
-	public int hashCode() {
-		return this.list.hashCode();
-	}
-
-	public E set(int index, E element) {
-		return this.setItemInList(index, element, this.list, LIST_VALUES);
-	}
-
-	public void add(int index, E element) {
-		this.addItemToList(index, element, this.list, LIST_VALUES);
-	}
-
-	public E remove(int index) {
-		return this.removeItemFromList(index, this.list, LIST_VALUES);
-	}
-
-	public int indexOf(Object o) {
-		return this.list.indexOf(o);
-	}
-
-	public int lastIndexOf(Object o) {
-		return this.list.lastIndexOf(o);
-	}
-
-	public ListIterator<E> listIterator(int index) {
-		return new LocalListIterator<E>(this.list.listIterator(index));
-	}
-
-	public List<E> subList(int fromIndex, int toIndex) {
-		// TODO hmmm  ~bjv
-		throw new UnsupportedOperationException();
-	}
-
-
-	// ********** additional behavior **********
-
-	/**
-	 * Move a single element.
-	 */
-	public void move(int targetIndex, int sourceIndex) {
-		this.moveItemInList(targetIndex, sourceIndex, this.list, LIST_VALUES);
-	}
-
-	/**
-	 * Move a sub-list of elements.
-	 */
-	public void move(int targetIndex, int sourceIndex, int length) {
-		this.moveItemsInList(targetIndex, sourceIndex, length, this.list, LIST_VALUES);
-	}
-
-	/**
-	 * Remove a range of elements.
-	 */
-	public void remove(int index, int length) {
-		this.removeItemsFromList(index, length, this.list, LIST_VALUES);
-	}
-
-	/**
-	 * Set a range of elements.
-	 */
-	public void set(int index, List<E> elements) {
-		this.setItemsInList(index, elements, this.list, LIST_VALUES);
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.list);
-	}
-
-
-	// ********** iterators **********
-
-	private class LocalIterator<T> implements Iterator<T> {
-		private final Iterator<T> iterator;
-		private int index = -1;
-		private T next;
-
-		LocalIterator(Iterator<T> iterator) {
-			super();
-			this.iterator = iterator;
-		}
-
-		public boolean hasNext() {
-			return this.iterator.hasNext();
-		}
-
-		public T next() {
-			this.next = this.iterator.next();
-			this.index++;
-			return this.next;
-		}
-
-		@SuppressWarnings("synthetic-access")
-		public void remove() {
-			this.iterator.remove();
-			SimpleListValueModel.this.fireItemRemoved(LIST_VALUES, this.index, this.next);
-		}
-
-	}
-
-	private class LocalListIterator<T> implements ListIterator<T> {
-		private final ListIterator<T> iterator;
-		private int last = -1;
-		private int next = 0;
-		private T current;
-
-		LocalListIterator(ListIterator<T> iterator) {
-			super();
-			this.iterator = iterator;
-		}
-
-		public boolean hasNext() {
-			return this.iterator.hasNext();
-		}
-
-		public T next() {
-			this.current = this.iterator.next();
-			this.last = this.next++;
-			return this.current;
-		}
-
-		public int nextIndex() {
-			return this.iterator.nextIndex();
-		}
-
-		public boolean hasPrevious() {
-			return this.iterator.hasPrevious();
-		}
-
-		public T previous() {
-			this.current = this.iterator.previous();
-			this.last = --this.next;
-			return this.current;
-		}
-
-		public int previousIndex() {
-			return this.iterator.previousIndex();
-		}
-
-		@SuppressWarnings("synthetic-access")
-		public void set(T o) {
-			this.iterator.set(o);
-			SimpleListValueModel.this.fireItemReplaced(LIST_VALUES, this.last, o, this.current);
-		}
-
-		@SuppressWarnings("synthetic-access")
-		public void add(T o) {
-			this.iterator.add(o);
-			SimpleListValueModel.this.fireItemAdded(LIST_VALUES, this.next, o);
-		}
-
-		@SuppressWarnings("synthetic-access")
-		public void remove() {
-			this.iterator.remove();
-			SimpleListValueModel.this.fireItemRemoved(LIST_VALUES, this.last, this.current);
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SimplePropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SimplePropertyValueModel.java
deleted file mode 100644
index 47e16d6..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SimplePropertyValueModel.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-import org.eclipse.jpt.utility.internal.model.SingleAspectChangeSupport;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * Implementation of {@link WritablePropertyValueModel} that simply holds on to an
- * object and uses it as the value.
- */
-public class SimplePropertyValueModel<T>
-	extends AbstractModel
-	implements WritablePropertyValueModel<T>
-{
-	/** The value. */
-	protected T value;
-
-
-	/**
-	 * Construct a property value model for the specified value.
-	 */
-	public SimplePropertyValueModel(T value) {
-		super();
-		this.value = value;
-	}
-
-	/**
-	 * Construct a property value model with a starting value of null.
-	 */
-	public SimplePropertyValueModel() {
-		this(null);
-	}
-
-	@Override
-	protected ChangeSupport buildChangeSupport() {
-		return new SingleAspectChangeSupport(this, PropertyChangeListener.class, VALUE);
-	}
-
-
-	public T getValue() {
-		return this.value;
-	}
-
-	public void setValue(T value) {
-		T old = this.value;
-		this.value = value;
-		this.firePropertyChanged(VALUE, old, value);
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.value);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SortedListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SortedListValueModelAdapter.java
deleted file mode 100644
index 36493a7..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SortedListValueModelAdapter.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.Range;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-
-/**
- * An adapter that allows us to make a {@link CollectionValueModel}
- * (or {@link ListValueModel}) behave like a {@link ListValueModel}
- * that keeps its contents sorted and notifies listeners appropriately.
- * <p>
- * The {@link Comparator} can be changed at any time; allowing the same
- * adapter to be used with different sort criteria (e.g. when the user
- * wants to sort a list of files first by name, then by date, then by size).
- * <p>
- * <strong>NB:</strong> Since we only listen to the wrapped collection when we have
- * listeners ourselves and we can only stay in synch with the wrapped
- * collection while we are listening to it, results to various methods
- * (e.g. {@link #size()}, {@link #get(int)}) will be
- * unpredictable whenever
- * we do not have any listeners. This should not be too painful since,
- * most likely, client objects will also be listeners.
- * 
- * @see SortedListValueModelWrapper
- */
-public class SortedListValueModelAdapter<E>
-	extends CollectionListValueModelAdapter<E>
-{
-	/**
-	 * A comparator used for sorting the elements;
-	 * if it is null, we use "natural ordering".
-	 */
-	protected Comparator<E> comparator;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Wrap the specified collection value model and sort its contents
-	 * using the specified comparator.
-	 */
-	public SortedListValueModelAdapter(CollectionValueModel<? extends E> collectionHolder, Comparator<E> comparator) {
-		super(collectionHolder);
-		this.comparator = comparator;
-	}
-
-	/**
-	 * Wrap the specified collection value model and sort its contents
-	 * based on the elements' "natural ordering".
-	 */
-	public SortedListValueModelAdapter(CollectionValueModel<? extends E> collectionHolder) {
-		this(collectionHolder, null);
-	}
-
-
-	// ********** accessors **********
-
-	public void setComparator(Comparator<E> comparator) {
-		this.comparator = comparator;
-		this.sortList();
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Sort the internal list before the superclass
-	 * sends out change notification.
-	 */
-	@Override
-	protected void buildList(int size) {
-		super.buildList(size);
-		Collections.sort(this.list, this.comparator);
-	}
-
-	/**
-	 * the list will need to be sorted after the item is added
-	 */
-	@Override
-	protected void itemsAdded(CollectionAddEvent event) {
-		// first add the items and notify our listeners...
-		super.itemsAdded(event);
-		// ...then sort the list
-		this.sortList();
-	}
-
-	/**
-	 * sort the list and notify our listeners, if necessary;
-	 */
-	protected void sortList() {
-		// save the unsorted state of the sorted list so we can minimize the number of "replaced" items
-		@SuppressWarnings("unchecked")
-		ArrayList<E> unsortedList = (ArrayList<E>) this.list.clone();
-		Collections.sort(this.list, this.comparator);
-		Range diffRange = CollectionTools.identityDiffRange(unsortedList, this.list);
-		if (diffRange.size > 0) {
-			List<E> unsortedItems = unsortedList.subList(diffRange.start, diffRange.end + 1);
-			List<E> sortedItems = this.list.subList(diffRange.start, diffRange.end + 1);
-			this.fireItemsReplaced(LIST_VALUES, diffRange.start, sortedItems, unsortedItems);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SortedListValueModelWrapper.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SortedListValueModelWrapper.java
deleted file mode 100644
index ea39562..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/SortedListValueModelWrapper.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.Range;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyListIterator;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * A wrapper that keeps the contents of a {@link ListValueModel} sorted
- * and notifies listeners appropriately.
- * <p>
- * The {@link Comparator} can be changed at any time; allowing the same
- * adapter to be used with different sort criteria (e.g. when the user
- * wants to sort a list of files first by name, then by date, then by size).
- * <p>
- * <strong>NB:</strong> Since we only listen to the wrapped collection when we have
- * listeners ourselves and we can only stay in synch with the wrapped
- * collection while we are listening to it, results to various methods
- * (e.g. {@link #size()}, {@link #get(int)}) will be unpredictable whenever
- * we do not have any listeners. This should not be too painful since,
- * most likely, client objects will also be listeners.
- * 
- * @see SortedListValueModelAdapter
- */
-public class SortedListValueModelWrapper<E>
-	extends ListValueModelWrapper<E>
-	implements ListValueModel<E>
-{
-	/**
-	 * A comparator used for sorting the elements;
-	 * if it is null, we use "natural ordering".
-	 */
-	protected Comparator<E> comparator;
-
-	/**
-	 * Our internal list, which holds the same elements as
-	 * the wrapped list, but keeps them sorted.
-	 */
-	// we declare this an ArrayList so we can use #clone() and #ensureCapacity(int)
-	protected final ArrayList<E> sortedList;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Wrap the specified list value model and sort its contents
-	 * using the specified comparator.
-	 */
-	public SortedListValueModelWrapper(ListValueModel<? extends E> listHolder, Comparator<E> comparator) {
-		super(listHolder);
-		this.comparator = comparator;
-		this.sortedList = new ArrayList<E>(listHolder.size());
-		// postpone building the sorted list and listening to the wrapped list
-		// until we have listeners ourselves...
-	}
-
-	/**
-	 * Wrap the specified list value model and sort its contents
-	 * based on the elements' "natural ordering".
-	 */
-	public SortedListValueModelWrapper(ListValueModel<? extends E> listHolder) {
-		this(listHolder, null);
-	}
-
-
-	// ********** ListValueModel implementation **********
-
-	public Iterator<E> iterator() {
-		return this.listIterator();
-	}
-
-	public ListIterator<E> listIterator() {
-		return new ReadOnlyListIterator<E>(this.sortedList);
-	}
-
-	public E get(int index) {
-		return this.sortedList.get(index);
-	}
-
-	public int size() {
-		return this.sortedList.size();
-	}
-
-	public Object[] toArray() {
-		return this.sortedList.toArray();
-	}
-
-
-	// ********** accessors **********
-
-	public void setComparator(Comparator<E> comparator) {
-		this.comparator = comparator;
-		this.sortList();
-	}
-
-
-	// ********** behavior **********
-
-    @Override
-	protected void engageModel() {
-		super.engageModel();
-		// synch the sorted list *after* we start listening to the wrapped list holder,
-		// since its value might change when a listener is added
-		this.buildSortedList();
-	}
-
-    @Override
-	protected void disengageModel() {
-		super.disengageModel();
-		// clear out the sorted list when we are not listening to the wrapped list holder
-		this.sortedList.clear();
-	}
-
-	protected void buildSortedList() {
-		// if the new list is empty, do nothing
-		int size = this.listHolder.size();
-		if (size != 0) {
-			this.buildSortedList(size);
-		}
-	}
-
-	protected void buildSortedList(int size) {
-		this.sortedList.ensureCapacity(size);
-		for (E each : this.listHolder) {
-			this.sortedList.add(each);
-		}
-		Collections.sort(this.sortedList, this.comparator);
-	}
-
-
-	// ********** list change support **********
-
-	/**
-	 * Items were added to the wrapped list.
-	 */
-    @Override
-	protected void itemsAdded(ListAddEvent event) {
-		// first add the items and notify our listeners...
-		this.addItemsToList(this.getItems(event), this.sortedList, LIST_VALUES);
-		// ...then sort the list and notify our listeners
-		this.sortList();
-	}
-
-	/**
-	 * Items were removed from the wrapped list.
-	 */
-    @Override
-	protected void itemsRemoved(ListRemoveEvent event) {
-		this.removeItemsFromList(this.getItems(event), this.sortedList, LIST_VALUES);
-		// no sorting needed
-	}
-
-	/**
-	 * Items were replaced in the wrapped list.
-	 */
-    @Override
-	protected void itemsReplaced(ListReplaceEvent event) {
-		// first remove the old items and notify our listeners...
-		this.removeItemsFromList(this.getOldItems(event), this.sortedList, LIST_VALUES);
-		// then add the new items and notify our listeners...
-		this.addItemsToList(this.getNewItems(event), this.sortedList, LIST_VALUES);
-		// ...then sort the list and notify our listeners
-		this.sortList();
-	}
-
-	/**
-	 * Items were moved in the wrapped list.
-	 */
-    @Override
-	protected void itemsMoved(ListMoveEvent event) {
-    	// do nothing - sort order should remain unchanged
-	}
-
-	/**
-	 * The wrapped list was cleared.
-	 */
-    @Override
-	protected void listCleared(ListClearEvent event) {
-    	this.clearList(this.sortedList, LIST_VALUES);
-	}
-
-	/**
-	 * The wrapped list has changed in some dramatic fashion.
-	 * Rebuild our sorted list and notify our listeners.
-	 */
-    @Override
-	protected void listChanged(ListChangeEvent event) {
-		int size = this.listHolder.size();
-		if (size == 0) {
-			if (this.sortedList.isEmpty()) {
-				// no change
-			} else {
-				this.clearList(this.sortedList, LIST_VALUES);
-			}
-		} else {
-			if (this.sortedList.isEmpty()) {
-				this.buildSortedList(size);
-				this.fireItemsAdded(LIST_VALUES, 0, this.sortedList);
-			} else {
-				this.sortedList.clear();
-				this.buildSortedList(size);
-				this.fireListChanged(LIST_VALUES, this.sortedList);
-			}
-		}
-	}
-
-	/**
-	 * sort the sorted list and notify our listeners, if necessary;
-	 */
-	protected void sortList() {
-		// save the unsorted state of the sorted list so we can minimize the number of "replaced" items
-		@SuppressWarnings("unchecked")
-		ArrayList<E> unsortedList = (ArrayList<E>) this.sortedList.clone();
-		Collections.sort(this.sortedList, this.comparator);
-		Range diffRange = CollectionTools.identityDiffRange(unsortedList, this.sortedList);
-		if (diffRange.size > 0) {
-			List<E> unsortedItems = unsortedList.subList(diffRange.start, diffRange.end + 1);
-			List<E> sortedItems = this.sortedList.subList(diffRange.start, diffRange.end + 1);
-			this.fireItemsReplaced(LIST_VALUES, diffRange.start, sortedItems, unsortedItems);
-		}
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.sortedList);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StatePropertyValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StatePropertyValueModelAdapter.java
deleted file mode 100644
index c5edcfd..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StatePropertyValueModelAdapter.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-
-/**
- * This abstract class provides the infrastructure needed to wrap
- * a model, "lazily" listen to it, and convert
- * its state change notifications into property value model change
- * notifications.
- * <p>
- * Subclasses must implement:<ul>
- * <li>{@link #buildValue()}<p>
- *     to return the current property value, as derived from the
- *     current model
- * </ul>
- * Subclasses might want to override the following methods
- * to improve performance (by not recalculating the value, if possible):<ul>
- * <li>{@link #stateChanged(StateChangeEvent event)}
- * </ul>
- */
-public abstract class StatePropertyValueModelAdapter<T>
-	extends AbstractPropertyValueModelAdapter<T>
-{
-	/** The wrapped model. */
-	protected final Model model;
-
-	/** A listener that allows us to synch with changes to the wrapped model. */
-	protected final StateChangeListener stateChangeListener;
-
-
-	// ********** constructor/initialization **********
-
-	/**
-	 * Construct a property value model with the specified wrapped model.
-	 */
-	protected StatePropertyValueModelAdapter(Model model) {
-		super();
-		this.model = model;
-		this.stateChangeListener = this.buildStateChangeListener();
-	}
-
-	protected StateChangeListener buildStateChangeListener() {
-		return new StateChangeListener() {
-			public void stateChanged(StateChangeEvent event) {
-				StatePropertyValueModelAdapter.this.stateChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "state change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Start listening to the model.
-	 */
-	@Override
-	protected void engageModel_() {
-		this.model.addStateChangeListener(this.stateChangeListener);
-	}
-
-	/**
-	 * Stop listening to the model.
-	 */
-	@Override
-	protected void disengageModel_() {
-		this.model.removeStateChangeListener(this.stateChangeListener);
-	}
-
-	
-	// ********** state change support **********
-
-	/**
-	 * The model's state changed;
-	 * propagate the change notification appropriately.
-	 */
-	protected void stateChanged(@SuppressWarnings("unused") StateChangeEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StaticCollectionValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StaticCollectionValueModel.java
deleted file mode 100644
index 7d6d063..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StaticCollectionValueModel.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-
-/**
- * Implementation of {@link CollectionValueModel} that can be used for
- * returning an iterator on a static collection, but still allows listeners to be added.
- * Listeners will <em>never</em> be notified of any changes, because there should be none.
- */
-public class StaticCollectionValueModel<E>
-	extends AbstractModel
-	implements CollectionValueModel<E>
-{
-	/** The elements. */
-	protected final Object[] elements;
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * Construct a static collection value model for the specified array.
-	 */
-	public StaticCollectionValueModel(E... elements) {
-		super();
-		this.elements = elements.clone();
-	}
-
-	/**
-	 * Construct a static collection value model for the specified elements.
-	 */
-	public StaticCollectionValueModel(Iterable<? extends E> elements) {
-		super();
-		this.elements = ArrayTools.array(elements);
-	}
-
-
-	// ********** CollectionValueModel implementation **********
-
-	public int size() {
-		return this.elements.length;
-	}
-
-	@SuppressWarnings("unchecked")
-	public Iterator<E> iterator() {
-		// we can cast here since our constructors require the elements to be
-		// of type E and ArrayIterator is read-only
-		return (Iterator<E>) new ArrayIterator<Object>(this.elements);
-	}
-
-
-	// ********** Object overrides **********
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(Arrays.toString(this.elements));
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StaticListValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StaticListValueModel.java
deleted file mode 100644
index c57c531..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StaticListValueModel.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-import org.eclipse.jpt.utility.internal.iterators.ArrayListIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * Implementation of {@link ListValueModel} that can be used for
- * returning a list iterator on a static list, but still allows listeners to be added.
- * Listeners will <em>never</em> be notified of any changes, because there should be none.
- */
-public class StaticListValueModel<E>
-	extends AbstractModel
-	implements ListValueModel<E>
-{
-	/** The elements. */
-	protected final Object[] elements;
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * Construct a static list value model for the specified elements.
-	 */
-	public StaticListValueModel(E... elements) {
-		super();
-		this.elements = elements.clone();
-	}
-
-	/**
-	 * Construct a static list value model for the specified elements.
-	 */
-	public StaticListValueModel(Iterable<? extends E> elements) {
-		super();
-		this.elements = ArrayTools.array(elements);
-	}
-
-
-	// ********** ListValueModel implementation **********
-
-	@SuppressWarnings("unchecked")
-	public Iterator<E> iterator() {
-		// we can cast here since our constructors require the elements to be
-		// of type E and ArrayIterator is read-only
-		return (Iterator<E>) new ArrayIterator<Object>(this.elements);
-	}
-
-	@SuppressWarnings("unchecked")
-	public ListIterator<E> listIterator() {
-		// we can cast here since our constructors require the elements to be
-		// of type E and ArrayListIterator is read-only
-		return (ListIterator<E>) new ArrayListIterator<Object>(this.elements);
-	}
-
-	public int size() {
-		return this.elements.length;
-	}
-
-	@SuppressWarnings("unchecked")
-	public E get(int index) {
-		// we can cast here since our constructors require the elements to be
-		// of type E
-		return (E) this.elements[index];
-	}
-
-	public Object[] toArray() {
-		return this.elements.clone();
-	}
-
-
-	// ********** Object overrides **********
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(Arrays.toString(this.elements));
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StaticPropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StaticPropertyValueModel.java
deleted file mode 100644
index ce107e8..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StaticPropertyValueModel.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * Implementation of {@link PropertyValueModel} that can be used for
- * returning a static value, but still allows listeners to be added.
- * Listeners will <em>never</em> be notified of any changes, because there should be none.
- */
-public class StaticPropertyValueModel<T>
-	extends AbstractModel
-	implements PropertyValueModel<T>
-{
-	/** The value. */
-	protected final T value;
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * Construct a static property value model for the specified value.
-	 */
-	public StaticPropertyValueModel(T value) {
-		super();
-		this.value = value;
-	}
-
-
-	// ********** PropertyValueModel implementation **********
-
-	public T getValue() {
-		return this.value;
-	}
-
-
-	// ********** Object overrides **********
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.value);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StaticTreeValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StaticTreeValueModel.java
deleted file mode 100644
index 5c39e2f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/StaticTreeValueModel.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Iterator;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.value.TreeValueModel;
-
-/**
- * Implementation of {@link TreeValueModel} that can be used for
- * returning an iterator on a static tree, but still allows listeners to be added.
- * Listeners will <em>never</em> be notified of any changes, because there should be none.
- */
-public class StaticTreeValueModel<E>
-	extends AbstractModel
-	implements TreeValueModel<E>
-{
-	/** The tree's nodes. */
-	protected final Iterable<? extends E> nodes;
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * Construct a read-only tree value model for the specified nodes.
-	 */
-	public StaticTreeValueModel(Iterable<? extends E> nodes) {
-		super();
-		if (nodes == null) {
-			throw new NullPointerException();
-		}
-		this.nodes = nodes;
-	}
-
-	// ********** TreeValueModel implementation **********
-
-	public Iterator<E> nodes() {
-		return new ReadOnlyIterator<E>(this.nodes.iterator());
-	}
-
-
-	// ********** Object overrides **********
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.nodes);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TransformationListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TransformationListValueModelAdapter.java
deleted file mode 100644
index cea3c6b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TransformationListValueModelAdapter.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyListIterator;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * An adapter that allows us to transform a {@link ListValueModel}
- * (or {@link CollectionValueModel}) into a read-only {@link ListValueModel}
- * whose items are tranformations of the items in the wrapped
- * {@link ListValueModel}. It will keep its contents in synch with
- * the contents of the wrapped {@link ListValueModel} and notifies its
- * listeners of any changes.
- * <p>
- * The {@link Transformer} can be changed at any time; allowing the same
- * adapter to be used with different transformations.
- * <p>
- * <strong>NB:</strong> Since we only listen to the wrapped list when we have
- * listeners ourselves and we can only stay in synch with the wrapped
- * list while we are listening to it, results to various methods
- * (e.g. {@link #size()}, {@link #get(int)}) will be unpredictable whenever
- * we do not have any listeners. This should not be too painful since,
- * most likely, clients will also be listeners.
- */
-public class TransformationListValueModelAdapter<E1, E2>
-	extends ListValueModelWrapper<E1>
-	implements ListValueModel<E2>
-{
-
-	/** This transforms the items, unless the subclass overrides {@link #transformItem(Object)}). */
-	protected Transformer<E1, E2> transformer;
-
-	/** The list of transformed items. */
-	protected final List<E2> transformedList;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Constructor - the list holder is required.
-	 */
-	public TransformationListValueModelAdapter(ListValueModel<? extends E1> listHolder, Transformer<E1, E2> transformer) {
-		super(listHolder);
-		this.transformer = transformer;
-		this.transformedList = new ArrayList<E2>();
-	}
-
-	/**
-	 * Constructor - the list holder is required.
-	 */
-	public TransformationListValueModelAdapter(ListValueModel<? extends E1> listHolder) {
-		this(listHolder, Transformer.Null.<E1, E2>instance());
-	}
-
-	/**
-	 * Constructor - the collection holder is required.
-	 */
-	public TransformationListValueModelAdapter(CollectionValueModel<? extends E1> collectionHolder, Transformer<E1, E2> transformer) {
-		this(new CollectionListValueModelAdapter<E1>(collectionHolder), transformer);
-	}
-
-	/**
-	 * Constructor - the collection holder is required.
-	 */
-	public TransformationListValueModelAdapter(CollectionValueModel<? extends E1> collectionHolder) {
-		this(new CollectionListValueModelAdapter<E1>(collectionHolder));
-	}
-
-
-	// ********** ListValueModel implementation **********
-
-	public Iterator<E2> iterator() {
-		return this.listIterator();
-	}
-
-	public ListIterator<E2> listIterator() {
-		return new ReadOnlyListIterator<E2>(this.transformedList);
-	}
-
-	public E2 get(int index) {
-		return this.transformedList.get(index);
-	}
-
-	public int size() {
-		return this.transformedList.size();
-	}
-
-	public Object[] toArray() {
-		return this.transformedList.toArray();
-	}
-
-	// ********** behavior **********
-
-    @Override
-	protected void engageModel() {
-		super.engageModel();
-		// synch the transformed list *after* we start listening to the list holder,
-		// since its value might change when a listener is added
-		this.transformedList.addAll(this.transformItems(this.listHolder));
-	}
-
-    @Override
-	protected void disengageModel() {
-		super.disengageModel();
-		// clear out the list when we are not listening to the collection holder
-		this.transformedList.clear();
-	}
-
-	/**
-	 * Transform the items in the specified list value model.
-	 */
-	protected List<E2> transformItems(ListValueModel<? extends E1> lvm) {
-		return this.transformItems(lvm, lvm.size());
-	}
-
-	/**
-	 * Transform the items associated with the specified event.
-	 */
-	protected List<E2> transformItems(ListAddEvent event) {
-		return this.transformItems(this.getItems(event), event.getItemsSize());
-	}
-
-	/**
-	 * Transform the items associated with the specified event.
-	 */
-	protected List<E2> transformItems(ListRemoveEvent event) {
-		return this.transformItems(this.getItems(event), event.getItemsSize());
-	}
-
-	/**
-	 * Transform the new items associated with the specified event.
-	 */
-	protected List<E2> transformNewItems(ListReplaceEvent event) {
-		return this.transformItems(this.getNewItems(event), event.getItemsSize());
-	}
-
-	/**
-	 * Transform the old items associated with the specified event.
-	 */
-	protected List<E2> transformOldItems(ListReplaceEvent event) {
-		return this.transformItems(this.getOldItems(event), event.getItemsSize());
-	}
-
-	/**
-	 * Transform the specified items.
-	 */
-	protected List<E2> transformItems(Iterable<? extends E1> items, int size) {
-		List<E2> result = new ArrayList<E2>(size);
-		for (E1 item : items) {
-			result.add(this.transformItem(item));
-		}
-		return result;
-	}
-
-	/**
-	 * Transform the specified item.
-	 */
-	protected E2 transformItem(E1 item) {
-		return this.transformer.transform(item);
-	}
-
-	/**
-	 * Change the transformer and rebuild the collection.
-	 */
-	public void setTransformer(Transformer<E1, E2> transformer) {
-		this.transformer = transformer;
-		this.rebuildTransformedList();
-	}
-
-	/**
-	 * Synchronize our cache with the wrapped collection.
-	 */
-	protected void rebuildTransformedList() {
-		this.transformedList.clear();
-		this.transformedList.addAll(this.transformItems(this.listHolder));
-		this.fireListChanged(LIST_VALUES, this.transformedList);
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.transformedList);
-	}
-
-
-	// ********** list change support **********
-
-	/**
-	 * Items were added to the wrapped list holder.
-	 * Transform them, add them to our transformation list,
-	 * and notify our listeners.
-	 */
-    @Override
-	protected void itemsAdded(ListAddEvent event) {
-		this.addItemsToList(event.getIndex(), this.transformItems(event), this.transformedList, LIST_VALUES);
-	}
-
-	/**
-	 * Items were removed from the wrapped list holder.
-	 * Remove the corresponding items from our transformation list
-	 * and notify our listeners.
-	 */
-    @Override
-	protected void itemsRemoved(ListRemoveEvent event) {
-		this.removeItemsFromList(event.getIndex(), event.getItemsSize(), this.transformedList, LIST_VALUES);
-	}
-
-	/**
-	 * Items were replaced in the wrapped list holder.
-	 * Replace the corresponding items in our transformation list
-	 * and notify our listeners.
-	 */
-    @Override
-	protected void itemsReplaced(ListReplaceEvent event) {
-		this.setItemsInList(event.getIndex(), this.transformNewItems(event), this.transformedList, LIST_VALUES);
-	}
-
-	/**
-	 * Items were moved in the wrapped list holder.
-	 * Move the corresponding items in our transformation list
-	 * and notify our listeners.
-	 */
-    @Override
-	protected void itemsMoved(ListMoveEvent event) {
-    	this.moveItemsInList(event.getTargetIndex(), event.getSourceIndex(), event.getLength(), this.transformedList, LIST_VALUES);
-	}
-
-	/**
-	 * The wrapped list holder was cleared.
-	 * Clear our transformation list and notify our listeners.
-	 */
-    @Override
-	protected void listCleared(ListClearEvent event) {
-    	this.clearList(this.transformedList, LIST_VALUES);
-	}
-
-	/**
-	 * The wrapped list holder has changed in some dramatic fashion.
-	 * Rebuild our transformation list and notify our listeners.
-	 */
-    @Override
-	protected void listChanged(ListChangeEvent event) {
-		this.rebuildTransformedList();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TransformationPropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TransformationPropertyValueModel.java
deleted file mode 100644
index c76ef7e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TransformationPropertyValueModel.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * A <code>TransformationPropertyValueModel</code> wraps another
- * {@link PropertyValueModel} and uses a {@link Transformer}
- * to transform the wrapped value before it is returned by {@link #getValue()}.
- * <p>
- * As an alternative to building a {@link Transformer},
- * a subclass of <code>TransformationPropertyValueModel</code> can
- * either override {@link #transform_(Object)} or,
- * if something other than null should be returned when the wrapped value
- * is null, override {@link #transform(Object)}.
- * 
- * @see Transformer
- */
-public class TransformationPropertyValueModel<T1, T2>
-	extends PropertyValueModelWrapper<T1>
-	implements PropertyValueModel<T2>
-{
-	protected final Transformer<T1, T2> transformer;
-
-
-	// ********** constructors/initialization **********
-
-	/**
-	 * Construct a property value model with the specified nested
-	 * property value model and the default transformer.
-	 * Use this constructor if you want to override
-	 * {@link #transform_(Object)} or {@link #transform(Object)}
-	 * method instead of building a {@link Transformer}.
-	 */
-	public TransformationPropertyValueModel(PropertyValueModel<? extends T1> valueHolder) {
-		super(valueHolder);
-		this.transformer = this.buildTransformer();
-	}
-
-	/**
-	 * Construct an property value model with the specified nested
-	 * property value model and transformer.
-	 */
-	public TransformationPropertyValueModel(PropertyValueModel<? extends T1> valueHolder, Transformer<T1, T2> transformer) {
-		super(valueHolder);
-		this.transformer = transformer;
-	}
-
-	protected Transformer<T1, T2> buildTransformer() {
-		return new DefaultTransformer();
-	}
-
-
-	// ********** PropertyValueModel implementation **********
-
-	public T2 getValue() {
-		// transform the object returned by the nested value model before returning it
-		return this.transform(this.valueHolder.getValue());
-	}
-
-
-	// ********** PropertyValueModelWrapper implementation **********
-
-	@Override
-	protected void valueChanged(PropertyChangeEvent event) {
-		// transform the values before propagating the change event
-	    @SuppressWarnings("unchecked")
-	    T1 eventOldValue = (T1) event.getOldValue();
-		Object oldValue = this.transformOld(eventOldValue);
-	    @SuppressWarnings("unchecked")
-	    T1 eventNewValue = (T1) event.getNewValue();
-		Object newValue = this.transformNew(eventNewValue);
-		this.firePropertyChanged(VALUE, oldValue, newValue);
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Transform the specified value and return the result.
-	 * This is called by
-	 * {@link #getValue()},
-	 * {@link #transformOld(T1)}, and
-	 * {@link #transformNew(T1)}.
-	 */
-	protected T2 transform(T1 value) {
-		return this.transformer.transform(value);
-	}
-
-	/**
-	 * Transform the specified, non-null, value and return the result.
-	 */
-	protected T2 transform_(@SuppressWarnings("unused") T1 value) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-	/**
-	 * Transform the specified old value and return the result.
-	 * By default, call {@link #transform(Object)}.
-	 * This is called by {@link #valueChanged(PropertyChangeEvent)}.
-	 */
-	protected T2 transformOld(T1 value) {
-		return this.transform(value);
-	}
-	
-	/**
-	 * Transform the specified new value and return the result.
-	 * By default, call {@link #transform(Object)}.
-	 * This is called by {@link #valueChanged(PropertyChangeEvent)}.
-	 */
-	protected T2 transformNew(T1 value) {
-		return this.transform(value);
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.getValue());
-	}
-
-
-	// ********** default transformer **********
-
-	/**
-	 * The default transformer will return null if the wrapped value is null.
-	 * If the wrapped value is not null, it is transformed by a subclass
-	 * implementation of #transform_(Object).
-	 */
-	protected class DefaultTransformer implements Transformer<T1, T2> {
-		public T2 transform(T1 value) {
-			return (value == null) ? null : TransformationPropertyValueModel.this.transform_(value);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TransformationWritablePropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TransformationWritablePropertyValueModel.java
deleted file mode 100644
index f4bf546..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TransformationWritablePropertyValueModel.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.internal.BidiTransformer;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * A <code>TransformationWritablePropertyValueModel</code> wraps another
- * {@link WritablePropertyValueModel} and uses a {@link BidiTransformer}
- * to:<ul>
- * <li>transform the wrapped value before it is returned by {@link #getValue()}
- * <li>"reverse-transform" the new value that comes in via
- * {@link #setValue(Object)}
- * </ul>
- * As an alternative to building a {@link BidiTransformer},
- * a subclass of <code>TransformationWritablePropertyValueModel</code> can
- * override {@link #transform_(Object)} and {@link #reverseTransform_(Object)};
- * or, if something other than null should be returned when the wrapped value
- * is null or the new value is null, override {@link #transform(Object)}
- * and {@link #reverseTransform(Object)}.
- */
-public class TransformationWritablePropertyValueModel<T1, T2>
-	extends TransformationPropertyValueModel<T1, T2>
-	implements WritablePropertyValueModel<T2>
-{
-
-	// ********** constructors/initialization **********
-
-	/**
-	 * Construct a writable property value model with the specified nested
-	 * writable property value model and the default bidi transformer.
-	 * Use this constructor if you want to override the
-	 * {@link #transform_(Object)} and {@link #reverseTransform_(Object)}
-	 * (or {@link #transform(Object)} and {@link #reverseTransform(Object)})
-	 * methods instead of building a {@link BidiTransformer}.
-	 */
-	public TransformationWritablePropertyValueModel(WritablePropertyValueModel<T1> valueHolder) {
-		super(valueHolder);
-	}
-
-	/**
-	 * Construct a writable property value model with the specified nested
-	 * writable property value model and bidi transformer.
-	 */
-	public TransformationWritablePropertyValueModel(WritablePropertyValueModel<T1> valueHolder, BidiTransformer<T1, T2> transformer) {
-		super(valueHolder, transformer);
-	}
-
-	@Override
-	protected BidiTransformer<T1, T2> buildTransformer() {
-		return new DefaultBidiTransformer();
-	}
-
-
-	// ********** WritablePropertyValueModel implementation **********
-
-	public void setValue(T2 value) {
-		// "reverse-transform" the object before passing it to the the nested value model
-		this.getValueHolder().setValue(this.reverseTransform(value));
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * "Reverse-transform" the specified value and return the result.
-	 * This is called by {@link #setValue(Object)}.
-	 */
-	protected T1 reverseTransform(T2 value) {
-		return this.getTransformer().reverseTransform(value);
-	}
-
-	/**
-	 * "Reverse-transform" the specified, non-<code>null</code>,
-	 * value and return the result.
-	 */
-	protected T1 reverseTransform_(@SuppressWarnings("unused") T2 value) {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * Our constructors accept only a {@link WritablePropertyValueModel<T1>},
-	 * so this cast should be safe.
-	 */
-	@SuppressWarnings("unchecked")
-	protected WritablePropertyValueModel<T1> getValueHolder() {
-		return (WritablePropertyValueModel<T1>) this.valueHolder;
-	}
-
-	/**
-	 * Our constructors accept only a {@link BidiTransformer<T1, T2>},
-	 * so this cast should be safe.
-	 */
-	protected BidiTransformer<T1, T2> getTransformer() {
-		return (BidiTransformer<T1, T2>) this.transformer;
-	}
-
-
-	// ********** default bidi transformer **********
-
-	/**
-	 * The default bidi transformer will return <code>null</code> if the
-	 * wrapped value is <code>null</code>.
-	 * If the wrapped value is not <code>null</code>, it is transformed by a subclass
-	 * implementation of {@link #transform_(Object)}.
-	 * The default bidi transformer will also return <code>null</code>
-	 * if the new value is <code>null</code>.
-	 * If the new value is not <code>null</code>, it is reverse-transformed
-	 * by a subclass implementation of {@link #reverseTransform_(Object)}.
-	 */
-	protected class DefaultBidiTransformer
-		extends DefaultTransformer
-		implements BidiTransformer<T1, T2>
-	{
-		public T1 reverseTransform(T2 value) {
-			return (value == null) ? null : TransformationWritablePropertyValueModel.this.reverseTransform_(value);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TreeAspectAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TreeAspectAdapter.java
deleted file mode 100644
index b95622d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TreeAspectAdapter.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-import java.util.Collection;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.TreeChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * This extension of {@link AspectTreeValueModelAdapter} provides
- * basic tree change support.
- * This converts a set of one or more trees into
- * a single {@link #NODES} tree.
- * <p>
- * The typical subclass will override the following methods (see the descriptions
- * in {@link AspectTreeValueModelAdapter}):<ul>
- * <li>{@link #nodes_()}
- * <li>{@link #nodes()}
- * </ul>
- */
-public abstract class TreeAspectAdapter<S extends Model, E>
-	extends AspectTreeValueModelAdapter<S, E>
-{
-	/**
-	 * The name of the subject's trees that we use for the value.
-	 */
-	protected final String[] treeNames;
-		protected static final String[] EMPTY_TREE_NAMES = new String[0];
-
-	/** A listener that listens to the subject's tree aspects. */
-	protected final TreeChangeListener treeChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a tree aspect adapter for the specified subject
-	 * and tree.
-	 */
-	protected TreeAspectAdapter(String treeName, S subject) {
-		this(new String[] {treeName}, subject);
-	}
-
-	/**
-	 * Construct a tree aspect adapter for the specified subject
-	 * and trees.
-	 */
-	protected TreeAspectAdapter(String[] treeNames, S subject) {
-		this(new StaticPropertyValueModel<S>(subject), treeNames);
-	}
-
-	/**
-	 * Construct a tree aspect adapter for the specified subject holder
-	 * and trees.
-	 */
-	protected TreeAspectAdapter(PropertyValueModel<? extends S> subjectHolder, String... treeNames) {
-		super(subjectHolder);
-		this.treeNames = treeNames;
-		this.treeChangeListener = this.buildTreeChangeListener();
-	}
-
-	/**
-	 * Construct a tree aspect adapter for the specified subject holder
-	 * and trees.
-	 */
-	protected TreeAspectAdapter(PropertyValueModel<? extends S> subjectHolder, Collection<String> treeNames) {
-		this(subjectHolder, treeNames.toArray(new String[treeNames.size()]));
-	}
-
-	/**
-	 * Construct a tree aspect adapter for an "unchanging" tree in
-	 * the specified subject. This is useful for a tree aspect that does not
-	 * change for a particular subject; but the subject will change, resulting in
-	 * a new tree.
-	 */
-	protected TreeAspectAdapter(PropertyValueModel<? extends S> subjectHolder) {
-		this(subjectHolder, EMPTY_TREE_NAMES);
-	}
-
-
-	// ********** initialization **********
-
-	protected TreeChangeListener buildTreeChangeListener() {
-		// transform the subject's tree change events into VALUE tree change events
-		return new TreeChangeListener() {
-			public void nodeAdded(TreeAddEvent event) {
-				TreeAspectAdapter.this.nodeAdded(event);
-			}
-			public void nodeRemoved(TreeRemoveEvent event) {
-				TreeAspectAdapter.this.nodeRemoved(event);
-			}
-			public void treeCleared(TreeClearEvent event) {
-				TreeAspectAdapter.this.treeCleared(event);
-			}
-			public void treeChanged(TreeChangeEvent event) {
-				TreeAspectAdapter.this.treeChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "tree change listener: " + Arrays.asList(TreeAspectAdapter.this.treeNames); //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** AspectAdapter implementation **********
-
-    @Override
-	protected void engageSubject_() {
-    	for (String treeName : this.treeNames) {
-			((Model) this.subject).addTreeChangeListener(treeName, this.treeChangeListener);
-		}
-	}
-
-    @Override
-	protected void disengageSubject_() {
-    	for (String treeName : this.treeNames) {
-			((Model) this.subject).removeTreeChangeListener(treeName, this.treeChangeListener);
-		}
-	}
-
-
-	// ********** behavior **********
-
-	protected void nodeAdded(TreeAddEvent event) {
-		this.fireNodeAdded(event.clone(this, NODES));
-	}
-
-	protected void nodeRemoved(TreeRemoveEvent event) {
-		this.fireNodeRemoved(event.clone(this, NODES));
-	}
-
-	protected void treeCleared(TreeClearEvent event) {
-		this.fireTreeCleared(event.clone(this, NODES));
-	}
-
-	protected void treeChanged(TreeChangeEvent event) {
-		this.fireTreeChanged(event.clone(this, NODES));
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TreePropertyValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TreePropertyValueModelAdapter.java
deleted file mode 100644
index c72feb2..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/TreePropertyValueModelAdapter.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.TreeChangeListener;
-import org.eclipse.jpt.utility.model.value.TreeValueModel;
-
-/**
- * This abstract class provides the infrastructure needed to wrap
- * a tree value model, "lazily" listen to it, and convert
- * its change notifications into property value model change
- * notifications.
- * <p>
- * Subclasses must override:<ul>
- * <li>{@link #buildValue()}<p>
- *     to return the current property value, as derived from the
- *     current collection value
- * </ul>
- * Subclasses might want to override the following methods
- * to improve performance (by not recalculating the value, if possible):<ul>
- * <li>{@link #nodeAdded(TreeChangeEvent event)}
- * <li>{@link #nodeRemoved(TreeChangeEvent event)}
- * <li>{@link #treeCleared(TreeChangeEvent event)}
- * <li>{@link #treeChanged(TreeChangeEvent event)}
- * </ul>
- */
-public abstract class TreePropertyValueModelAdapter<T>
-	extends AbstractPropertyValueModelAdapter<T>
-{
-	/** The wrapped tree value model. */
-	protected final TreeValueModel<?> treeHolder;
-
-	/** A listener that allows us to synch with changes to the wrapped tree holder. */
-	protected final TreeChangeListener treeChangeListener;
-
-
-	// ********** constructor/initialization **********
-
-	/**
-	 * Construct a property value model with the specified wrapped
-	 * tree value model.
-	 */
-	protected TreePropertyValueModelAdapter(TreeValueModel<?> treeHolder) {
-		super();
-		this.treeHolder = treeHolder;
-		this.treeChangeListener = this.buildTreeChangeListener();
-	}
-
-	protected TreeChangeListener buildTreeChangeListener() {
-		return new TreeChangeListener() {
-			public void nodeAdded(TreeAddEvent event) {
-				TreePropertyValueModelAdapter.this.nodeAdded(event);
-			}
-			public void nodeRemoved(TreeRemoveEvent event) {
-				TreePropertyValueModelAdapter.this.nodeRemoved(event);
-			}
-			public void treeCleared(TreeClearEvent event) {
-				TreePropertyValueModelAdapter.this.treeCleared(event);
-			}
-			public void treeChanged(TreeChangeEvent event) {
-				TreePropertyValueModelAdapter.this.treeChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "tree change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Start listening to the tree holder.
-	 */
-	@Override
-	protected void engageModel_() {
-		this.treeHolder.addTreeChangeListener(TreeValueModel.NODES, this.treeChangeListener);
-	}
-
-	/**
-	 * Stop listening to the tree holder.
-	 */
-	@Override
-	protected void disengageModel_() {
-		this.treeHolder.removeTreeChangeListener(TreeValueModel.NODES, this.treeChangeListener);
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.treeHolder);
-	}
-
-	
-	// ********** state change support **********
-
-	/**
-	 * Nodes were added to the wrapped tree holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected void nodeAdded(@SuppressWarnings("unused") TreeAddEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-	/**
-	 * Nodes were removed from the wrapped tree holder;
-	 * propagate the change notification appropriately.
-	 */
-	protected void nodeRemoved(@SuppressWarnings("unused") TreeRemoveEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-	/**
-	 * The wrapped tree holder was cleared;
-	 * propagate the change notification appropriately.
-	 */
-	protected void treeCleared(@SuppressWarnings("unused") TreeClearEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-	/**
-	 * The wrapped tree holder changed;
-	 * propagate the change notification appropriately.
-	 */
-	protected void treeChanged(@SuppressWarnings("unused") TreeChangeEvent event) {
-		// by default, simply recalculate the value and fire an event
-		this.propertyChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueAspectAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueAspectAdapter.java
deleted file mode 100644
index 9effcdb..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueAspectAdapter.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * Abstract class that provides support for wrapping a {@link WritablePropertyValueModel}
- * and listening for changes to <em>aspects</em> of the <em>value</em> contained
- * by the {@link WritablePropertyValueModel}. Changes to the {@link WritablePropertyValueModel}'s
- * value are also monitored.
- * <p>
- * This is useful if you have a value that may change, but whose aspects can also
- * change in a fashion that might be of interest to the client.
- * <p>
- * <strong>NB:</strong> Clients will need to listen for two different change notifications:
- * a property change event will be be fired when the <em>value</em> changes;
- * a state change event will be fired when an <em>aspect</em> of the value changes.
- * <p>
- * Subclasses need to override two methods:<ul>
- * <li>{@link #engageValue_()}<p>
- *     begin listening to the appropriate aspect of the value and call
- *     {@link #valueAspectChanged()} whenever the aspect changes
- *     (this will fire a state change event)
- * <li>{@link #disengageValue_()}<p>
- *     stop listening to the appropriate aspect of the value
- * </ul>
- */
-public abstract class ValueAspectAdapter<V>
-	extends PropertyValueModelWrapper<V>
-	implements WritablePropertyValueModel<V>
-{
-	/** Cache the value so we can disengage. Null until we have a listener*/
-	protected V value;
-
-
-	// ********** constructors/initialization **********
-
-	/**
-	 * Constructor - the value holder is required.
-	 */
-	protected ValueAspectAdapter(WritablePropertyValueModel<V> valueHolder) {
-		super(valueHolder);
-		this.value = null;
-	}
-
-	/**
-	 * Override to allow both property and state change listeners.
-	 */
-	@Override
-	protected ChangeSupport buildChangeSupport() {
-		return new ChangeSupport(this);
-	}
-
-
-	// ********** PropertyValueModel implementation **********
-
-	public V getValue() {
-		return this.value;
-	}
-
-
-	// ********** WritablePropertyValueModel implementation **********
-
-	public void setValue(V value) {
-		this.getValueHolder().setValue(value);
-	}
-
-
-	// ********** PropertyValueModelWrapper implementation **********
-
-	@Override
-	protected void valueChanged(PropertyChangeEvent event) {
-		this.disengageValue();
-		this.engageValue();
-		this.firePropertyChanged(event.clone(this));
-	}
-
-
-	// ********** extend change support **********
-
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-	@Override
-	public synchronized void addStateChangeListener(StateChangeListener listener) {
-		if (this.hasNoListeners()) {
-			this.engageModel();
-		}
-		super.addStateChangeListener(listener);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying model if necessary.
-	 */
-	@Override
-	public synchronized void removeStateChangeListener(StateChangeListener listener) {
-		super.removeStateChangeListener(listener);
-		if (this.hasNoListeners()) {
-			this.disengageModel();
-		}
-	}
-
-
-	// ********** AbstractPropertyValueModel overrides **********
-
-	/**
-	 * Extend to check for state change listeners.
-	 */
-	@Override
-	protected boolean hasListeners() {
-		return this.hasAnyStateChangeListeners() || super.hasListeners();
-	}
-
-
-	// ********** PropertyValueModelWrapper overrides **********
-
-	/**
-	 * Extend to engage an aspect of the value model's value.
-	 */
-	@Override
-	protected void engageModel() {
-		super.engageModel();
-		this.engageValue();
-	}
-
-	/**
-	 * Extend to disengage an aspect of the value model's value.
-	 */
-	@Override
-	protected void disengageModel() {
-		this.disengageValue();
-		super.disengageModel();
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Start listening to an aspect of the current value.
-	 */
-	protected void engageValue() {
-		this.value = this.valueHolder.getValue();
-		if (this.value != null) {
-			this.engageValue_();
-		}
-	}
-
-	/**
-	 * Start listening to some aspect of the current value.
-	 * At this point we can be sure the value is not null.
-	 */
-	protected abstract void engageValue_();
-
-	/**
-	 * Stop listening to an aspect of the current value.
-	 */
-	protected void disengageValue() {
-		if (this.value != null) {
-			this.disengageValue_();
-			this.value = null;
-		}
-	}
-
-	/**
-	 * Stop listening to an aspect of the current value.
-	 * At this point we can be sure the value is not null.
-	 */
-	protected abstract void disengageValue_();
-
-	/**
-	 * Subclasses should call this method whenever the value's aspect changes.
-	 */
-	protected void valueAspectChanged() {
-		this.fireStateChanged();
-	}
-
-	/**
-	 * Our constructor accepts only a {@link WritablePropertyValueModel}{@code<V>}.
-	 */
-	@SuppressWarnings("unchecked")
-	protected WritablePropertyValueModel<V> getValueHolder() {
-		return (WritablePropertyValueModel<V>) this.valueHolder;
-	}
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.getValue());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueChangeAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueChangeAdapter.java
deleted file mode 100644
index 0ad87ef..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueChangeAdapter.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.ChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.SimpleChangeListener;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * Extend {@link ValueAspectAdapter} to listen to all the aspects
- * of the value in the wrapped value model.
- */
-public class ValueChangeAdapter<V extends Model>
-	extends ValueAspectAdapter<V>
-{
-	/** Listener that listens to the value. */
-	protected final ChangeListener valueAspectListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a change adapter for the specified value.
-	 */
-	public ValueChangeAdapter(WritablePropertyValueModel<V> valueHolder) {
-		super(valueHolder);
-		this.valueAspectListener = this.buildValueAspectListener();
-	}
-
-
-	// ********** initialization **********
-
-	protected ChangeListener buildValueAspectListener() {
-		return new SimpleChangeListener() {
-			@Override
-			protected void modelChanged(ChangeEvent event) {
-				ValueChangeAdapter.this.valueAspectChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "value change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-	
-
-	// ********** ValueAspectAdapter implementation **********
-
-	@Override
-	protected void engageValue_() {
-		this.value.addChangeListener(this.valueAspectListener);
-	}
-
-	@Override
-	protected void disengageValue_() {
-		this.value.removeChangeListener(this.valueAspectListener);
-	}
-
-
-	// ********** change events **********
-
-	protected void valueAspectChanged(@SuppressWarnings("unused") ChangeEvent event) {
-		this.valueAspectChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueCollectionAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueCollectionAdapter.java
deleted file mode 100644
index 9512e78..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueCollectionAdapter.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * Extend {@link ValueAspectAdapter} to listen to one or more collection
- * aspects of the value in the wrapped value model.
- */
-public class ValueCollectionAdapter<V extends Model>
-	extends ValueAspectAdapter<V>
-{
-	/** The names of the value's collections that we listen to. */
-	protected final String[] collectionNames;
-
-	/** Listener that listens to the value. */
-	protected final CollectionChangeListener valueCollectionListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the specified value collections.
-	 */
-	public ValueCollectionAdapter(WritablePropertyValueModel<V> valueHolder, String... collectionNames) {
-		super(valueHolder);
-		this.collectionNames = collectionNames;
-		this.valueCollectionListener = this.buildValueCollectionListener();
-	}
-
-
-	// ********** initialization **********
-
-	protected CollectionChangeListener buildValueCollectionListener() {
-		return new CollectionChangeListener() {
-			public void itemsAdded(CollectionAddEvent event) {
-				ValueCollectionAdapter.this.itemsAdded(event);
-			}
-			public void itemsRemoved(CollectionRemoveEvent event) {
-				ValueCollectionAdapter.this.itemsRemoved(event);
-			}
-			public void collectionCleared(CollectionClearEvent event) {
-				ValueCollectionAdapter.this.collectionCleared(event);
-			}
-			public void collectionChanged(CollectionChangeEvent event) {
-				ValueCollectionAdapter.this.collectionChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "value collection listener: " + Arrays.asList(ValueCollectionAdapter.this.collectionNames); //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ValueAspectAdapter implementation **********
-
-	@Override
-	protected void engageValue_() {
-		for (String collectionName : this.collectionNames) {
-			this.value.addCollectionChangeListener(collectionName, this.valueCollectionListener);
-		}
-	}
-
-	@Override
-	protected void disengageValue_() {
-		for (String collectionName : this.collectionNames) {
-			this.value.removeCollectionChangeListener(collectionName, this.valueCollectionListener);
-		}
-	}
-
-
-	// ********** change events **********
-
-	protected void itemsAdded(@SuppressWarnings("unused") CollectionAddEvent event) {
-		this.valueAspectChanged();
-	}
-
-	protected void itemsRemoved(@SuppressWarnings("unused") CollectionRemoveEvent event) {
-		this.valueAspectChanged();
-	}
-
-	protected void collectionCleared(@SuppressWarnings("unused") CollectionClearEvent event) {
-		this.valueAspectChanged();
-	}
-
-	protected void collectionChanged(@SuppressWarnings("unused") CollectionChangeEvent event) {
-		this.valueAspectChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueListAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueListAdapter.java
deleted file mode 100644
index 97bd035..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueListAdapter.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * Extend {@link ValueAspectAdapter} to listen to one or more list
- * aspects of the value in the wrapped value model.
- */
-public class ValueListAdapter<V extends Model>
-	extends ValueAspectAdapter<V>
-{
-	/** The names of the value's lists that we listen to. */
-	protected final String[] listNames;
-
-	/** Listener that listens to the value. */
-	protected final ListChangeListener valueListListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the specified value lists.
-	 */
-	public ValueListAdapter(WritablePropertyValueModel<V> valueHolder, String... listNames) {
-		super(valueHolder);
-		this.listNames = listNames;
-		this.valueListListener = this.buildValueListListener();
-	}
-
-
-	// ********** initialization **********
-
-	protected ListChangeListener buildValueListListener() {
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent event) {
-				ValueListAdapter.this.itemsAdded(event);
-			}
-			public void itemsRemoved(ListRemoveEvent event) {
-				ValueListAdapter.this.itemsRemoved(event);
-			}
-			public void itemsReplaced(ListReplaceEvent event) {
-				ValueListAdapter.this.itemsReplaced(event);
-			}
-			public void itemsMoved(ListMoveEvent event) {
-				ValueListAdapter.this.itemsMoved(event);
-			}
-			public void listCleared(ListClearEvent event) {
-				ValueListAdapter.this.listCleared(event);
-			}
-			public void listChanged(ListChangeEvent event) {
-				ValueListAdapter.this.listChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "value list listener: " + Arrays.asList(ValueListAdapter.this.listNames); //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ValueAspectAdapter implementation **********
-
-	@Override
-	protected void engageValue_() {
-		for (String listName : this.listNames) {
-			this.value.addListChangeListener(listName, this.valueListListener);
-		}
-	}
-
-	@Override
-	protected void disengageValue_() {
-		for (String listName : this.listNames) {
-			this.value.removeListChangeListener(listName, this.valueListListener);
-		}
-	}
-
-
-	// ********** change events **********
-
-	protected void itemsAdded(@SuppressWarnings("unused") ListAddEvent event) {
-		this.valueAspectChanged();
-	}
-
-	protected void itemsRemoved(@SuppressWarnings("unused") ListRemoveEvent event) {
-		this.valueAspectChanged();
-	}
-
-	protected void itemsReplaced(@SuppressWarnings("unused") ListReplaceEvent event) {
-		this.valueAspectChanged();
-	}
-
-	protected void itemsMoved(@SuppressWarnings("unused") ListMoveEvent event) {
-		this.valueAspectChanged();
-	}
-
-	protected void listCleared(@SuppressWarnings("unused") ListClearEvent event) {
-		this.valueAspectChanged();
-	}
-
-	protected void listChanged(@SuppressWarnings("unused") ListChangeEvent event) {
-		this.valueAspectChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValuePropertyAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValuePropertyAdapter.java
deleted file mode 100644
index 8814b68..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValuePropertyAdapter.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * Extend {@link ValueAspectAdapter} to listen to one or more
- * properties of the value in the wrapped value model.
- */
-public class ValuePropertyAdapter<V extends Model>
-	extends ValueAspectAdapter<V>
-{
-	/** The names of the value's properties we listen to. */
-	protected final String[] propertyNames;
-
-	/** Listener that listens to the value. */
-	protected final PropertyChangeListener valuePropertyListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the specified value properties.
-	 */
-	public ValuePropertyAdapter(WritablePropertyValueModel<V> valueHolder, String... propertyNames) {
-		super(valueHolder);
-		this.propertyNames = propertyNames;
-		this.valuePropertyListener = this.buildValuePropertyListener();
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildValuePropertyListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				ValuePropertyAdapter.this.propertyChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "value property listener: " + Arrays.asList(ValuePropertyAdapter.this.propertyNames); //$NON-NLS-1$
-			}
-		};
-	}
-	
-
-	// ********** ValueAspectAdapter implementation **********
-
-	@Override
-	protected void engageValue_() {
-		for (String propertyName : this.propertyNames) {
-			this.value.addPropertyChangeListener(propertyName, this.valuePropertyListener);
-		}
-	}
-
-	@Override
-	protected void disengageValue_() {
-		for (String propertyName : this.propertyNames) {
-			this.value.removePropertyChangeListener(propertyName, this.valuePropertyListener);
-		}
-	}
-
-
-	// ********** change events **********
-
-	protected void propertyChanged(@SuppressWarnings("unused") PropertyChangeEvent event) {
-		this.valueAspectChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueStateAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueStateAdapter.java
deleted file mode 100644
index e7a4ba9..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueStateAdapter.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * Extend {@link ValueAspectAdapter} to listen to the
- * "state" of the value in the wrapped value model.
- */
-public class ValueStateAdapter<V extends Model>
-	extends ValueAspectAdapter<V>
-{
-	/** Listener that listens to value. */
-	protected final StateChangeListener valueStateListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the value state.
-	 */
-	public ValueStateAdapter(WritablePropertyValueModel<V> valueHolder) {
-		super(valueHolder);
-		this.valueStateListener = this.buildValueStateListener();
-	}
-
-
-	// ********** initialization **********
-
-	protected StateChangeListener buildValueStateListener() {
-		return new StateChangeListener() {
-			public void stateChanged(StateChangeEvent event) {
-				ValueStateAdapter.this.stateChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "value state listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ValueAspectAdapter implementation **********
-
-	@Override
-	protected void engageValue_() {
-		this.value.addStateChangeListener(this.valueStateListener);
-	}
-
-	@Override
-	protected void disengageValue_() {
-		this.value.removeStateChangeListener(this.valueStateListener);
-	}
-
-
-	// ********** change events **********
-
-	protected void stateChanged(@SuppressWarnings("unused") StateChangeEvent event) {
-		this.valueAspectChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueTreeAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueTreeAdapter.java
deleted file mode 100644
index 9131163..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/ValueTreeAdapter.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Arrays;
-
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.TreeChangeListener;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * Extend {@link ValueAspectAdapter} to listen to one or more
- * tree aspects of the value in the wrapped value model.
- */
-public class ValueTreeAdapter<V extends Model>
-	extends ValueAspectAdapter<V>
-{
-	/** The names of the value's trees that we listen to. */
-	protected final String[] treeNames;
-
-	/** Listener that listens to the value. */
-	protected final TreeChangeListener valueTreeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the specified value trees.
-	 */
-	public ValueTreeAdapter(WritablePropertyValueModel<V> valueHolder, String... treeNames) {
-		super(valueHolder);
-		this.treeNames = treeNames;
-		this.valueTreeListener = this.buildValueTreeListener();
-	}
-
-
-	// ********** initialization **********
-
-	protected TreeChangeListener buildValueTreeListener() {
-		return new TreeChangeListener() {
-			public void nodeAdded(TreeAddEvent event) {
-				ValueTreeAdapter.this.nodeAdded(event);
-			}
-			public void nodeRemoved(TreeRemoveEvent event) {
-				ValueTreeAdapter.this.nodeRemoved(event);
-			}
-			public void treeCleared(TreeClearEvent event) {
-				ValueTreeAdapter.this.treeCleared(event);
-			}
-			public void treeChanged(TreeChangeEvent event) {
-				ValueTreeAdapter.this.treeChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "value tree listener: " + Arrays.asList(ValueTreeAdapter.this.treeNames); //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ValueAspectAdapter implementation **********
-
-	@Override
-	protected void engageValue_() {
-		for (String treeName : this.treeNames) {
-			this.value.addTreeChangeListener(treeName, this.valueTreeListener);
-		}
-	}
-
-	@Override
-	protected void disengageValue_() {
-		for (String treeName : this.treeNames) {
-			this.value.removeTreeChangeListener(treeName, this.valueTreeListener);
-		}
-	}
-
-
-	// ********** change events **********
-
-	protected void nodeAdded(@SuppressWarnings("unused") TreeAddEvent event) {
-		this.valueAspectChanged();
-	}
-
-	protected void nodeRemoved(@SuppressWarnings("unused") TreeRemoveEvent event) {
-		this.valueAspectChanged();
-	}
-
-	protected void treeCleared(@SuppressWarnings("unused") TreeClearEvent event) {
-		this.valueAspectChanged();
-	}
-
-	protected void treeChanged(@SuppressWarnings("unused") TreeChangeEvent event) {
-		this.valueAspectChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/WritablePropertyCollectionValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/WritablePropertyCollectionValueModelAdapter.java
deleted file mode 100644
index 5014b44..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/WritablePropertyCollectionValueModelAdapter.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.model.value.WritableCollectionValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * An adapter that allows us to make a {@link WritablePropertyValueModel} behave like
- * a single-element {@link WritableCollectionValueModel}, sorta.
- * <p>
- * If the property's value is null, an empty iterator is returned
- * (i.e. you can't have a collection with a <code>null</code> element).
- * Also, only a single-element collection can be written to the adapter.
- */
-public class WritablePropertyCollectionValueModelAdapter<E>
-	extends PropertyCollectionValueModelAdapter<E>
-	implements WritableCollectionValueModel<E>
-{
-
-	// ********** constructor **********
-
-	/**
-	 * Convert the specified writable property value model to a writable
-	 * collection value model.
-	 */
-	public WritablePropertyCollectionValueModelAdapter(WritablePropertyValueModel<E> valueHolder) {
-		super(valueHolder);
-	}
-
-
-	// ********** WritableCollectionValueModel implementation **********
-
-	public void setValues(Iterable<E> values) {
-		Iterator<E> stream = values.iterator();
-		if (stream.hasNext()) {
-			E newValue = stream.next();
-			if (stream.hasNext()) {
-				throw new IllegalArgumentException("non-singleton collection: " + values); //$NON-NLS-1$
-			}
-			this.getValueHolder().setValue(newValue);
-		} else {
-			this.getValueHolder().setValue(null);
-		}
-	}
-
-	// our constructor takes only writable property value models
-	@SuppressWarnings("unchecked")
-	protected WritablePropertyValueModel<E> getValueHolder() {
-		return (WritablePropertyValueModel<E>) this.valueHolder;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/WritablePropertyListValueModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/WritablePropertyListValueModelAdapter.java
deleted file mode 100644
index c7d5339..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/WritablePropertyListValueModelAdapter.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value;
-
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.model.value.WritableListValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * An adapter that allows us to make a {@link WritablePropertyValueModel} behave like
- * a single-element {@link WritableListValueModel}, sorta.
- * <p>
- * If the property's value is null, an empty iterator is returned
- * (i.e. you can't have a list with a <code>null</code> element).
- * Also, only a single-element list can be written to the adapter.
- */
-public class WritablePropertyListValueModelAdapter<E>
-	extends PropertyListValueModelAdapter<E>
-	implements WritableListValueModel<E>
-{
-
-	// ********** constructor **********
-
-	/**
-	 * Convert the specified writable property value model to a writable
-	 * collection value model.
-	 */
-	public WritablePropertyListValueModelAdapter(WritablePropertyValueModel<E> valueHolder) {
-		super(valueHolder);
-	}
-
-
-	// ********** WritableListValueModel implementation **********
-
-	public void setListValues(Iterable<E> listValues) {
-		Iterator<E> stream = listValues.iterator();
-		if (stream.hasNext()) {
-			E newValue = stream.next();
-			if (stream.hasNext()) {
-				throw new IllegalArgumentException("non-singleton list: " + listValues); //$NON-NLS-1$
-			}
-			this.getValueHolder().setValue(newValue);
-		} else {
-			this.getValueHolder().setValue(null);
-		}
-	}
-
-	// our constructor takes only writable property value models
-	@SuppressWarnings("unchecked")
-	protected WritablePropertyValueModel<E> getValueHolder() {
-		return (WritablePropertyValueModel<E>) this.valueHolder;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/prefs/PreferencePropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/prefs/PreferencePropertyValueModel.java
deleted file mode 100644
index 5314bb9..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/prefs/PreferencePropertyValueModel.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.prefs;
-
-import java.util.EventListener;
-import java.util.prefs.PreferenceChangeEvent;
-import java.util.prefs.PreferenceChangeListener;
-import java.util.prefs.Preferences;
-
-import org.eclipse.jpt.utility.internal.BidiStringConverter;
-import org.eclipse.jpt.utility.internal.model.value.AspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.StaticPropertyValueModel;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * This adapter wraps a Preference and converts it into a PropertyValueModel.
- * It listens for the appropriate "preference" changes and converts them into
- * VALUE property changes. It also allows the specification of a default value
- * for the Preference, which, by default, is null (and is probably *not* a very
- * good default).
- * 
- * You can configure whether the preference's value is returned,
- * unchanged, as a string or as some other object (e.g. an Integer) by
- * setting the adapter's converter. Internally, the preference's value
- * is stored as the converted object; and the conversions take place
- * when reading or writing from the preferences node or retrieving the
- * value from an event fired by the preferences node.
- * 
- * This adapter is a bit different from most other adapters because the
- * change events fired off by a Preferences node are asynchronous from
- * the change itself. (AbstractPreferences uses an event dispatch daemon.)
- * As a result, a client can set our value with #setValue(Object) and we
- * will return from that method before we ever receive notification from
- * the Preferences node that *it* has changed. This means we cannot
- * rely on that event to keep our internally cached value in synch.
- */
-public class PreferencePropertyValueModel<P>
-	extends AspectAdapter<Preferences>
-	implements WritablePropertyValueModel<P>
-{
-	/** The key to the preference we use for the value. */
-	protected final String key;
-
-	/**
-	 * Cache the current (object) value of the preference so we
-	 * can pass an "old value" when we fire a property change event.
-	 */
-	protected P value;
-
-	/**
-	 * The default (object) value returned if there is no value
-	 * associated with the preference.
-	 */
-	protected final P defaultValue;
-
-	/**
-	 * This converter is used to convert the preference's
-	 * string value to and from an object.
-	 */
-	protected final BidiStringConverter<P> converter;
-
-	/** A listener that listens to the appropriate preference. */
-	protected final PreferenceChangeListener preferenceChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the specified preference.
-	 * The default value of the preference will be null.
-	 */
-	public PreferencePropertyValueModel(Preferences preferences, String key) {
-		this(preferences, key, null);
-	}
-
-	/**
-	 * Construct an adapter for the specified preference with
-	 * the specified default value for the preference.
-	 */
-	public PreferencePropertyValueModel(Preferences preferences, String key, P defaultValue) {
-		this(preferences, key, defaultValue, BidiStringConverter.Default.<P>instance());
-	}
-
-	/**
-	 * Construct an adapter for the specified preference with
-	 * the specified default value for the preference.
-	 */
-	public PreferencePropertyValueModel(Preferences preferences, String key, P defaultValue, BidiStringConverter<P> converter) {
-		this(new StaticPropertyValueModel<Preferences>(preferences), key, defaultValue, converter);
-	}
-
-	/**
-	 * Construct an adapter for the specified preference with
-	 * the specified default value for the preference.
-	 */
-	public static PreferencePropertyValueModel<Boolean> forBoolean(Preferences preferences, String key, boolean defaultValue) {
-		return new PreferencePropertyValueModel<Boolean>(
-				preferences,
-				key,
-				defaultValue ? Boolean.TRUE : Boolean.FALSE,
-				BidiStringConverter.BooleanConverter.instance()
-			);
-	}
-
-	/**
-	 * Construct an adapter for the specified preference with
-	 * the specified default value for the preference.
-	 */
-	public static PreferencePropertyValueModel<Integer> forInteger(Preferences preferences, String key, int defaultValue) {
-		return new PreferencePropertyValueModel<Integer>(
-				preferences,
-				key,
-				Integer.valueOf(defaultValue),
-				BidiStringConverter.IntegerConverter.instance()
-			);
-	}
-
-	/**
-	 * Construct an adapter for the specified preference.
-	 * The default value of the preference will be null.
-	 */
-	public PreferencePropertyValueModel(PropertyValueModel<? extends Preferences> preferencesHolder, String key) {
-		this(preferencesHolder, key, null);
-	}
-
-	/**
-	 * Construct an adapter for the specified preference with
-	 * the specified default value for the preference.
-	 */
-	public PreferencePropertyValueModel(PropertyValueModel<? extends Preferences> preferencesHolder, String key, P defaultValue) {
-		this(preferencesHolder, key, defaultValue, BidiStringConverter.Default.<P>instance());
-	}
-
-	/**
-	 * Construct an adapter for the specified preference with
-	 * the specified default value for the preference.
-	 */
-	public PreferencePropertyValueModel(PropertyValueModel<? extends Preferences> preferencesHolder, String key, P defaultValue, BidiStringConverter<P> converter) {
-		super(preferencesHolder);
-		this.key = key;
-		this.defaultValue = defaultValue;
-		this.converter = converter;
-		this.preferenceChangeListener = this.buildPreferenceChangeListener();
-		// our value is null when we are not listening to the preference
-		this.value = null;
-	}
-
-
-	// ********** initialization **********
-
-	/**
-	 * A preference has changed, notify the listeners if necessary.
-	 */
-	protected PreferenceChangeListener buildPreferenceChangeListener() {
-		// transform the preference change events into VALUE property change events
-		return new PreferenceChangeListener() {
-			public void preferenceChange(PreferenceChangeEvent event) {
-				PreferencePropertyValueModel.this.preferenceChanged(event.getKey(), event.getNewValue());
-			}
-			@Override
-			public String toString() {
-				return "preference change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ValueModel implementation **********
-
-	/**
-	 * Return the cached (converted) value.
-	 */
-	@Override
-	public synchronized P getValue() {
-		return this.value;
-	}
-
-
-	// ********** PropertyValueModel implementation **********
-
-	/**
-	 * Set the cached value, then set the appropriate preference value.
-	 */
-	public synchronized void setValue(P value) {
-		if (this.hasNoListeners()) {
-			return;		// no changes allowed when we have no listeners
-		}
-
-		Object old = this.value;
-		this.value = value;
-		this.fireAspectChanged(old, value);
-
-		if ((this.subject != null) && this.shouldSetPreference(old, value)) {
-			this.setValue_(value);
-		}
-	}
-
-
-	// ********** AspectAdapter implementation **********
-
-	@Override
-	protected Class<? extends EventListener> getListenerClass() {
-		return PropertyChangeListener.class;
-	}
-
-	@Override
-	protected String getListenerAspectName() {
-		return VALUE;
-	}
-
-	@Override
-	protected boolean hasListeners() {
-		return this.hasAnyPropertyChangeListeners(VALUE);
-	}
-
-	@Override
-	protected void fireAspectChanged(Object oldValue, Object newValue) {
-		this.firePropertyChanged(VALUE, oldValue, newValue);
-	}
-
-	@Override
-	protected synchronized void engageSubject_() {
-		this.subject.addPreferenceChangeListener(this.preferenceChangeListener);
-		this.value = this.buildValue();
-	}
-
-	@Override
-	protected synchronized void disengageSubject_() {
-		try {
-			this.subject.removePreferenceChangeListener(this.preferenceChangeListener);
-		} catch (IllegalStateException ex) {
-			// for some odd reason, we are not allowed to remove a listener from a "dead"
-			// preferences node; so handle the exception that gets thrown here
-			if ( ! ex.getMessage().equals("Node has been removed.")) { //$NON-NLS-1$
-				// if it is not the expected exception, re-throw it
-				throw ex;
-			}
-		}
-		this.value = null;
-	}
-
-
-	// ********** AbstractModel implementation **********
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.key);
-		sb.append(" => "); //$NON-NLS-1$
-		sb.append(this.value);
-	}
-
-
-	// ********** public API **********
-
-	/**
-	 * Return the preference's key.
-	 */
-	public String getKey() {
-		return this.key;
-	}
-
-
-	// ********** internal methods **********
-
-	/**
-	 * Return the preference's value.
-	 * At this point the subject may be null.
-	 */
-	protected P buildValue() {
-		return (this.subject == null) ? null : this.buildValue_();
-	}
-
-	/**
-	 * Return the appropriate preference, converted to the appropriate object.
-	 * At this point we can be sure that the subject is not null.
-	 */
-	protected P buildValue_() {
-		return this.convertToObject(this.subject.get(this.key, this.convertToString(this.defaultValue)));
-	}
-
-	/**
-	 * Set the appropriate preference after converting the value to a string.
-	 * At this point we can be sure that the subject is not null.
-	 */
-	protected void setValue_(P value) {
-		this.subject.put(this.key, this.convertToString(value));
-	}
-
-	/**
-	 * Return whether the specified new value should be passed
-	 * through to the preference. By default, only if the value has changed,
-	 * will it be passed through to the preference. This also has the
-	 * effect of not creating new preferences in the "backing store"
-	 * if the new value is the same as the default value.
-	 * 
-	 * Subclasses can override this method to return true if they
-	 * would like to ALWAYS pass through the new value to the preference.
-	 */
-	protected boolean shouldSetPreference(Object oldValue, Object newValue) {
-		return this.attributeValueHasChanged(oldValue, newValue);
-	}
-
-	/**
-	 * Convert the specified object to a string that can be stored as
-	 * the value of the preference.
-	 */
-	protected String convertToString(P o) {
-		return this.converter.convertToString(o);
-	}
-
-	/**
-	 * Convert the specified preference value string to an
-	 * appropriately-typed object to be returned to the client.
-	 */
-	protected P convertToObject(String s) {
-		return this.converter.convertToObject(s);
-	}
-
-	protected void preferenceChanged(String prefKey, @SuppressWarnings("unused") String newValue) {
-		if (prefKey.equals(this.key)) {
-			this.preferenceChanged();
-		}
-	}
-
-	/**
-	 * The underlying preference changed; either because we changed it
-	 * in #setValue_(Object) or a third-party changed it.
-	 * If this is called because of our own change, the event will be
-	 * swallowed because the old and new values are the same.
-	 */
-	protected synchronized void preferenceChanged() {
-		Object old = this.value;
-		this.value = this.buildValue();
-		this.fireAspectChanged(old, this.value);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/prefs/PreferencesCollectionValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/prefs/PreferencesCollectionValueModel.java
deleted file mode 100644
index 3f08818..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/prefs/PreferencesCollectionValueModel.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.prefs;
-
-import java.util.EventListener;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.prefs.BackingStoreException;
-import java.util.prefs.PreferenceChangeEvent;
-import java.util.prefs.PreferenceChangeListener;
-import java.util.prefs.Preferences;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-import org.eclipse.jpt.utility.internal.model.value.AspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.StaticPropertyValueModel;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-
-/**
- * This adapter wraps a Preferences node and converts its preferences into a
- * CollectionValueModel of PreferencePropertyValueModels. It listens for
- * "preference" changes and converts them into VALUE collection changes.
- */
-public class PreferencesCollectionValueModel<P>
-	extends AspectAdapter<Preferences>
-	implements CollectionValueModel<PreferencePropertyValueModel<P>>
-{
-
-	/** Cache the current preferences, stored in models and keyed by name. */
-	protected final HashMap<String, PreferencePropertyValueModel<P>> preferences;
-
-	/** A listener that listens to the preferences node for added or removed preferences. */
-	protected final PreferenceChangeListener preferenceChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an adapter for the specified preferences node.
-	 */
-	public PreferencesCollectionValueModel(Preferences preferences) {
-		this(new StaticPropertyValueModel<Preferences>(preferences));
-	}
-
-	/**
-	 * Construct an adapter for the specified preferences node.
-	 */
-	public PreferencesCollectionValueModel(PropertyValueModel<? extends Preferences> preferencesHolder) {
-		super(preferencesHolder);
-		this.preferences = new HashMap<String, PreferencePropertyValueModel<P>>();
-		this.preferenceChangeListener = this.buildPreferenceChangeListener();
-	}
-
-
-	// ********** initialization **********
-
-	/**
-	 * A preferences have changed, notify the listeners.
-	 */
-	protected PreferenceChangeListener buildPreferenceChangeListener() {
-		// transform the preference change events into VALUE collection change events
-		return new PreferenceChangeListener() {
-			public void preferenceChange(PreferenceChangeEvent event) {
-				PreferencesCollectionValueModel.this.preferenceChanged(event.getKey(), event.getNewValue());
-			}
-			@Override
-			public String toString() {
-				return "preference change listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** CollectionValueModel implementation **********
-
-	/**
-	 * Return an iterator on the preference models.
-	 */
-	public synchronized Iterator<PreferencePropertyValueModel<P>> iterator() {
-		return this.preferences.values().iterator();
-	}
-
-	public synchronized int size() {
-		return this.preferences.size();
-	}
-
-
-	// ********** AspectAdapter implementation **********
-
-	@Override
-	protected Object getValue() {
-		return this.iterator();
-	}
-
-	@Override
-	protected Class<? extends EventListener> getListenerClass() {
-		return CollectionChangeListener.class;
-	}
-
-	@Override
-	protected String getListenerAspectName() {
-		return VALUES;
-	}
-
-    @Override
-	protected boolean hasListeners() {
-		return this.hasAnyCollectionChangeListeners(VALUES);
-	}
-
-	@Override
-	protected void fireAspectChanged(Object oldValue, Object newValue) {
-    	@SuppressWarnings("unchecked") Iterator<PreferencePropertyValueModel<P>> iterator = (Iterator<PreferencePropertyValueModel<P>>) newValue;
-		this.fireCollectionChanged(VALUES, CollectionTools.collection(iterator));
-	}
-
-    @Override
-	protected void engageSubject_() {
-		this.subject.addPreferenceChangeListener(this.preferenceChangeListener);
-		for (Iterator<PreferencePropertyValueModel<P>> stream = this.preferenceModels(); stream.hasNext(); ) {
-			PreferencePropertyValueModel<P> preferenceModel = stream.next();
-			this.preferences.put(preferenceModel.getKey(), preferenceModel);
-		}
-	}
-
-    @Override
-	protected void disengageSubject_() {
-		try {
-			this.subject.removePreferenceChangeListener(this.preferenceChangeListener);
-		} catch (IllegalStateException ex) {
-			// for some odd reason, we are not allowed to remove a listener from a "dead"
-			// preferences node; so handle the exception that gets thrown here
-			if ( ! ex.getMessage().equals("Node has been removed.")) { //$NON-NLS-1$
-				// if it is not the expected exception, re-throw it
-				throw ex;
-			}
-		}
-		this.preferences.clear();
-	}
-
-
-	// ********** AbstractModel implementation **********
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.subject);
-	}
-
-
-	// ********** internal methods **********
-
-	/**
-	 * Return an iterator on the preference models.
-	 * At this point we can be sure that the subject is not null.
-	 */
-	protected Iterator<PreferencePropertyValueModel<P>> preferenceModels() {
-		String[] keys;
-		try {
-			keys = this.subject.keys();
-		} catch (BackingStoreException ex) {
-			throw new RuntimeException(ex);
-		}
-		return new TransformationIterator<String, PreferencePropertyValueModel<P>>(new ArrayIterator<String>(keys)) {
-			@Override
-			protected PreferencePropertyValueModel<P> transform(String key) {
-				return PreferencesCollectionValueModel.this.buildPreferenceModel(key);
-			}
-		};
-	}
-
-	/**
-	 * Override this method to tweak the model used to wrap the
-	 * specified preference (e.g. to customize the model's converter).
-	 */
-	protected PreferencePropertyValueModel<P> buildPreferenceModel(String key) {
-		return new PreferencePropertyValueModel<P>(this.subjectHolder, key);
-	}
-
-	protected synchronized void preferenceChanged(String key, String newValue) {
-		if (newValue == null) {
-			// a preference was removed
-			PreferencePropertyValueModel<P> preferenceModel = this.preferences.remove(key);
-			this.fireItemRemoved(VALUES, preferenceModel);
-		} else if ( ! this.preferences.containsKey(key)) {
-			// a preference was added
-			PreferencePropertyValueModel<P> preferenceModel = this.buildPreferenceModel(key);
-			this.preferences.put(key, preferenceModel);
-			this.fireItemAdded(VALUES, preferenceModel);
-		} else {
-			// a preference's value changed - do nothing
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/AbstractTreeModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/AbstractTreeModel.java
deleted file mode 100644
index 302a83f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/AbstractTreeModel.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import java.io.Serializable;
-import javax.swing.event.EventListenerList;
-import javax.swing.event.TreeModelEvent;
-import javax.swing.event.TreeModelListener;
-import javax.swing.tree.TreeModel;
-
-/**
- * Abstract class that should have been provided by the JDK
- * (à la javax.swing.AbstractListModel). This class provides:
- * - support for a collection of listeners
- * - a number of convenience methods for firing events for those listeners
- */
-public abstract class AbstractTreeModel
-	implements TreeModel, Serializable
-{
-	/** Our listeners. */
-	protected final EventListenerList listenerList;
-
-
-	// ********** constructors/initialization **********
-
-	protected AbstractTreeModel() {
-		super();
-		this.listenerList = new EventListenerList();
-	}
-
-
-	// ********** partial TreeModel implementation **********
-
-	public void addTreeModelListener(TreeModelListener l) {
-		this.listenerList.add(TreeModelListener.class, l);
-	}
-
-	public void removeTreeModelListener(TreeModelListener l) {
-		this.listenerList.remove(TreeModelListener.class, l);
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * Return the model's current collection of listeners.
-	 * (There seems to be a pattern of making this type of method public;
-	 * although it should probably be protected....)
-	 */
-	public TreeModelListener[] treeModelListeners() {
- 		return this.listenerList.getListeners(TreeModelListener.class);
-	}
-
-	/**
-	 * Return whether this model has no listeners.
-	 */
-	protected boolean hasNoTreeModelListeners() {
-		return this.listenerList.getListenerCount(TreeModelListener.class) == 0;
-	}
-
-	/**
-	 * Return whether this model has any listeners.
-	 */
-	protected boolean hasTreeModelListeners() {
-		return ! this.hasNoTreeModelListeners();
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Notify listeners of a model change.
-	 * A significant property of the nodes changed, but the nodes themselves
-	 * are still the same objects.
-	 * @see javax.swing.event.TreeModelEvent
-	 * @see javax.swing.event.TreeModelListener
-	 */
-	protected void fireTreeNodesChanged(Object[] path, int[] childIndices, Object[] children) {
-		// guaranteed to return a non-null array
-		Object[] listeners = this.listenerList.getListenerList();
-		TreeModelEvent event = null;
-		// process the listeners last to first, notifying
-		// those that are interested in this event
-		for (int i = listeners.length-2; i>=0; i-=2) {
-			if (listeners[i]==TreeModelListener.class) {
-				// lazily create the event
-				if (event == null) {
-					event = new TreeModelEvent(this, path, childIndices, children);
-				}
-				((TreeModelListener) listeners[i+1]).treeNodesChanged(event);
-			}
-		}
-	}
-
-
-	/**
-	 * Notify listeners of a model change.
-	 * A significant property of the node changed, but the node itself is the same object.
-	 * @see javax.swing.event.TreeModelEvent
-	 * @see javax.swing.event.TreeModelListener
-	 */
-	protected void fireTreeNodeChanged(Object[] path, int childIndex, Object child) {
-		this.fireTreeNodesChanged(path, new int[] {childIndex}, new Object[] {child});
-	}
-
-	/**
-	 * Notify listeners of a model change.
-	 * A significant property of the root changed, but the root itself is the same object.
-	 * @see javax.swing.event.TreeModelEvent
-	 * @see javax.swing.event.TreeModelListener
-	 */
-	protected void fireTreeRootChanged(Object root) {
-		this.fireTreeNodesChanged(new Object[] {root}, null, null);
-	}
-
-	/**
-	 * Notify listeners of a model change.
-	 * @see javax.swing.event.TreeModelEvent
-	 * @see javax.swing.event.TreeModelListener
-	 */
-	protected void fireTreeNodesInserted(Object[] path, int[] childIndices, Object[] children) {
-		// guaranteed to return a non-null array
-		Object[] listeners = this.listenerList.getListenerList();
-		TreeModelEvent event = null;
-		// process the listeners last to first, notifying
-		// those that are interested in this event
-		for (int i = listeners.length-2; i>=0; i-=2) {
-			if (listeners[i]==TreeModelListener.class) {
-				// lazily create the event
-				if (event == null) {
-					event = new TreeModelEvent(this, path, childIndices, children);
-				}
-				((TreeModelListener) listeners[i+1]).treeNodesInserted(event);
-			}
-		}
-	}
-
-	/**
-	 * Notify listeners of a model change.
-	 * @see javax.swing.event.TreeModelEvent
-	 * @see javax.swing.event.TreeModelListener
-	 */
-	protected void fireTreeNodeInserted(Object[] path, int childIndex, Object child) {
-		this.fireTreeNodesInserted(path, new int[] {childIndex}, new Object[] {child});
-	}
-
-	/**
-	 * Notify listeners of a model change.
-	 * @see javax.swing.event.TreeModelEvent
-	 * @see javax.swing.event.TreeModelListener
-	 */
-	protected void fireTreeNodesRemoved(Object[] path, int[] childIndices, Object[] children) {
-		// guaranteed to return a non-null array
-		Object[] listeners = this.listenerList.getListenerList();
-		TreeModelEvent event = null;
-		// process the listeners last to first, notifying
-		// those that are interested in this event
-		for (int i = listeners.length-2; i>=0; i-=2) {
-			if (listeners[i]==TreeModelListener.class) {
-				// lazily create the event
-				if (event == null) {
-					event = new TreeModelEvent(this, path, childIndices, children);
-				}
-				((TreeModelListener) listeners[i+1]).treeNodesRemoved(event);
-			}
-		}
-	}
-
-	/**
-	 * Notify listeners of a model change.
-	 * @see javax.swing.event.TreeModelEvent
-	 * @see javax.swing.event.TreeModelListener
-	 */
-	protected void fireTreeNodeRemoved(Object[] path, int childIndex, Object child) {
-		this.fireTreeNodesRemoved(path, new int[] {childIndex}, new Object[] {child});
-	}
-
-	/**
-	 * Notify listeners of a model change.
-	 * @see javax.swing.event.TreeModelEvent
-	 * @see javax.swing.event.TreeModelListener
-	 */
-	protected void fireTreeStructureChanged(Object[] path) {
-		// guaranteed to return a non-null array
-		Object[] listeners = this.listenerList.getListenerList();
-		TreeModelEvent event = null;
-		// process the listeners last to first, notifying
-		// those that are interested in this event
-		for (int i = listeners.length-2; i>=0; i-=2) {
-			if (listeners[i]==TreeModelListener.class) {
-				// lazily create the event
-				if (event == null) {
-					event = new TreeModelEvent(this, path);
-				}
-				((TreeModelListener) listeners[i+1]).treeStructureChanged(event);
-			}
-		}
-	}
-
-	/**
-	 * Notify listeners of a model change.
-	 * @see javax.swing.event.TreeModelEvent
-	 * @see javax.swing.event.TreeModelListener
-	 */
-	protected void fireTreeRootReplaced(Object newRoot) {
-		this.fireTreeStructureChanged(new Object[] {newRoot});
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/CheckBoxModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/CheckBoxModelAdapter.java
deleted file mode 100644
index 126cbfa..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/CheckBoxModelAdapter.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * This javax.swing.ButtonModel can be used to keep a listener
- * (e.g. a JCheckBox) in synch with a PropertyValueModel that
- * holds a boolean.
- * 
- * Maybe not the richest class in our toolbox, but it was the
- * victim of refactoring....  ~bjv
- */
-public class CheckBoxModelAdapter
-	extends ToggleButtonModelAdapter
-{
-
-	// ********** constructors **********
-
-	/**
-	 * Constructor - the boolean holder is required.
-	 */
-	public CheckBoxModelAdapter(WritablePropertyValueModel<Boolean> booleanHolder, boolean defaultValue) {
-		super(booleanHolder, defaultValue);
-	}
-
-	/**
-	 * Constructor - the boolean holder is required.
-	 * The default value will be false.
-	 */
-	public CheckBoxModelAdapter(WritablePropertyValueModel<Boolean> booleanHolder) {
-		super(booleanHolder);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ColumnAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ColumnAdapter.java
deleted file mode 100644
index 482b5d2..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ColumnAdapter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-
-/**
- * This adapter is used by the table model adapter to
- * convert a model object into the models used for each of
- * the cells for the object's corresponding row in the table.
- */
-public interface ColumnAdapter {
-	/**
-	 * Return the number of columns in the table.
-	 * Typically this is static.
-	 */
-	int columnCount();
-
-	/**
-	 * Return the name of the specified column.
-	 */
-	String columnName(int index);
-
-	/**
-	 * Return the class of the specified column.
-	 */
-	Class<?> columnClass(int index);
-
-	/**
-	 * Return whether the specified column is editable.
-	 * Typically this is the same for every row.
-	 */
-	boolean columnIsEditable(int index);
-
-	/**
-	 * Return the cell models for the specified subject
-	 * that corresponds to a single row in the table.
-	 */
-	WritablePropertyValueModel<Object>[] cellModels(Object subject);
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ComboBoxModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ComboBoxModelAdapter.java
deleted file mode 100644
index 8675f43..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ComboBoxModelAdapter.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import javax.swing.ComboBoxModel;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTPropertyChangeListenerWrapper;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * This javax.swing.ComboBoxModel can be used to keep a ListDataListener
- * (e.g. a JComboBox) in synch with a ListValueModel (or a CollectionValueModel).
- * For combo boxes, the model object that holds the current selection is
- * typically a different model object than the one that holds the collection
- * of choices.
- * 
- * For example, a MWReference (the selectionOwner) has an attribute
- * "sourceTable" (the collectionOwner)
- * which holds on to a collection of MWDatabaseFields. When the selection
- * is changed this model will keep the listeners aware of the changes.
- * The inherited list model will keep its listeners aware of changes to the
- * collection model
- * 
- * In addition to the collection holder required by the superclass,
- * an instance of this ComboBoxModel must be supplied with a
- * selection holder, which is a PropertyValueModel that provides access
- * to the selection (typically a PropertyAspectAdapter).
- */
-public class ComboBoxModelAdapter
-	extends ListModelAdapter
-	implements ComboBoxModel
-{
-	protected final WritablePropertyValueModel<Object> selectionHolder;
-	protected final PropertyChangeListener selectionListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Constructor - the list holder and selection holder are required;
-	 */
-	public ComboBoxModelAdapter(ListValueModel<?> listHolder, WritablePropertyValueModel<Object> selectionHolder) {
-		super(listHolder);
-		if (selectionHolder == null) {
-			throw new NullPointerException();
-		}
-		this.selectionHolder = selectionHolder;
-		this.selectionListener = this.buildSelectionListener();
-	}
-
-	/**
-	 * Constructor - the collection holder and selection holder are required;
-	 */
-	public ComboBoxModelAdapter(CollectionValueModel<?> collectionHolder, WritablePropertyValueModel<Object> selectionHolder) {
-		super(collectionHolder);
-		if (selectionHolder == null) {
-			throw new NullPointerException();
-		}
-		this.selectionHolder = selectionHolder;
-		this.selectionListener = this.buildSelectionListener();
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildSelectionListener() {
-		return new AWTPropertyChangeListenerWrapper(this.buildSelectionListener_());
-	}
-
-	protected PropertyChangeListener buildSelectionListener_() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				// notify listeners that the selection has changed
-				ComboBoxModelAdapter.this.fireSelectionChanged();
-			}
-			@Override
-			public String toString() {
-				return "selection listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ComboBoxModel implementation **********
-
-	public Object getSelectedItem() {
-		return this.selectionHolder.getValue();
-	}
-
-	public void setSelectedItem(Object selectedItem) {
-		this.selectionHolder.setValue(selectedItem);
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Extend to engage the selection holder.
-	 */
-	@Override
-	protected void engageModel() {
-		super.engageModel();
-		this.selectionHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.selectionListener);
-	}
-
-	/**
-	 * Extend to disengage the selection holder.
-	 */
-	@Override
-	protected void disengageModel() {
-		this.selectionHolder.removePropertyChangeListener(PropertyValueModel.VALUE, this.selectionListener);
-		super.disengageModel();
-	}
-
-	/**
-	 * Notify the listeners that the selection has changed.
-	 */
-	protected void fireSelectionChanged() {
-		// I guess this will work...
-		this.fireContentsChanged(this, -1, -1);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.selectionHolder + ":" + this.listHolder); //$NON-NLS-1$
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/DateSpinnerModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/DateSpinnerModelAdapter.java
deleted file mode 100644
index 710834c..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/DateSpinnerModelAdapter.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import java.util.Calendar;
-import java.util.Date;
-import javax.swing.SpinnerDateModel;
-import javax.swing.event.ChangeListener;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTPropertyChangeListenerWrapper;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * This javax.swing.SpinnerDateModel can be used to keep a ChangeListener
- * (e.g. a JSpinner) in synch with a PropertyValueModel that holds a date.
- * 
- * This class must be a sub-class of SpinnerDateModel because of some
- * crappy jdk code....  ~bjv
- * @see javax.swing.JSpinner#createEditor(javax.swing.SpinnerModel)
- * 
- * If this class needs to be modified, it would behoove us to review the
- * other, similar classes:
- * @see ListSpinnerModelAdapter
- * @see NumberSpinnerModelAdapter
- */
-public class DateSpinnerModelAdapter
-	extends SpinnerDateModel
-{
-
-	/**
-	 * The default spinner value; used when the underlying model date value is null.
-	 * The default is the current date.
-	 */
-	private final Date defaultValue;
-
-	/** A value model on the underlying date. */
-	private final WritablePropertyValueModel<Object> dateHolder;
-
-	/** A listener that allows us to synchronize with changes made to the underlying date. */
-	private final PropertyChangeListener dateChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Constructor - the date holder is required.
-	 * The default spinner value is the current date.
-	 */
-	public DateSpinnerModelAdapter(WritablePropertyValueModel<Object> dateHolder) {
-		this(dateHolder, new Date());
-	}
-
-	/**
-	 * Constructor - the date holder and default value are required.
-	 */
-	public DateSpinnerModelAdapter(WritablePropertyValueModel<Object> dateHolder, Date defaultValue) {
-		this(dateHolder, null, null, Calendar.DAY_OF_MONTH, defaultValue);
-	}
-
-	/**
-	 * Constructor - the date holder is required.
-	 * The default spinner value is the current date.
-	 */
-	public DateSpinnerModelAdapter(WritablePropertyValueModel<Object> dateHolder, Comparable<?> start, Comparable<?> end, int calendarField) {
-		this(dateHolder, start, end, calendarField, new Date());
-	}
-
-	/**
-	 * Constructor - the date holder is required.
-	 */
-	public DateSpinnerModelAdapter(WritablePropertyValueModel<Object> dateHolder, Comparable<?> start, Comparable<?> end, int calendarField, Date defaultValue) {
-		super(dateHolder.getValue() == null ? defaultValue : (Date) dateHolder.getValue(), start, end, calendarField);
-		this.dateHolder = dateHolder;
-		this.dateChangeListener = this.buildDateChangeListener();
-		// postpone listening to the underlying date
-		// until we have listeners ourselves...
-		this.defaultValue = defaultValue;
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildDateChangeListener() {
-		return new AWTPropertyChangeListenerWrapper(this.buildDateChangeListener_());
-	}
-
-	protected PropertyChangeListener buildDateChangeListener_() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				DateSpinnerModelAdapter.this.synchronize(event.getNewValue());
-			}
-			@Override
-			public String toString() {
-				return "date listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** SpinnerModel implementation **********
-
-	/**
-	 * Extend to check whether this method is being called before we 
-	 * have any listeners.
-	 * This is necessary because some crappy jdk code gets the value
-	 * from the model *before* listening to the model.  ~bjv
-	 * @see javax.swing.JSpinner.DefaultEditor(javax.swing.JSpinner)
-	 */
-    @Override
-	public Object getValue() {
-		if (this.getChangeListeners().length == 0) {
-			// sorry about this "lateral" call to super  ~bjv
-			super.setValue(this.spinnerValueOf(this.dateHolder.getValue()));
-		}
-		return super.getValue();
-	}
-
-	/**
-	 * Extend to update the underlying date directly.
-	 * The resulting event will be ignored: @see #synchronize(Object).
-	 */
-	@Override
-	public void setValue(Object value) {
-		super.setValue(value);
-		this.dateHolder.setValue(value);
-	}
-
-	/**
-	 * Extend to start listening to the underlying date if necessary.
-	 */
-	@Override
-	public void addChangeListener(ChangeListener listener) {
-		if (this.getChangeListeners().length == 0) {
-			this.dateHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.dateChangeListener);
-			this.synchronize(this.dateHolder.getValue());
-		}
-		super.addChangeListener(listener);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying date if appropriate.
-	 */
-    @Override
-	public void removeChangeListener(ChangeListener listener) {
-		super.removeChangeListener(listener);
-		if (this.getChangeListeners().length == 0) {
-			this.dateHolder.removePropertyChangeListener(PropertyValueModel.VALUE, this.dateChangeListener);
-		}
-	}
-
-
-	// ********** queries **********
-
-	protected Date getDefaultValue() {
-		return this.defaultValue;
-	}
-
-	/**
-	 * Convert to a non-null value.
-	 */
-	protected Object spinnerValueOf(Object value) {
-		return (value == null) ? this.getDefaultValue() : value;
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Set the spinner value if it has changed.
-	 */
-	void synchronize(Object value) {
-		Object newValue = this.spinnerValueOf(value);
-		// check to see whether the spinner date has already been synchronized
-		// (via #setValue())
-		if ( ! this.getValue().equals(newValue)) {
-			this.setValue(newValue);
-		}
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.dateHolder);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/DocumentAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/DocumentAdapter.java
deleted file mode 100644
index 70dec34..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/DocumentAdapter.java
+++ /dev/null
@@ -1,375 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-import java.util.EventObject;
-
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.event.EventListenerList;
-import javax.swing.event.UndoableEditEvent;
-import javax.swing.event.UndoableEditListener;
-import javax.swing.text.AttributeSet;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Document;
-import javax.swing.text.Element;
-import javax.swing.text.PlainDocument;
-import javax.swing.text.Position;
-import javax.swing.text.Segment;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTPropertyChangeListenerWrapper;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * This javax.swing.text.Document can be used to keep a DocumentListener
- * (e.g. a JTextField) in synch with a PropertyValueModel that holds a string.
- * 
- * NB: This model should only be used for "small" documents;
- * i.e. documents used by text fields, not text panes.
- * @see #synchronizeDelegate(String)
- */
-public class DocumentAdapter
-	implements Document, Serializable
-{
-
-	/** The delegate document whose behavior we "enhance". */
-	protected final Document delegate;
-
-	/** A listener that allows us to forward any changes made to the delegate document. */
-	protected final CombinedListener delegateListener;
-
-	/** A value model on the underlying model string. */
-	protected final WritablePropertyValueModel<String> stringHolder;
-
-	/** A listener that allows us to synchronize with changes made to the underlying model string. */
-	protected transient PropertyChangeListener stringListener;
-
-    /** The event listener list for the document. */
-    protected final EventListenerList listenerList = new EventListenerList();
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Constructor - the string holder is required.
-	 * Wrap the specified document.
-	 */
-	public DocumentAdapter(WritablePropertyValueModel<String> stringHolder, Document delegate) {
-		super();
-		if (stringHolder == null || delegate == null) {
-			throw new NullPointerException();
-		}
-		this.stringHolder = stringHolder;
-		// postpone listening to the underlying model string
-		// until we have listeners ourselves...
-		this.delegate = delegate;
-		this.stringListener = this.buildStringListener();
-		this.delegateListener = this.buildDelegateListener();
-	}
-
-	/**
-	 * Constructor - the string holder is required.
-	 * Wrap a plain document.
-	 */
-	public DocumentAdapter(WritablePropertyValueModel<String> stringHolder) {
-		this(stringHolder, new PlainDocument());
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildStringListener() {
-		return new AWTPropertyChangeListenerWrapper(this.buildStringListener_());
-	}
-
-	protected PropertyChangeListener buildStringListener_() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				DocumentAdapter.this.stringChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "string listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	protected CombinedListener buildDelegateListener() {
-		return new InternalListener();
-	}
-
-
-	// ********** Document implementation **********
-
-	public int getLength() {
-		return this.delegate.getLength();
-	}
-
-	/**
-	 * Extend to start listening to the underlying models if necessary.
-	 */
-	public void addDocumentListener(DocumentListener listener) {
-		if (this.listenerList.getListenerCount(DocumentListener.class) == 0) {
-			this.delegate.addDocumentListener(this.delegateListener);
-			this.engageStringHolder();
-		}
-		this.listenerList.add(DocumentListener.class, listener);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying models if appropriate.
-	 */
-	public void removeDocumentListener(DocumentListener listener) {
-		this.listenerList.remove(DocumentListener.class, listener);
-		if (this.listenerList.getListenerCount(DocumentListener.class) == 0) {
-			this.disengageStringHolder();
-			this.delegate.removeDocumentListener(this.delegateListener);
-		}
-	}
-
-	/**
-	 * Extend to start listening to the delegate document if necessary.
-	 */
-	public void addUndoableEditListener(UndoableEditListener listener) {
-		if (this.listenerList.getListenerCount(UndoableEditListener.class) == 0) {
-			this.delegate.addUndoableEditListener(this.delegateListener);
-		}
-		this.listenerList.add(UndoableEditListener.class, listener);
-	}
-
-	/**
-	 * Extend to stop listening to the delegate document if appropriate.
-	 */
-	public void removeUndoableEditListener(UndoableEditListener listener) {
-		this.listenerList.remove(UndoableEditListener.class, listener);
-		if (this.listenerList.getListenerCount(UndoableEditListener.class) == 0) {
-			this.delegate.removeUndoableEditListener(this.delegateListener);
-		}
-	}
-
-	public Object getProperty(Object key) {
-		return this.delegate.getProperty(key);
-	}
-
-	public void putProperty(Object key, Object value) {
-		this.delegate.putProperty(key, value);
-	}
-
-	/**
-	 * Extend to update the underlying model string directly.
-	 * The resulting event will be ignored: @see #synchronizeDelegate(String).
-	 */
-	public void remove(int offset, int len) throws BadLocationException {
-		this.delegate.remove(offset, len);
-		this.stringHolder.setValue(this.delegate.getText(0, this.delegate.getLength()));
-	}
-
-	/**
-	 * Extend to update the underlying model string directly.
-	 * The resulting event will be ignored: @see #synchronizeDelegate(String).
-	 */
-	public void insertString(int offset, String insertedString, AttributeSet a) throws BadLocationException {
-		this.delegate.insertString(offset, insertedString, a);
-		this.stringHolder.setValue(this.delegate.getText(0, this.delegate.getLength()));
-	}
-
-	public String getText(int offset, int length) throws BadLocationException {
-		return this.delegate.getText(offset, length);
-	}
-
-	public void getText(int offset, int length, Segment txt) throws BadLocationException {
-		this.delegate.getText(offset, length, txt);
-	}
-
-	public Position getStartPosition() {
-		return this.delegate.getStartPosition();
-	}
-
-	public Position getEndPosition() {
-		return this.delegate.getEndPosition();
-	}
-
-	public Position createPosition(int offs) throws BadLocationException {
-		return this.delegate.createPosition(offs);
-	}
-
-	public Element[] getRootElements() {
-		return this.delegate.getRootElements();
-	}
-
-	public Element getDefaultRootElement() {
-		return this.delegate.getDefaultRootElement();
-	}
-
-	public void render(Runnable r) {
-		this.delegate.render(r);
-	}
-
-
-	// ********** queries **********
-
-	public DocumentListener[] documentListeners() {
-		return this.listenerList.getListeners(DocumentListener.class);
-	}
-
-	public UndoableEditListener[] undoableEditListeners() {
-		return this.listenerList.getListeners(UndoableEditListener.class);
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * A third party has modified the underlying model string.
-	 * Synchronize the delegate document accordingly.
-	 */
-	protected void stringChanged(PropertyChangeEvent event) {
-		this.synchronizeDelegate((String) event.getNewValue());
-	}
-
-	/**
-	 * Replace the document's entire text string with the new string.
-	 */
-	protected void synchronizeDelegate(String s) {
-		try {
-			int len = this.delegate.getLength();
-			// check to see whether the delegate has already been synchronized
-			// (via #insertString() or #remove())
-			if ( ! this.delegate.getText(0, len).equals(s)) {
-				this.delegate.remove(0, len);
-				this.delegate.insertString(0, s, null);
-			}
-		} catch (BadLocationException ex) {
-			throw new IllegalStateException(ex.getMessage());	// this should not happen...
-		}
-	}
-
-	protected void engageStringHolder() {
-		this.stringHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.stringListener);
-		this.synchronizeDelegate(this.stringHolder.getValue());
-	}
-
-	protected void disengageStringHolder() {
-		this.stringHolder.removePropertyChangeListener(PropertyValueModel.VALUE, this.stringListener);
-	}
-
-	protected void delegateChangedUpdate(DocumentEvent event) {
-		// no need to lazy-initialize the event;
-		// we wouldn't get here if we did not have listeners...
-		DocumentEvent ee = new InternalDocumentEvent(this, event);
-		DocumentListener[] listeners = this.documentListeners();
-		for (int i = listeners.length; i-- > 0; ) {
-			listeners[i].changedUpdate(ee);
-		}
-	}
-
-	protected void delegateInsertUpdate(DocumentEvent event) {
-		// no need to lazy-initialize the event;
-		// we wouldn't get here if we did not have listeners...
-		DocumentEvent ee = new InternalDocumentEvent(this, event);
-		DocumentListener[] listeners = this.documentListeners();
-		for (int i = listeners.length; i-- > 0; ) {
-			listeners[i].insertUpdate(ee);
-		}
-	}
-
-	protected void delegateRemoveUpdate(DocumentEvent event) {
-		// no need to lazy-initialize the event;
-		// we wouldn't get here if we did not have listeners...
-		DocumentEvent ee = new InternalDocumentEvent(this, event);
-		DocumentListener[] listeners = this.documentListeners();
-		for (int i = listeners.length; i-- > 0; ) {
-			listeners[i].removeUpdate(ee);
-		}
-	}
-
-	protected void delegateUndoableEditHappened(UndoableEditEvent event) {
-		// no need to lazy-initialize the event;
-		// we wouldn't get here if we did not have listeners...
-		UndoableEditEvent ee = new UndoableEditEvent(this, event.getEdit());
-		UndoableEditListener[] listeners = this.undoableEditListeners();
-		for (int i = listeners.length; i-- > 0; ) {
-			listeners[i].undoableEditHappened(ee);
-		}
-	}
-
-	// ********** standard methods **********
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.stringHolder);
-	}
-
-	private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException {
-		// read in any hidden stuff
-		s.defaultReadObject();
-		this.stringListener = this.buildStringListener();
-	}
-
-
-// ********** inner class **********
-
-	protected interface CombinedListener extends DocumentListener, UndoableEditListener, Serializable {
-		// just consolidate the two interfaces
-	}
-
-	protected class InternalListener implements CombinedListener {
-		private static final long serialVersionUID = 1L;
-		public void changedUpdate(DocumentEvent event) {
-			DocumentAdapter.this.delegateChangedUpdate(event);
-		}
-		public void insertUpdate(DocumentEvent event) {
-			DocumentAdapter.this.delegateInsertUpdate(event);
-		}
-		public void removeUpdate(DocumentEvent event) {
-			DocumentAdapter.this.delegateRemoveUpdate(event);
-		}
-		public void undoableEditHappened(UndoableEditEvent event) {
-			DocumentAdapter.this.delegateUndoableEditHappened(event);
-		}
-	}
-	
-	protected static class InternalDocumentEvent
-		extends EventObject
-		implements DocumentEvent
-	{
-		protected DocumentEvent delegate;
-	
-		protected InternalDocumentEvent(Document document, DocumentEvent delegate) {
-			super(document);
-			this.delegate = delegate;
-		}
-		public ElementChange getChange(Element elem) {
-			return this.delegate.getChange(elem);
-		}
-		public Document getDocument() {
-			return (Document) this.source;
-		}
-		public int getLength() {
-			return this.delegate.getLength();
-		}
-		public int getOffset() {
-			return this.delegate.getOffset();
-		}
-		public EventType getType() {
-			return this.delegate.getType();
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ListModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ListModelAdapter.java
deleted file mode 100644
index 5ca0795..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ListModelAdapter.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import javax.swing.AbstractListModel;
-import javax.swing.event.ListDataListener;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTListChangeListenerWrapper;
-import org.eclipse.jpt.utility.internal.model.value.CollectionListValueModelAdapter;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * This javax.swing.ListModel can be used to keep a ListDataListener
- * (e.g. a JList) in synch with a ListValueModel (or a CollectionValueModel).
- * 
- * An instance of this ListModel *must* be supplied with a value model,
- * which is a ListValueModel on the bound list or a CollectionValueModel
- * on the bound collection. This is required - the list (or collection)
- * itself can be null, but the value model that holds it cannot.
- */
-public class ListModelAdapter
-	extends AbstractListModel
-{
-	/** A value model on the underlying model list. */
-	protected ListValueModel<?> listHolder;
-
-	/**
-	 * Cache the size of the list for "dramatic" changes.
-	 * @see #listChanged(ListChangeEvent)
-	 */
-	protected int listSize;
-
-	/** A listener that allows us to forward changes made to the underlying model list. */
-	protected final ListChangeListener listChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Default constructor - initialize stuff.
-	 */
-	private ListModelAdapter() {
-		super();
-		this.listSize = 0;
-		this.listChangeListener = this.buildListChangeListener();
-	}
-
-	/**
-	 * Constructor - the list holder is required.
-	 */
-	public ListModelAdapter(ListValueModel<?> listHolder) {
-		this();
-		this.setModel(listHolder);
-	}
-
-	/**
-	 * Constructor - the collection holder is required.
-	 */
-	public ListModelAdapter(CollectionValueModel<?> collectionHolder) {
-		this();
-		this.setModel(collectionHolder);
-	}
-
-
-	// ********** initialization **********
-
-	protected ListChangeListener buildListChangeListener() {
-		return new AWTListChangeListenerWrapper(this.buildListChangeListener_());
-	}
-
-	protected ListChangeListener buildListChangeListener_() {
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent event) {
-				ListModelAdapter.this.itemsAdded(event);
-			}
-			public void itemsRemoved(ListRemoveEvent event) {
-				ListModelAdapter.this.itemsRemoved(event);
-			}
-			public void itemsReplaced(ListReplaceEvent event) {
-				ListModelAdapter.this.itemsReplaced(event);
-			}
-			public void itemsMoved(ListMoveEvent event) {
-				ListModelAdapter.this.itemsMoved(event);
-			}
-			public void listCleared(ListClearEvent event) {
-				ListModelAdapter.this.listCleared();
-			}
-			public void listChanged(ListChangeEvent event) {
-				ListModelAdapter.this.listChanged();
-			}
-			@Override
-			public String toString() {
-				return "list listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ListModel implementation **********
-
-	public int getSize() {
-		return this.listHolder.size();
-	}
-
-	public Object getElementAt(int index) {
-		return this.listHolder.get(index);
-	}
-
-	/**
-	 * Extend to start listening to the underlying model list if necessary.
-	 */
-    @Override
-	public void addListDataListener(ListDataListener l) {
-		if (this.hasNoListDataListeners()) {
-			this.engageModel();
-			this.listSize = this.listHolder.size();
-		}
-		super.addListDataListener(l);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying model list if appropriate.
-	 */
-    @Override
-	public void removeListDataListener(ListDataListener l) {
-		super.removeListDataListener(l);
-		if (this.hasNoListDataListeners()) {
-			this.disengageModel();
-			this.listSize = 0;
-		}
-	}
-
-
-	// ********** public API **********
-
-	/**
-	 * Return the underlying list model.
-	 */
-	public ListValueModel<?> model() {
-		return this.listHolder;
-	}
-	
-	/**
-	 * Set the underlying list model.
-	 */
-	public void setModel(ListValueModel<?> listHolder) {
-		if (listHolder == null) {
-			throw new NullPointerException();
-		}
-		boolean hasListeners = this.hasListDataListeners();
-		if (hasListeners) {
-			this.disengageModel();
-		}
-		this.listHolder = listHolder;
-		if (hasListeners) {
-			this.engageModel();
-			this.listChanged();
-		}
-	}
-
-	/**
-	 * Set the underlying collection model.
-	 */
-	@SuppressWarnings({ "unchecked", "rawtypes" })
-	public void setModel(CollectionValueModel<?> collectionHolder) {
-		this.setModel(new CollectionListValueModelAdapter(collectionHolder));
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * Return whether this model has no listeners.
-	 */
-	protected boolean hasNoListDataListeners() {
-		return this.getListDataListeners().length == 0;
-	}
-
-	/**
-	 * Return whether this model has any listeners.
-	 */
-	protected boolean hasListDataListeners() {
-		return ! this.hasNoListDataListeners();
-	}
-
-
-	// ********** behavior **********
-
-	protected void engageModel() {
-		this.listHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.listChangeListener);
-	}
-
-	protected void disengageModel() {
-		this.listHolder.removeListChangeListener(ListValueModel.LIST_VALUES, this.listChangeListener);
-	}
-
-
-
-	// ********** list change support **********
-
-	/**
-	 * Items were added to the underlying model list.
-	 * Notify listeners of the changes.
-	 */
-	protected void itemsAdded(ListAddEvent event) {
-		int start = event.getIndex();
-		int end = start + event.getItemsSize() - 1;
-		this.fireIntervalAdded(this, start, end);
-		this.listSize += event.getItemsSize();
-	}
-
-	/**
-	 * Items were removed from the underlying model list.
-	 * Notify listeners of the changes.
-	 */
-	protected void itemsRemoved(ListRemoveEvent event) {
-		int start = event.getIndex();
-		int end = start + event.getItemsSize() - 1;
-		this.fireIntervalRemoved(this, start, end);
-		this.listSize -= event.getItemsSize();
-	}
-
-	/**
-	 * Items were replaced in the underlying model list.
-	 * Notify listeners of the changes.
-	 */
-	protected void itemsReplaced(ListReplaceEvent event) {
-		int start = event.getIndex();
-		int end = start + event.getItemsSize() - 1;
-		this.fireContentsChanged(this, start, end);
-	}
-
-	/**
-	 * Items were moved in the underlying model list.
-	 * Notify listeners of the changes.
-	 */
-	protected void itemsMoved(ListMoveEvent event) {
-		int start = Math.min(event.getSourceIndex(), event.getTargetIndex());
-		int end = Math.max(event.getSourceIndex(), event.getTargetIndex()) + event.getLength() - 1;
-		this.fireContentsChanged(this, start, end);
-	}
-
-	/**
-	 * The underlying model list was cleared.
-	 * Notify listeners of the changes.
-	 */
-	protected void listCleared() {
-		if (this.listSize != 0) {
-			this.fireIntervalRemoved(this, 0, this.listSize - 1);
-			this.listSize = 0;
-		}
-	}
-
-	/**
-	 * The underlying model list has changed "dramatically".
-	 * Notify listeners of the changes.
-	 */
-	protected void listChanged() {
-		if (this.listSize != 0) {
-			this.fireIntervalRemoved(this, 0, this.listSize - 1);
-		}
-		this.listSize = this.listHolder.size();
-		if (this.listSize != 0) {
-			this.fireIntervalAdded(this, 0, this.listSize - 1);
-		}
-	}
-
-
-	// ********** Object overrides **********
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.listHolder);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ListSpinnerModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ListSpinnerModelAdapter.java
deleted file mode 100644
index 3a90616..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ListSpinnerModelAdapter.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import java.util.Arrays;
-import java.util.List;
-import javax.swing.SpinnerListModel;
-import javax.swing.event.ChangeListener;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTPropertyChangeListenerWrapper;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * This javax.swing.SpinnerListModel can be used to keep a ChangeListener
- * (e.g. a JSpinner) in synch with a PropertyValueModel that holds a value
- * in the list.
- * 
- * This class must be a sub-class of SpinnerListModel because of some
- * crappy jdk code....  ~bjv
- * @see javax.swing.JSpinner#createEditor(javax.swing.SpinnerModel)
- * 
- * NB: This model should only be used for values that have a reasonably
- * inexpensive #equals() implementation.
- * @see #synchronize(Object)
- * 
- * If this class needs to be modified, it would behoove us to review the
- * other, similar classes:
- * @see DateSpinnerModelAdapter
- * @see NumberSpinnerModelAdapter
- */
-public class ListSpinnerModelAdapter
-	extends SpinnerListModel
-{
-
-	/**
-	 * The default spinner value; used when the underlying model value is null.
-	 * The default is the first item on the list.
-	 */
-	private final Object defaultValue;
-
-	/** A value model on the underlying value. */
-	private final WritablePropertyValueModel<Object> valueHolder;
-
-	/** A listener that allows us to synchronize with changes made to the underlying value. */
-	private final PropertyChangeListener valueChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Constructor - the value holder is required.
-	 * Use the model value itself as the default spinner value.
-	 */
-	public ListSpinnerModelAdapter(WritablePropertyValueModel<Object> valueHolder) {
-		this(valueHolder, valueHolder.getValue());
-	}
-
-	/**
-	 * Constructor - the value holder is required.
-	 */
-	public ListSpinnerModelAdapter(WritablePropertyValueModel<Object> valueHolder, Object defaultValue) {
-		this(valueHolder, new Object[] {defaultValue}, defaultValue);
-	}
-
-	/**
-	 * Constructor - the value holder is required.
-	 * Use the first item in the list of values as the default spinner value.
-	 */
-	public ListSpinnerModelAdapter(WritablePropertyValueModel<Object> valueHolder, Object[] values) {
-		this(valueHolder, values, values[0]);
-	}
-
-	/**
-	 * Constructor - the value holder is required.
-	 */
-	public ListSpinnerModelAdapter(WritablePropertyValueModel<Object> valueHolder, Object[] values, Object defaultValue) {
-		this(valueHolder, Arrays.asList(values), defaultValue);
-	}
-
-	/**
-	 * Constructor - the value holder is required.
-	 * Use the first item in the list of values as the default spinner value.
-	 */
-	public ListSpinnerModelAdapter(WritablePropertyValueModel<Object> valueHolder, List<Object> values) {
-		this(valueHolder, values, values.get(0));
-	}
-
-	/**
-	 * Constructor - the value holder is required.
-	 */
-	public ListSpinnerModelAdapter(WritablePropertyValueModel<Object> valueHolder, List<Object> values, Object defaultValue) {
-		super(values);
-		this.valueHolder = valueHolder;
-		this.valueChangeListener = this.buildValueChangeListener();
-		// postpone listening to the underlying value
-		// until we have listeners ourselves...
-		this.defaultValue = defaultValue;
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildValueChangeListener() {
-		return new AWTPropertyChangeListenerWrapper(this.buildValueChangeListener_());
-	}
-
-	protected PropertyChangeListener buildValueChangeListener_() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				ListSpinnerModelAdapter.this.synchronize(event.getNewValue());
-			}
-			@Override
-			public String toString() {
-				return "value listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** SpinnerModel implementation **********
-
-	/**
-	 * Extend to check whether this method is being called before we 
-	 * have any listeners.
-	 * This is necessary because some crappy jdk code gets the value
-	 * from the model *before* listening to the model.  ~bjv
-	 * @see javax.swing.JSpinner.DefaultEditor(javax.swing.JSpinner)
-	 */
-    @Override
-	public Object getValue() {
-		if (this.getChangeListeners().length == 0) {
-			// sorry about this "lateral" call to super  ~bjv
-			super.setValue(this.spinnerValueOf(this.valueHolder.getValue()));
-		}
-		return super.getValue();
-	}
-
-	/**
-	 * Extend to update the underlying value directly.
-	 * The resulting event will be ignored: @see #synchronize(Object).
-	 */
-    @Override
-	public void setValue(Object value) {
-		super.setValue(value);
-		this.valueHolder.setValue(value);
-	}
-
-	/**
-	 * Extend to start listening to the underlying value if necessary.
-	 */
-    @Override
-	public void addChangeListener(ChangeListener listener) {
-		if (this.getChangeListeners().length == 0) {
-			this.valueHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.valueChangeListener);
-			this.synchronize(this.valueHolder.getValue());
-		}
-		super.addChangeListener(listener);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying value if appropriate.
-	 */
-    @Override
-	public void removeChangeListener(ChangeListener listener) {
-		super.removeChangeListener(listener);
-		if (this.getChangeListeners().length == 0) {
-			this.valueHolder.removePropertyChangeListener(PropertyValueModel.VALUE, this.valueChangeListener);
-		}
-	}
-
-
-	// ********** queries **********
-
-	protected Object getDefaultValue() {
-		return this.defaultValue;
-	}
-
-	/**
-	 * Convert to a non-null value.
-	 */
-	protected Object spinnerValueOf(Object value) {
-		return (value == null) ? this.getDefaultValue() : value;
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Set the spinner value if it has changed.
-	 */
-	void synchronize(Object value) {
-		Object newValue = this.spinnerValueOf(value);
-		// check to see whether the spinner value has already been synchronized
-		// (via #setValue())
-		if ( ! this.getValue().equals(newValue)) {
-			this.setValue(newValue);
-		}
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.valueHolder);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/NumberSpinnerModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/NumberSpinnerModelAdapter.java
deleted file mode 100644
index aead92f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/NumberSpinnerModelAdapter.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import javax.swing.SpinnerNumberModel;
-import javax.swing.event.ChangeListener;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTPropertyChangeListenerWrapper;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * This javax.swing.SpinnerNumberModel can be used to keep a ChangeListener
- * (e.g. a JSpinner) in synch with a PropertyValueModel that holds a number.
- * 
- * This class must be a sub-class of SpinnerNumberModel because of some
- * crappy jdk code....  ~bjv
- * @see javax.swing.JSpinner#createEditor(javax.swing.SpinnerModel)
- * 
- * If this class needs to be modified, it would behoove us to review the
- * other, similar classes:
- * @see DateSpinnerModelAdapter
- * @see ListSpinnerModelAdapter
- */
-public class NumberSpinnerModelAdapter
-	extends SpinnerNumberModel
-{
-
-	/**
-	 * The default spinner value; used when the
-	 * underlying model number value is null.
-	 */
-	private final Number defaultValue;
-
-	/** A value model on the underlying number. */
-	private final WritablePropertyValueModel<Number> numberHolder;
-
-	/**
-	 * A listener that allows us to synchronize with
-	 * changes made to the underlying number.
-	 */
-	private final PropertyChangeListener numberChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Constructor - the number holder is required.
-	 * The default spinner value is zero.
-	 * The step size is one.
-	 */
-	public NumberSpinnerModelAdapter(WritablePropertyValueModel<Number> numberHolder) {
-		this(numberHolder, 0);
-	}
-
-	/**
-	 * Constructor - the number holder is required.
-	 * The step size is one.
-	 */
-	public NumberSpinnerModelAdapter(WritablePropertyValueModel<Number> numberHolder, int defaultValue) {
-		this(numberHolder, null, null, Integer.valueOf(1), Integer.valueOf(defaultValue));
-	}
-
-	/**
-	 * Constructor - the number holder is required.
-	 * Use the minimum value as the default spinner value.
-	 */
-	public NumberSpinnerModelAdapter(WritablePropertyValueModel<Number> numberHolder, int minimum, int maximum, int stepSize) {
-		this(numberHolder, minimum, maximum, stepSize, minimum);
-	}
-
-	/**
-	 * Constructor - the number holder is required.
-	 */
-	public NumberSpinnerModelAdapter(WritablePropertyValueModel<Number> numberHolder, int minimum, int maximum, int stepSize, int defaultValue) {
-		this(numberHolder, Integer.valueOf(minimum), Integer.valueOf(maximum), Integer.valueOf(stepSize), Integer.valueOf(defaultValue));
-	}
-
-	/**
-	 * Constructor - the number holder is required.
-	 * Use the minimum value as the default spinner value.
-	 */
-	public NumberSpinnerModelAdapter(WritablePropertyValueModel<Number> numberHolder, double minimum, double maximum, double stepSize) {
-		this(numberHolder, minimum, maximum, stepSize, minimum);
-	}
-
-	/**
-	 * Constructor - the number holder is required.
-	 */
-	public NumberSpinnerModelAdapter(WritablePropertyValueModel<Number> numberHolder, double minimum, double maximum, double stepSize, double defaultValue) {
-		this(numberHolder, Double.valueOf(minimum), Double.valueOf(maximum), Double.valueOf(stepSize), Double.valueOf(defaultValue));
-	}
-
-	/**
-	 * Constructor - the number holder is required.
-	 */
-	public NumberSpinnerModelAdapter(WritablePropertyValueModel<Number> numberHolder, Comparable<?> minimum, Comparable<?> maximum, Number stepSize, Number defaultValue) {
-		super(numberHolder.getValue() == null ? defaultValue : (Number) numberHolder.getValue(), minimum, maximum, stepSize);
-		this.numberHolder = numberHolder;
-		this.numberChangeListener = this.buildNumberChangeListener();
-		// postpone listening to the underlying number
-		// until we have listeners ourselves...
-		this.defaultValue = defaultValue;
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildNumberChangeListener() {
-		return new AWTPropertyChangeListenerWrapper(this.buildNumberChangeListener_());
-	}
-
-	protected PropertyChangeListener buildNumberChangeListener_() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				NumberSpinnerModelAdapter.this.synchronize(event.getNewValue());
-			}
-			@Override
-			public String toString() {
-				return "number listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** SpinnerModel implementation **********
-
-	/**
-	 * Extend to check whether this method is being called before we 
-	 * have any listeners.
-	 * This is necessary because some crappy jdk code gets the value
-	 * from the model *before* listening to the model.  ~bjv
-	 * @see javax.swing.JSpinner.DefaultEditor(javax.swing.JSpinner)
-	 */
-    @Override
-	public Object getValue() {
-		if (this.getChangeListeners().length == 0) {
-			// sorry about this "lateral" call to super  ~bjv
-			super.setValue(this.spinnerValueOf(this.numberHolder.getValue()));
-		}
-		return super.getValue();
-	}
-
-	/**
-	 * Extend to update the underlying number directly.
-	 * The resulting event will be ignored: @see #synchronizeDelegate(Object).
-	 */
-    @Override
-	public void setValue(Object value) {
-		super.setValue(value);
-		this.numberHolder.setValue((Number) value);
-	}
-
-	/**
-	 * Extend to start listening to the underlying number if necessary.
-	 */
-    @Override
-	public void addChangeListener(ChangeListener listener) {
-		if (this.getChangeListeners().length == 0) {
-			this.numberHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.numberChangeListener);
-			this.synchronize(this.numberHolder.getValue());
-		}
-		super.addChangeListener(listener);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying number if appropriate.
-	 */
-    @Override
-	public void removeChangeListener(ChangeListener listener) {
-		super.removeChangeListener(listener);
-		if (this.getChangeListeners().length == 0) {
-			this.numberHolder.removePropertyChangeListener(PropertyValueModel.VALUE, this.numberChangeListener);
-		}
-	}
-
-
-	// ********** queries **********
-
-	protected Number getDefaultValue() {
-		return this.defaultValue;
-	}
-
-	/**
-	 * Convert to a non-null value.
-	 */
-	protected Object spinnerValueOf(Object value) {
-		return (value == null) ? this.getDefaultValue() : value;
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Set the spinner value if it has changed.
-	 */
-	void synchronize(Object value) {
-		Object newValue = this.spinnerValueOf(value);
-		// check to see whether the date has already been synchronized
-		// (via #setValue())
-		if ( ! this.getValue().equals(newValue)) {
-			this.setValue(newValue);
-		}
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.numberHolder);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ObjectListSelectionModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ObjectListSelectionModel.java
deleted file mode 100644
index eef2476..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ObjectListSelectionModel.java
+++ /dev/null
@@ -1,427 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import javax.swing.DefaultListSelectionModel;
-import javax.swing.ListModel;
-import javax.swing.event.ListDataEvent;
-import javax.swing.event.ListDataListener;
-import javax.swing.event.ListSelectionListener;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-
-/**
- * This ListSelectionModel is aware of the ListModel and
- * provides convenience methods to access and set the
- * selected *objects*, as opposed to the selected *indexes*.
- */
-public class ObjectListSelectionModel
-	extends DefaultListSelectionModel
-{
-	/** The list model referenced by the list selection model. */
-	private final ListModel listModel;
-
-	/** A listener that allows us to clear the selection when the list model has changed. */
-	private final ListDataListener listDataListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a list selection model for the specified list model.
-	 */
-	public ObjectListSelectionModel(ListModel listModel) {
-		super();
-		this.listModel = listModel;
-		this.listDataListener = this.buildListDataListener();
-	}
-
-
-	// ********** initialization **********
-
-	private ListDataListener buildListDataListener() {
-		return new ListDataListener() {
-			public void intervalAdded(ListDataEvent event) {
-				// this does not affect the selection
-			}
-			public void intervalRemoved(ListDataEvent event) {
-				// this does not affect the selection
-			}
-			public void contentsChanged(ListDataEvent event) {
-				ObjectListSelectionModel.this.listModelContentsChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "list data listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	/**
-	 * Typically, the selection does not need to be cleared when the
-	 * contents of the list have changed. Most of the time this just
-	 * means an item has changed in a way that affects its display string
-	 * or icon. We typically only use the class for edits involving
-	 * single selection.
-	 * A subclass can override this method if the selection
-	 * should be cleared because a change could mean the selection is invalid.
-	 */
-	protected void listModelContentsChanged(@SuppressWarnings("unused") ListDataEvent event) {
-		/**this.clearSelection();*/
-	}
-
-
-	// ********** ListSelectionModel implementation **********
-
-	@Override
-	public void addListSelectionListener(ListSelectionListener l) {
-		if (this.hasNoListSelectionListeners()) {
-			this.listModel.addListDataListener(this.listDataListener);
-		}
-		super.addListSelectionListener(l);
-	}
-
-	@Override
-	public void removeListSelectionListener(ListSelectionListener l) {
-		super.removeListSelectionListener(l);
-		if (this.hasNoListSelectionListeners()) {
-			this.listModel.removeListDataListener(this.listDataListener);
-		}
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * Return whether this model has no listeners.
-	 */
-	protected boolean hasNoListSelectionListeners() {	// private-protected
-		return this.getListSelectionListeners().length == 0;
-	}
-
-	/**
-	 * Return the list model referenced by the list selection model.
-	 */
-	public ListModel getListModel() {
-		return this.listModel;
-	}
-
-	public int selectedValuesSize() {
-		int min = this.getMinSelectionIndex();
-		int max = this.getMaxSelectionIndex();
-
-		if ((min < 0) || (max < 0)) {
-			return 0;
-		}
-
-		int n = 0;
-		int count = this.getListModel().getSize();
-		for (int i = min; i <= max; i++) {
-			if (this.isSelectedIndex(i) && (i < count)) {
-				n++;
-			}
-		}
-		return n;
-	}
-
-	/**
-	 * Return the first selected value.
-	 * Return null if the selection is empty.
-	 */
-	public Object selectedValue() {
-		int index = this.getMinSelectionIndex();
-		if (index == -1) {
-			return null;
-		}
-		if (this.getListModel().getSize() <= index) {
-			return null;
-		}
-		return this.getListModel().getElementAt(index);
-	}
-
-	/**
-	 * Return an array of the selected values.
-	 */
-	public Object[] selectedValues() {
-		int min = this.getMinSelectionIndex();
-		int max = this.getMaxSelectionIndex();
-
-		if ((min < 0) || (max < 0)) {
-			return new Object[0];
-		}
-
-		int maxSize = (max - min) + 1;
-		Object[] temp = new Object[maxSize];
-		int n = 0;
-		int count = this.getListModel().getSize();
-		for (int i = min; i <= max; i++) {
-			if (this.isSelectedIndex(i) && (i < count)) {
-				temp[n++] = this.getListModel().getElementAt(i);
-			}
-		}
-		if (n == maxSize) {
-			// all the elements in the range were selected
-			return temp;
-		}
-		// only some of the elements in the range were selected
-		Object[] result = new Object[n];
-		System.arraycopy(temp, 0, result, 0, n);
-		return result;
-	}
-
-	/**
-	 * Return an array of the selected indices in order.
-	 */
-	public int[] selectedIndices() {
-		int min = this.getMinSelectionIndex();
-		int max = this.getMaxSelectionIndex();
-
-		if ((min < 0) || (max < 0)) {
-			return new int[0];
-		}
-
-		int maxSize = (max - min) + 1;
-		int[] temp = new int[maxSize];
-		int n = 0;
-		int count = this.getListModel().getSize();
-		for (int i = min; i <= max; i++) {
-			if (this.isSelectedIndex(i) && (i < count)) {
-				temp[n++] = i;
-			}
-		}
-		if (n == maxSize) {
-			// all the elements in the range were selected
-			Arrays.sort(temp);
-			return temp;
-		}
-		// only some of the elements in the range were selected
-		int[] result = new int[n];
-		System.arraycopy(temp, 0, result, 0, n);
-		Arrays.sort(result);
-		return result;
-	}
-
-	/**
-	 * Set the selected value.
-	 */
-	public void setSelectedValue(Object object) {
-		this.setSelectedValues(CollectionTools.singletonIterator(object));
-	}
-
-	/**
-	 * Set the current set of selected objects to the specified objects.
-	 * @see javax.swing.ListSelectionModel#setSelectionInterval(int, int)
-	 */
-	public void setSelectedValues(Iterator<?> objects) {
-		this.setValueIsAdjusting(true);
-		this.clearSelection();
-		this.addSelectedValuesInternal(objects);
-		this.setValueIsAdjusting(false);
-	}
-
-	/**
-	 * Set the current set of selected objects to the specified objects.
-	 * @see javax.swing.ListSelectionModel#setSelectionInterval(int, int)
-	 */
-	public void setSelectedValues(Collection<?> objects) {
-		this.setSelectedValues(objects.iterator());
-	}
-
-	/**
-	 * Set the current set of selected objects to the specified objects.
-	 * @see javax.swing.ListSelectionModel#setSelectionInterval(int, int)
-	 */
-	public void setSelectedValues(Object[] objects) {
-		this.setSelectedValues(CollectionTools.iterator(objects));
-	}
-
-	/**
-	 * Add the specified object to the current set of selected objects.
-	 * @see javax.swing.ListSelectionModel#addSelectionInterval(int, int)
-	 */
-	public void addSelectedValue(Object object) {
-		this.addSelectedValues(CollectionTools.singletonIterator(object));
-	}
-
-	/**
-	 * Add the specified objects to the current set of selected objects.
-	 * @see javax.swing.ListSelectionModel#addSelectionInterval(int, int)
-	 */
-	public void addSelectedValues(Iterator<?> objects) {
-		this.setValueIsAdjusting(true);
-		this.addSelectedValuesInternal(objects);
-		this.setValueIsAdjusting(false);
-	}
-
-	/**
-	 * Add the specified objects to the current set of selected objects.
-	 * @see javax.swing.ListSelectionModel#addSelectionInterval(int, int)
-	 */
-	public void addSelectedValues(Collection<?> objects) {
-		this.addSelectedValues(objects.iterator());
-	}
-
-	/**
-	 * Add the specified objects to the current set of selected objects.
-	 * @see javax.swing.ListSelectionModel#addSelectionInterval(int, int)
-	 */
-	public void addSelectedValues(Object[] objects) {
-		this.addSelectedValues(CollectionTools.iterator(objects));
-	}
-
-	/**
-	 * Remove the specified object from the current set of selected objects.
-	 * @see javax.swing.ListSelectionModel#removeSelectionInterval(int, int)
-	 */
-	public void removeSelectedValue(Object object) {
-		this.removeSelectedValues(CollectionTools.singletonIterator(object));
-	}
-
-	/**
-	 * Remove the specified objects from the current set of selected objects.
-	 * @see javax.swing.ListSelectionModel#removeSelectionInterval(int, int)
-	 */
-	public void removeSelectedValues(Iterator<?> objects) {
-		this.setValueIsAdjusting(true);
-		ListModel lm = this.getListModel();
-		int lmSize = lm.getSize();
-		while (objects.hasNext()) {
-			int index = this.indexOf(objects.next(), lm, lmSize);
-			this.removeSelectionInterval(index, index);
-		}
-		this.setValueIsAdjusting(false);
-	}
-
-	/**
-	 * Remove the specified objects from the current set of selected objects.
-	 * @see javax.swing.ListSelectionModel#removeSelectionInterval(int, int)
-	 */
-	public void removeSelectedValues(Collection<?> objects) {
-		this.removeSelectedValues(objects.iterator());
-	}
-
-	/**
-	 * Remove the specified objects from the current set of selected objects.
-	 * @see javax.swing.ListSelectionModel#removeSelectionInterval(int, int)
-	 */
-	public void removeSelectedValues(Object[] objects) {
-		this.removeSelectedValues(CollectionTools.iterator(objects));
-	}
-
-	/**
-	 * @see javax.swing.ListSelectionModel#getAnchorSelectionIndex()
-	 * Return null if the anchor selection is empty.
-	 */
-	public Object getAnchorSelectedValue() {
-		int index = this.getAnchorSelectionIndex();
-		if (index == -1) {
-			return null;
-		}
-		return this.getListModel().getElementAt(index);
-	}
-
-	/**
-	 * @see javax.swing.ListSelectionModel#setAnchorSelectionIndex(int)
-	 */
-	public void setAnchorSelectedValue(Object object) {
-		this.setAnchorSelectionIndex(this.indexOf(object));
-	}
-
-	/**
-	 * @see javax.swing.ListSelectionModel#getLeadSelectionIndex()
-	 * Return null if the lead selection is empty.
-	 */
-	public Object getLeadSelectedValue() {
-		int index = this.getLeadSelectionIndex();
-		if (index == -1) {
-			return null;
-		}
-		return this.getListModel().getElementAt(index);
-	}
-
-	/**
-	 * @see javax.swing.ListSelectionModel#setLeadSelectionIndex(int)
-	 */
-	public void setLeadSelectedValue(Object object) {
-		this.setLeadSelectionIndex(this.indexOf(object));
-	}
-
-	/**
-	 * @see javax.swing.ListSelectionModel#getMaxSelectionIndex()
-	 * Return null if the max selection is empty.
-	 */
-	public Object getMaxSelectedValue() {
-		int index = this.getMaxSelectionIndex();
-		if (index == -1) {
-			return null;
-		}
-		return this.getListModel().getElementAt(index);
-	}
-
-	/**
-	 * @see javax.swing.ListSelectionModel#getMinSelectionIndex()
-	 * Return null if the min selection is empty.
-	 */
-	public Object getMinSelectedValue() {
-		int index = this.getMinSelectionIndex();
-		if (index == -1) {
-			return null;
-		}
-		return this.getListModel().getElementAt(index);
-	}
-
-	/**
-	 * @see javax.swing.ListSelectionModel#isSelectedIndex(int)
-	 */
-	public boolean valueIsSelected(Object object) {
-		return this.isSelectedIndex(this.indexOf(object));
-	}
-
-	/**
-	 * Add the specified objects to the current set of selected objects,
-	 * without wrapping the actions in "adjusting" events.
-	 */
-	private void addSelectedValuesInternal(Iterator<?> objects) {
-		ListModel lm = this.getListModel();
-		int listModelSize = lm.getSize();
-		while (objects.hasNext()) {
-			int index = this.indexOf(objects.next(), lm, listModelSize);
-			this.addSelectionInterval(index, index);
-		}
-	}
-
-	/**
-	 * Return the index in the list model of the specified object.
-	 * Return -1 if the object is not in the list model.
-	 */
-	private int indexOf(Object object) {
-		ListModel lm = this.getListModel();
-		return this.indexOf(object, lm, lm.getSize());
-	}
-
-	/**
-	 * Return the index in the list model of the specified object.
-	 * Return -1 if the object is not in the list model.
-	 */
-	// we're just jerking around with performance optimizations here
-	// (in memory of Phil...);
-	// call this method inside loops that do not modify the listModel
-	private int indexOf(Object object, ListModel lm, int listModelSize) {
-		for (int i = listModelSize; i-- > 0; ) {
-			if (lm.getElementAt(i).equals(object)) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/PrimitiveListTreeModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/PrimitiveListTreeModel.java
deleted file mode 100644
index 5a19127..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/PrimitiveListTreeModel.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import javax.swing.event.TreeModelListener;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.MutableTreeNode;
-import javax.swing.tree.TreeNode;
-import javax.swing.tree.TreePath;
-
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTListChangeListenerWrapper;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * This TreeModel implementation provides a tree with a "null" root that
- * has a set of "primitive" children. These "primitive" children do not have
- * children themselves, making the tree a maximum of 2 levels deep.
- * This model automatically synchronizes the root's children with a
- * ListValueModel that holds a collection of primitive (non-model) objects
- * (e.g. Strings).
- * 
- * This is useful for providing an "editable" list of primitives. Since the JDK
- * does not provide us with an editable listbox, we must use an editable tree.
- * We wrap everything in DefaultMutableTreeNodes.
- * 
- * Subclasses must implement #primitiveChanged(int, Object) and update
- * the model appropriately. This method is called when the user edits the
- * list directly and presses <Enter>.
- * 
- * The JTree using this model must be configured as "editable":
- * 	tree.setEditable(true);
- */
-// TODO convert to use an adapter instead of requiring subclass
-public abstract class PrimitiveListTreeModel
-	extends DefaultTreeModel
-{
-	/** a model on the list of primitives */
-	private final ListValueModel<?> listHolder;
-
-	/** a listener that handles the adding, removing, and replacing of the primitives */
-	private final ListChangeListener listChangeListener;
-
-
-	// ********** constructors **********
-	
-	/**
-	 * Public constructor - the list holder is required
-	 */
-	public PrimitiveListTreeModel(ListValueModel<?> listHolder) {
-		super(new DefaultMutableTreeNode(null, true));  // true = the root can have children
-		if (listHolder == null) {
-			throw new NullPointerException();
-		}
-		this.listHolder = listHolder;
-		this.listChangeListener = this.buildListChangeListener();
-		// postpone listening to the model until we have listeners ourselves
-	}
-
-	protected ListChangeListener buildListChangeListener() {
-		return new AWTListChangeListenerWrapper(this.buildListChangeListener_());
-	}
-
-	protected ListChangeListener buildListChangeListener_() {
-		return new PrimitiveListChangeListener();
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Subclasses should override this method to update the 
-	 * model appropriately. The primitive at the specified index was
-	 * edited directly by the user and the new value is as specified.
-	 * Convert the value appropriately and place it in the model.
-	 */
-	protected abstract void primitiveChanged(int index, Object newValue);
-
-
-	// ********** TreeModel implementation **********
-
-	/**
-	 * Override to change the underlying model instead of changing the node directly.
-	 */
-    @Override
-	public void valueForPathChanged(TreePath path, Object newValue) {
-		TreeNode node = (TreeNode) path.getLastPathComponent();
-		int index = ((TreeNode) this.getRoot()).getIndex(node);
-		this.primitiveChanged(index, newValue);
-	}
-
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-    @Override
-	public void addTreeModelListener(TreeModelListener l) {
-		if (this.getTreeModelListeners().length == 0) {
-			this.listHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.listChangeListener);
-			this.synchronizeList();
-		}
-		super.addTreeModelListener(l);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying model if appropriate.
-	 */
-    @Override
-	public void removeTreeModelListener(TreeModelListener l) {
-		super.removeTreeModelListener(l);
-		if (this.getTreeModelListeners().length == 0) {
-			this.listHolder.removeListChangeListener(ListValueModel.LIST_VALUES, this.listChangeListener);
-		}
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Synchronize our list of nodes with the list of primitives
-	 */
-	void synchronizeList() {
-		this.clearList();
-		this.buildList();
-	}
-
-	void clearList() {
-		int childcount = this.root.getChildCount();
-		for (int i = childcount - 1; i >= 0; i--) {
-			this.removeNodeFromParent((MutableTreeNode)this.root.getChildAt(i));
-		}
-	}
-		
-	private void buildList() {
-		for (Iterator<?> stream = this.listHolder.iterator(); stream.hasNext(); ) {
-			this.addPrimitive(stream.next());
-		}
-	}
-
-	/**
-	 * Add the specified primitive to the end of the list.
-	 */
-	private void addPrimitive(Object primitive) {
-		this.insertPrimitive(this.root.getChildCount(), primitive);
-	}
-
-	/**
-	 * Create a node for the specified primitive
-	 * and insert it as a child of the root.
-	 */
-	void insertPrimitive(int index, Object primitive) {
-		DefaultMutableTreeNode node = new DefaultMutableTreeNode(primitive, false); // don't allow children on the child node
-		this.insertNodeInto(node, (MutableTreeNode) this.root, index);
-	}
-
-	/**
-	 * Remove node at the specified index.
-	 */
-	MutableTreeNode removeNode(int index) {
-		MutableTreeNode node = (MutableTreeNode) this.root.getChildAt(index);
-		this.removeNodeFromParent(node);
-		return node;
-	}
-
-	/**
-	 * Replace the user object of the node at childIndex.
-	 */
-	void replacePrimitive(int index, Object primitive) {
-		MutableTreeNode node = (MutableTreeNode) this.root.getChildAt(index);
-		node.setUserObject(primitive);
-		this.nodeChanged(node);
-	}
-
-
-	// ********** inner class **********
-
-	private class PrimitiveListChangeListener implements ListChangeListener {
-		PrimitiveListChangeListener() {
-			super();
-		}
-
-		public void itemsAdded(ListAddEvent event) {
-			int i = event.getIndex();
-			for (Object item : event.getItems()) {
-				PrimitiveListTreeModel.this.insertPrimitive(i++, item);
-			}
-		}
-
-		public void itemsRemoved(ListRemoveEvent event) {
-			for (int i = 0; i < event.getItemsSize(); i++) {
-				PrimitiveListTreeModel.this.removeNode(event.getIndex());
-			}
-		}
-
-		public void itemsReplaced(ListReplaceEvent event) {
-			int i = event.getIndex();
-			for (Object item : event.getNewItems()) {
-				PrimitiveListTreeModel.this.replacePrimitive(i++, item);
-			}
-		}
-
-		public void itemsMoved(ListMoveEvent event) {
-			ArrayList<MutableTreeNode> temp = new ArrayList<MutableTreeNode>(event.getLength());
-			for (int i = 0; i < event.getLength(); i++) {
-				temp.add(PrimitiveListTreeModel.this.removeNode(event.getSourceIndex()));
-			}
-			int i = event.getTargetIndex();
-			for (MutableTreeNode node : temp) {
-				PrimitiveListTreeModel.this.insertPrimitive(i++, node);
-			}
-		}
-
-		public void listCleared(ListClearEvent event) {
-			PrimitiveListTreeModel.this.clearList();
-		}
-
-		public void listChanged(ListChangeEvent event) {
-			PrimitiveListTreeModel.this.synchronizeList();
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/RadioButtonModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/RadioButtonModelAdapter.java
deleted file mode 100644
index fba8a53..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/RadioButtonModelAdapter.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import org.eclipse.jpt.utility.internal.BidiFilter;
-import org.eclipse.jpt.utility.internal.BidiTransformer;
-import org.eclipse.jpt.utility.internal.model.value.FilteringWritablePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationWritablePropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * This javax.swing.ButtonModel can be used to keep a listener
- * (e.g. a JRadioButton) in synch with a (typically shared)
- * PropertyValueModel that holds one value out of a set of values.
- * 
- * NOTE: Do *not* use this model with a ButtonGroup, since the
- * shared value holder and the wrappers built by this adapter will
- * keep the appropriate radio button checked. Also, this allows
- * us to uncheck all the radio buttons in a group when the shared
- * value is null.
- */
-public class RadioButtonModelAdapter
-	extends ToggleButtonModelAdapter
-{
-
-	// ********** constructors **********
-
-	/**
-	 * Constructor - the value holder is required.
-	 */
-	public RadioButtonModelAdapter(WritablePropertyValueModel<Object> valueHolder, Object buttonValue, boolean defaultValue) {
-		super(buildBooleanHolder(valueHolder, buttonValue), defaultValue);
-	}
-
-	/**
-	 * Constructor - the value holder is required.
-	 * The default value will be false.
-	 */
-	public RadioButtonModelAdapter(WritablePropertyValueModel<Object> valueHolder, Object buttonValue) {
-		super(buildBooleanHolder(valueHolder, buttonValue));
-	}
-
-
-	// ********** static methods **********
-
-	/**
-	 * Build up a set of wrappers that will convert the
-	 * specified value holder and button value to/from a boolean.
-	 * 
-	 * If the value holder's value matches the button value,
-	 * the wrapper will return true. Likewise, if the value holder's
-	 * value is set to true, the wrapper will set the value holder's
-	 * value to the button value.
-	 */
-	public static WritablePropertyValueModel<Boolean> buildBooleanHolder(WritablePropertyValueModel<Object> valueHolder, Object buttonValue) {
-		WritablePropertyValueModel<Object> filteringPVM = new FilteringWritablePropertyValueModel<Object>(valueHolder, new RadioButtonFilter(buttonValue));
-		return new TransformationWritablePropertyValueModel<Object, Boolean>(filteringPVM, new RadioButtonTransformer(buttonValue));
-	}
-
-
-	// ********** overrides **********
-
-	/**
-	 * The user cannot de-select a radio button - the user
-	 * can only *select* a radio button. Only the model can
-	 * cause a radio button to be de-selected. We use the
-	 * ARMED flag to indicate whether we are being de-selected
-	 * by the user.
-	 */
-    @Override
-	public void setSelected(boolean b) {
-		// do not allow the user to de-select a radio button
-		// radio buttons can
-		if ((b == false) && this.isArmed()) {
-			return;
-		}
-		super.setSelected(b);
-	}
-
-
-	// ********** inner classes **********
-
-	/**
-	 * This filter will only pass through a new value to the wrapped
-	 * value holder when it matches the configured button value.
-	 */
-	public static class RadioButtonFilter implements BidiFilter<Object> {
-		private Object buttonValue;
-
-		public RadioButtonFilter(Object buttonValue) {
-			super();
-			this.buttonValue = buttonValue;
-		}
-
-		/**
-		 * always return the wrapped value
-		 */
-		public boolean accept(Object value) {
-			return true;
-		}
-
-		/**
-		 * pass through the value to the wrapped property value model
-		 * *only* when it matches our button value
-		 */
-		public boolean reverseAccept(Object value) {
-			return (value != null) && value.equals(this.buttonValue);
-		}
-
-	}
-
-	/**
-	 * This transformer will convert the wrapped value to Boolean.TRUE
-	 * when it matches the configured button value.
-	 */
-	public static class RadioButtonTransformer implements BidiTransformer<Object, Boolean> {
-		private Object buttonValue;
-
-		public RadioButtonTransformer(Object buttonValue) {
-			super();
-			this.buttonValue = buttonValue;
-		}
-
-		/**
-		 * if the wrapped value matches our button value return true,
-		 * if it is some other value return false;
-		 * but if it is null simply pass it through because it will cause the
-		 * button model's default value to be used
-		 */
-		public Boolean transform(Object value) {
-			return (value == null) ? null : Boolean.valueOf(value.equals(this.buttonValue));
-		}
-
-		/**
-		 * if the new value is true, pass through the our button value;
-		 * otherwise pass through null
-		 */
-		public Object reverseTransform(Boolean value) {
-			return (value.booleanValue()) ? this.buttonValue : null;
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/SpinnerModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/SpinnerModelAdapter.java
deleted file mode 100644
index 20896e6..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/SpinnerModelAdapter.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import javax.swing.AbstractSpinnerModel;
-import javax.swing.SpinnerModel;
-import javax.swing.SpinnerNumberModel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTPropertyChangeListenerWrapper;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * This javax.swing.SpinnerModel can be used to keep a ChangeListener
- * (e.g. a JSpinner) in synch with a PropertyValueModel that holds a value.
- * 
- * Note: it is likely you want to use one of the following classes instead of
- * this one:
- *     DateSpinnerModelAdapter
- *     NumberSpinnerModelAdapter
- *     ListSpinnerModelAdapter
- * 
- * NB: This model should only be used for values that have a fairly
- * inexpensive #equals() implementation.
- * @see #synchronizeDelegate(Object)
- */
-public class SpinnerModelAdapter
-	extends AbstractSpinnerModel
-{
-	/** The delegate spinner model whose behavior we "enhance". */
-	protected final SpinnerModel delegate;
-
-	/** A listener that allows us to forward any changes made to the delegate spinner model. */
-	protected final ChangeListener delegateListener;
-
-	/** A value model on the underlying value. */
-	protected final WritablePropertyValueModel<Object> valueHolder;
-
-	/** A listener that allows us to synchronize with changes made to the underlying value. */
-	protected final PropertyChangeListener valueListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Constructor - the value holder and delegate are required.
-	 */
-	public SpinnerModelAdapter(WritablePropertyValueModel<Object> valueHolder, SpinnerModel delegate) {
-		super();
-		if (valueHolder == null || delegate == null) {
-			throw new NullPointerException();
-		}
-		this.valueHolder = valueHolder;
-		this.delegate = delegate;
-		// postpone listening to the underlying value
-		// until we have listeners ourselves...
-		this.valueListener = this.buildValueListener();
-		this.delegateListener = this.buildDelegateListener();
-	}
-
-	/**
-	 * Constructor - the value holder is required.
-	 * This will wrap a simple number spinner model.
-	 */
-	public SpinnerModelAdapter(WritablePropertyValueModel<Object> valueHolder) {
-		this(valueHolder, new SpinnerNumberModel());
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildValueListener() {
-		return new AWTPropertyChangeListenerWrapper(this.buildValueListener_());
-	}
-
-	protected PropertyChangeListener buildValueListener_() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				SpinnerModelAdapter.this.valueChanged(event);
-			}
-			@Override
-			public String toString() {
-				return "value listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	/**
-	 * expand access a bit for inner class
-	 */
-	@Override
-	protected void fireStateChanged() {
-		super.fireStateChanged();
-	}
-
-	protected ChangeListener buildDelegateListener() {
-		return new ChangeListener() {
-			public void stateChanged(ChangeEvent event) {
-				// forward the event, with this as the source
-				SpinnerModelAdapter.this.fireStateChanged();
-			}
-			@Override
-			public String toString() {
-				return "delegate listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** SpinnerModel implementation **********
-
-	public Object getValue() {
-		return this.delegate.getValue();
-	}
-
-	/**
-	 * Extend to update the underlying value directly.
-	 * The resulting event will be ignored: @see #synchronizeDelegate(Object).
-	 */
-	public void setValue(Object value) {
-		this.delegate.setValue(value);
-		this.valueHolder.setValue(value);
-	}
-
-	public Object getNextValue() {
-		return this.delegate.getNextValue();
-	}
-
-	public Object getPreviousValue() {
-		return this.delegate.getPreviousValue();
-	}
-
-	/**
-	 * Extend to start listening to the underlying value if necessary.
-	 */
-    @Override
-	public void addChangeListener(ChangeListener listener) {
-		if (this.listenerList.getListenerCount(ChangeListener.class) == 0) {
-			this.delegate.addChangeListener(this.delegateListener);
-			this.engageValueHolder();
-		}
-		super.addChangeListener(listener);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying value if appropriate.
-	 */
-    @Override
-	public void removeChangeListener(ChangeListener listener) {
-		super.removeChangeListener(listener);
-		if (this.listenerList.getListenerCount(ChangeListener.class) == 0) {
-			this.disengageValueHolder();
-			this.delegate.removeChangeListener(this.delegateListener);
-		}
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * A third party has modified the underlying value.
-	 * Synchronize the delegate model accordingly.
-	 */
-	protected void valueChanged(PropertyChangeEvent event) {
-		this.synchronizeDelegate(event.getNewValue());
-	}
-
-	/**
-	 * Set the delegate's value if it has changed.
-	 */
-	protected void synchronizeDelegate(Object value) {
-		// check to see whether the delegate has already been synchronized
-		// (via #setValue())
-		if ( ! this.delegate.getValue().equals(value)) {
-			this.delegate.setValue(value);
-		}
-	}
-
-	protected void engageValueHolder() {
-		this.valueHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.valueListener);
-		this.synchronizeDelegate(this.valueHolder.getValue());
-	}
-
-	protected void disengageValueHolder() {
-		this.valueHolder.removePropertyChangeListener(PropertyValueModel.VALUE, this.valueListener);
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.valueHolder);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/TableModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/TableModelAdapter.java
deleted file mode 100644
index 0c18cd5..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/TableModelAdapter.java
+++ /dev/null
@@ -1,420 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.swing.event.TableModelListener;
-import javax.swing.table.AbstractTableModel;
-
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTListChangeListenerWrapper;
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTPropertyChangeListenerWrapper;
-import org.eclipse.jpt.utility.internal.model.value.CollectionListValueModelAdapter;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * This TableModel can be used to keep a TableModelListener (e.g. a JTable)
- * in synch with a ListValueModel that holds a collection of model objects,
- * each of which corresponds to a row in the table.
- * Typically, each column of the table will be bound to a different aspect
- * of the contained model objects.
- * 
- * For example, a MWTable has an attribute 'databaseFields' that holds
- * a collection of MWDatabaseFields that would correspond to the rows of
- * a JTable; and each MWDatabaseField has a number
- * of attributes (e.g. name, type, size) that can be bound to the columns of
- * a row in the JTable. As these database fields are added, removed, and
- * changed, this model will keep the listeners aware of the changes.
- * 
- * An instance of this TableModel must be supplied with a
- * list holder (e.g. the 'databaseFields'), which is a value
- * model on the bound collection This is required - the
- * collection itself can be null, but the list value model that
- * holds it is required. Typically this list will be sorted (@see
- * SortedListValueModelAdapter).
- * 
- * This TableModel must also be supplied with a ColumnAdapter that
- * will be used to configure the headers, renderers, editors, and contents
- * of the various columns.
- * 
- * Design decision:
- * Cell listener options (from low space/high time to high space/low time):
- * 	- 1 cell listener listening to every cell (this is the current implementation)
- * 	- 1 cell listener per row
- * 	- 1 cell listener per cell
- */
-public class TableModelAdapter<E>
-	extends AbstractTableModel
-{
-	/**
-	 * a list of user objects that are converted to
-	 * rows via the column adapter
-	 */
-	private ListValueModel<? extends E> listHolder;
-	private final ListChangeListener listChangeListener;
-
-	/**
-	 * each row is an array of cell models
-	 */
-	// declare as ArrayList so we can use #ensureCapacity(int)
-	private final ArrayList<WritablePropertyValueModel<Object>[]> rows;
-
-	/**
-	 * client-supplied adapter that provides with the various column
-	 * settings and converts the objects in the LVM
-	 * into an array of cell models
-	 */
-	private final ColumnAdapter columnAdapter;
-
-	/**
-	 * the single listener that listens to every cell's model
-	 */
-	private final PropertyChangeListener cellListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a table model adapter for the specified objects
-	 * and adapter.
-	 */
-	public TableModelAdapter(ListValueModel<? extends E> listHolder, ColumnAdapter columnAdapter) {
-		super();
-		if (listHolder == null) {
-			throw new NullPointerException();
-		}
-		this.listHolder = listHolder;
-		this.columnAdapter = columnAdapter;
-		this.listChangeListener = this.buildListChangeListener();
-		this.rows = new ArrayList<WritablePropertyValueModel<Object>[]>();
-		this.cellListener = this.buildCellListener();
-	}
-
-	/**
-	 * Construct a table model adapter for the specified objects
-	 * and adapter.
-	 */
-	public TableModelAdapter(CollectionValueModel<? extends E> collectionHolder, ColumnAdapter columnAdapter) {
-		this(new CollectionListValueModelAdapter<E>(collectionHolder), columnAdapter);
-	}
-
-
-	// ********** initialization **********
-
-	protected ListChangeListener buildListChangeListener() {
-		return new AWTListChangeListenerWrapper(this.buildListChangeListener_());
-	}
-
-	protected ListChangeListener buildListChangeListener_() {
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent event) {
-				TableModelAdapter.this.addRows(event.getIndex(), event.getItemsSize(), this.getItems(event));
-			}
-			public void itemsRemoved(ListRemoveEvent event) {
-				TableModelAdapter.this.removeRows(event.getIndex(), event.getItemsSize());
-			}
-			public void itemsReplaced(ListReplaceEvent event) {
-				TableModelAdapter.this.replaceRows(event.getIndex(), this.getNewItems(event));
-			}
-			public void itemsMoved(ListMoveEvent event) {
-				TableModelAdapter.this.moveRows(event.getTargetIndex(), event.getSourceIndex(), event.getLength());
-			}
-			public void listCleared(ListClearEvent event) {
-				TableModelAdapter.this.clearTable();
-			}
-			public void listChanged(ListChangeEvent event) {
-				TableModelAdapter.this.rebuildTable();
-			}
-			// minimized scope of suppressed warnings
-			@SuppressWarnings("unchecked")
-			protected Iterable<Object> getItems(ListAddEvent event) {
-				return (Iterable<Object>) event.getItems();
-			}
-			// minimized scope of suppressed warnings
-			@SuppressWarnings("unchecked")
-			protected Iterable<Object> getNewItems(ListReplaceEvent event) {
-				return (Iterable<Object>) event.getNewItems();
-			}
-			@Override
-			public String toString() {
-				return "list listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	protected PropertyChangeListener buildCellListener() {
-		return new AWTPropertyChangeListenerWrapper(this.buildCellListener_());
-	}
-
-	protected PropertyChangeListener buildCellListener_() {
-		return new PropertyChangeListener() {
-			@SuppressWarnings("unchecked")
-			public void propertyChanged(PropertyChangeEvent event) {
-				TableModelAdapter.this.cellChanged((WritablePropertyValueModel<Object>) event.getSource());
-			}
-			@Override
-			public String toString() {
-				return "cell listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** TableModel implementation **********
-
-	public int getColumnCount() {
-		return this.columnAdapter.columnCount();
-	}
-
-	public int getRowCount() {
-		return this.rows.size();
-	}
-
-    @Override
-	public String getColumnName(int column) {
-		return this.columnAdapter.columnName(column);
-	}
-
-    @Override
-	public Class<?> getColumnClass(int columnIndex) {
-		return this.columnAdapter.columnClass(columnIndex);
-	}
-
-    @Override
-	public boolean isCellEditable(int rowIndex, int columnIndex) {
-		return this.columnAdapter.columnIsEditable(columnIndex);
-	}
-
-	public Object getValueAt(int rowIndex, int columnIndex) {
-		WritablePropertyValueModel<Object>[] row = this.rows.get(rowIndex);
-		return row[columnIndex].getValue();
-	}
-
-	@Override
-	public void setValueAt(Object value, int rowIndex, int columnIndex) {
-		WritablePropertyValueModel<Object>[] row = this.rows.get(rowIndex);
-		row[columnIndex].setValue(value);
-	}
-
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-    @Override
-	public void addTableModelListener(TableModelListener l) {
-		if (this.hasNoTableModelListeners()) {
-			this.engageModel();
-		}
-		super.addTableModelListener(l);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying model if necessary.
-	 */
-    @Override
-	public void removeTableModelListener(TableModelListener l) {
-		super.removeTableModelListener(l);
-		if (this.hasNoTableModelListeners()) {
-			this.disengageModel();
-		}
-	}
-
-
-	// ********** public API **********
-
-	/**
-	 * Return the underlying list model.
-	 */
-	public ListValueModel<? extends E> getModel() {
-		return this.listHolder;
-	}
-
-	/**
-	 * Set the underlying list model.
-	 */
-	public void setModel(ListValueModel<E> listHolder) {
-		if (listHolder == null) {
-			throw new NullPointerException();
-		}
-		boolean hasListeners = this.hasTableModelListeners();
-		if (hasListeners) {
-			this.disengageModel();
-		}
-		this.listHolder = listHolder;
-		if (hasListeners) {
-			this.engageModel();
-			this.fireTableDataChanged();
-		}
-	}
-
-	/**
-	 * Set the underlying collection model.
-	 */
-	public void setModel(CollectionValueModel<E> collectionHolder) {
-		this.setModel(new CollectionListValueModelAdapter<E>(collectionHolder));
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * Return whether this model has no listeners.
-	 */
-	protected boolean hasNoTableModelListeners() {
-		return this.listenerList.getListenerCount(TableModelListener.class) == 0;
-	}
-
-	/**
-	 * Return whether this model has any listeners.
-	 */
-	protected boolean hasTableModelListeners() {
-		return ! this.hasNoTableModelListeners();
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Start listening to the list of objects and the various aspects
-	 * of the objects that make up the rows.
-	 */
-	private void engageModel() {
-		this.listHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.listChangeListener);
-		this.engageAllCells();
-	}
-
-	/**
-	 * Convert the objects into rows and listen to the cells.
-	 */
-	private void engageAllCells() {
-		this.rows.ensureCapacity(this.listHolder.size());
-		for (Iterator<? extends E> stream = this.listHolder.iterator(); stream.hasNext(); ) {
-			WritablePropertyValueModel<Object>[] row = this.columnAdapter.cellModels(stream.next());
-			this.engageRow(row);
-			this.rows.add(row);
-		}
-	}
-
-	/**
-	 * Listen to the cells in the specified row.
-	 */
-	private void engageRow(WritablePropertyValueModel<Object>[] row) {
-		for (int i = row.length; i-- > 0; ) {
-			row[i].addPropertyChangeListener(PropertyValueModel.VALUE, this.cellListener);
-		}
-	}
-
-	/**
-	 * Stop listening.
-	 */
-	private void disengageModel() {
-		this.disengageAllCells();
-		this.listHolder.removeListChangeListener(ListValueModel.LIST_VALUES, this.listChangeListener);
-	}
-
-	private void disengageAllCells() {
-		for (WritablePropertyValueModel<Object>[] row : this.rows) {
-			this.disengageRow(row);
-		}
-		this.rows.clear();
-	}
-
-	private void disengageRow(WritablePropertyValueModel<Object>[] row) {
-		for (int i = row.length; i-- > 0; ) {
-			row[i].removePropertyChangeListener(PropertyValueModel.VALUE, this.cellListener);
-		}
-	}
-
-	/**
-	 * brute-force search for the cell(s) that changed...
-	 */
-	void cellChanged(WritablePropertyValueModel<Object> cellHolder) {
-		for (int i = this.rows.size(); i-- > 0; ) {
-			WritablePropertyValueModel<Object>[] row = this.rows.get(i);
-			for (int j = row.length; j-- > 0; ) {
-				if (row[j] == cellHolder) {
-					this.fireTableCellUpdated(i, j);
-				}
-			}
-		}
-	}
-
-	/**
-	 * convert the items to rows
-	 */
-	void addRows(int index, int size, Iterable<Object> items) {
-		List<WritablePropertyValueModel<Object>[]> newRows = new ArrayList<WritablePropertyValueModel<Object>[]>(size);
-		for (Object item : items) {
-			WritablePropertyValueModel<Object>[] row = this.columnAdapter.cellModels(item);
-			this.engageRow(row);
-			newRows.add(row);
-		}
-		this.rows.addAll(index, newRows);
-		this.fireTableRowsInserted(index, index + size - 1);
-	}
-
-	void removeRows(int index, int size) {
-		for (int i = 0; i < size; i++) {
-			this.disengageRow(this.rows.remove(index));
-		}
-		this.fireTableRowsDeleted(index, index + size - 1);
-	}
-
-	void replaceRows(int index, Iterable<Object> items) {
-		int i = index;
-		for (Object item : items) {
-			WritablePropertyValueModel<Object>[] row = this.rows.get(i);
-			this.disengageRow(row);
-			row = this.columnAdapter.cellModels(item);
-			this.engageRow(row);
-			this.rows.set(i, row);
-			i++;
-		}
-		this.fireTableRowsUpdated(index, i - 1);
-	}
-
-	void moveRows(int targetIndex, int sourceIndex, int length) {
-		ArrayList<WritablePropertyValueModel<Object>[]> temp = new ArrayList<WritablePropertyValueModel<Object>[]>(length);
-		for (int i = 0; i < length; i++) {
-			temp.add(this.rows.remove(sourceIndex));
-		}
-		this.rows.addAll(targetIndex, temp);
-
-		int start = Math.min(targetIndex, sourceIndex);
-		int end = Math.max(targetIndex, sourceIndex) + length - 1;
-		this.fireTableRowsUpdated(start, end);
-	}
-
-	void clearTable() {
-		this.disengageAllCells();
-		this.fireTableDataChanged();
-	}
-
-	void rebuildTable() {
-		this.disengageAllCells();
-		this.engageAllCells();
-		this.fireTableDataChanged();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ToggleButtonModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ToggleButtonModelAdapter.java
deleted file mode 100644
index eb9aa3b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/ToggleButtonModelAdapter.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import java.awt.event.ActionListener;
-import java.awt.event.ItemListener;
-import javax.swing.JToggleButton.ToggleButtonModel;
-import javax.swing.event.ChangeListener;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTPropertyChangeListenerWrapper;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * This javax.swing.ButtonModel can be used to keep a listener
- * (e.g. a JCheckBox or a JRadioButton) in synch with a PropertyValueModel
- * on a boolean.
- */
-public class ToggleButtonModelAdapter
-	extends ToggleButtonModel
-{
-	/**
-	 * The default setting for the toggle button; for when the underlying model is null.
-	 * The default [default value] is false (i.e. the toggle button is unchecked/empty).
-	 */
-	protected final boolean defaultValue;
-
-	/** A value model on the underlying model boolean. */
-	protected final WritablePropertyValueModel<Boolean> booleanHolder;
-
-	/**
-	 * A listener that allows us to synchronize with
-	 * changes made to the underlying model boolean.
-	 */
-	protected final PropertyChangeListener booleanChangeListener;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Constructor - the boolean holder is required.
-	 */
-	public ToggleButtonModelAdapter(WritablePropertyValueModel<Boolean> booleanHolder, boolean defaultValue) {
-		super();
-		if (booleanHolder == null) {
-			throw new NullPointerException();
-		}
-		this.booleanHolder = booleanHolder;
-		this.booleanChangeListener = this.buildBooleanChangeListener();
-		// postpone listening to the underlying model
-		// until we have listeners ourselves...
-		this.defaultValue = defaultValue;
-	}
-
-	/**
-	 * Constructor - the boolean holder is required.
-	 * The default value will be false.
-	 */
-	public ToggleButtonModelAdapter(WritablePropertyValueModel<Boolean> booleanHolder) {
-		this(booleanHolder, false);
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildBooleanChangeListener() {
-		return new AWTPropertyChangeListenerWrapper(this.buildBooleanChangeListener_());
-	}
-
-	protected PropertyChangeListener buildBooleanChangeListener_() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				ToggleButtonModelAdapter.this.booleanChanged(event);
-			}
-		    @Override
-			public String toString() {
-				return "boolean listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** ButtonModel implementation **********
-
-	/**
-	 * Extend to update the underlying model if necessary.
-	 */
-    @Override
-	public void setSelected(boolean b) {
-		if (this.isSelected() != b) {	// stop the recursion!
-			super.setSelected(b);//put the super call first, otherwise the following gets called twice
-			this.booleanHolder.setValue(Boolean.valueOf(b));
-		}
-	}
-
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-    @Override
-	public void addActionListener(ActionListener l) {
-		if (this.hasNoListeners()) {
-			this.engageModel();
-		}
-		super.addActionListener(l);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying model if appropriate.
-	 */
-    @Override
-	public void removeActionListener(ActionListener l) {
-		super.removeActionListener(l);
-		if (this.hasNoListeners()) {
-			this.disengageModel();
-		}
-	}
-
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-    @Override
-	public void addItemListener(ItemListener l) {
-		if (this.hasNoListeners()) {
-			this.engageModel();
-		}
-		super.addItemListener(l);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying model if appropriate.
-	 */
-    @Override
-	public void removeItemListener(ItemListener l) {
-		super.removeItemListener(l);
-		if (this.hasNoListeners()) {
-			this.disengageModel();
-		}
-	}
-
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-    @Override
-	public void addChangeListener(ChangeListener l) {
-		if (this.hasNoListeners()) {
-			this.engageModel();
-		}
-		super.addChangeListener(l);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying model if appropriate.
-	 */
-    @Override
-	public void removeChangeListener(ChangeListener l) {
-		super.removeChangeListener(l);
-		if (this.hasNoListeners()) {
-			this.disengageModel();
-		}
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * Return whether we have no listeners at all.
-	 */
-	protected boolean hasNoListeners() {
-		return this.listenerList.getListenerCount() == 0;
-	}
-
-	protected boolean getDefaultValue() {
-		return this.defaultValue;
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Synchronize with the specified value.
-	 * If it is null, use the default value (which is typically false).
-	 */
-	protected void setSelected(Boolean value) {
-		if (value == null) {
-			this.setSelected(this.getDefaultValue());
-		} else {
-			this.setSelected(value.booleanValue());
-		}
-	}
-
-	/**
-	 * The underlying model has changed - synchronize accordingly.
-	 */
-	protected void booleanChanged(PropertyChangeEvent event) {
-		this.setSelected((Boolean) event.getNewValue());
-	}
-
-	protected void engageModel() {
-		this.booleanHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.booleanChangeListener);
-		this.setSelected(this.booleanHolder.getValue());
-	}
-
-	protected void disengageModel() {
-		this.booleanHolder.removePropertyChangeListener(PropertyValueModel.VALUE, this.booleanChangeListener);
-	}
-
-
-	// ********** standard methods **********
-
-    @Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.booleanHolder);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/TreeModelAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/TreeModelAdapter.java
deleted file mode 100644
index ba0868f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/model/value/swing/TreeModelAdapter.java
+++ /dev/null
@@ -1,914 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.model.value.swing;
-
-import java.util.ArrayList;
-import java.util.IdentityHashMap;
-import java.util.List;
-
-import javax.swing.event.TreeModelListener;
-import javax.swing.tree.TreePath;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTListChangeListenerWrapper;
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTPropertyChangeListenerWrapper;
-import org.eclipse.jpt.utility.internal.model.listener.awt.AWTStateChangeListenerWrapper;
-import org.eclipse.jpt.utility.internal.model.value.StaticPropertyValueModel;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.TreeNodeValueModel;
-
-/**
- * This javax.swing.tree.TreeModel can be used to keep a TreeModelListener
- * (e.g. a JTree) in synch with a tree of TreeNodeValueModel objects. Unlike
- * javax.swing.tree.DefaultTreeModel, you do not add and remove nodes with
- * methods implemented here. You can add and remove nodes by adding and
- * removing them directly to/from the nodes (or, more typically, the domain
- * objects the nodes are wrapping and listening to).
- * 
- * Due to limitations in JTree, the root of the tree can never be null,
- * which, typically, should not be a problem. (If you want to display an empty
- * tree you can set the JTree's treeModel to null.)
- */
-public class TreeModelAdapter<T>
-	extends AbstractTreeModel
-{
-	/**
-	 * A value model on the underlying tree's root node and its
-	 * corresponding listener. This allows clients to swap out
-	 * the entire tree. Due to limitations in JTree, the root should
-	 * never be set to null while we have listeners.
-	 */
-	private final PropertyValueModel<TreeNodeValueModel<T>> rootHolder;
-	private final PropertyChangeListener rootListener;
-
-	/**
-	 * A listener that notifies us when a node's internal
-	 * "state" changes (as opposed to the node's value or list of
-	 * children), allowing us to forward notification to our listeners.
-	 */
-	private final StateChangeListener nodeStateListener;
-
-	/**
-	 * A listener that notifies us when a node's "value"
-	 * changes (as opposed to the node's state or list of
-	 * children), allowing us to forward notification to our listeners.
-	 * Typically, this will only happen with nodes that hold
-	 * primitive data.
-	 */
-	private final PropertyChangeListener nodeValueListener;
-
-	/**
-	 * A listener that notifies us when an underlying node's
-	 * "list" of children changes, allowing us to keep our
-	 * internal tree in synch with the underlying tree model.
-	 */
-	private final ListChangeListener childrenListener;
-
-	/* these attributes make up our internal tree */
-	/**
-	 * The root cannot be null while we have listeners, which is
-	 * most of the time. The root is cached so we can disengage
-	 * from it when it has been swapped out.
-	 */
-	private TreeNodeValueModel<T> root;
-
-	/**
-	 * Map the nodes to their lists of children.
-	 * We cache these so we can swap out the entire list of children
-	 * when we receive a #listChanged() event (which does not include
-	 * the items that were affected).
-	 * @see EventChangePolicy#rebuildChildren()
-	 */
-	final IdentityHashMap<TreeNodeValueModel<T>, List<TreeNodeValueModel<T>>> childrenLists;
-
-	/**
-	 * Map the children models to their parents.
-	 * We cache these so we can figure out the "real" source of the
-	 * list change events (the parent).
-	 * @see EventChangePolicy#parent()
-	 */
-	final IdentityHashMap<ListValueModel<TreeNodeValueModel<T>>, TreeNodeValueModel<T>> parents;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a tree model for the specified root.
-	 */
-	public TreeModelAdapter(PropertyValueModel<TreeNodeValueModel<T>> rootHolder) {
-		super();
-		if (rootHolder == null) {
-			throw new NullPointerException();
-		}
-		this.rootHolder = rootHolder;
-		this.rootListener = this.buildRootListener();
-		this.nodeStateListener = this.buildNodeStateListener();
-		this.nodeValueListener = this.buildNodeValueListener();
-		this.childrenListener = this.buildChildrenListener();
-		this.childrenLists = new IdentityHashMap<TreeNodeValueModel<T>, List<TreeNodeValueModel<T>>>();
-		this.parents = new IdentityHashMap<ListValueModel<TreeNodeValueModel<T>>, TreeNodeValueModel<T>>();
-	}
-
-	/**
-	 * Construct a tree model for the specified root.
-	 */
-	public TreeModelAdapter(TreeNodeValueModel<T> root) {
-		this(new StaticPropertyValueModel<TreeNodeValueModel<T>>(root));
-	}
-
-
-	// ********** initialization **********
-
-	protected PropertyChangeListener buildRootListener() {
-		return new AWTPropertyChangeListenerWrapper(this.buildRootListener_());
-	}
-
-	protected PropertyChangeListener buildRootListener_() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent event) {
-				TreeModelAdapter.this.rootChanged();
-			}
-			@Override
-			public String toString() {
-				return "root listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	protected PropertyChangeListener buildNodeValueListener() {
-		return new AWTPropertyChangeListenerWrapper(this.buildNodeValueListener_());
-	}
-
-	protected PropertyChangeListener buildNodeValueListener_() {
-		return new PropertyChangeListener() {
-			@SuppressWarnings("unchecked")
-			public void propertyChanged(PropertyChangeEvent event) {
-				TreeModelAdapter.this.nodeChanged((TreeNodeValueModel<T>) event.getSource());
-			}
-			@Override
-			public String toString() {
-				return "node value listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	protected StateChangeListener buildNodeStateListener() {
-		return new AWTStateChangeListenerWrapper(this.buildNodeStateListener_());
-	}
-
-	protected StateChangeListener buildNodeStateListener_() {
-		return new StateChangeListener() {
-			@SuppressWarnings("unchecked")
-			public void stateChanged(StateChangeEvent event) {
-				TreeModelAdapter.this.nodeChanged((TreeNodeValueModel<T>) event.getSource());
-			}
-			@Override
-			public String toString() {
-				return "node state listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	protected ListChangeListener buildChildrenListener() {
-		return new AWTListChangeListenerWrapper(this.buildChildrenListener_());
-	}
-
-	protected ListChangeListener buildChildrenListener_() {
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent event) {
-				new AddEventChangePolicy(event).addChildren();
-			}
-			public void itemsRemoved(ListRemoveEvent event) {
-				new RemoveEventChangePolicy(event).removeChildren();
-			}
-			public void itemsReplaced(ListReplaceEvent event) {
-				new ReplaceEventChangePolicy(event).replaceChildren();
-			}
-			public void itemsMoved(ListMoveEvent event) {
-				new MoveEventChangePolicy(event).moveChildren();
-			}
-			public void listCleared(ListClearEvent event) {
-				new ClearEventChangePolicy(event).clearChildren();
-			}
-			public void listChanged(ListChangeEvent event) {
-				new ChangeEventChangePolicy(event).rebuildChildren();
-			}
-			@Override
-			public String toString() {
-				return "children listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-
-	// ********** TreeModel implementation **********
-
-	public Object getRoot() {
-		return this.root;
-	}
-
-	@SuppressWarnings("unchecked")
-	public Object getChild(Object parent, int index) {
-		return ((TreeNodeValueModel<T>) parent).child(index);
-	}
-
-	@SuppressWarnings("unchecked")
-	public int getChildCount(Object parent) {
-		return ((TreeNodeValueModel<T>) parent).childrenSize();
-	}
-
-	@SuppressWarnings("unchecked")
-	public boolean isLeaf(Object node) {
-		return ((TreeNodeValueModel<T>) node).isLeaf();
-	}
-
-	@SuppressWarnings("unchecked")
-	public void valueForPathChanged(TreePath path, Object newValue) {
-		((TreeNodeValueModel<T>) path.getLastPathComponent()).setValue((T) newValue);
-	}
-
-	@SuppressWarnings("unchecked")
-	public int getIndexOfChild(Object parent, Object child) {
-		return ((TreeNodeValueModel<T>) parent).indexOfChild((TreeNodeValueModel<T>) child);
-	}
-
-	/**
-	 * Extend to start listening to the underlying model if necessary.
-	 */
-    @Override
-	public void addTreeModelListener(TreeModelListener l) {
-		if (this.hasNoTreeModelListeners()) {
-			this.engageModel();
-		}
-		super.addTreeModelListener(l);
-	}
-
-	/**
-	 * Extend to stop listening to the underlying model if appropriate.
-	 */
-    @Override
-	public void removeTreeModelListener(TreeModelListener l) {
-		super.removeTreeModelListener(l);
-		if (this.hasNoTreeModelListeners()) {
-			this.disengageModel();
-		}
-	}
-
-
-	// ********** behavior **********
-
-	/**
-	 * Listen to the root and all the other nodes
-	 * in the underlying tree model.
-	 */
-	private void engageModel() {
-		this.rootHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.rootListener);
-		this.root = this.rootHolder.getValue();
-		if (this.root == null) {
-			throw new NullPointerException();	// the root cannot be null while we have listeners
-		}
-		this.engageNode(this.root);
-		this.addRoot();
-	}
-
-	/**
-	 * Add the root and all of the nodes to the underlying tree.
-	 */
-	private void addRoot() {
-		this.addNode(0, this.root);
-	}
-
-	/**
-	 * Stop listening to the root and all the other
-	 * nodes in the underlying tree model.
-	 */
-	private void disengageModel() {
-		this.removeRoot();
-		this.disengageNode(this.root);
-		this.root = null;
-		this.rootHolder.removePropertyChangeListener(PropertyValueModel.VALUE, this.rootListener);
-	}
-
-	/**
-	 * Remove the root and all of the nodes from the underlying tree.
-	 */
-	private void removeRoot() {
-		this.removeNode(0, this.root);
-	}
-
-	/**
-	 * The root has been swapped.
-	 * This method is a bit gnarly because the API for notifying listeners
-	 * that the root has changed is a bit inconsistent with that used for
-	 * non-root nodes.
-	 */
-	void rootChanged() {
-		TreeNodeValueModel<T> newRoot = this.rootHolder.getValue();
-		if (newRoot == null) {
-			throw new NullPointerException();	// the root cannot be null while we have listeners
-		}
-		// remove all the current root's children from the tree
-		// and remove the it from the internal tree
-		this.removeRoot(); 
-
-		// save the old root and swap in the new root
-		TreeNodeValueModel<T> oldRoot = this.root;
-		this.root = newRoot;
-
-		// we must be listening to both the old and new roots when we fire the event
-		// because their values can be affected by whether they have listeners
-		this.engageNode(this.root);
-		this.fireTreeRootReplaced(this.root);
-		// now we can stop listening to the old root
-		this.disengageNode(oldRoot);
-
-		// add the new root to the internal tree and
-		// add all its children to the tree also
-		this.addRoot();
-	}
-
-	/**
-	 * Either the "value" or the "state" of the specified node has changed,
-	 * forward notification to our listeners.
-	 */
-	void nodeChanged(TreeNodeValueModel<T> node) {
-		TreeNodeValueModel<T> parent = node.parent();
-		if (parent == null) {
-			this.fireTreeRootChanged(node);
-		} else {
-			this.fireTreeNodeChanged(parent.path(), parent.indexOfChild(node), node);
-		}
-	}
-
-	/**
-	 * Listen to the nodes, notify our listeners that the nodes were added,
-	 * and then add the nodes to our internal tree.
-	 * We must listen to the nodes before notifying anybody, because
-	 * adding a listener can change the value of a node.
-	 */
-	void addChildren(TreeNodeValueModel<T>[] path, int[] childIndices, TreeNodeValueModel<T>[] children) {
-		int len = childIndices.length;
-		for (int i = 0; i < len; i++) {
-			this.engageNode(children[i]);
-		}
-		this.fireTreeNodesInserted(path, childIndices, children);
-		for (int i = 0; i < len; i++) {
-			this.addNode(childIndices[i], children[i]);
-		}
-	}
-
-	/**
-	 * Listen to the node and its children model.
-	 */
-	private void engageNode(TreeNodeValueModel<T> node) {
-		node.addStateChangeListener(this.nodeStateListener);
-		node.addPropertyChangeListener(PropertyValueModel.VALUE, this.nodeValueListener);
-		node.childrenModel().addListChangeListener(ListValueModel.LIST_VALUES, this.childrenListener);
-	}
-
-	/**
-	 * Add the node to our internal tree;
-	 * then recurse down through the node's children,
-	 * adding them to the internal tree also.
-	 */
-	private void addNode(int index, TreeNodeValueModel<T> node) {
-		this.addNodeToInternalTree(node.parent(), index, node, node.childrenModel());
-		new NodeChangePolicy(node).addChildren();
-	}
-
-	/**
-	 * Add the specified node to our internal tree.
-	 */
-	private void addNodeToInternalTree(TreeNodeValueModel<T> parent, int index, TreeNodeValueModel<T> node, ListValueModel<TreeNodeValueModel<T>> childrenModel) {
-		List<TreeNodeValueModel<T>> siblings = this.childrenLists.get(parent);
-		if (siblings == null) {
-			siblings = new ArrayList<TreeNodeValueModel<T>>();
-			this.childrenLists.put(parent, siblings);
-		}
-		siblings.add(index, node);
-
-		this.parents.put(childrenModel, node);
-	}
-
-	/**
-	 * Remove nodes from our internal tree, notify our listeners that the
-	 * nodes were removed, then stop listening to the nodes.
-	 * We must listen to the nodes until after notifying anybody, because
-	 * removing a listener can change the value of a node.
-	 */
-	void removeChildren(TreeNodeValueModel<T>[] path, int[] childIndices, TreeNodeValueModel<T>[] children) {
-		int len = childIndices.length;
-		for (int i = 0; i < len; i++) {
-			// the indices slide down a notch each time we remove a child
-			this.removeNode(childIndices[i] - i, children[i]);
-		}
-		this.fireTreeNodesRemoved(path, childIndices, children);
-		for (int i = 0; i < len; i++) {
-			this.disengageNode(children[i]);
-		}
-	}
-
-	/**
-	 * First, recurse down through the node's children,
-	 * removing them from our internal tree;
-	 * then remove the node itself from our internal tree.
-	 */
-	private void removeNode(int index, TreeNodeValueModel<T> node) {
-		new NodeChangePolicy(node).removeChildren();
-		this.removeNodeFromInternalTree(node.parent(), index, node.childrenModel());
-	}
-
-	/**
-	 * Remove the specified node from our internal tree.
-	 */
-	private void removeNodeFromInternalTree(TreeNodeValueModel<T> parent, int index, ListValueModel<TreeNodeValueModel<T>> childrenModel) {
-		this.parents.remove(childrenModel);
-
-		List<TreeNodeValueModel<T>> siblings = this.childrenLists.get(parent);
-		siblings.remove(index);
-		if (siblings.isEmpty()) {
-			this.childrenLists.remove(parent);
-		}
-	}
-
-	/**
-	 * Stop listening to the node and its children model.
-	 */
-	private void disengageNode(TreeNodeValueModel<T> node) {
-		node.childrenModel().removeListChangeListener(ListValueModel.LIST_VALUES, this.childrenListener);
-		node.removePropertyChangeListener(PropertyValueModel.VALUE, this.nodeValueListener);
-		node.removeStateChangeListener(this.nodeStateListener);
-	}
-
-	void moveChildren(TreeNodeValueModel<T> parent, int targetIndex, int sourceIndex, int length) {
-		List<TreeNodeValueModel<T>> childrenList = this.childrenLists.get(parent);
-		ArrayList<TreeNodeValueModel<T>> temp = new ArrayList<TreeNodeValueModel<T>>(length);
-		for (int i = 0; i < length; i++) {
-			temp.add(childrenList.remove(sourceIndex));
-		}
-		childrenList.addAll(targetIndex, temp);
-
-		this.fireTreeStructureChanged(parent.path());
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.root);
-	}
-
-
-	// ********** inner classes **********
-
-	/**
-	 * Coalesce some of the common change policy behavior.
-	 */
-	abstract class ChangePolicy {
-
-		ChangePolicy() {
-			super();
-		}
-
-		/**
-		 * Add the current set of children.
-		 */
-		void addChildren() {
-			TreeModelAdapter.this.addChildren(this.parent().path(), this.childIndices(), this.childArray());
-		}
-
-		/**
-		 * Remove the current set of children.
-		 */
-		void removeChildren() {
-			TreeModelAdapter.this.removeChildren(this.parent().path(), this.childIndices(), this.childArray());
-		}
-
-		/**
-		 * Return an array of the indices of the current set of children,
-		 * which should be contiguous.
-		 */
-		int[] childIndices() {
-			return this.buildIndices(this.childrenStartIndex(), this.childrenSize());
-		}
-
-		/**
-		 * Return an array of the current set of children.
-		 */
-		TreeNodeValueModel<T>[] childArray() {
-			return this.buildArray(this.getChildren(), this.childrenSize());
-		}
-
-		/**
-		 * Build an array to hold the elements in the specified iterator.
-		 * If they are different sizes, something is screwed up...
-		 */
-		TreeNodeValueModel<T>[] buildArray(Iterable<TreeNodeValueModel<T>> elements, int size) {
-			@SuppressWarnings("unchecked")
-			TreeNodeValueModel<T>[] array = new TreeNodeValueModel[size];
-			int i = 0;
-			for (TreeNodeValueModel<T> element : elements) {
-				array[i++] = element;
-			}
-			return array;
-		}
-
-		/**
-		 * Return a set of indices, starting at zero and
-		 * continuing for the specified size.
-		 */
-		int[] buildIndices(int size) {
-			return buildIndices(0, size);
-		}
-
-		/**
-		 * Return a set of indices, starting at the specified index and
-		 * continuing for the specified size.
-		 */
-		int[] buildIndices(int start, int size) {
-			int[] indices = new int[size];
-			int index = start;
-			for (int i = 0; i < size; i++) {
-				indices[i] = index++;
-			}
-			return indices;
-		}
-
-		/**
-		 * Return the parent of the current set of children.
-		 */
-		abstract TreeNodeValueModel<T> parent();
-
-		/**
-		 * Return the starting index for the current set of children.
-		 */
-		abstract int childrenStartIndex();
-
-		/**
-		 * Return the size of the current set of children.
-		 */
-		abstract int childrenSize();
-
-		/**
-		 * Return the current set of children.
-		 */
-		abstract Iterable<TreeNodeValueModel<T>> getChildren();
-
-	}
-
-
-	/**
-	 * Wraps a ListEvent for adding, removing, replacing,
-	 * and changing children.
-	 */
-	abstract class EventChangePolicy extends ChangePolicy {
-		final ListEvent event;
-
-		EventChangePolicy(ListEvent event) {
-			super();
-			this.event = event;
-		}
-
-		/**
-		 * Map the ListChangeEvent's source to the corresponding parent.
-		 */
-		@Override
-		TreeNodeValueModel<T> parent() {
-			return TreeModelAdapter.this.parents.get(this.event.getSource());
-		}
-
-	}
-
-
-	/**
-	 * Wraps a ListAddEvent for adding children.
-	 */
-	class AddEventChangePolicy extends EventChangePolicy {
-
-		AddEventChangePolicy(ListAddEvent event) {
-			super(event);
-		}
-
-		private ListAddEvent getEvent() {
-			return (ListAddEvent) this.event;
-		}
-
-		/**
-		 * The ListAddEvent's item index is the children start index.
-		 */
-		@Override
-		int childrenStartIndex() {
-			return this.getEvent().getIndex();
-		}
-
-		/**
-		 * The ListAddEvent's size is the children size.
-		 */
-		@Override
-		int childrenSize() {
-			return this.getEvent().getItemsSize();
-		}
-
-		/**
-		 * The ListAddEvent's items are the children.
-		 */
-		@Override
-		@SuppressWarnings("unchecked")
-		Iterable<TreeNodeValueModel<T>> getChildren() {
-			return (Iterable<TreeNodeValueModel<T>>) this.getEvent().getItems();
-		}
-
-	}
-
-
-	/**
-	 * Wraps a ListRemoveEvent for adding children.
-	 */
-	class RemoveEventChangePolicy extends EventChangePolicy {
-
-		RemoveEventChangePolicy(ListRemoveEvent event) {
-			super(event);
-		}
-
-		private ListRemoveEvent getEvent() {
-			return (ListRemoveEvent) this.event;
-		}
-
-		/**
-		 * The ListRemoveEvent's item index is the children start index.
-		 */
-		@Override
-		int childrenStartIndex() {
-			return this.getEvent().getIndex();
-		}
-
-		/**
-		 * The ListRemoveEvent's size is the children size.
-		 */
-		@Override
-		int childrenSize() {
-			return this.getEvent().getItemsSize();
-		}
-
-		/**
-		 * The ListRemoveEvent's items are the children.
-		 */
-		@Override
-		@SuppressWarnings("unchecked")
-		Iterable<TreeNodeValueModel<T>> getChildren() {
-			return (Iterable<TreeNodeValueModel<T>>) this.getEvent().getItems();
-		}
-
-	}
-
-
-	/**
-	 * Wraps a ListReplaceEvent for replacing children.
-	 */
-	class ReplaceEventChangePolicy extends EventChangePolicy {
-
-		ReplaceEventChangePolicy(ListReplaceEvent event) {
-			super(event);
-		}
-
-		private ListReplaceEvent getEvent() {
-			return (ListReplaceEvent) this.event;
-		}
-
-		/**
-		 * The ListReplaceEvent's item index is the children start index.
-		 */
-		@Override
-		int childrenStartIndex() {
-			return this.getEvent().getIndex();
-		}
-
-		/**
-		 * The ListReplaceEvent's size is the children size.
-		 */
-		@Override
-		int childrenSize() {
-			return this.getEvent().getItemsSize();
-		}
-
-		/**
-		 * The ListReplaceEvent's items are the children.
-		 */
-		@Override
-		@SuppressWarnings("unchecked")
-		Iterable<TreeNodeValueModel<T>> getChildren() {
-			return (Iterable<TreeNodeValueModel<T>>) this.getEvent().getNewItems();
-		}
-
-		/**
-		 * Remove the old nodes and add the new ones.
-		 */
-		void replaceChildren() {
-			TreeNodeValueModel<T>[] parentPath = this.parent().path();
-			int[] childIndices = this.childIndices();
-			TreeModelAdapter.this.removeChildren(parentPath, childIndices, this.getOldChildren());
-			TreeModelAdapter.this.addChildren(parentPath, childIndices, this.childArray());
-		}
-
-		TreeNodeValueModel<T>[] getOldChildren() {
-			return this.buildArray(this.getOldItems(), this.getEvent().getItemsSize());
-		}
-
-		// minimized scope of suppressed warnings
-		@SuppressWarnings("unchecked")
-		protected Iterable<TreeNodeValueModel<T>> getOldItems() {
-			return (Iterable<TreeNodeValueModel<T>>) this.getEvent().getOldItems();
-		}
-
-	}
-
-
-	/**
-	 * Wraps a ListMoveEvent for moving children.
-	 */
-	class MoveEventChangePolicy extends EventChangePolicy {
-
-		MoveEventChangePolicy(ListMoveEvent event) {
-			super(event);
-		}
-
-		private ListMoveEvent getEvent() {
-			return (ListMoveEvent) this.event;
-		}
-
-		void moveChildren() {
-			TreeModelAdapter.this.moveChildren(this.parent(), this.getEvent().getTargetIndex(), this.getEvent().getSourceIndex(), this.getEvent().getLength());
-		}
-
-		@Override
-		int childrenStartIndex() {
-			throw new UnsupportedOperationException();
-		}
-
-		@Override
-		int childrenSize() {
-			throw new UnsupportedOperationException();
-		}
-
-		@Override
-		Iterable<TreeNodeValueModel<T>> getChildren() {
-			throw new UnsupportedOperationException();
-		}
-
-	}
-
-
-	/**
-	 * Wraps a ListClearEvent for clearing children.
-	 */
-	class ClearEventChangePolicy extends EventChangePolicy {
-
-		ClearEventChangePolicy(ListClearEvent event) {
-			super(event);
-		}
-
-		/**
-		 * Clear all the nodes.
-		 */
-		void clearChildren() {
-			TreeNodeValueModel<T> parent = this.parent();
-			TreeNodeValueModel<T>[] parentPath = parent.path();
-			List<TreeNodeValueModel<T>> childrenList = TreeModelAdapter.this.childrenLists.get(parent);
-			int[] childIndices = this.buildIndices(childrenList.size());
-			TreeNodeValueModel<T>[] childArray = this.buildArray(childrenList, childrenList.size());
-			TreeModelAdapter.this.removeChildren(parentPath, childIndices, childArray);
-		}
-
-		@Override
-		int childrenStartIndex() {
-			throw new UnsupportedOperationException();
-		}
-
-		@Override
-		int childrenSize() {
-			throw new UnsupportedOperationException();
-		}
-
-		@Override
-		Iterable<TreeNodeValueModel<T>> getChildren() {
-			throw new UnsupportedOperationException();
-		}
-
-	}
-
-
-	/**
-	 * Wraps a ListChangeEvent for clearing children.
-	 */
-	class ChangeEventChangePolicy extends EventChangePolicy {
-
-		ChangeEventChangePolicy(ListChangeEvent event) {
-			super(event);
-		}
-
-		/**
-		 * Remove all the old nodes and add all the new nodes.
-		 */
-		void rebuildChildren() {
-			TreeNodeValueModel<T> parent = this.parent();
-			TreeNodeValueModel<T>[] parentPath = parent.path();
-			List<TreeNodeValueModel<T>> childrenList = TreeModelAdapter.this.childrenLists.get(parent);
-			int[] childIndices = this.buildIndices(childrenList.size());
-			TreeNodeValueModel<T>[] childArray = this.buildArray(childrenList, childrenList.size());
-			TreeModelAdapter.this.removeChildren(parentPath, childIndices, childArray);
-
-			childIndices = this.buildIndices(parent.childrenModel().size());
-			childArray = this.buildArray(parent.childrenModel(), parent.childrenSize());
-			TreeModelAdapter.this.addChildren(parentPath, childIndices, childArray);
-		}
-
-		@Override
-		int childrenStartIndex() {
-			throw new UnsupportedOperationException();
-		}
-
-		@Override
-		int childrenSize() {
-			throw new UnsupportedOperationException();
-		}
-
-		@Override
-		Iterable<TreeNodeValueModel<T>> getChildren() {
-			throw new UnsupportedOperationException();
-		}
-
-	}
-
-
-	/**
-	 * Wraps a TreeNodeValueModel for adding and removing its children.
-	 */
-	class NodeChangePolicy extends ChangePolicy {
-		private final TreeNodeValueModel<T> node;
-
-		NodeChangePolicy(TreeNodeValueModel<T> node) {
-			super();
-			this.node = node;
-		}
-
-		/**
-		 * The node itself is the parent.
-		 */
-		@Override
-		TreeNodeValueModel<T> parent() {
-			return this.node;
-		}
-
-		/**
-		 * Since we will always be dealing with all of the node's
-		 * children, the children start index is always zero.
-		 */
-		@Override
-		int childrenStartIndex() {
-			return 0;
-		}
-
-		/**
-		 * Since we will always be dealing with all of the node's
-		 * children, the children size is always equal to the size
-		 * of the children model.
-		 */
-		@Override
-		int childrenSize() {
-			return this.node.childrenModel().size();
-		}
-
-		/**
-		 * Since we will always be dealing with all of the node's
-		 * children, the children are all the objects held by
-		 * the children model.
-		 */
-		@Override
-		Iterable<TreeNodeValueModel<T>> getChildren() {
-			return this.node.childrenModel();
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/AbstractNode.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/AbstractNode.java
deleted file mode 100644
index 3dd54de..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/AbstractNode.java
+++ /dev/null
@@ -1,941 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.node;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Set;
-import java.util.Vector;
-
-import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
-import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
-import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.CallbackChangeSupport;
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-
-/**
- * Base class for Node classes.
- * Provides support for the following:
- *     initialization
- *     enforced object identity wrt #equals()/#hashCode()
- *     containment hierarchy (parent/child)
- *     user comment
- *     dirty flag
- *     problems
- *     sorting
- * 
- * Typically, subclasses should consider implementing the following methods:
- *     the appropriate constructors
- *         (with the appropriately-restrictive type declaration for parent)
- *     #initialize()
- *     #initialize(Node parentNode)
- *     #checkParent(Node parentNode)
- *     #addChildrenTo(List list)
- *     #nodeRemoved(Node)
- *     #validator()
- *     #transientAspectNames() or
- *         #addTransientAspectNamesTo(Set transientAspectNames)
- *     #addProblemsTo(List currentProblems)
- *     #nonValidatedAspectNames()
- *         #addNonValidatedAspectNamesTo(Set nonValidatedAspectNames)
- *     #displayString()
- *     #toString(StringBuilder sb)
- */
-public abstract class AbstractNode 
-	extends AbstractModel
-	implements Node
-{
-
-	/** Containment hierarchy. */
-	private Node parent;  // pseudo-final
-
-	/** Track whether the node has changed. */
-	private volatile boolean dirty;
-	private volatile boolean dirtyBranch;
-
-	/**
-	 * The node's problems, as calculated during validation.
-	 * This list should only be modified via a ProblemSynchronizer,
-	 * allowing for asynchronous modification from another thread.
-	 */
-	private Vector<Problem> problems;		// pseudo-final
-		private static final Object[] EMPTY_PROBLEM_MESSAGE_ARGUMENTS = new Object[0];
-
-	/**
-	 * Cache the node's "branch" problems, as calculated during validation.
-	 * This list should only be modified via a ProblemSynchronizer,
-	 * allowing for asynchronous modification from another thread.
-	 * This must be recalculated every time this node or one of its
-	 * descendants changes it problems.
-	 */
-	private Vector<Problem> branchProblems;		// pseudo-final
-
-	/** User comment. */
-	private volatile String comment;
-
-
-	// ********** static fields **********
-
-	/**
-	 * Sets of transient aspect names, keyed by class.
-	 * This is built up lazily, as the objects are modified.
-	 */
-	private static final HashMap<Class<? extends AbstractNode>, HashSet<String>> transientAspectNameSets = new HashMap<Class<? extends AbstractNode>, HashSet<String>>();
-
-	/**
-	 * Sets of non-validated aspect names, keyed by class.
-	 * This is built up lazily, as the objects are modified.
-	 */
-	private static final HashMap<Class<? extends AbstractNode>, HashSet<String>> nonValidatedAspectNameSets = new HashMap<Class<? extends AbstractNode>, HashSet<String>>();
-
-
-	// ********** constructors **********
-
-	/**
-	 * Most objects must have a parent.
-	 * Use this constructor to create a new node.
-	 * @see #initialize(Node)
-	 */
-	protected AbstractNode(Node parent) {
-		super();
-		this.initialize();
-		this.initialize(parent);
-	}
-
-
-	// ********** initialization **********
-
-	/**
-	 * Initialize a newly-created instance.
-	 * @see #initialize(Node)
-	 */
-	protected void initialize() {
-		this.comment = ""; //$NON-NLS-1$
-
-		// a new object is dirty, by definition
-		this.dirty = true;
-		this.dirtyBranch = true;
-
-		this.problems = new Vector<Problem>();
-		this.branchProblems = new Vector<Problem>();
-
-	// when you override this method, don't forget to include:
-	//	super.initialize();
-	}
-
-	/**
-	 * Initialize a newly-created instance.
-	 * @see #initialize()
-	 */
-	protected void initialize(Node parentNode) {
-		this.checkParent(parentNode);
-		this.parent = parentNode;
-	// when you override this method, don't forget to include:
-	//	super.initialize(parentNode);
-	}
-
-	@Override
-	protected ChangeSupport buildChangeSupport() {
-		return new CallbackChangeSupport(this, this.buildChangeSupportListener());
-	}
-
-	protected CallbackChangeSupport.Listener buildChangeSupportListener() {
-		return new CallbackChangeSupport.Listener() {
-			public void aspectChanged(String aspectName) {
-				AbstractNode.this.aspectChanged(aspectName);
-			}
-		};
-	}
-
-
-	// ********** equality **********
-
-	/**
-	 * Enforce object identity - do not allow objects to be equal unless
-	 * they are the same object.
-	 * Do NOT override this method - we rely on object identity extensively.
-	 */
-	@Override
-	public final boolean equals(Object o) {
-		return this == o;
-	}
-
-	/**
-	 * Enforce object identity - do not allow objects to be equal unless
-	 * they are the same object.
-	 * Do NOT override this method - we rely on object identity extensively.
-	 */
-	@Override
-	public final int hashCode() {
-		return super.hashCode();
-	}
-
-
-	// ********** containment hierarchy (parent/children) **********
-
-	/**
-	 * INTRA-TREE API?
-	 * Return the node's parent in the containment hierarchy.
-	 * Most nodes must have a parent.
-	 * @see #children()
-	 */
-	public Node getParent() {
-		return this.parent;
-	}
-
-	/**
-	 * Throw an IllegalArgumentException if the parent is not valid
-	 * for the node.
-	 * By default require a non-null parent. Override if other restrictions exist
-	 * or the parent should be null.
-	 * NB: Root node model implementations will need to override this method.
-	 */
-	protected void checkParent(Node parentNode) {
-		if (parentNode == null) {
-			throw new IllegalArgumentException("The parent node cannot be null"); //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * INTRA-TREE API?
-	 * Return the node's children, which are also nodes.
-	 * Do NOT override this method.
-	 * Override #addChildrenTo(List).
-	 * @see #getParent()
-	 * @see #addChildrenTo(java.util.List)
-	 */
-	public final Iterator<Node> children() {
-		List<Node> children = new ArrayList<Node>();
-		this.addChildrenTo(children);
-		return children.iterator();
-	}
-
-	/**
-	 * Subclasses should override this method to add their children
-	 * to the specified list.
-	 * @see #children()
-	 */
-	protected void addChildrenTo(@SuppressWarnings("unused") List<Node> list) {
-		// this class has no children, subclasses will...
-	// when you override this method, don't forget to include:
-	//	super.addChildrenTo(list);
-	}
-
-	/**
-	 * INTRA-TREE API?
-	 * Return the containment hierarchy's root node.
-	 * Most nodes must have a root.
-	 * @see #getParent()
-	 * NB: Assume the root has no parent.
-	 */
-	public Node root() {
-		Node p = this.parent;
-		return (p == null) ? this : p.root();
-	}
-
-	/**
-	 * Return whether the node is a descendant of the specified node.
-	 * By definition, a node is a descendant of itself.
-	 */
-	public boolean isDescendantOf(Node node) {
-		return (this == node) || this.parentIsDescendantOf(node);
-	}
-
-	protected boolean parentIsDescendantOf(Node node) {
-		return (this.parent != null) && this.parent.isDescendantOf(node);
-	}
-
-	/**
-	 * Return a collection holding all the node's "references", and all
-	 * the node's descendants' "references". "References" are
-	 * objects that are "referenced" by another object, as opposed
-	 * to "owned" by another object.
-	 */
-	public Iterator<Node.Reference> branchReferences() {
-		Collection<Node.Reference> branchReferences = new ArrayList<Node.Reference>(1000);		// start big
-		this.addBranchReferencesTo(branchReferences);
-		return branchReferences.iterator();
-	}
-
-	/**
-	 * INTRA-TREE API
-	 * Add the node's "references", and all the node's descendants'
-	 * "references", to the specified collection. "References" are
-	 * objects that are "referenced" by another object, as opposed
-	 * to "owned" by another object.
-	 * This method is of particular concern to Handles, since most
-	 * (hopefully all) "references" are held by Handles.
-	 * @see Reference
-	 * @see #children()
-	 */
-	public void addBranchReferencesTo(Collection<Node.Reference> branchReferences) {
-		for (Iterator<Node> stream = this.children(); stream.hasNext(); ) {
-			Node child = stream.next();		// pull out the child to ease debugging
-			child.addBranchReferencesTo(branchReferences);
-		}
-	}
-
-	/**
-	 * Return all the nodes in the object's branch of the tree,
-	 * including the node itself. The nodes will probably returned
-	 * in "depth-first" order.
-	 * Only really used for testing and debugging.
-	 */
-	public Iterator<Node> allNodes() {
-		Collection<Node> nodes = new ArrayList<Node>(1000);		// start big
-		this.addAllNodesTo(nodes);
-		return nodes.iterator();
-	}
-
-	/**
-	 * INTRA-TREE API?
-	 * Add all the nodes in the object's branch of the tree,
-	 * including the node itself, to the specified collection.
-	 * Only really used for testing and debugging.
-	 */
-	public void addAllNodesTo(Collection<Node> nodes) {
-		nodes.add(this);
-		for (Iterator<Node> stream = this.children(); stream.hasNext(); ) {
-			Node child = stream.next();		// pull out the child to ease debugging
-			child.addAllNodesTo(nodes);
-		}
-	}
-
-
-	// ********** model synchronization support **********
-
-	/**
-	 * INTRA-TREE API
-	 * This is a general notification that the specified node has been
-	 * removed from the tree. The node receiving this notification
-	 * should perform any necessary updates to remain in synch
-	 * with the tree (e.g. clearing out or replacing any references
-	 * to the removed node or any of the removed node's descendants).
-	 * @see #isDescendantOf(Node)
-	 */
-	public void nodeRemoved(Node node) {
-		for (Iterator<Node> stream = this.children(); stream.hasNext(); ) {
-			Node child = stream.next();		// pull out the child to ease debugging
-			child.nodeRemoved(node);
-		}
-	// when you override this method, don't forget to include:
-	//	super.nodeRemoved(node);
-	}
-
-	/**
-	 * convenience method
-	 * return whether node1 is a descendant of node2;
-	 * node1 can be null
-	 */
-	protected boolean nodeIsDescendantOf(Node node1, Node node2) {
-		return (node1 != null) && node1.isDescendantOf(node2);
-	}
-
-	/**
-	 * INTRA-TREE API
-	 * This is a general notification that the specified node has been
-	 * renamed. The node receiving this notification should mark its
-	 * branch dirty if necessary (i.e. it references the renamed node
-	 * or one of its descendants). This method is of particular concern
-	 * to Handles.
-	 * @see #isDescendantOf(Node)
-	 */
-	public void nodeRenamed(Node node) {
-		for (Iterator<Node> stream = this.children(); stream.hasNext(); ) {
-			Node child = stream.next();		// pull out the child to ease debugging
-			child.nodeRenamed(node);
-		}
-	// when you override this method, don't forget to include:
-	//	super.nodeRenamed(node);
-	}
-	
-	
-	// ********** user comment **********
-
-	/**
-	 * Return the object's user comment.
-	 */
-	public final String comment() {
-		return this.comment;
-	}
-
-	/**
-	 * Set the object's user comment.
-	 */
-	public final void setComment(String comment) {
-		Object old = this.comment;
-		this.comment = comment;
-		this.firePropertyChanged(COMMENT_PROPERTY, old, comment);
-	}
-
-
-	// ********** change support **********
-
-	/**
-	 * An aspect of the node has changed:
-	 * 	- if it is a persistent aspect, mark the object dirty
-	 * 	- if it is a significant aspect, validate the object
-	 */
-	protected void aspectChanged(String aspectName) {
-		if (this.aspectIsPersistent(aspectName)) {
-			// System.out.println(Thread.currentThread() + " dirty change: " + this + ": " + aspectName);
-			this.markDirty();
-		}
-		if (this.aspectChangeRequiresValidation(aspectName)) {
-			// System.out.println(Thread.currentThread() + " validation change: " + this + ": " + aspectName);
-			this.validate();
-		}
-	}
-
-	protected void validate() {
-		this.getValidator().validate();
-	}
-
-	/**
-	 * INTRA-TREE API
-	 * Return a validator that will be invoked whenever a
-	 * "validated" aspect of the node tree changes.
-	 * Typically only the root node directly holds a validator.
-	 * NB: Root node model implementations will need to override this method.
-	 */
-	public Node.Validator getValidator() {
-		if (this.parent == null) {
-			throw new IllegalStateException("This node should not be firing change events during its construction."); //$NON-NLS-1$
-		}
-		return this.parent.getValidator();
-	}
-
-	/**
-	 * Set a validator that will be invoked whenever a
-	 * "validated" aspect of the node tree changes.
-	 * Typically only the root node directly holds a validator.
-	 * NB: Root node model implementations will need to override this method.
-	 */
-	public void setValidator(Node.Validator validator) {
-		if (this.parent == null) {
-			throw new IllegalStateException("This root node should implement #setValidator(Node.Validator)."); //$NON-NLS-1$
-		}
-		throw new UnsupportedOperationException("Only root nodes implement #setValidator(Node.Validator)."); //$NON-NLS-1$
-	}
-
-
-	// ********** dirty flag support **********
-
-	/**
-	 * Return whether any persistent aspects of the object
-	 * have changed since the object was last read or saved.
-	 * This does NOT include changes to the object's descendants.
-	 */
-	public final boolean isDirty() {
-		return this.dirty;
-	}
-
-	/**
-	 * Return whether any persistent aspects of the object,
-	 * or any of its descendants, have changed since the object and
-	 * its descendants were last read or saved.
-	 */
-	public final boolean isDirtyBranch() {
-		return this.dirtyBranch;
-	}
-
-	/**
-	 * Return whether the object is unmodified
-	 * since it was last read or saved.
-	 * This does NOT include changes to the object's descendants.
-	 */
-	public final boolean isClean() {
-		return ! this.dirty;
-	}
-
-	/**
-	 * Return whether the object and all of its descendants
-	 * are unmodified since the object and
-	 * its descendants were last read or saved.
-	 */
-	public final boolean isCleanBranch() {
-		return ! this.dirtyBranch;
-	}
-
-	/**
-	 * Set the dirty branch flag setting. This is set to true
-	 * when either the object or one of its descendants becomes dirty.
-	 */
-	private void setIsDirtyBranch(boolean dirtyBranch) {
-		boolean old = this.dirtyBranch;
-		this.dirtyBranch = dirtyBranch;
-		this.firePropertyChanged(DIRTY_BRANCH_PROPERTY, old, dirtyBranch);
-	}
-
-	/**
-	 * Mark the object as dirty and as a dirty branch.
-	 * An object is marked dirty when either a "persistent" attribute
-	 * has changed or its save location has changed.
-	 */
-	private void markDirty() {
-		this.dirty = true;
-		this.markBranchDirty();
-	}
-
-	/**
-	 * INTRA-TREE API
-	 * Mark the node and its parent as dirty branches.
-	 * This message is propagated up the containment
-	 * tree when a particular node becomes dirty.
-	 */
-	public void markBranchDirty() {
-		// short-circuit any unnecessary propagation
-		if (this.dirtyBranch) {
-			// if this is already a dirty branch, the parent must be also
-			return;
-		}
-
-		this.setIsDirtyBranch(true);
-		this.markParentBranchDirty();
-	}
-
-	protected void markParentBranchDirty() {
-		if (this.parent != null) {
-			this.parent.markBranchDirty();
-		}
-	}
-
-	/**
-	 * Mark the object and all its descendants as dirty.
-	 * This is used when the save location of some
-	 * top-level object is changed and the entire
-	 * containment tree must be marked dirty so it
-	 * will be written out.
-	 */
-	public final void markEntireBranchDirty() {
-		this.markDirty();
-		for (Iterator<Node> stream = this.children(); stream.hasNext(); ) {
-			Node child = stream.next();		// pull out the child to ease debugging
-			child.markEntireBranchDirty();
-		}
-	}
-
-	/**
-	 * Mark the object and all its descendants as clean.
-	 * Then notify the object's parent that it (the parent)
-	 * might now be a clean branch also.
-	 * Typically used when the object has just been
-	 * read in or written out.
-	 */
-	public final void markEntireBranchClean() {
-		this.cascadeMarkEntireBranchClean();
-		this.markParentBranchCleanIfPossible();
-	}
-
-	protected void markParentBranchCleanIfPossible() {
-		if (this.parent != null) {
-			this.parent.markBranchCleanIfPossible();
-		}
-	}
-
-	/**
-	 * INTRA-TREE API
-	 * Mark the node and all its descendants as clean.
-	 * Typically used when the node has just been
-	 * read in or written out.
-	 * This method is for internal use only; it is not for
-	 * client use.
-	 * Not the best of method names.... :-(
-	 */
-	public final void cascadeMarkEntireBranchClean() {
-		for (Iterator<Node> stream = this.children(); stream.hasNext(); ) {
-			Node child = stream.next();		// pull out the child to ease debugging
-			child.cascadeMarkEntireBranchClean();
-		}
-		this.dirty = false;
-		this.setIsDirtyBranch(false);
-	}
-
-	/**
-	 * INTRA-TREE API
-	 * A child node's branch has been marked clean. If the node
-	 * itself is clean and if all of its children are also clean, the
-	 * node's branch can be marked clean. Then, if the node's
-	 * branch is clean, the node will notify its parent that it might
-	 * be clean also. This message is propagated up the containment
-	 * tree when a particular node becomes clean.
-	 */
-	public final void markBranchCleanIfPossible() {
-		// short-circuit any unnecessary propagation
-		if (this.dirty) {
-			// if the object is "locally" dirty, it is still a dirty branch
-			return;
-		}
-
-		for (Iterator<Node> stream = this.children(); stream.hasNext(); ) {
-			Node child = stream.next();		// pull out the child to ease debugging
-			if (child.isDirtyBranch()) {
-				return;
-			}
-		}
-
-		this.setIsDirtyBranch(false);
-		this.markParentBranchCleanIfPossible();
-	}
-
-	private boolean aspectIsPersistent(String aspectName) {
-		return ! this.aspectIsTransient(aspectName);
-	}
-
-	private boolean aspectIsTransient(String aspectName) {
-		return this.transientAspectNames().contains(aspectName);
-	}
-
-	/**
-	 * Return a set of the object's transient aspect names.
-	 * These are the aspects that, when they change, will NOT cause the
-	 * object to be marked dirty.
-	 * If you need instance-based calculation of your transient aspects,
-	 * override this method. If class-based calculation is sufficient,
-	 * override #addTransientAspectNamesTo(Set).
-	 */
-	protected final Set<String> transientAspectNames() {
-		synchronized (transientAspectNameSets) {
-			HashSet<String> transientAspectNames = transientAspectNameSets.get(this.getClass());
-			if (transientAspectNames == null) {
-				transientAspectNames = new HashSet<String>();
-				this.addTransientAspectNamesTo(transientAspectNames);
-				transientAspectNameSets.put(this.getClass(), transientAspectNames);
-			}
-			return transientAspectNames;
-		}
-	}
-
-	/**
-	 * Add the object's transient aspect names to the specified set.
-	 * These are the aspects that, when they change, will NOT cause the
-	 * object to be marked dirty.
-	 * If class-based calculation of your transient aspects is sufficient,
-	 * override this method. If you need instance-based calculation,
-	 * override #transientAspectNames().
-	 */
-	protected void addTransientAspectNamesTo(Set<String> transientAspectNames) {
-		transientAspectNames.add(DIRTY_BRANCH_PROPERTY);
-		transientAspectNames.add(BRANCH_PROBLEMS_LIST);
-		transientAspectNames.add(HAS_BRANCH_PROBLEMS_PROPERTY);
-	// when you override this method, don't forget to include:
-	//	super.addTransientAspectNamesTo(transientAspectNames);
-	}
-
-	/**
-	 * Return the dirty nodes in the object's branch of the tree,
-	 * including the node itself (if appropriate).
-	 * Only really used for testing and debugging.
-	 */
-	public final Iterator<Node> allDirtyNodes() {
-		return new FilteringIterator<Node>(this.allNodes()) {
-			@Override
-			protected boolean accept(Node node) {
-				return (node instanceof AbstractNode) && ((AbstractNode) node).isDirty();
-			}
-		};
-	}
-
-
-	// ********** problems **********
-
-	/**
-	 * Return the node's problems.
-	 * This does NOT include the problems of the node's descendants.
-	 * @see #branchProblems()
-	 */
-	public final Iterator<Problem> problems() {
-		return new CloneIterator<Problem>(this.problems);	// removes are not allowed
-	}
-
-	/**
-	 * Return the size of the node's problems.
-	 * This does NOT include the problems of the node's descendants.
-	 * @see #branchProblemsSize()
-	 */
-	public final int problemsSize() {
-		return this.problems.size();
-	}
-
-	/**
-	 * Return whether the node has problems
-	 * This does NOT include the problems of the node's descendants.
-	 * @see #hasBranchProblems()
-	 */
-	public final boolean hasProblems() {
-		return ! this.problems.isEmpty();
-	}
-
-	/**
-	 * Return all the node's problems along with all the
-	 * node's descendants' problems.
-	 */
-	public final ListIterator<Problem> branchProblems() {
-		return new CloneListIterator<Problem>(this.branchProblems);	// removes are not allowed
-	}
-
-	/**
-	 * Return the size of all the node's problems along with all the
-	 * node's descendants' problems.
-	 */
-	public final int branchProblemsSize() {
-		return this.branchProblems.size();
-	}
-
-	/**
-	 * Return whether the node or any of its descendants have problems.
-	 */
-	public final boolean hasBranchProblems() {
-		return ! this.branchProblems.isEmpty();
-	}
-
-	public final boolean containsBranchProblem(Problem problem) {
-		return this.branchProblems.contains(problem);
-	}
-
-	protected final Problem buildProblem(String messageKey, Object... messageArguments) {
-		return new DefaultProblem(this, messageKey, messageArguments);
-	}
-
-	protected final Problem buildProblem(String messageKey) {
-		return this.buildProblem(messageKey, EMPTY_PROBLEM_MESSAGE_ARGUMENTS);
-	}
-
-	/**
-	 * Validate the node and all of its descendants,
-	 * and update their sets of "branch" problems.
-	 * If the node's "branch" problems have changed,
-	 * notify the node's parent.
-	 */
-	public void validateBranch() {
-		if (this.validateBranchInternal()) {
-			// if our "branch" problems have changed, then
-			// our parent must rebuild its "branch" problems also
-			this.rebuildParentBranchProblems();
-		}
-	}
-
-	protected void rebuildParentBranchProblems() {
-		if (this.parent != null) {
-			this.parent.rebuildBranchProblems();
-		}
-	}
-
-	/**
-	 * INTRA-TREE API
-	 * Validate the node and all of its descendants,
-	 * and update their sets of "branch" problems.
-	 * Return true if the collection of "branch" problems has changed.
-	 * This method is for internal use only; it is not for
-	 * client use.
-	 */
-	public boolean validateBranchInternal() {
-		// rebuild "branch" problems in children first
-		for (Iterator<Node> stream = this.children(); stream.hasNext(); ) {
-			Node child = stream.next();		// pull out the child to ease debugging
-			// ignore the return value because we are going to rebuild our "branch"
-			// problems no matter what, to see if they have changed
-			child.validateBranchInternal();
-		}
-
-		this.problems.clear();
-		this.addProblemsTo(this.problems);
-
-		return this.checkBranchProblems();
-	}
-
-	/**
-	 * Check for any problems and add them to the specified list.
-	 * This method should ONLY add problems for this particular node;
-	 * it should NOT add problems for any of this node's descendants
-	 * or ancestors. (Although there will be times when it is debatable
-	 * as to which node a problem "belongs" to....)
-	 * 
-	 * NB: This method should NOT modify ANY part of the node's state!
-	 * It is a READ-ONLY behavior. ONLY the list of current problems
-	 * passed in to the method should be modified.
-	 */
-	protected void addProblemsTo(@SuppressWarnings("unused") List<Problem> currentProblems) {
-		// The default is to do nothing.
-		// When you override this method, don't forget to include:
-	//	super.addProblemsTo(currentProblems);
-	}
-
-	/**
-	 * Rebuild the "branch" problems and return whether they have
-	 * changed.
-	 * NB: The entire collection of "branch" problems must be re-calculated
-	 * with EVERY "significant" change - we cannot keep it in synch via
-	 * change notifications because if a descendant with problems is
-	 * removed or replaced we will not receive notification that its
-	 * problems were removed from our "branch" problems.
-	 */
-	private boolean checkBranchProblems() {
-		Vector<Problem> oldBranchProblems = new Vector<Problem>(this.branchProblems);
-		int oldSize = this.branchProblems.size();
-
-		this.branchProblems.clear();
-		this.branchProblems.addAll(this.problems);
-		for (Iterator<Node> stream = this.children(); stream.hasNext(); ) {
-			Node child = stream.next();		// pull out the child to ease debugging
-			child.addBranchProblemsTo(this.branchProblems);
-		}
-
-		// if the size has changed to or from zero, our virtual flag has changed
-		int newSize = this.branchProblems.size();
-		if ((oldSize == 0) && (newSize != 0)) {
-			this.firePropertyChanged(HAS_BRANCH_PROBLEMS_PROPERTY, false, true);
-		} else if ((oldSize != 0) && (newSize == 0)) {
-			this.firePropertyChanged(HAS_BRANCH_PROBLEMS_PROPERTY, true, false);
-		}
-
-		if (oldBranchProblems.equals(this.branchProblems)) {
-			return false;		// our "branch" problems did not change
-		}
-		// our "branch" problems changed
-		this.fireListChanged(BRANCH_PROBLEMS_LIST, this.branchProblems);
-		return true;
-	}
-
-	/**
-	 * INTRA-TREE API
-	 * Add all the problems of the node and all
-	 * the problems of its descendants to the
-	 * specified collection.
-	 */
-	public final void addBranchProblemsTo(List<Problem> list) {
-		list.addAll(this.branchProblems);
-	}
-
-	/**
-	 * INTRA-TREE API
-	 * A child node's "branch" problems changed;
-	 * therefore the node's "branch" problems have changed also and
-	 * must be rebuilt.
-	 */
-	public final void rebuildBranchProblems() {
-		if ( ! this.checkBranchProblems()) {
-			throw new IllegalStateException("we should not get here unless our \"branch\" problems have changed"); //$NON-NLS-1$
-		}
-		this.rebuildParentBranchProblems();
-	}
-
-	/**
-	 * Clear the node's "branch" problems and the "branch"
-	 * problems of all of its descendants.
-	 * If the node's "branch" problems have changed,
-	 * notify the node's parent.
-	 */
-	public final void clearAllBranchProblems() {
-		if (this.clearAllBranchProblemsInternal()) {
-			// if our "branch" problems have changed, then
-			// our parent must rebuild its "branch" problems also
-			this.rebuildParentBranchProblems();
-		}
-	}
-
-	/**
-	 * INTRA-TREE API
-	 * Clear the node's "branch" problems and the "branch"
-	 * problems of all of its descendants.
-	 * Return true if the collection of "branch" problems has changed.
-	 * This method is for internal use only; it is not for
-	 * client use.
-	 */
-	public final boolean clearAllBranchProblemsInternal() {
-		if (this.branchProblems.isEmpty()) {
-			return false;
-		}
-		for (Iterator<Node> stream = this.children(); stream.hasNext(); ) {
-			Node child = stream.next();		// pull out the child to ease debugging
-			// ignore the return value because we are going to clear our "branch"
-			// problems no matter what
-			child.clearAllBranchProblemsInternal();
-		}
-		this.problems.clear();
-		this.branchProblems.clear();
-		this.firePropertyChanged(HAS_BRANCH_PROBLEMS_PROPERTY, true, false);
-		this.fireListChanged(BRANCH_PROBLEMS_LIST, this.branchProblems);
-		return true;
-	}
-
-	/**
-	 * Return whether a change to specified aspect requires a re-validation
-	 * of the node's tree.
-	 */
-	private boolean aspectChangeRequiresValidation(String aspectName) {
-		return ! this.aspectChangeDoesNotRequireValidation(aspectName);
-	}
-
-	private boolean aspectChangeDoesNotRequireValidation(String aspectName) {
-		return this.nonValidatedAspectNames().contains(aspectName);
-	}
-
-	/**
-	 * Return a set of the object's "non-validated" aspect names.
-	 * These are the aspects that, when they change, will NOT cause the
-	 * object (or its containing tree) to be validated, i.e. checked for problems.
-	 * If you need instance-based calculation of your "non-validated" aspects,
-	 * override this method. If class-based calculation is sufficient,
-	 * override #addNonValidatedAspectNamesTo(Set).
-	 */
-	protected final Set<String> nonValidatedAspectNames() {
-		synchronized (nonValidatedAspectNameSets) {
-			HashSet<String> nonValidatedAspectNames = nonValidatedAspectNameSets.get(this.getClass());
-			if (nonValidatedAspectNames == null) {
-				nonValidatedAspectNames = new HashSet<String>();
-				this.addNonValidatedAspectNamesTo(nonValidatedAspectNames);
-				nonValidatedAspectNameSets.put(this.getClass(), nonValidatedAspectNames);
-			}
-			return nonValidatedAspectNames;
-		}
-	}
-
-	/**
-	 * Add the object's "non-validated" aspect names to the specified set.
-	 * These are the aspects that, when they change, will NOT cause the
-	 * object (or its containing tree) to be validated, i.e. checked for problems.
-	 * If class-based calculation of your "non-validated" aspects is sufficient,
-	 * override this method. If you need instance-based calculation,
-	 * override #nonValidatedAspectNames().
-	 */
-	protected void addNonValidatedAspectNamesTo(Set<String> nonValidatedAspectNames) {
-		nonValidatedAspectNames.add(COMMENT_PROPERTY);
-		nonValidatedAspectNames.add(DIRTY_BRANCH_PROPERTY);
-		nonValidatedAspectNames.add(BRANCH_PROBLEMS_LIST);
-		nonValidatedAspectNames.add(HAS_BRANCH_PROBLEMS_PROPERTY);
-	// when you override this method, don't forget to include:
-	//	super.addNonValidatedAspectNamesTo(nonValidatedAspectNames);
-	}
-
-
-	// ********** display methods **********
-
-	/**
-	 * Return a developer-friendly String. If you want something useful for
-	 * displaying in a user interface, use #displayString().
-	 * If you want to give more information in your #toString(),
-	 * override #toString(StringBuilder sb). 
-	 * Whatever you add to that string buffer will show up between the parentheses.
-	 * @see AbstractModel#toString(StringBuilder sb)
-	 * @see #displayString()
-	 */
-	@Override
-	public final String toString() {
-		return super.toString();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/AsynchronousValidator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/AsynchronousValidator.java
deleted file mode 100644
index fd2059c..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/AsynchronousValidator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.node;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.SynchronizedBoolean;
-
-/**
- * This implementation of the PluggableValidator.Delegate interface
- * simply sets a shared "validate" flag to true. This should trigger a
- * separate "validation" thread to begin validating the appropriate
- * branch of nodes.
- */
-public class AsynchronousValidator
-	implements PluggableValidator.Delegate
-{
-	private SynchronizedBoolean validateFlag;
-
-	/**
-	 * Construct a validator delegate with the specified shared
-	 * "validate" flag. This flag should be shared with
-	 * another thread that will perform the actual validation.
-	 */
-	public AsynchronousValidator(SynchronizedBoolean validateFlag) {
-		super();
-		this.validateFlag = validateFlag;
-	}
-
-	/**
-	 * Set the shared "validate" flag to true, triggering
-	 * an asynchronous validation of the appropriate
-	 * branch of nodes.
-	 */
-	public void validate() {
-		this.validateFlag.setTrue();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.validateFlag);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/DefaultProblem.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/DefaultProblem.java
deleted file mode 100644
index 079693a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/DefaultProblem.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.node;
-
-import java.util.Arrays;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * This class is a straightforward implementation of the Problem interface.
- */
-public class DefaultProblem
-	implements Problem
-{
-	private final Node source;
-	private final String messageKey;
-	private final Object[] messageArguments;
-
-
-	DefaultProblem(Node source, String messageKey, Object[] messageArguments) {
-		super();
-		this.source = source;
-		this.messageKey = messageKey;
-		this.messageArguments = messageArguments;
-	}
-
-
-	// ********** Problem implementation **********
-
-	public Node source() {
-		return this.source;
-	}
-
-	public String messageKey() {
-		return this.messageKey;
-	}
-
-	public Object[] messageArguments() {
-		return this.messageArguments;
-	}
-
-
-	// ********** Object overrides **********
-
-	/**
-	 * We implement #equals(Object) because problems are repeatedly
-	 * re-calculated and the resulting problems merged with the existing
-	 * set of problems; and we want to keep the original problems and
-	 * ignore any freshly-generated duplicates.
-	 * Also, problems are not saved to disk....
-	 */
-	@Override
-	public boolean equals(Object o) {
-		if ( ! (o instanceof Problem)) {
-			return false;
-		}
-		Problem other = (Problem) o;
-		return this.source == other.source()
-				&& this.messageKey.equals(other.messageKey())
-				&& Arrays.equals(this.messageArguments, other.messageArguments());
-	}
-
-	@Override
-	public int hashCode() {
-		return this.source.hashCode() ^ this.messageKey.hashCode();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.messageKey);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/Node.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/Node.java
deleted file mode 100644
index fa3d756..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/Node.java
+++ /dev/null
@@ -1,377 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.node;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * This interface defines the methods that must be implemented
- * by any class whose instances are to be part of a containment hierarchy
- * that supports a "dirty" state and validation "problems".
- * 
- * Note: Methods marked "INTRA-TREE API" are typically only used by
- * the nodes themselves, as opposed to clients of the nodes. These
- * methods are called by a node on either its parent or its children.
- */
-public interface Node extends Model {
-
-
-	// ********** containment hierarchy (parent/children) **********
-
-	/**
-	 * INTRA-TREE API?
-	 * Return the node's parent in the containment hierarchy.
-	 * Most nodes must have a parent. The parent is immutable.
-	 * @see #children()
-	 */
-	Node getParent();
-
-	/**
-	 * INTRA-TREE API?
-	 * Return the node's children, which are also nodes.
-	 * @see #getParent()
-	 */
-	Iterator<Node> children();
-
-	/**
-	 * INTRA-TREE API?
-	 * Return the containment hierarchy's root node.
-	 * Most nodes must have a root.
-	 * @see #getParent()
-	 */
-	Node root();
-
-	/**
-	 * Return whether the node is a descendant of the specified node.
-	 * By definition, a node is a descendant of itself.
-	 */
-	boolean isDescendantOf(Node node);
-
-	/**
-	 * INTRA-TREE API
-	 * Add the node's "references", and all the node's descendants'
-	 * "references", to the specified collection. "References" are
-	 * objects that are "referenced" by another object, as opposed
-	 * to "owned" by another object.
-	 * This method is of particular concern to Handles, since most
-	 * (hopefully all) "references" are held by Handles.
-	 * @see Reference
-	 * @see #children()
-	 */
-	void addBranchReferencesTo(Collection<Node.Reference> branchReferences);
-
-	/**
-	 * INTRA-TREE API?
-	 * Add all the nodes in the object's branch of the tree,
-	 * including the node itself, to the specified collection.
-	 * Only really used for testing and debugging.
-	 */
-	void addAllNodesTo(Collection<Node> nodes);
-
-
-	// ********** model synchronization support **********
-
-	/**
-	 * INTRA-TREE API
-	 * This is a general notification that the specified node has been
-	 * removed from the tree. The node receiving this notification
-	 * should perform any necessary updates to remain in synch
-	 * with the tree (e.g. clearing out or replacing any references
-	 * to the removed node or any of the removed node's descendants).
-	 * @see #isDescendantOf(Node)
-	 */
-	void nodeRemoved(Node node);
-
-	/**
-	 * INTRA-TREE API
-	 * This is a general notification that the specified node has been
-	 * renamed. The node receiving this notification should mark its
-	 * branch dirty if necessary (i.e. it references the renamed node
-	 * or one of its descendants). This method is of particular concern
-	 * to Handles.
-	 * @see #isDescendantOf(Node)
-	 */
-	void nodeRenamed(Node node);
-	
-
-	// ********** dirty flag support **********
-
-	/**
-	 * Return whether any persistent aspects of the node,
-	 * or any of its descendants, have changed since the node and
-	 * its descendants were last read or saved.
-	 */
-	boolean isDirtyBranch();
-		String DIRTY_BRANCH_PROPERTY = "dirtyBranch"; //$NON-NLS-1$
-
-	/**
-	 * INTRA-TREE API
-	 * Mark the node and its parent as dirty branches.
-	 * This message is propagated up the containment
-	 * tree when a particular node becomes dirty.
-	 */
-	void markBranchDirty();
-
-	/**
-	 * Mark the node and all its descendants as dirty.
-	 * This is used when the save location of some
-	 * top-level node is changed and the entire
-	 * containment tree must be marked dirty so it
-	 * will be written out.
-	 */
-	void markEntireBranchDirty();
-
-	/**
-	 * INTRA-TREE API
-	 * A child node's branch has been marked clean. If the node
-	 * itself is clean and if all of its children are also clean, the
-	 * node's branch can be marked clean. Then, if the node's
-	 * branch is clean, the node will notify its parent that it might
-	 * be clean also. This message is propagated up the containment
-	 * tree when a particular node becomes clean.
-	 */
-	void markBranchCleanIfPossible();
-
-	/**
-	 * INTRA-TREE API
-	 * Mark the node and all its descendants as clean.
-	 * Typically used when the node has just been
-	 * read in or written out.
-	 * This method is for internal use only; it is not for
-	 * client use.
-	 * Not the best of method names.... :-(
-	 */
-	void cascadeMarkEntireBranchClean();
-
-
-	// ********** problems **********
-
-	/**
-	 * INTRA-TREE API
-	 * Return a validator that will be invoked whenever a
-	 * "validated" aspect of the node tree changes.
-	 * Typically only the root node directly holds a validator.
-	 */
-	Validator getValidator();
-
-	/**
-	 * Set a validator that will be invoked whenever a
-	 * "validated" aspect of the node tree changes.
-	 * Typically only the root node directly holds a validator.
-	 */
-	void setValidator(Validator validator);
-
-	/**
-	 * Validate the node and its descendants.
-	 * This is an explicit request invoked by a client; and it will
-	 * typically be followed by a call to one of the following methods:
-	 * 	#branchProblems()
-	 * 	#hasBranchProblems()
-	 * Whether the node maintains its problems on the fly
-	 * or waits until this method is called is determined by the
-	 * implementation.
-	 * @see Problem
-	 */
-	void validateBranch();
-
-	/**
-	 * INTRA-TREE API
-	 * Validate the node and all of its descendants,
-	 * and update their sets of "branch" problems.
-	 * Return true if the collection of "branch" problems has changed.
-	 * This method is for internal use only; it is not for
-	 * client use.
-	 */
-	boolean validateBranchInternal();
-
-	/**
-	 * Return all the node's problems along with all the
-	 * node's descendants' problems.
-	 */
-	ListIterator<Problem> branchProblems();
-		String BRANCH_PROBLEMS_LIST = "branchProblems"; //$NON-NLS-1$
-
-	/**
-	 * Return the size of all the node's problems along with all the
-	 * node's descendants' problems.
-	 */
-	int branchProblemsSize();
-
-	/**
-	 * Return whether the node or any of its descendants have problems.
-	 */
-	boolean hasBranchProblems();
-		String HAS_BRANCH_PROBLEMS_PROPERTY = "hasBranchProblems"; //$NON-NLS-1$
-
-	/**
-	 * Return whether the node contains the specified branch problem.
-	 */
-	boolean containsBranchProblem(Problem problem);
-
-	/**
-	 * INTRA-TREE API
-	 * Something changed, rebuild the node's collection of branch problems.
-	 */
-	void rebuildBranchProblems();
-
-	/**
-	 * INTRA-TREE API
-	 * Add the node's problems, and all the node's descendants'
-	 * problems, to the specified list.
-	 * A call to this method should be immediately preceded by a call to
-	 * #validateBranch() or all of the problems might not be
-	 * added to the list.
-	 * @see Problem
-	 */
-	void addBranchProblemsTo(List<Problem> branchProblems);
-
-	/**
-	 * Clear the node's "branch" problems and the "branch"
-	 * problems of all of its descendants.
-	 */
-	void clearAllBranchProblems();
-
-	/**
-	 * INTRA-TREE API
-	 * Clear the node's "branch" problems and the "branch"
-	 * problems of all of its descendants.
-	 * Return true if the collection of "branch" problems has changed.
-	 * This method is for internal use only; it is not for
-	 * client use.
-	 */
-	boolean clearAllBranchProblemsInternal();
-
-
-	// ********** comment **********
-
-	/**
-	 * Return the user comment concerning the node.
-	 */
-	String comment();
-		String COMMENT_PROPERTY = "comment"; //$NON-NLS-1$
-
-	/**
-	 * Set the user comment concerning the node.
-	 */
-	void setComment(String comment);
-
-
-	// ********** displaying/sorting **********
-
-	/**
-	 * Return a string representation of the model, suitable for sorting.
-	 */
-	String displayString();
-
-
-	// ********** sub-interfaces **********
-
-	/**
-	 * Simple interface defining a "reference" between two nodes.
-	 * @see Node#addBranchReferencesTo(java.util.Collection)
-	 */
-	interface Reference {
-
-		/**
-		 * Return the "source" node of the reference, i.e. the node that
-		 * references the "target" node.
-		 */
-		Node source();
-
-		/**
-		 * Return the "target" node of the reference, i.e. the node that
-		 * is referenced by the "source" node.
-		 */
-		Node target();
-
-	}
-
-
-	/**
-	 * A validator will validate a node as appropriate.
-	 * Typically the validation will
-	 * 	- occur whenever a node has changed
-	 * 	- encompass the entire tree containing the node
-	 * 	- execute asynchronously
-	 */
-	interface Validator {
-
-		/**
-		 * A "significant" aspect has changed;
-		 * validate the node as appropriate
-		 */
-		void validate();
-
-		/**
-		 * Stop all validation of the node until #resume() is called.
-		 * This can be used to improve the performance of any long-running
-		 * action that triggers numerous changes to the node. Be sure to
-		 * match a call to this method with a corresponding call to
-		 * #resume().
-		 */
-		void pause();
-
-		/**
-		 * Resume validation of the node. This method can only be
-		 * called after a matching call to #pause().
-		 */
-		void resume();
-
-	}
-
-
-	// ********** helper implementations **********
-
-	/**
-	 * Straightforward implementation of the Reference interface
-	 * defined above.
-	 */
-	public class SimpleReference implements Reference {
-		private Node source;
-		private Node target;
-		public SimpleReference(Node source, Node target) {
-			super();
-			if (source == null || target == null) {
-				throw new NullPointerException();
-			}
-			this.source = source;
-			this.target = target;
-		}
-		public Node source() {
-			return this.source;
-		}
-		public Node target() {
-			return this.target;
-		}
-		@Override
-		public String toString() {
-			return StringTools.buildToStringFor(this, this.source + " => " + this.target); //$NON-NLS-1$
-		}
-	}
-
-
-	/**
-	 * This validator does nothing to validate the node.
-	 */
-	Validator NULL_VALIDATOR =
-		new PluggableValidator(PluggableValidator.Delegate.Null.instance()) {
-			@Override
-			public String toString() {
-				return "Node.NULL_VALIDATOR"; //$NON-NLS-1$
-			}
-		};
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/PluggableValidator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/PluggableValidator.java
deleted file mode 100644
index 247387b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/PluggableValidator.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.node;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.SynchronizedBoolean;
-
-/**
- * This implementation of the Validator interface implements the
- * pause/resume portion of the protocol, but delegates the actual
- * validation to a "pluggable" delegate.
- */
-public class PluggableValidator
-	implements Node.Validator
-{
-	private boolean pause;
-	private boolean validateOnResume;
-	private final Delegate delegate;
-
-
-	/**
-	 * Convenience factory method.
-	 */
-	public static Node.Validator buildAsynchronousValidator(SynchronizedBoolean validateFlag) {
-		return new PluggableValidator(new AsynchronousValidator(validateFlag));
-	}
-
-	/**
-	 * Convenience factory method.
-	 */
-	public static Node.Validator buildSynchronousValidator(Node node) {
-		return new PluggableValidator(new SynchronousValidator(node));
-	}
-
-	/**
-	 * Construct a validator with the specified delegate.
-	 */
-	public PluggableValidator(Delegate delegate) {
-		super();
-		this.pause = false;
-		this.validateOnResume = false;
-		this.delegate = delegate;
-	}
-
-	public synchronized void validate() {
-		if (this.pause) {
-			this.validateOnResume = true;
-		} else {
-			this.delegate.validate();
-		}
-	}
-
-	public synchronized void pause() {
-		if (this.pause) {
-			throw new IllegalStateException("already paused"); //$NON-NLS-1$
-		}
-		this.pause = true;
-	}
-
-	public synchronized void resume() {
-		if ( ! this.pause) {
-			throw new IllegalStateException("not paused"); //$NON-NLS-1$
-		}
-		this.pause = false;
-		// validate any changes that occurred while the validation was paused
-		if (this.validateOnResume) {
-			this.validateOnResume = false;
-			this.delegate.validate();
-		}
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.delegate);
-	}
-
-
-	// ********** member interface **********
-
-	/**
-	 * Interface implemented by any delegates of a pluggable validator.
-	 */
-	public interface Delegate {
-
-		/**
-		 * The validator is not "paused" - perform the appropriate validation.
-		 */
-		void validate();
-
-
-		/**
-		 * This delegate does nothing.
-		 */
-		final class Null implements Delegate {
-			public static final Delegate INSTANCE = new Null();
-			public static Delegate instance() {
-				return INSTANCE;
-			}
-			// ensure single instance
-			private Null() {
-				super();
-			}
-			public void validate() {
-				// do nothing
-			}
-			@Override
-			public String toString() {
-				return "PluggableValidator.Delegate.Null"; //$NON-NLS-1$
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/Problem.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/Problem.java
deleted file mode 100644
index 4f8e730..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/Problem.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.node;
-
-/**
- * Define an interface describing the problems associated with a node.
- */
-public interface Problem {
-
-	/**
-	 * Return the node most closely associated with the problem.
-	 */
-	Node source();
-
-	/**
-	 * Return a key that can be used to uniquely identify the problem's message.
-	 */
-	String messageKey();
-
-	/**
-	 * Return the arguments associate with the problem's message.
-	 */
-	Object[] messageArguments();
-
-	/**
-	 * Return whether the problem is equal to the specified object.
-	 * It is equal if the specified object is a implementation of the
-	 * Problem interface and its source, message key, and message
-	 * arguments are all equal to this problem's.
-	 */
-	boolean equals(Object o);
-
-	/**
-	 * Return the problem's hash code, which should calculated as an
-	 * XOR of the source's hash code and the message key's hash code.
-	 */
-	int hashCode();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/SynchronousValidator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/SynchronousValidator.java
deleted file mode 100644
index ede6b8b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/node/SynchronousValidator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.node;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * This implementation of the PluggableValidator.Delegate interface
- * will validate the node immediately.
- * 
- * This is useful for debugging in a single thread or generating
- * problem reports.
- */
-public class SynchronousValidator
-	implements PluggableValidator.Delegate
-{
-	private final Node node;
-
-	/**
-	 * Construct a validator that will immediately validate the
-	 * specified node.
-	 */
-	public SynchronousValidator(Node node) {
-		super();
-		this.node = node;
-	}
-
-	public void validate() {
-		this.node.validateBranch();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.node);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/CachingComboBoxModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/CachingComboBoxModel.java
deleted file mode 100644
index 8ebe261..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/CachingComboBoxModel.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import javax.swing.ComboBoxModel;
-
-/**
- * This interface allows a client to better control the performance of
- * a combo box model by allowing the client to specify when it is
- * acceptable for the model to "cache" and "uncache" its list of elements.
- * The model may ignore these hints if appropriate.
- */
-public interface CachingComboBoxModel extends ComboBoxModel {
-    
-    /**
-     * Cache the comboBoxModel List.  If you call this, you
-     * must make sure to call uncacheList() as well.  Otherwise
-     * stale data will be in the ComboBox until cacheList() is 
-     * called again or uncacheList() is called.
-     */
-    void cacheList();
-    
-    /**
-     * Clear the cached list.  Next time the list is needed it will
-     * be built when it is not cached.
-     */
-    void uncacheList();
-
-    /**
-     * Check to see if the list is already cached.  This can be used for 
-     * MouseEvents, since they are not terribly predictable.
-     */
-    boolean isCached();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/CheckBoxTableCellRenderer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/CheckBoxTableCellRenderer.java
deleted file mode 100644
index 51ce1a8..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/CheckBoxTableCellRenderer.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import javax.swing.BorderFactory;
-import javax.swing.Icon;
-import javax.swing.JCheckBox;
-import javax.swing.JTable;
-import javax.swing.SwingConstants;
-import javax.swing.UIManager;
-import javax.swing.border.Border;
-import org.eclipse.jpt.utility.internal.swing.TableCellEditorAdapter.ImmediateEditListener;
-
-/**
- * Make the cell look like a check box.
- */
-public class CheckBoxTableCellRenderer implements TableCellEditorAdapter.Renderer {
-
-	/** the component used to paint the cell */
-	private final JCheckBox checkBox;
-	
-	/** the listener to be notified on an immediate edit */
-	protected TableCellEditorAdapter.ImmediateEditListener immediateEditListener;
-
-	/** "normal" border - assume the default table "focus" border is 1 pixel thick */
-	private static final Border NO_FOCUS_BORDER = BorderFactory.createEmptyBorder(1, 1, 1, 1);
-
-
-	// ********** constructors/initialization **********
-
-	/**
-	 * Construct a cell renderer with no label or icon.
-	 */
-	public CheckBoxTableCellRenderer() {
-		super();
-		this.checkBox = this.buildCheckBox();
-		// by default, check boxes do not paint their borders
-		this.checkBox.setBorderPainted(true);
-		// this setting is recommended for check boxes inside of trees and tables
-		this.checkBox.setBorderPaintedFlat(true);
-	}
-
-	/**
-	 * Construct a cell renderer with the specified text and icon,
-	 * either of which may be null.
-	 */
-	public CheckBoxTableCellRenderer(String text, Icon icon) {
-		this();
-		this.setText(text);
-		this.setIcon(icon);
-	}
-
-	/**
-	 * Construct a cell renderer with the specified text.
-	 */
-	public CheckBoxTableCellRenderer(String text) {
-		this(text, null);
-	}
-
-	/**
-	 * Construct a cell renderer with the specified icon.
-	 */
-	public CheckBoxTableCellRenderer(Icon icon) {
-		this(null, icon);
-	}
-
-	protected JCheckBox buildCheckBox() {
-		JCheckBox cb = new JCheckBox();
-		cb.addActionListener(this.buildActionListener());
-		return cb;
-	}
-	
-	private ActionListener buildActionListener() {
-		return new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				if (CheckBoxTableCellRenderer.this.immediateEditListener != null) {
-					CheckBoxTableCellRenderer.this.immediateEditListener.immediateEdit();
-				}
-			}
-		};
-	}
-
-
-	// ********** TableCellRenderer implementation **********
-
-	public Component getTableCellRendererComponent(JTable table, Object value, boolean selected, boolean hasFocus, int row, int column) {
-	    this.checkBox.setHorizontalAlignment(SwingConstants.CENTER);
-		this.checkBox.setComponentOrientation(table.getComponentOrientation());
-		this.checkBox.setFont(table.getFont());
-		this.checkBox.setEnabled(table.isEnabled());
-
-		this.checkBox.setForeground(this.foregroundColor(table, value, selected, hasFocus, row, column));
-		this.checkBox.setBackground(this.backgroundColor(table, value, selected, hasFocus, row, column));
-		// once the colors are set, calculate opaque setting
-		this.checkBox.setOpaque(this.cellIsOpaqueIn(table, value, selected, hasFocus, row, column));
-		this.checkBox.setBorder(this.border(table, value, selected, hasFocus, row, column));
-
-		this.setValue(value);
-		return this.checkBox;
-	}
-
-	/**
-	 * Return the cell's foreground color.
-	 */
-	protected Color foregroundColor(JTable table, @SuppressWarnings("unused") Object value, boolean selected, boolean hasFocus, int row, int column) {
-		if (selected) {
-			if (hasFocus && table.isCellEditable(row, column)) {
-				return UIManager.getColor("Table.focusCellForeground"); //$NON-NLS-1$
-			}
-			return table.getSelectionForeground();
-		}
-		return table.getForeground();
-	}
-
-	/**
-	 * Return the cell's background color.
-	 */
-	protected Color backgroundColor(JTable table, @SuppressWarnings("unused") Object value, boolean selected, boolean hasFocus, int row, int column) {
-		if (selected) {
-			if (hasFocus && table.isCellEditable(row, column)) {
-				return UIManager.getColor("Table.focusCellBackground"); //$NON-NLS-1$
-			}
-			return table.getSelectionBackground();
-		}
-		return table.getBackground();
-	}
-
-	/**
-	 * Return the cell's border.
-	 */
-	protected Border border(@SuppressWarnings("unused") JTable table, @SuppressWarnings("unused") Object value, @SuppressWarnings("unused") boolean selected, boolean hasFocus, @SuppressWarnings("unused") int row, @SuppressWarnings("unused") int column) {
-		return hasFocus ?  UIManager.getBorder("Table.focusCellHighlightBorder") : NO_FOCUS_BORDER; //$NON-NLS-1$
-	}
-
-	/**
-	 * Return whether the cell should be opaque in the table.
-	 * If the cell's background is the same as the table's background
-	 * and table is opaque, we don't need to paint the background -
-	 * the table will do it.
-	 */
-	protected boolean cellIsOpaqueIn(JTable table, @SuppressWarnings("unused") Object value, @SuppressWarnings("unused") boolean selected, @SuppressWarnings("unused") boolean hasFocus, @SuppressWarnings("unused") int row, @SuppressWarnings("unused") int column) {
-		Color cellBackground = this.checkBox.getBackground();
-		Color tableBackground = table.getBackground();
-		return ! (table.isOpaque() && cellBackground.equals(tableBackground));
-	}
-
-	/**
-	 * Set the check box's value.
-	 */
-	protected void setValue(Object value) {
-		// CR#3999318 - This null check needs to be removed once JDK bug is fixed
-		if (value == null) {
-			value = Boolean.FALSE;
-		}
-		this.checkBox.setSelected(((Boolean) value).booleanValue());
-	}
-
-
-	// ********** TableCellEditorAdapter.Renderer implementation **********
-
-	public Object getValue() {
-		return Boolean.valueOf(this.checkBox.isSelected());
-	}
-	
-	public void setImmediateEditListener(ImmediateEditListener listener) {
-		this.immediateEditListener = listener;
-	}
-
-	// ********** public API **********
-
-	/**
-	 * Set the check box's text; which by default is blank.
-	 */
-	public void setText(String text) {
-		this.checkBox.setText(text);
-	}
-
-	/**
-	 * Set the check box's icon; which by default is not present.
-	 */
-	public void setIcon(Icon icon) {
-		this.checkBox.setIcon(icon);
-	}
-
-	/**
-	 * Return the renderer's preferred height. This allows you
-	 * to set the table's row height to something the check box
-	 * will look good in....
-	 */
-	public int preferredHeight() {
-		// add in space for the border top and bottom
-		return (int) this.checkBox.getPreferredSize().getHeight() + 2;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/ComboBoxTableCellRenderer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/ComboBoxTableCellRenderer.java
deleted file mode 100644
index 149b7fd..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/ComboBoxTableCellRenderer.java
+++ /dev/null
@@ -1,328 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import javax.swing.BorderFactory;
-import javax.swing.ComboBoxModel;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.JTable;
-import javax.swing.ListCellRenderer;
-import javax.swing.SwingConstants;
-import javax.swing.UIManager;
-import javax.swing.border.Border;
-import javax.swing.event.PopupMenuEvent;
-import javax.swing.event.PopupMenuListener;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-
-/**
- * Make the cell look like a combo-box.
- */
-public class ComboBoxTableCellRenderer implements TableCellEditorAdapter.Renderer {
-
-	/* caching the combo box because we are caching the comboBoxModel.
-	 * Everytime we rebuilt the comboBox we would set the model on it and not
-	 * remove the model from the old combo box.  This meant that new listeners
-	 * kept being added to the comboBoxModel for every comboBox build.
-	 * Not sure if there is a way to clear out the old combo box, or why
-	 * we were buildig a new combo box every time so I went with caching it.
-	 */
-	private JComboBox comboBox;
-	
-	/** the items used to populate the combo box */
-	private CachingComboBoxModel model;
-	private ListCellRenderer renderer;
-	Object value;
-	private static int height = -1;
-	boolean fakeFocusFlag;
-
-	/** the listener to be notified on an immediate edit */
-	protected TableCellEditorAdapter.ImmediateEditListener immediateEditListener;
-	
-	/** hold the original colors of the combo-box */
-	private static Color defaultForeground;
-	private static Color defaultBackground;
-
-	/** "normal" border - assume the default table "focus" border is 1 pixel thick */
-	private static final Border NO_FOCUS_BORDER = BorderFactory.createEmptyBorder(1, 1, 1, 1);
-
-
-	// ********** constructors/initialization **********
-
-	/**
-	 * Default constructor.
-	 */
-	private ComboBoxTableCellRenderer() {
-		super();
-		initialize();
-	}
-
-	/**
-	 * Construct a cell renderer that uses the specified combo-box model.
-	 */
-	public ComboBoxTableCellRenderer(ComboBoxModel model) {
-		this(new NonCachingComboBoxModel(model));
-	}
-	
-	/**
-	 * Construct a cell renderer that uses the specified caching combo-box model.
-	 */
-	public ComboBoxTableCellRenderer(CachingComboBoxModel model) {
-		this();
-		this.model = model;
-	}
-
-	/**
-	 * Construct a cell renderer that uses the specified
-	 * combo-box model and renderer.
-	 */
-	public ComboBoxTableCellRenderer(ComboBoxModel model, ListCellRenderer renderer) {
-		this(new NonCachingComboBoxModel(model), renderer);
-	}
-	
-	/**
-	 * Construct a cell renderer that uses the specified
-	 * caching combo-box model and renderer.
-	 */
-	public ComboBoxTableCellRenderer(CachingComboBoxModel model, ListCellRenderer renderer) {
-		this(model);
-		this.renderer = renderer;
-	}
-
-	protected void initialize() {
-		// save the original colors of the combo-box, so we
-		// can use them to paint non-selected cells
-		if (height == -1) {
-			JComboBox cb = new JComboBox();
-			cb.addItem("m"); //$NON-NLS-1$
-
-			// add in space for the border top and bottom
-			height = cb.getPreferredSize().height + 2;
-
-			defaultForeground = cb.getForeground();
-			defaultBackground = cb.getBackground();
-		}
-	}
-
-    static JLabel prototypeLabel = new JLabel("Prototype", new EmptyIcon(16), SwingConstants.LEADING); //$NON-NLS-1$
-
-    protected JComboBox buildComboBox() {
-
-		final JComboBox result = new JComboBox() {
-			private boolean fakeFocus;
-			@Override
-			public boolean hasFocus() {
-				return fakeFocus || super.hasFocus();
-			}
-			@Override
-			public void paint(Graphics g) {
-				fakeFocus = ComboBoxTableCellRenderer.this.fakeFocusFlag;
-				super.paint(g);
-				fakeFocus = false;
-			}
-			//wrap the renderer to deal with the prototypeDisplayValue
-		    @Override
-			public void setRenderer(final ListCellRenderer aRenderer) {
-		        super.setRenderer(new ListCellRenderer(){
-		            public Component getListCellRendererComponent(JList list, Object v, int index, boolean isSelected, boolean cellHasFocus) {
-		                if (v == prototypeLabel) {
-		                    return prototypeLabel;
-		                }
-		                return aRenderer.getListCellRendererComponent(list, v, index, isSelected, cellHasFocus);
-		            }
-		        });
-		    }
-			@Override
-			public int getSelectedIndex() {
-		        boolean listNotCached = !listIsCached();
-		        if (listNotCached) {
-		            cacheList();
-		        }
-		        
-				int index = super.getSelectedIndex();
-
-		        if (listNotCached) {
-		            uncacheList();
-		        }
-				return index;
-		   }
-
-		};
-		// stole this code from javax.swing.DefaultCellEditor
-		result.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); //$NON-NLS-1$
-		result.addActionListener(this.buildActionListener());
-		result.addPopupMenuListener(this.buildPopupMenuListener());
-		
-        //These are used to workaround problems with Swing trying to 
-        //determine the size of a comboBox with a large model
-        result.setPrototypeDisplayValue(prototypeLabel);
-        getListBox(result).setPrototypeCellValue(prototypeLabel);
-        
-		return result;
-	}
-	
-    
-    private JList getListBox(JComboBox result) {
-        return (JList) ReflectionTools.getFieldValue(result.getUI(), "listBox"); //$NON-NLS-1$
-    }
-
-	
-	private ActionListener buildActionListener() {
-		return new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				JComboBox cb = (JComboBox) e.getSource();
-				Object selectedItem = cb.getSelectedItem();
-
-				// Only update the selected item and invoke immediateEdit() if the
-				// selected item actually changed, during the initialization of the
-				// editing, the model changes and causes this method to be invoked,
-				// it causes CR#3963675 to occur because immediateEdit() stop the
-				// editing, which is done at the wrong time
-				if (ComboBoxTableCellRenderer.this.value != selectedItem) {
-					ComboBoxTableCellRenderer.this.value = cb.getSelectedItem();
-					ComboBoxTableCellRenderer.this.immediateEdit();
-				}
-			}
-		};
-	}
-
-	void immediateEdit() {
-		if (this.immediateEditListener != null) {
-			this.immediateEditListener.immediateEdit();
-		}
-	}
-	
-	private PopupMenuListener buildPopupMenuListener() {
-		return new PopupMenuListener() {
-		
-			public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-				if (listIsCached()) {
-					uncacheList();
-				}
-				cacheList();
-			}
-		
-			public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
-	            if (listIsCached()) {
-	                uncacheList();
-	            }
-
-			}
-		
-			public void popupMenuCanceled(PopupMenuEvent e) {
-	            if (listIsCached()) {
-	                uncacheList();
-	            }
-			}
-		};
-	}
-
-	
-	void cacheList() {
-		this.model.cacheList();
-	}
-	
-	void uncacheList() {
-		this.model.uncacheList();
-	}	
-	
-	boolean listIsCached() {
-		return this.model.isCached();
-	}
-	// ********** TableCellRenderer implementation **********
-
-	public Component getTableCellRendererComponent(JTable table, Object val, boolean selected, boolean hasFocus, int row, int column) {
-		this.fakeFocusFlag = selected || hasFocus;
-		if (this.comboBox == null) {
-			this.comboBox = this.buildComboBox();
-	
-			this.comboBox.setComponentOrientation(table.getComponentOrientation());
-			this.comboBox.setModel(this.model);
-			if (this.renderer != null) {
-				this.comboBox.setRenderer(this.renderer);
-			}
-			this.comboBox.setFont(table.getFont());
-			this.comboBox.setEnabled(table.isEnabled());
-			this.comboBox.setBorder(this.border(table, val, selected, hasFocus, row, column));
-		}
-
-		// We need to go through the model since JComboBox might prevent us from
-		// selecting the value. This can happen when the value is not contained
-		// in the model, see CR#3950044 for an example
-		this.model.setSelectedItem(val);
-
-		return this.comboBox;
-	}
-
-	/**
-	 * Return the cell's foreground color.
-	 */
-	protected Color foregroundColor(JTable table, @SuppressWarnings("unused") Object val, boolean selected, boolean hasFocus, int row, int column) {
-		if (selected) {
-			if (hasFocus && table.isCellEditable(row, column)) {
-				return defaultForeground;
-			}
-			return table.getSelectionForeground();
-		}
-		return defaultForeground;
-	}
-
-	/**
-	 * Return the cell's background color.
-	 */
-	protected Color backgroundColor(JTable table, @SuppressWarnings("unused") Object val, boolean selected, boolean hasFocus, int row, int column) {
-		if (selected) {
-			if (hasFocus && table.isCellEditable(row, column)) {
-				return defaultBackground;
-			}
-			return table.getSelectionBackground();
-		}
-		return defaultBackground;
-	}
-
-	/**
-	 * Return the cell's border.
-	 */
-	protected Border border(@SuppressWarnings("unused") JTable table, @SuppressWarnings("unused") Object val, @SuppressWarnings("unused") boolean selected, boolean hasFocus, @SuppressWarnings("unused") int row, @SuppressWarnings("unused") int column) {
-		return hasFocus ?
-			UIManager.getBorder("Table.focusCellHighlightBorder") //$NON-NLS-1$
-		:
-			NO_FOCUS_BORDER;
-	}
-
-
-	// ********** TableCellEditorAdapter.Renderer implementation **********
-
-	public Object getValue() {
-		return this.value;
-	}
-	
-	public void setImmediateEditListener(TableCellEditorAdapter.ImmediateEditListener listener) {
-		this.immediateEditListener = listener;
-	}
-
-
-	// ********** public API **********
-
-	/**
-	 * Return the renderer's preferred height. This allows you
-	 * to set the row height to something the combo-box will look good in....
-	 */
-	public int preferredHeight() {
-		return height;
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/Displayable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/Displayable.java
deleted file mode 100644
index 93523eb..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/Displayable.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import javax.swing.Icon;
-
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * Used by general-purpose UI models and renderers to cast
- * application model objects to something displayable.
- */
-public interface Displayable
-	extends Model
-{
-
-	/**
-	 * Return a string that can be used to identify the model
-	 * in a textual UI setting (typically the object's name).
-	 * When the display string changes, the model should fire
-	 * the appropriate change notification:
-	 *     this.firePropertyChanged(DISPLAY_STRING_PROPERTY, oldDisplayString, this.displayString());
-	 */
-	String displayString();
-		String DISPLAY_STRING_PROPERTY = "displayString"; //$NON-NLS-1$
-
-	/**
-	 * Return an icon that can be used to identify the model
-	 * in a UI component that supports icons (the icon can be null).
-	 * When the icon changes, the model should fire
-	 * the appropriate change notification:
-	 *     this.firePropertyChanged(ICON_PROPERTY, oldIcon, this.icon());
-	 */
-	Icon icon();
-		String ICON_PROPERTY = "icon"; //$NON-NLS-1$
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/EmptyIcon.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/EmptyIcon.java
deleted file mode 100644
index 6464ea9..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/EmptyIcon.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import java.awt.Component;
-import java.awt.Graphics;
-import javax.swing.Icon;
-
-/**
- * Implement the Icon interface with an icon that has a size but
- * does not paint anything on the graphics context.
- */
-public class EmptyIcon
-	implements Icon
-{
-	private final int width;
-	private final int height;
-
-	public static final EmptyIcon NULL_INSTANCE = new EmptyIcon(0);
-
-
-	public EmptyIcon(int width, int height) {
-		super();
-		this.width = width;
-		this.height = height;
-	}
-
-	public EmptyIcon(int size) {
-		this(size, size);
-	}
-
-
-	// ********** Icon implementation **********
-
-	public void paintIcon(Component c, Graphics g, int x, int y) {
-		// don't paint anything for an empty icon
-	}
-
-	public int getIconWidth() { 
-		return this.width;
-	}
-
-	public int getIconHeight() {
-		return this.height;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/FilteringListBrowser.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/FilteringListBrowser.java
deleted file mode 100644
index f175164..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/FilteringListBrowser.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import javax.swing.Icon;
-import javax.swing.JComboBox;
-import javax.swing.JOptionPane;
-import javax.swing.ListModel;
-
-/**
- * This implementation of LongListComponent.Browser uses a
- * JOptionPane to prompt the user for the selection. The JOPtionPane
- * is passed a FilteringListPanel to assist the user in making
- * a selection.
- */
-public class FilteringListBrowser<T> 
-	implements ListChooser.ListBrowser 
-{
-	private FilteringListPanel<T> panel;
-
-	/**
-	 * Default constructor.
-	 */
-	public FilteringListBrowser() {
-		super();
-		this.panel = this.buildPanel();
-	}
-
-	protected FilteringListPanel<T> buildPanel() {
-		return new LocalFilteringListPanel<T>();
-	}
-
-	/**
-	 * Prompt the user using a JOptionPane with a filtering
-	 * list panel.
-	 */
-	public void browse(ListChooser chooser) {	
-		this.initializeCellRenderer(chooser);
-		
-		int option = 
-			JOptionPane.showOptionDialog(
-				chooser, 
-				this.message(chooser), 
-				this.title(chooser), 
-				this.optionType(chooser), 
-				this.messageType(chooser), 
-				this.icon(chooser), 
-				this.selectionValues(chooser), 
-				this.initialSelectionValue(chooser)
-		);
-		
-		if (option == JOptionPane.OK_OPTION) {
-			chooser.getModel().setSelectedItem(this.panel.selection());
-		}
-		
-		// clear the text field so the list box is re-filtered
-		this.panel.textField().setText(""); //$NON-NLS-1$
-	}
-	
-	protected void initializeCellRenderer(JComboBox comboBox) {
-		// default behavior should be to use the cell renderer from the combobox.
-		this.panel.listBox().setCellRenderer(comboBox.getRenderer());
-	}
-
-	/**
-	 * the message can be anything - here we build a component
-	 */
-	protected Object message(JComboBox comboBox) {
-		this.panel.setCompleteList(this.convertToArray(comboBox.getModel()));
-		this.panel.setSelection(comboBox.getModel().getSelectedItem());
-		return this.panel;
-	}
-
-	protected String title(@SuppressWarnings("unused") JComboBox comboBox) {
-		return null;
-	}
-
-	protected int optionType(@SuppressWarnings("unused") JComboBox comboBox) {
-		return JOptionPane.OK_CANCEL_OPTION;
-	}
-
-	protected int messageType(@SuppressWarnings("unused") JComboBox comboBox) {
-		return JOptionPane.QUESTION_MESSAGE;
-	}
-
-	protected Icon icon(@SuppressWarnings("unused") JComboBox comboBox) {
-		return null;
-	}
-
-	protected Object[] selectionValues(@SuppressWarnings("unused") JComboBox comboBox) {
-		return null;
-	}
-
-	protected Object initialSelectionValue(@SuppressWarnings("unused") JComboBox comboBox) {
-		return null;
-	}
-
-	/**
-	 * Convert the list of objects in the specified list model
-	 * into an array.
-	 */
-	protected Object[] convertToArray(ListModel model) {
-		int size = model.getSize();
-		Object[] result = new Object[size];
-		for (int i = 0; i < size; i++) {
-			result[i] = model.getElementAt(i);
-		}
-		return result;
-	}
-	
-	
-	// ********** custom panel **********
-	
-	protected static class LocalFilteringListPanel<S> extends FilteringListPanel<S> {
-		protected static final Object[] EMPTY_ARRAY = new Object[0];
-
-		protected LocalFilteringListPanel() {
-			super(EMPTY_ARRAY, null);
-		}
-	
-		/**
-		 * Disable the performance tweak because JOptionPane
-		 * will try open wide enough to disable the horizontal scroll bar;
-		 * and it looks a bit clumsy.
-		 */
-		@Override
-		protected String prototypeCellValue() {
-			return null;
-		}
-	
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/FilteringListPanel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/FilteringListPanel.java
deleted file mode 100644
index 8b62ab6..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/FilteringListPanel.java
+++ /dev/null
@@ -1,455 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Font;
-import javax.swing.AbstractListModel;
-import javax.swing.BorderFactory;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTextField;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListModel;
-import javax.swing.ListSelectionModel;
-import javax.swing.border.Border;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import org.eclipse.jpt.utility.internal.SimpleStringMatcher;
-import org.eclipse.jpt.utility.internal.StringConverter;
-import org.eclipse.jpt.utility.internal.StringMatcher;
-
-/**
- * This panel presents an entry field and a list box of choices that
- * allows the user to filter the entries in the list box by entering
- * a pattern in the entry field.
- * 
- * By default, two wildcards are allowed in the pattern:
- * 	'*' will match any set of zero or more characters
- * 	'?' will match any single character
- * 
- * The panel consists of 4 components that can be customized:
- * 	- 1 text field
- * 	- 1 list box
- * 	- 2 labels, one for each of the above
- * 
- * Other aspects of the panel's behavior can be changed:
- * 	- the string converter determines how the objects in the
- * 		list are converted to strings and compared to the pattern
- * 		entered in the text field; by default the converter simply
- * 		uses the result of the object's #toString() method
- * 		(if you replace the string converter, you will probably
- * 		want to replace the list box's cell renderer also)
- * 	- the string matcher can also be changed if you would
- * 		like different pattern matching behavior than that
- * 		described above
- * 	- you can specify the maximum size of the list - this may
- * 		force the user to enter a pattern restrictive enough
- * 		to result in a list smaller than the maximum size; the
- * 		default is -1, which disables the restriction
- * 
- * This panel is not a typical panel, in the sense that it does not share
- * its model with clients via value models. Instead, this panel's model
- * is set and queried directly because it is designed to be used in a
- * dialog that directs the user's behavior (as opposed to a "normal"
- * window).
- */
-public class FilteringListPanel<T> extends JPanel {
-
-	/**
-	 * The complete list of available choices
-	 * (as opposed to the partial list held by the list box).
-	 */
-	private Object[] completeList;
-
-	/**
-	 * An adapter used to convert the objects in the list
-	 * to strings so they can be run through the matcher
-	 * and displayed in the text field.
-	 */
-	StringConverter<T> stringConverter;
-
-	/** The text field. */
-	private JTextField textField;
-	private JLabel textFieldLabel;
-	private DocumentListener textFieldListener;
-
-	/** The list box. */
-	private JList listBox;
-	private JLabel listBoxLabel;
-
-	/** The maximum number of entries displayed in the list box. */
-	private int maxListSize;
-
-	/**
-	 * The matcher used to filter the list against
-	 * the pattern entered in the text field. By default,
-	 * this allows the two wildcard characters described in
-	 * the class comment.
-	 */
-	private StringMatcher stringMatcher;
-
-	/**
-	 * Performance tweak: We use this buffer instead of
-	 * a temporary variable during filtering so we don't have
-	 * to keep re-allocating it.
-	 */
-	private Object[] buffer;
-
-	private static final Border TEXT_FIELD_LABEL_BORDER = BorderFactory.createEmptyBorder(0, 0, 5, 0);
-	private static final Border LIST_BOX_LABEL_BORDER = BorderFactory.createEmptyBorder(5, 0, 5, 0);
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a FilteringListPanel with the specified list of choices
-	 * and initial selection. Use the default string converter to convert the
-	 * choices and selection to strings (which simply calls #toString() on
-	 * the objects).
-	 */
-	public FilteringListPanel(Object[] completeList, Object initialSelection) {
-		this(completeList, initialSelection, StringConverter.Default.<T>instance());
-	}
-
-	/**
-	 * Construct a FilteringListPanel with the specified list of choices
-	 * and initial selection. Use the specified string converter to convert the
-	 * choices and selection to strings.
-	 */
-	public FilteringListPanel(Object[] completeList, Object initialSelection, StringConverter<T> stringConverter) {
-		super(new BorderLayout());
-		this.completeList = completeList;
-		this.stringConverter = stringConverter;
-		this.initialize(initialSelection);
-	}
-
-
-	// ********** initialization **********
-
-	private void initialize(Object initialSelection) {
-		this.maxListSize = this.defaultMaxListSize();
-		this.buffer = this.buildBuffer();
-
-		this.textFieldListener = this.buildTextFieldListener();
-
-		this.stringMatcher = this.buildStringMatcher();
-
-		this.initializeLayout(initialSelection);
-	}
-
-	private Object[] buildBuffer() {
-		return new Object[this.max()];
-	}
-
-	/**
-	 * Return the current max number of entries allowed in the list box.
-	 */
-	private int max() {
-		if (this.maxListSize == -1) {
-			return this.completeList.length;
-		}
-		return Math.min(this.maxListSize, this.completeList.length);
-	}
-
-	/**
-	 * Build a listener that will listen to changes in the text field
-	 * and filter the list appropriately.
-	 */
-	private DocumentListener buildTextFieldListener() {
-		return new DocumentListener() {
-			public void insertUpdate(DocumentEvent e) {
-				FilteringListPanel.this.filterList();
-			}
-			public void changedUpdate(DocumentEvent e) {
-				FilteringListPanel.this.filterList();
-			}
-			public void removeUpdate(DocumentEvent e) {
-				FilteringListPanel.this.filterList();
-			}
-			@Override
-			public String toString() {
-				return "text field listener"; //$NON-NLS-1$
-			}
-		};
-	}
-
-	private int defaultMaxListSize() {
-		return -1;
-	}
-
-	private StringMatcher buildStringMatcher() {
-		return new SimpleStringMatcher<T>();
-	}
-
-	private void initializeLayout(Object initialSelection) {
-		// text field
-		JPanel textFieldPanel = new JPanel(new BorderLayout());
-		this.textFieldLabel = new JLabel();
-		this.textFieldLabel.setBorder(TEXT_FIELD_LABEL_BORDER);
-		textFieldPanel.add(this.textFieldLabel, BorderLayout.NORTH);
-
-		this.textField = new JTextField();
-		this.textField.getDocument().addDocumentListener(this.textFieldListener);
-		this.textFieldLabel.setLabelFor(this.textField);
-		textFieldPanel.add(this.textField, BorderLayout.CENTER);
-
-		this.add(textFieldPanel, BorderLayout.NORTH);
-
-		// list box
-		JPanel listBoxPanel = new JPanel(new BorderLayout());
-		this.listBoxLabel = new JLabel();
-		this.listBoxLabel.setBorder(LIST_BOX_LABEL_BORDER);
-		listBoxPanel.add(this.listBoxLabel, BorderLayout.NORTH);
-
-		this.listBox = new JList();
-		this.listBox.setDoubleBuffered(true);
-		this.listBox.setModel(this.buildPartialArrayListModel(this.completeList, this.max()));
-		this.listBox.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-		// performance tweak(?)
-		this.listBox.setPrototypeCellValue(this.prototypeCellValue());
-		this.listBox.setPrototypeCellValue(null);
-		this.listBox.setCellRenderer(this.buildDefaultCellRenderer());
-		this.listBoxLabel.setLabelFor(this.listBox);
-		// bug 2777802 - scroll bars shouldn't be on the tab sequence
-		JScrollPane listBoxScrollPane = new JScrollPane(this.listBox);
-		listBoxScrollPane.getHorizontalScrollBar().setFocusable(false);
-		listBoxScrollPane.getVerticalScrollBar().setFocusable(false);
-		listBoxPanel.add(listBoxScrollPane, BorderLayout.CENTER);
-
-		// initialize the widgets
-		this.listBox.setSelectedValue(initialSelection, true);
-		this.textField.select(0, this.textField.getText().length());
-
-		this.add(listBoxPanel, BorderLayout.CENTER);
-	}
-
-
-	// ********** public API **********
-
-	public Object selection() {
-		return this.listBox.getSelectedValue();
-	}
-
-	public void setSelection(Object selection) {
-		this.listBox.setSelectedValue(selection, true);
-	}
-
-	public Object[] completeList() {
-		return this.completeList;
-	}
-
-	/**
-	 * rebuild the filtering buffer and re-apply the filter
-	 * to the new list
-	 */
-	public void setCompleteList(Object[] completeList) {
-		this.completeList = completeList;
-		if (this.buffer.length < this.max()) {
-			// the buffer will never shrink - might want to re-consider...  ~bjv
-			this.buffer = this.buildBuffer();
-		}
-		this.filterList();
-	}
-
-	public int maxListSize() {
-		return this.maxListSize;
-	}
-
-	public void setMaxListSize(int maxListSize) {
-		this.maxListSize = maxListSize;
-		if (this.buffer.length < this.max()) {
-			// the buffer will never shrink - might want to re-consider...  ~bjv
-			this.buffer = this.buildBuffer();
-		}
-		this.filterList();
-	}
-
-	public StringConverter<T> stringConverter() {
-		return this.stringConverter;
-	}
-
-	/**
-	 * apply the new filter to the list
-	 */
-	public void setStringConverter(StringConverter<T> stringConverter) {
-		this.stringConverter = stringConverter;
-		this.filterList();
-	}
-
-	/**
-	 * allow client code to access the text field
-	 * (so we can set the focus)
-	 */
-	public JTextField textField() {
-		return this.textField;
-	}
-
-	/**
-	 * allow client code to access the text field label
-	 */
-	public JLabel textFieldLabel() {
-		return this.textFieldLabel;
-	}
-
-	/**
-	 * convenience method
-	 */
-	public void setTextFieldLabelText(String text) {
-		this.textFieldLabel.setText(text);
-	}
-
-	/**
-	 * allow client code to access the list box
-	 * (so we can add mouse listeners for double-clicking)
-	 */
-	public JList listBox() {
-		return this.listBox;
-	}
-
-	/**
-	 * convenience method
-	 */
-	public void setListBoxCellRenderer(ListCellRenderer renderer) {
-		this.listBox.setCellRenderer(renderer);
-	}
-
-	/**
-	 * allow client code to access the list box label
-	 */
-	public JLabel listBoxLabel() {
-		return this.listBoxLabel;
-	}
-
-	/**
-	 * convenience method
-	 */
-	public void setListBoxLabelText(String text) {
-		this.listBoxLabel.setText(text);
-	}
-
-	/**
-	 * convenience method
-	 */
-	public void setComponentsFont(Font font) {
-		this.textFieldLabel.setFont(font);
-		this.textField.setFont(font);
-		this.listBoxLabel.setFont(font);
-		this.listBox.setFont(font);
-	}
-
-	public StringMatcher stringMatcher() {
-		return this.stringMatcher;
-	}
-
-	/**
-	 * re-apply the filter to the list
-	 */
-	public void setStringMatcher(StringMatcher stringMatcher) {
-		this.stringMatcher = stringMatcher;
-		this.filterList();
-	}
-
-
-	// ********** internal methods **********
-
-	/**
-	 * Allow subclasses to disable performance tweak
-	 * by returning null here.
-	 */
-	protected String prototypeCellValue() {
-		return "==========> A_STRING_THAT_IS_DEFINITELY_LONGER_THAN_EVERY_STRING_IN_THE_LIST <=========="; //$NON-NLS-1$
-	}
-
-	/**
-	 * By default, use the string converter to build the text
-	 * used by the list box's cell renderer.
-	 */
-	protected ListCellRenderer buildDefaultCellRenderer() {
-		return new SimpleListCellRenderer() {
-			@Override
-			@SuppressWarnings("unchecked")
-			protected String buildText(Object value) {
-				return FilteringListPanel.this.stringConverter.convertToString((T) value);
-			}
-		};
-	}
-
-	/**
-	 * Something has changed that requires us to filter the list.
-	 * 
-	 * This method is synchronized because a fast typist can
-	 * generate events quicker than we can filter the list. (?  ~bjv)
-	 */
-	synchronized void filterList() {
-		// temporarily stop listening to the list box selection, since we will
-		// be changing the selection during the filtering and don't want
-		// that to affect the text field
-		this.filterList(this.textField.getText());
-	}
-
-	/**
-	 * Filter the contents of the list box to match the
-	 * specified pattern.
-	 */
-	private void filterList(String pattern) {
-		if (pattern.length() == 0) {
-			this.listBox.setModel(this.buildPartialArrayListModel(this.completeList, this.max()));
-		} else {
-			this.stringMatcher.setPatternString(pattern);
-			int j = 0;
-			int len = this.completeList.length;
-			int max = this.max();
-			for (int i = 0; i < len; i++) {
-				if (this.stringMatcher.matches(this.stringConverter.convertToString(this.entry(i)))) {
-					this.buffer[j++] = this.completeList[i];
-				}
-				if (j == max) {
-					break;
-				}
-			}
-			this.listBox.setModel(this.buildPartialArrayListModel(this.buffer, j));
-		}
-
-		// after filtering the list, determine the appropriate selection
-		if (this.listBox.getModel().getSize() == 0) {
-			this.listBox.getSelectionModel().clearSelection();
-		} else {
-			this.listBox.getSelectionModel().setAnchorSelectionIndex(0);
-			this.listBox.getSelectionModel().setLeadSelectionIndex(0);
-			this.listBox.ensureIndexIsVisible(0);
-		}
-	}
-
-	/**
-	 * minimize scope of suppressed warnings
-	 */
-	@SuppressWarnings("unchecked")
-	private T entry(int index) {
-		return (T) this.completeList[index];
-	}
-
-	/**
-	 * Build a list model that wraps only a portion of the specified array.
-	 * The model will include the array entries from 0 to (size - 1).
-	 */
-	private ListModel buildPartialArrayListModel(final Object[] array, final int size) {
-		return new AbstractListModel() {
-			public int getSize() {
-				return size;
-			}
-			public Object getElementAt(int index) {
-				return array[index];
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/ListChooser.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/ListChooser.java
deleted file mode 100644
index 600652e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/ListChooser.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import java.awt.AWTEvent;
-import java.awt.AWTException;
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.awt.Point;
-import java.awt.Robot;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseEvent;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultListCellRenderer;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.ListCellRenderer;
-import javax.swing.SwingConstants;
-import javax.swing.event.PopupMenuEvent;
-import javax.swing.event.PopupMenuListener;
-import javax.swing.plaf.basic.BasicComboBoxUI;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-
-/**
- * This component provides a way to handle selecting an item from a
- * list that may grow too large to be handled conveniently by a combo-box. 
- * If the list's size is less than the designated "long" list size, 
- * the choice list will be displayed in a normal combo-box popup; 
- * otherwise, a dialog will be used to prompt the user to choose a selection.
- * 
- * To change the browse mechanism, subclasses may 
- * 	- override the method #buildBrowser()
- *  - override the method #browse(), in which case the method 
- * 		#buildBrowser() may be ignored.
- */
-public class ListChooser 
-	extends JComboBox
-{
-	
-	/** the size of a "long" list - anything smaller is a "short" list */
-	int longListSize = DEFAULT_LONG_LIST_SIZE;
-	
-	/** the default size of a "long" list, which is 20 (to match JOptionPane's behavior) */
-	public static final int DEFAULT_LONG_LIST_SIZE = 20;
-	
-	/** property change associated with long list size */
-	public static final String LONG_LIST_SIZE_PROPERTY = "longListSize"; //$NON-NLS-1$
-	
-    static JLabel prototypeLabel = new JLabel("Prototype", new EmptyIcon(17), SwingConstants.LEADING); //$NON-NLS-1$
-
-    /** 
-	 * whether the chooser is choosable.  if a chooser is not choosable,
-	 * it only serves as a display widget.  a user may not change its 
-	 * selected value.
-	 */
-	boolean choosable = true;
-	
-	/** property change associated with choosable */
-	public static final String CHOOSABLE_PROPERTY = "choosable"; //$NON-NLS-1$
-	
-	/** the browser used to make a selection from the long list - typically via a dialog */
-	private ListBrowser browser;
-	
-    private NodeSelector nodeSelector;
-    
-	/** INTERNAL - The popup is being shown.  Used to prevent infinite loop. */
-	boolean popupAlreadyInProgress;
-	
-	
-	// **************** Constructors ******************************************
-	
-	/**
-	 * Construct a list chooser for the specified model.
-	 */
-	public ListChooser(ComboBoxModel model) {
-		this(model, new NodeSelector.DefaultNodeSelector());
-	}
-	
-    public ListChooser(CachingComboBoxModel model) {
-        this(model, new NodeSelector.DefaultNodeSelector());
-    }
-    
-	public ListChooser(ComboBoxModel model, NodeSelector nodeSelector) {
-        this(new NonCachingComboBoxModel(model), nodeSelector);
-    }
-    
-    public ListChooser(CachingComboBoxModel model, NodeSelector nodeSelector) {
-        super(model);
-        this.initialize();
-        this.nodeSelector = nodeSelector;
-    }
-	// **************** Initialization ****************************************
-	
-	protected void initialize() {
-		this.addPopupMenuListener(this.buildPopupMenuListener());
-		this.setRenderer(new DefaultListCellRenderer());
-        this.addKeyListener(buildF3KeyListener());
-        
-        //These are used to workaround problems with Swing trying to 
-        //determine the size of a comboBox with a large model
-        setPrototypeDisplayValue(prototypeLabel);
-        listBox().setPrototypeCellValue(prototypeLabel);
-	}
-	
-    
-    private JList listBox() {
-        return (JList) ReflectionTools.getFieldValue(this.ui, "listBox"); //$NON-NLS-1$
-    }
-    
-	/** 
-	 * When the popup is about to be shown, the event is consumed, and 
-	 * PopupHandler determines whether to reshow the popup or to show
-	 * the long list browser.
-	 */
-	private PopupMenuListener buildPopupMenuListener() {
-		return new PopupMenuListener() {
-			public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-				ListChooser.this.aboutToShowPopup();
-			}
-			public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
-				// do nothing
-			}
-			public void popupMenuCanceled(PopupMenuEvent e) {
-				// do nothing
-			}
-			@Override
-			public String toString() {
-				return "pop-up menu listener"; //$NON-NLS-1$
-			}
-		};
-	}
-	
-	/**
-	 * If this code is being reached due to the PopupHandler already being in progress,
-	 * then do nothing.  Otherwise, set the flag to true and launch the PopupHandler.
-	 */
-	void aboutToShowPopup() {
-		if (this.popupAlreadyInProgress) {
-			return;
-		}
-		
-		this.popupAlreadyInProgress = true;
-		EventQueue.invokeLater(new PopupHandler());
-	}
- 
-    
-	private KeyListener buildF3KeyListener() {
-        return new KeyAdapter() {
-            @Override
-			public void keyPressed(KeyEvent e) {
-                if (e.getKeyCode() == KeyEvent.VK_F3) {
-                    goToSelectedItem();
-                }                
-            }
-			@Override
-			public String toString() {
-				return "F3 key listener"; //$NON-NLS-1$
-			}
-        };
-    }
-    
-    public void goToSelectedItem() {
-        if (getSelectedItem() != null) {
-            ListChooser.this.nodeSelector.selectNodeFor(getSelectedItem());
-        }
-    }
-    
-	// **************** Browsing **********************************************
-	
-	/** 
-	 * Lazily initialize because subclasses may have further initialization to do
-	 * before browser can be built.
-	 */
-	protected void browse() {
-		if (this.browser == null) {
-			this.browser = this.buildBrowser();
-		}
-		
-		this.browser.browse(this);
-	}
-	
-	/**
-	 * Return the "browser" used to make a selection from the long list,
-	 * typically via a dialog.
-	 */
-	protected ListChooser.ListBrowser buildBrowser() {
-		return new SimpleListBrowser();
-	}
-	
-	
-	// **************** Choosable functionality *******************************
-	
-	/** override behavior - consume selection if chooser is not choosable */
-	@Override
-	public void setSelectedIndex(int anIndex) {
-		if (this.choosable) {
-			super.setSelectedIndex(anIndex);
-		}
-	}
-	
-	private void updateArrowButton() {
-		try {
-			BasicComboBoxUI comboBoxUi = (BasicComboBoxUI) ListChooser.this.getUI();
-			JButton arrowButton = (JButton) ReflectionTools.getFieldValue(comboBoxUi, "arrowButton"); //$NON-NLS-1$
-			arrowButton.setEnabled(this.isEnabled() && this.choosable);
-		}
-		catch (Exception e) {
-			// this is a huge hack to try and make the combo box look right,
-			// so if it doesn't work, just swallow the exception
-		}
-	}
-	
-	
-    // **************** List Caching *******************************
-
-    void cacheList() {
-        ((CachingComboBoxModel) getModel()).cacheList();
-    }
-    
-    void uncacheList() {
-        ((CachingComboBoxModel) getModel()).uncacheList();
-    }
-
-    boolean listIsCached() {
-        return ((CachingComboBoxModel) getModel()).isCached();
-    }
-    
-	// **************** Public ************************************************
-	
-	public int longListSize() {
-		return this.longListSize;
-	}
-	
-	public void setLongListSize(int newLongListSize) {
-		int oldLongListSize = this.longListSize;
-		this.longListSize = newLongListSize;
-		this.firePropertyChange(LONG_LIST_SIZE_PROPERTY, oldLongListSize, newLongListSize);
-	}
-	
-	public boolean isChoosable() {
-		return this.choosable;
-	}
-	
-	public void setChoosable(boolean newValue) {
-		boolean oldValue = this.choosable;
-		this.choosable = newValue;
-		this.firePropertyChange(CHOOSABLE_PROPERTY, oldValue, newValue);
-		this.updateArrowButton();
-	}
-	
-	// **************** Handle selecting null as a value **********************
-
-	private boolean selectedIndexIsNoneSelectedItem(int index) {
-		return index == -1 &&
-				 getModel().getSize() > 0 &&
-				 getModel().getElementAt(0) == null;
-	}
-
-	@Override
-	public int getSelectedIndex() {
-        boolean listNotCached = !listIsCached();
-        if (listNotCached) {
-            cacheList();
-        }
-        
-		int index = super.getSelectedIndex();
-
-		// Use index 0 to show the <none selected> item since the actual value is
-		// null and JComboBox does not handle null values
-		if (selectedIndexIsNoneSelectedItem(index)) {
-			index = 0;
-        }
-
-        if (listNotCached) {
-            uncacheList();
-        }
-		return index;
-   }
-	
-	//wrap the renderer to deal with the prototypeDisplayValue
-    @Override
-	public void setRenderer(final ListCellRenderer aRenderer) {
-        super.setRenderer(new ListCellRenderer(){
-            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
-                if (value == prototypeLabel) {
-                    return prototypeLabel;
-                }
-                return aRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-            }
-        });
-    }
-    
-    
-	// **************** Member classes ****************************************
-	
-	/**
-	 * Define the API required by this ListChooser when it must
-	 * prompt the user to select an item from the "long" list.
-	 */
-	public interface ListBrowser 
-	{
-		/**
-		 * Prompt the user to make a selection from the specified
-		 * combo-box's model.
-		 */
-		void browse(ListChooser parentChooser);
-	}
-	
-	
-	/**
-	 * Runnable class that consumes popup window and determines whether
-	 * to reshow popup or to launch browser, based on the size of the list.
-	 */
-	private class PopupHandler
-		implements Runnable
-	{
-		/** The mouse event */
-		private MouseEvent lastMouseEvent;
-		
-		/** The component from which the last mouse event was thrown */
-		private JComponent eventComponent;
-		
-		/** The location of the component at the time the last mouse event was thrown */
-		private Point componentLocation;
-		
-		/** The location of the mouse at the time the last mouse event was thrown */
-		private Point mouseLocation;
-		
-		
-		PopupHandler() {
-			this.initialize();
-		}
-		
-		private void initialize() {
-			AWTEvent event = EventQueue.getCurrentEvent();
-			
-			if (event instanceof MouseEvent) {
-				this.lastMouseEvent = (MouseEvent) event;
-				this.eventComponent = (JComponent) this.lastMouseEvent.getSource();
-				this.componentLocation = this.eventComponent.getLocationOnScreen();
-				this.mouseLocation = this.lastMouseEvent.getPoint();
-			}
-			else {
-				this.eventComponent = null;
-				this.componentLocation = null;
-				this.mouseLocation = null;
-			}
-		}
-		
-		public void run() {
-			ListChooser.this.hidePopup();
-			
-            cacheList();
-			if (ListChooser.this.choosable == true) {
-				// If the combo box model is of sufficient length, the browser will be shown.
-				// Asking the combo box model for its size should be enough to ensure that 
-				//  its size is recalculated.
-				if (ListChooser.this.getModel().getSize() > ListChooser.this.longListSize) {
-					this.checkComboBoxButton();
-					ListChooser.this.browse();
-				}
-				else {
-					ListChooser.this.showPopup();
-					this.checkMousePosition();
-				}
-			}
-            if (listIsCached()) {
-                uncacheList();
-            }
-			
-			ListChooser.this.popupAlreadyInProgress = false;
-		}
-		
-		/** If this is not done, the button never becomes un-pressed */
-		private void checkComboBoxButton() {
-			try {
-				BasicComboBoxUI comboBoxUi = (BasicComboBoxUI) ListChooser.this.getUI();
-				JButton arrowButton = (JButton) ReflectionTools.getFieldValue(comboBoxUi, "arrowButton"); //$NON-NLS-1$
-				arrowButton.getModel().setPressed(false);
-			}
-			catch (Exception ex) {
-				// this is a huge hack to try and make the combo box look right,
-				// so if it doesn't work, just swallow the exception
-				this.handleException(ex);
-			}
-		}
-
-		private void handleException(@SuppressWarnings("unused") Exception ex) {
-			// do nothing for now
-		}
-		
-		/**
-		 * Moves the mouse back to its original position before any jiggery pokery that we've done.
-		 */
-		private void checkMousePosition() {
-			if (this.eventComponent == null) {
-				return;
-			}
-			
-			final Point newComponentLocation = this.eventComponent.getLocationOnScreen();
-			boolean componentMoved = 
-				newComponentLocation.x - this.componentLocation.x != 0
-				|| newComponentLocation.y - this.componentLocation.y != 0;
-			
-			if (componentMoved) {
-				try {
-					new Robot().mouseMove(
-						newComponentLocation.x + this.mouseLocation.x,
-						newComponentLocation.y + this.mouseLocation.y
-					);
-				}
-				catch (AWTException ex) {
-					// move failed - do nothing
-				}
-			}
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/NodeSelector.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/NodeSelector.java
deleted file mode 100644
index f8b4d14..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/NodeSelector.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-/**
- * This will be called when the user presses F3 or chooses
- * 'Go To' in the context menu
- */
-public interface NodeSelector 
-{       
-    /**
-     * Select the appropriate Node in the tree or the editor panel.
-     */
-    void selectNodeFor(Object item);
-    
-    /**
-     * This NodeSelector will do nothing when selectNodeFor(Object) is called
-     */
-    class DefaultNodeSelector implements NodeSelector {
-        
-        public void selectNodeFor(Object item) {
-            //default is to do nothing
-        }
-    }
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/NonCachingComboBoxModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/NonCachingComboBoxModel.java
deleted file mode 100644
index ee72264..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/NonCachingComboBoxModel.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import javax.swing.ComboBoxModel;
-import javax.swing.event.ListDataListener;
-
-/**
- * This implementation of the CachingComboBoxModel interface can be used
- * whenever there is no need for caching (i.e. the contents of the selection
- * list can be generated with little latency). All the normal ComboBoxModel
- * behavior is delegated to a client-supplied ComboBoxModel.
- */
-public class NonCachingComboBoxModel implements CachingComboBoxModel {
-	private ComboBoxModel wrappedComboBoxModel;
-
-	public NonCachingComboBoxModel(ComboBoxModel wrappedComboBoxModel) {
-		this.wrappedComboBoxModel = wrappedComboBoxModel;
-	}
-
-
-	// ********** CachingComboBoxModel implementation **********
-
-	public void cacheList() {
-		//do nothing
-	}
-
-	public void uncacheList() {
-		//do nothing
-	}
-
-	public boolean isCached() {
-		return false;
-	}
-
-
-	// ********** ComboBoxModel implementation **********
-
-	public void setSelectedItem(Object anItem) {
-		this.wrappedComboBoxModel.setSelectedItem(anItem);
-	}
-
-	public Object getSelectedItem() {
-		return this.wrappedComboBoxModel.getSelectedItem();
-	}
-
-
-	// ********** ListModel implementation **********
-
-	public int getSize() {
-		return this.wrappedComboBoxModel.getSize();
-	}
-
-	public Object getElementAt(int index) {
-		return this.wrappedComboBoxModel.getElementAt(index);
-	}
-
-	public void addListDataListener(ListDataListener l) {
-		this.wrappedComboBoxModel.addListDataListener(l);
-	}
-
-	public void removeListDataListener(ListDataListener l) {
-		this.wrappedComboBoxModel.removeListDataListener(l);
-	}  
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/SimpleDisplayable.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/SimpleDisplayable.java
deleted file mode 100644
index 30ccdd5..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/SimpleDisplayable.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import javax.swing.Icon;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-
-/**
- * This implementation of Displayable converts any Object
- * to a Displayable. Subclass it to override #displayString() and
- * #icon() if necessary. Change notification will be fired if the
- * object is changed.
- * 
- * This can be used for Strings - the display string
- * will simply be the String itself.
- */
-public class SimpleDisplayable
-	extends AbstractModel
-	implements Displayable
-{
-	/** The object to be converted to a Displayable. */
-	protected Object object;
-
-
-	/**
-	 * Construct a displayable for the specified object.
-	 */
-	public SimpleDisplayable(Object object) {
-		super();
-		this.object = object;
-	}
-
-	public SimpleDisplayable(boolean b) {
-		this(Boolean.valueOf(b));
-	}
-
-	public SimpleDisplayable(char c) {
-		this(Character.valueOf(c));
-	}
-
-	public SimpleDisplayable(byte b) {
-		this(Byte.valueOf(b));
-	}
-
-	public SimpleDisplayable(short s) {
-		this(Short.valueOf(s));
-	}
-
-	public SimpleDisplayable(int i) {
-		this(Integer.valueOf(i));
-	}
-
-	public SimpleDisplayable(long l) {
-		this(Long.valueOf(l));
-	}
-
-	public SimpleDisplayable(float f) {
-		this(Float.valueOf(f));
-	}
-
-	public SimpleDisplayable(double d) {
-		this(Double.valueOf(d));
-	}
-
-
-	// ********** Displayable implementation **********
-
-	public String displayString() {
-		return this.object.toString();
-	}
-
-	public Icon icon() {
-		return null;
-	}
-
-
-	// ********** accessors **********
-
-	public Object getObject() {
-		return this.object;
-	}
-
-	public void setObject(Object object) {
-		String oldDisplayString = this.displayString();
-		Icon oldIcon = this.icon();
-		this.object = object;
-		this.firePropertyChanged(DISPLAY_STRING_PROPERTY, oldDisplayString, this.displayString());
-		this.firePropertyChanged(ICON_PROPERTY, oldIcon, this.icon());
-	}
-
-	public boolean getBoolean() {
-		return ((Boolean) this.object).booleanValue();
-	}
-
-	public void setBoolean(boolean b) {
-		this.setObject(Boolean.valueOf(b));
-	}
-
-	public char getChar() {
-		return ((Character) this.object).charValue();
-	}
-
-	public void setChar(char c) {
-		this.setObject(Character.valueOf(c));
-	}
-
-	public byte getByte() {
-		return ((Byte) this.object).byteValue();
-	}
-
-	public void setByte(byte b) {
-		this.setObject(Byte.valueOf(b));
-	}
-
-	public short getShort() {
-		return ((Short) this.object).shortValue();
-	}
-
-	public void setShort(short s) {
-		this.setObject(Short.valueOf(s));
-	}
-
-	public int getInt() {
-		return ((Integer) this.object).intValue();
-	}
-
-	public void setInt(int i) {
-		this.setObject(Integer.valueOf(i));
-	}
-
-	public long getLong() {
-		return ((Long) this.object).longValue();
-	}
-
-	public void setLong(long l) {
-		this.setObject(Long.valueOf(l));
-	}
-
-	public float getFloat() {
-		return ((Float) this.object).floatValue();
-	}
-
-	public void setFloat(float f) {
-		this.setObject(Float.valueOf(f));
-	}
-
-	public double getDouble() {
-		return ((Double) this.object).doubleValue();
-	}
-
-	public void setDouble(double d) {
-		this.setObject(Double.valueOf(d));
-	}
-
-
-	// ********** override methods **********
-
-	@Override
-	public void toString(StringBuilder sb) {
-		sb.append(this.object);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/SimpleListBrowser.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/SimpleListBrowser.java
deleted file mode 100644
index b61c557..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/SimpleListBrowser.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import javax.swing.Icon;
-import javax.swing.JComboBox;
-import javax.swing.JOptionPane;
-import javax.swing.ListModel;
-
-/**
- * This implementation of ListChooser.Browser uses a
- * JOptionPane to prompt the user for the selection. Subclasses 
- * can change the dialog's title, message, and/or icon.
- */
-public class SimpleListBrowser
-	implements ListChooser.ListBrowser 
-{
-	/** Default constructor */
-	protected SimpleListBrowser() {
-		super();
-	}
-	
-	/**
-	 * Prompt the user using a JOptionPane.
-	 */
-	public void browse(ListChooser chooser) {
-		Object selection = 
-			JOptionPane.showInputDialog(
-				chooser, 
-				this.message(chooser), 
-				this.title(chooser), 
-				this.messageType(chooser), 
-				this.icon(chooser), 
-				this.selectionValues(chooser), 
-				this.initialSelectionValue(chooser)
-			);
-		
-		if (selection != null) {
-			chooser.getModel().setSelectedItem(selection);
-		}
-	}
-	
-	protected Object message(@SuppressWarnings("unused") JComboBox comboBox) {
-		return null;
-	}
-	
-	protected String title(@SuppressWarnings("unused") JComboBox comboBox) {
-		return null;
-	}
-	
-	protected int messageType(@SuppressWarnings("unused") JComboBox comboBox) {
-		return JOptionPane.QUESTION_MESSAGE;
-	}
-	
-	protected Icon icon(@SuppressWarnings("unused") JComboBox comboBox) {
-		return null;
-	}
-	
-	protected Object[] selectionValues(JComboBox comboBox) {
-		return this.convertToArray(comboBox.getModel());
-	}
-	
-	protected Object initialSelectionValue(JComboBox comboBox) {
-		return comboBox.getModel().getSelectedItem();
-	}
-	
-	/**
-	 * Convert the list of objects in the specified list model
-	 * into an array.
-	 */
-	protected Object[] convertToArray(ListModel model) {
-		int size = model.getSize();
-		Object[] result = new Object[size];
-		for (int i = 0; i < size; i++) {
-			result[i] = model.getElementAt(i);
-		}
-		return result;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/SimpleListCellRenderer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/SimpleListCellRenderer.java
deleted file mode 100644
index 56a609a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/SimpleListCellRenderer.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import java.awt.Component;
-import javax.swing.DefaultListCellRenderer;
-import javax.swing.Icon;
-import javax.swing.JList;
-
-/**
- * This renderer should behave the same as the DefaultListCellRenderer;
- * but it slightly refactors the calculation of the icon and text of the list
- * cell so that subclasses can easily override the methods that build
- * the icon and text.
- * 
- * In most cases, you need only override:
- *     #buildIcon(Object value)
- *     #buildText(Object value)
- */
-public class SimpleListCellRenderer
-	extends DefaultListCellRenderer
-{
-
-	/**
-	 * Construct a simple renderer.
-	 */
-	public SimpleListCellRenderer() {
-		super();
-	}
-
-	@Override
-	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
-		// substitute null for the cell value so nothing is drawn initially...
-		super.getListCellRendererComponent(list, null, index, isSelected, cellHasFocus);
-		this.setOpaque(true);
-
-		// ...then set the icon and text manually
-		this.setIcon(this.buildIcon(list, value, index, isSelected, cellHasFocus));
-		this.setText(this.buildText(list, value, index, isSelected, cellHasFocus));
-
-		this.setToolTipText(this.buildToolTipText(list, value, index, isSelected, cellHasFocus));
-
-		// the context will be initialized only if a reader is running
-		if (this.accessibleContext != null) {
-			this.accessibleContext.setAccessibleName(this.buildAccessibleName(list, value, index, isSelected, cellHasFocus));
-		}
-
-		return this;
-	}
-
-	/**
-	 * Return the icon representation of the specified cell
-	 * value and other settings. (Even more settings are
-	 * accessible via inherited getters: hasFocus, isEnabled, etc.)
-	 */
-	protected Icon buildIcon(@SuppressWarnings("unused") JList list, Object value, @SuppressWarnings("unused") int index, @SuppressWarnings("unused") boolean isSelected, @SuppressWarnings("unused") boolean cellHasFocus) {
-		return this.buildIcon(value);
-	}
-
-	/**
-	 * Return the icon representation of the specified cell
-	 * value. The default is to display no icon at all unless the
-	 * value itself is an icon.
-	 */
-	protected Icon buildIcon(Object value) {
-		// replicate the default behavior
-		return (value instanceof Icon) ? (Icon) value : null;
-	}
-
-	/**
-	 * Return the textual representation of the specified cell
-	 * value and other settings. (Even more settings are
-	 * accessible via inherited getters: hasFocus, isEnabled, etc.)
-	 */
-	protected String buildText(@SuppressWarnings("unused") JList list, Object value, @SuppressWarnings("unused") int index, @SuppressWarnings("unused") boolean isSelected, @SuppressWarnings("unused") boolean cellHasFocus) {
-		return this.buildText(value);
-	}
-
-	/**
-	 * Return the textual representation of the specified cell
-	 * value. The default is to display the object's default string
-	 * representation (as returned by #toString()); unless the
-	 * value itself is an icon, in which case no text is displayed.
-	 */
-	protected String buildText(Object value) {
-		return (value instanceof Icon) ? "" : ((value == null) ? "" : value.toString()); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	/**
-	 * Return the text displayed when the cursor lingers over the specified cell.
-	 * (Even more settings are accessible via inherited getters: hasFocus, isEnabled, etc.)
-	 */
-	protected String buildToolTipText(@SuppressWarnings("unused") JList list, Object value, @SuppressWarnings("unused") int index, @SuppressWarnings("unused") boolean isSelected, @SuppressWarnings("unused") boolean cellHasFocus) {
-		return this.buildToolTipText(value);
-	}
-
-	/**
-	 * Return the text displayed when the cursor lingers over the specified cell.
-	 */
-	protected String buildToolTipText(@SuppressWarnings("unused") Object value) {
-		return null;
-	}
-
-	/**
-	 * Return the accessible name to be given to the component used to render
-	 * the given value and other settings. (Even more settings are accessible via
-	 * inherited getters: hasFocus, isEnabled, etc.)
-	 */
-	protected String buildAccessibleName(@SuppressWarnings("unused") JList list, Object value, @SuppressWarnings("unused") int index, @SuppressWarnings("unused") boolean isSelected, @SuppressWarnings("unused") boolean cellHasFocus) {
-		return this.buildAccessibleName(value);
-	}
-
-	/**
-	 * Return the accessible name to be given to the component used to render
-	 * the given value.
-	 */
-	protected String buildAccessibleName(@SuppressWarnings("unused") Object value) {
-		return null;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/SpinnerTableCellRenderer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/SpinnerTableCellRenderer.java
deleted file mode 100644
index 8cd5d39..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/SpinnerTableCellRenderer.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import java.awt.Color;
-import java.awt.Component;
-import javax.swing.BorderFactory;
-import javax.swing.JComponent;
-import javax.swing.JSpinner;
-import javax.swing.JTable;
-import javax.swing.SpinnerModel;
-import javax.swing.UIManager;
-import javax.swing.border.Border;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-/**
- * Make the cell look like a spinner.
- */
-public class SpinnerTableCellRenderer implements TableCellEditorAdapter.Renderer {
-
-	/** the component used to paint the cell */
-	protected JSpinner spinner;
-	
-	/** the listener to be notified on an immediate edit */
-	protected TableCellEditorAdapter.ImmediateEditListener immediateEditListener;
-	
-	
-	// ********** constructors/initialization **********
-
-	/**
-	 * Construct a cell renderer that uses the default
-	 * spinner model, which is a "number" model.
-	 */
-	public SpinnerTableCellRenderer() {
-		super();
-		this.initialize();
-	}
-
-	/**
-	 * Construct a cell renderer that uses the specified
-	 * spinner model, which will determine how the values are displayed.
-	 */
-	public SpinnerTableCellRenderer(SpinnerModel model) {
-		this();
-		this.setModel(model);
-	}
-
-	protected void initialize() {
-		this.spinner = this.buildSpinner();
-	}
-
-	protected JSpinner buildSpinner() {
-		JSpinner s = new JSpinner();
-		s.addChangeListener(this.buildChangeListener());
-		return s;
-	}
-	
-	private ChangeListener buildChangeListener() {
-		return new ChangeListener() {
-			public void stateChanged(ChangeEvent e) {
-				if (SpinnerTableCellRenderer.this.immediateEditListener != null) {
-					SpinnerTableCellRenderer.this.immediateEditListener.immediateEdit();
-				}
-			}
-		};
-	}
-
-
-	// ********** TableCellRenderer implementation **********
-
-	public Component getTableCellRendererComponent(JTable table, Object value, boolean selected, boolean hasFocus, int row, int column) {
-		this.spinner.setComponentOrientation(table.getComponentOrientation());
-		this.spinner.setFont(table.getFont());
-		this.spinner.setEnabled(table.isEnabled());
-
-		JComponent editor = this.editor();
-		editor.setForeground(this.foregroundColor(table, value, selected, hasFocus, row, column));
-		editor.setBackground(this.backgroundColor(table, value, selected, hasFocus, row, column));
-		this.spinner.setBorder(this.border(table, value, selected, hasFocus, row, column));
-
-		this.setValue(value);
-		return this.spinner;
-	}
-
-	/**
-	 * Return the cell's foreground color.
-	 */
-	protected Color foregroundColor(JTable table, @SuppressWarnings("unused") Object value, boolean selected, boolean hasFocus, int row, int column) {
-		if (selected) {
-			if (hasFocus && table.isCellEditable(row, column)) {
-				return UIManager.getColor("Table.focusCellForeground"); //$NON-NLS-1$
-			}
-			return table.getSelectionForeground();
-		}
-		return table.getForeground();
-	}
-
-	/**
-	 * Return the cell's background color.
-	 */
-	protected Color backgroundColor(JTable table, @SuppressWarnings("unused") Object value, boolean selected, boolean hasFocus, int row, int column) {
-		if (selected) {
-			if (hasFocus && table.isCellEditable(row, column)) {
-				return UIManager.getColor("Table.focusCellBackground"); //$NON-NLS-1$
-			}
-			return table.getSelectionBackground();
-		}
-		return table.getBackground();
-	}
-
-	/**
-	 * Return the cell's border.
-	 */
-	protected Border border(JTable table, @SuppressWarnings("unused") Object value, boolean selected, boolean hasFocus, @SuppressWarnings("unused") int row, @SuppressWarnings("unused") int column) {
-		if (hasFocus) {
-			return UIManager.getBorder("Table.focusCellHighlightBorder"); //$NON-NLS-1$
-		}
-		if (selected) {
-			return BorderFactory.createLineBorder(table.getSelectionBackground(), 1);
-		}
-		return BorderFactory.createLineBorder(table.getBackground(), 1);
-	}
-
-	/**
-	 * Return the editor component whose colors should be set
-	 * by the renderer.
-	 */
-	protected JComponent editor() {
-		JComponent editor = this.spinner.getEditor();
-		if (editor instanceof JSpinner.DefaultEditor) {
-			// typically, the editor will be the default or one of its subclasses...
-			editor = ((JSpinner.DefaultEditor) editor).getTextField();
-		}
-		return editor;
-	}
-
-	/**
-	 * Set the spinner's value
-	 */
-	protected void setValue(Object value) {
-		// CR#3999318 - This null check needs to be removed once JDK bug is fixed
-		if (value == null) {
-			value = Integer.valueOf(0);
-		}
-		this.spinner.setValue(value);
-	}
-
-
-	// ********** TableCellEditorAdapter.Renderer implementation **********
-
-	public Object getValue() {
-		return this.spinner.getValue();
-	}
-	
-	public void setImmediateEditListener(TableCellEditorAdapter.ImmediateEditListener listener) {
-		this.immediateEditListener = listener;
-	}
-
-
-	// ********** public API **********
-
-	/**
-	 * Set the spinner's model.
-	 */
-	public void setModel(SpinnerModel model) {
-		this.spinner.setModel(model);
-	}
-
-	/**
-	 * Return the renderer's preferred height. This allows you
-	 * to set the row height to something the spinner will look good in....
-	 */
-	public int preferredHeight() {
-		// add in space for the border top and bottom
-		return (int) this.spinner.getPreferredSize().getHeight() + 2;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/TableCellEditorAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/TableCellEditorAdapter.java
deleted file mode 100644
index 045b4a9..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/swing/TableCellEditorAdapter.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.swing;
-
-import java.awt.Component;
-import javax.swing.AbstractCellEditor;
-import javax.swing.JTable;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableCellRenderer;
-
-/**
- * A table cell editor that wraps a table cell renderer.
- */
-public class TableCellEditorAdapter extends AbstractCellEditor implements TableCellEditor {
-
-	/** delegate to a renderer */
-	private Renderer renderer;
-	
-	
-	// ********** constructors/initialization **********
-	
-	private TableCellEditorAdapter() {
-		super();
-	}
-	
-	/**
-	 * Construct a cell editor that behaves like the specified renderer.
-	 */
-	public TableCellEditorAdapter(Renderer renderer) {
-		this();
-		this.initialize(renderer);
-	}
-	
-	protected void initialize(Renderer r) {
-		this.renderer = r;
-		r.setImmediateEditListener(this.buildImmediateEditListener());
-	}
-	
-	private ImmediateEditListener buildImmediateEditListener() {
-		return new ImmediateEditListener() {
-			public void immediateEdit() {
-				TableCellEditorAdapter.this.stopCellEditing();
-			}
-		};
-	}
-	
-	
-	// ********** CellEditor implementation **********
-	
-	public Object getCellEditorValue() {
-		return this.renderer.getValue();
-	}
-	
-	
-	// ********** TableCellEditor implementation **********
-
-	public Component getTableCellEditorComponent(JTable table, Object value, boolean selected, int row, int column) {
-		return this.renderer.getTableCellRendererComponent(table, value, selected, true, row, column);
-	}
-	
-	
-	// ********** Member classes **********************************************
-	
-	/**
-	 * This interface defines the methods that must be implemented by a renderer
-	 * that can be wrapped by a TableCellEditorAdapter.
-	 */
-	public interface Renderer extends TableCellRenderer {
-		
-		/**
-		 * Return the current value of the renderer.
-		 */
-		Object getValue();
-		
-		/**
-		 * Set the immediate edit listener
-		 */
-		void setImmediateEditListener(ImmediateEditListener listener);
-	}
-	
-	
-	public interface ImmediateEditListener {
-		
-		/**
-		 * Called when the renderer does an "immediate edit"
-		 */
-		void immediateEdit();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/AsynchronousSynchronizer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/AsynchronousSynchronizer.java
deleted file mode 100644
index 379a11a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/AsynchronousSynchronizer.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.synchronizers;
-
-import java.util.concurrent.ThreadFactory;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.internal.ConsumerThreadCoordinator;
-import org.eclipse.jpt.utility.internal.SynchronizedBoolean;
-
-/**
- * This synchronizer will perform synchronizations in a separate thread,
- * allowing calls to {@link Synchronizer#synchronize()} to return immediately.
- * <p>
- * <strong>NB:</strong> The client-supplied command should handle any exceptions
- * appropriately (e.g. log the exception and return gracefully so the thread
- * can continue the synchronization process).
- */
-public class AsynchronousSynchronizer
-	implements Synchronizer
-{
-	/**
-	 * This flag is shared with the synchronization/consumer thread. Setting it to true
-	 * will trigger the synchronization to begin or, if the synchronization is
-	 * currently executing, to execute again, once the current execution is
-	 * complete.
-	 */
-	final SynchronizedBoolean synchronizeFlag = new SynchronizedBoolean(false);
-
-	/**
-	 * Most of the thread-related behavior is delegated to this coordinator.
-	 */
-	private final ConsumerThreadCoordinator consumerThreadCoordinator;
-
-
-	// ********** construction **********
-
-	/**
-	 * Construct an asynchronous synchronizer that uses the specified command to
-	 * perform the synchronization.
-	 * Use simple JDK thread(s) for the synchronization thread(s).
-	 * Allow the synchronization thread(s) to be assigned
-	 * JDK-generated names.
-	 */
-	public AsynchronousSynchronizer(Command command) {
-		this(command, null, null);
-	}
-
-	/**
-	 * Construct an asynchronous synchronizer that uses the specified command to
-	 * perform the synchronization.
-	 * Use the specified thread factory to construct the synchronization thread(s).
-	 * Allow the synchronization thread(s) to be assigned
-	 * JDK-generated names.
-	 */
-	public AsynchronousSynchronizer(Command command, ThreadFactory threadFactory) {
-		this(command, threadFactory, null);
-	}
-
-	/**
-	 * Construct an asynchronous synchronizer that uses the specified command to
-	 * perform the synchronization. Assign the synchronization thread(s) the specified
-	 * name.
-	 * Use simple JDK thread(s) for the synchronization thread(s).
-	 */
-	public AsynchronousSynchronizer(Command command, String threadName) {
-		this(command, null, threadName);
-	}
-
-	/**
-	 * Construct an asynchronous synchronizer that uses the specified command to
-	 * perform the synchronization.
-	 * Use the specified thread factory to construct the synchronization thread(s).
-	 * Assign the synchronization thread(s) the specified
-	 * name.
-	 */
-	public AsynchronousSynchronizer(Command command, ThreadFactory threadFactory, String threadName) {
-		super();
-		if (command == null) {
-			throw new NullPointerException();
-		}
-		this.consumerThreadCoordinator = new ConsumerThreadCoordinator(this.buildConsumer(command), threadFactory, threadName);
-	}
-
-	ConsumerThreadCoordinator.Consumer buildConsumer(Command command) {
-		return new Consumer(command);
-	}
-
-
-	// ********** Synchronizer implementation **********
-
-	/**
-	 * Build and start the synchronization thread, but postpone the first
-	 * synchronization until requested, i.e. via a call to
-	 * {@link #synchronize()}.
-	 * <p>
-	 * Note: We don't clear the "synchronize" flag here; so if the flag has
-	 * been set <em>before</em> getting here, the first synchronization will
-	 * start promptly (albeit, asynchronously).
-	 * The "synchronize" flag will be set if:<ul>
-	 * <li>{@link #synchronize()} was called after the synchronizer was
-	 *     constructed but before {@link #start()} was called; or
-	 * <li>{@link #synchronize()} was called after {@link #stop()} was called
-	 *     but before {@link #start()} was called (to restart the synchronizer); or
-	 * <li>{@link #stop()} was called when there was an outstanding request
-	 *     for a synchronization (i.e. the "synchronization" flag was set at
-	 *     the time {@link #stop()} was called)
-	 * </ul>
-	 */
-	public void start() {
-		this.consumerThreadCoordinator.start();
-	}
-
-	/**
-	 * Set the "synchronize" flag so the synchronization thread will either<ul>
-	 * <li>if the thread is quiesced, start a synchronization immediately, or
-	 * <li>if the thread is currently executing a synchronization, execute another
-	 *     synchronization once the current synchronization is complete
-	 * </ul>
-	 */
-	public void synchronize() {
-		this.synchronizeFlag.setTrue();
-	}
-
-	/**
-	 * Interrupt the synchronization thread so that it stops executing at the
-	 * end of the current synchronization. Suspend the current thread until
-	 * the synchronization thread is finished executing. If any uncaught
-	 * exceptions were thrown while the synchronization thread was executing,
-	 * wrap them in a composite exception and throw the composite exception.
-	 */
-	public void stop() {
-		this.consumerThreadCoordinator.stop();
-	}
-
-
-	// ********** consumer **********
-
-	/**
-	 * This implementation of {@link ConsumerThreadCoordinator.Consumer}
-	 * will execute the client-supplied "synchronize" command.
-	 * It will wait until the shared "synchronize" flag is set to execute the
-	 * command. Once the comand is executed, the thread will quiesce until
-	 * the flag is set again. If the flag was set during the execution of the
-	 * command (either recursively by the command itself or by another thread),
-	 * the command will be re-executed immediately. Stop the thread by calling
-	 * {@link Thread#interrupt()}.
-	 */
-	class Consumer
-		implements ConsumerThreadCoordinator.Consumer
-	{
-		/**
-		 * The client-supplied command that executes on the
-		 * synchronization/consumer thread.
-		 */
-		private final Command command;
-
-		Consumer(Command command) {
-			super();
-			this.command = command;
-		}
-
-		/**
-		 * Wait until the "synchronize" flag is set,
-		 * then clear it and allow the "synchronize" command to execute.
-		 */
-		public void waitForProducer() throws InterruptedException {
-			AsynchronousSynchronizer.this.synchronizeFlag.waitToSetFalse();
-		}
-
-		/**
-		 * Execute the client-supplied command.
-		 */
-		public void execute() {
-			this.command.execute();
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/CallbackAsynchronousSynchronizer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/CallbackAsynchronousSynchronizer.java
deleted file mode 100644
index 2c30a32..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/CallbackAsynchronousSynchronizer.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.synchronizers;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.internal.ConsumerThreadCoordinator;
-import org.eclipse.jpt.utility.internal.ListenerList;
-
-/**
- * Extend the asynchronous synchronizer to notify listeners
- * when a synchronization "cycle" is complete; i.e. the synchronization has,
- * for the moment, handled every outstanding "synchronize" request and quiesced.
- * This notification is <em>not</em> guaranteed to occur with <em>every</em>
- * synchronization "cycle"; since other, unrelated, synchronizations can be
- * triggered concurrently.
- * <p>
- * <strong>NB:</strong> Listeners should handle any exceptions
- * appropriately (e.g. log the exception and return gracefully so the thread
- * can continue the synchronization process).
- */
-public class CallbackAsynchronousSynchronizer
-	extends AsynchronousSynchronizer
-	implements CallbackSynchronizer
-{
-	private final ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-
-
-	// ********** construction **********
-
-	/**
-	 * Construct a callback asynchronous synchronizer that uses the specified
-	 * command to perform the synchronization. Allow the synchronization thread(s)
-	 * to be assigned JDK-generated names.
-	 */
-	public CallbackAsynchronousSynchronizer(Command command) {
-		super(command);
-	}
-
-	/**
-	 * Construct a callback asynchronous synchronizer that uses the specified
-	 * command to perform the synchronization. Assign the synchronization thread(s)
-	 * the specified name.
-	 */
-	public CallbackAsynchronousSynchronizer(Command command, String threadName) {
-		super(command, threadName);
-	}
-
-	/**
-	 * Build a consumer that will let us know when the synchronization has
-	 * quiesced.
-	 */
-	@Override
-	ConsumerThreadCoordinator.Consumer buildConsumer(Command command) {
-		return new CallbackConsumer(command);
-	}
-
-
-	// ********** CallbackSynchronizer implementation **********
-
-	public void addListener(Listener listener) {
-		this.listenerList.add(listener);
-	}
-
-	public void removeListener(Listener listener) {
-		this.listenerList.remove(listener);
-	}
-
-	/**
-	 * Notify our listeners.
-	 */
-	void synchronizationQuiesced() {
-		for (Listener listener : this.listenerList.getListeners()) {
-			listener.synchronizationQuiesced(this);
-		}
-	}
-
-
-	// ********** synchronization thread runnable **********
-
-	/**
-	 * Extend {@link AsynchronousSynchronizer.Consumer}
-	 * to notify the synchronizer when the synchronization has quiesced
-	 * (i.e. the command has finished executing and there are no further
-	 * requests for synchronization).
-	 * Because synchronization is asynchronous, no other thread will be able to
-	 * initiate another synchronization until the synchronizer's listeners have been
-	 * notified. Note also, the synchronizer's listeners can, themselves,
-	 * trigger another synchronization (by directly or indirectly calling
-	 * {@link org.eclipse.jpt.utility.internal.synchronizers.Synchronizer#synchronize());
-	 * but this synchronization will not occur until <em>after</em> all the
-	 * listeners have been notified.
-	 */
-	class CallbackConsumer
-		extends Consumer
-	{
-		CallbackConsumer(Command command) {
-			super(command);
-		}
-
-		@Override
-		public void execute() {
-			super.execute();
-			// hmmm - we will notify listeners even when we our thread is "interrupted";
-			// that seems ok...  ~bjv
-			if (CallbackAsynchronousSynchronizer.this.synchronizeFlag.isFalse()) {
-				CallbackAsynchronousSynchronizer.this.synchronizationQuiesced();
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/CallbackSynchronizer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/CallbackSynchronizer.java
deleted file mode 100644
index 441a06d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/CallbackSynchronizer.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.synchronizers;
-
-import java.util.EventListener;
-
-/**
- * Extend {@link Synchronizer} to notify listeners
- * when a synchronization "cycle" is complete; i.e. the synchronization has,
- * for the moment, quiesced.
- */
-public interface CallbackSynchronizer
-	extends Synchronizer
-{
-	/**
-	 * Add the specified listener to be notified whenever the synchronizer has
-	 * quiesced.
-	 * @see #removeListener(Listener)
-	 */
-	void addListener(Listener listener);
-
-	/**
-	 * Remove the specified listener.
-	 * @see #addListener(Listener)
-	 */
-	void removeListener(Listener listener);
-
-
-	// ********** listener **********
-
-	/**
-	 * Interface implemented by listeners to be notified whenever the
-	 * synchronizer has quiesced.
-	 */
-	public interface Listener
-		extends EventListener
-	{
-		/**
-		 * The specified synchronizer has quiesced.
-		 */
-		void synchronizationQuiesced(CallbackSynchronizer synchronizer);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/CallbackSynchronousSynchronizer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/CallbackSynchronousSynchronizer.java
deleted file mode 100644
index ab10151..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/CallbackSynchronousSynchronizer.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.synchronizers;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.internal.ListenerList;
-
-/**
- * Extend the synchronous synchronizer to notify listeners
- * when a synchronization "cycle" is complete; i.e. the synchronization has,
- * for the moment, handled every "synchronize" request and quiesced.
- * This notification is <em>not</em> guaranteed to occur with <em>every</em>
- * synchronization "cycle";
- * since other, unrelated, synchronizations can be triggered concurrently.
- * <p>
- * <strong>NB:</strong> If another synchronization is initiated while we are
- * notifying the synchronizer's listeners (i.e. the 'again' flag is set), it will not
- * start until all the listeners are notified.
- * Note also, the synchronizer's listeners can, themselves,
- * trigger another synchronization (by directly or indirectly calling
- * {@link org.eclipse.jpt.utility.internal.synchronizers.Synchronizer#synchronize());
- * but this synchronization will not occur until <em>after</em> all the
- * listeners have been notified.
- */
-public class CallbackSynchronousSynchronizer
-	extends SynchronousSynchronizer
-	implements CallbackSynchronizer
-{
-	private final ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-
-
-	// ********** construction **********
-
-	/**
-	 * Construct a callback synchronous synchronizer that uses the specified
-	 * command to perform the synchronization.
-	 */
-	public CallbackSynchronousSynchronizer(Command command) {
-		super(command);
-	}
-
-
-	// ********** CallbackSynchronizer implementation **********
-
-	public void addListener(Listener listener) {
-		this.listenerList.add(listener);
-	}
-
-	public void removeListener(Listener listener) {
-		this.listenerList.remove(listener);
-	}
-
-	/**
-	 * Notify our listeners.
-	 */
-	private void synchronizationQuiesced() {
-		for (Listener listener : this.listenerList.getListeners()) {
-			listener.synchronizationQuiesced(this);
-		}
-	}
-
-
-	// ********** override **********
-
-	@Override
-	void execute_() {
-		super.execute_();
-		if (this.state.getValue() != State.REPEAT) {
-			// hmmm - we will notify listeners even when we are "stopped";
-			// that seems ok...  ~bjv
-			this.synchronizationQuiesced();
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/Synchronizer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/Synchronizer.java
deleted file mode 100644
index 7b5a459..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/Synchronizer.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.synchronizers;
-
-import java.io.Serializable;
-
-/**
- * This interface defines the protocol for starting, stopping, and executing a
- * long-running, repeatable, and possibly recursive "synchronization" process.
- * The intent is for the synchronizer to synchronize a "secondary" model with
- * a "primary" model. Any change to the "primary" model will trigger the
- * synchronization. The synchronizer implementation will determine whether the
- * "secondary" model remains in sync synchronously or asynchronously.
- * <p>
- * The assumption is that the {@link #start()} and {@link #stop()} methods will be called from
- * a single master thread that would control the synchronizer's lifecycle and
- * the {@link #synchronize()} method will be called multiple times, possibly from
- * multiple threads.
- */
-public interface Synchronizer {
-
-	/**
-	 * Enable the synchronizer to allow future synchronizations as requested
-	 * by calls to {@link #synchronize()}.
-	 */
-	void start();
-
-	/**
-	 * Synchronize the dependent model with the primary model. Do nothing if
-	 * {@link #start()} has not previously been called. Do nothing if {@link #stop}
-	 * has been called (without any intermediate call to {@link #start()}.
-	 */
-	void synchronize();
-
-	/**
-	 * Stop the synchronizer immediately or, if a synchronization is currently
-	 * in progress, when it completes. Return when the synchronizer is stopped.
-	 * No further synchonizations will performed until {@link #start()} is called.
-	 */
-	void stop();
-
-
-	/**
-	 * Singleton implementation of the {@link Synchronizer} interface that will do
-	 * nothing.
-	 */
-	final class Null implements Synchronizer, Serializable {
-		public static final Synchronizer INSTANCE = new Null();
-		public static Synchronizer instance() {
-			return INSTANCE;
-		}
-		// ensure single instance
-		private Null() {
-			super();
-		}
-		public void start() {
-			// do nothing
-		}
-		public void synchronize() {
-			// do nothing
-		}
-		public void stop() {
-			// do nothing
-		}
-		@Override
-		public String toString() {
-			return "Synchronizer.Null"; //$NON-NLS-1$
-		}
-		private static final long serialVersionUID = 1L;
-		private Object readResolve() {
-			// replace this object with the singleton
-			return INSTANCE;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/SynchronousSynchronizer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/SynchronousSynchronizer.java
deleted file mode 100644
index ea0c609..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/synchronizers/SynchronousSynchronizer.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal.synchronizers;
-
-import java.util.Vector;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.internal.CompositeException;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.SynchronizedObject;
-
-/**
- * This synchronizer will synchronize immediately and not return until the
- * synchronization and any nested (recursive) synchronizations are complete.
- * In some situations this implementation should be used sparingly, and for as
- * short a time as possible, as it increases the probability of deadlocks. A
- * deadlock can occur when {@link Synchronizer#synchronize()} is called from multiple
- * threads and multiple resources are locked by the synchronization in varying
- * orders.
- * <p>
- * As defined in the {@link Synchronizer} interface, {@link Synchronizer#start()}
- * and {@link Synchronizer#stop()}
- * should be called in the same thread, but it is not required.
- * {@link Synchronizer#synchronize()} should
- * always be called in the same thread (i.e. only recursively, beyond the
- * initial call); although, this too is not required.
- * This thread need not be the same thread that executes
- * {@link Synchronizer#start()} and {@link Synchronizer#stop()}.
- */
-public class SynchronousSynchronizer
-	implements Synchronizer
-{
-	/**
-	 * The client-supplied command that performs the synchronization. It may
-	 * trigger further calls to {@link #synchronize()} (i.e. the
-	 * synchronization may recurse).
-	 */
-	private final Command command;
-
-	/**
-	 * The synchronizer's current state.
-	 */
-	final SynchronizedObject<State> state;
-
-	/**
-	 * The synchronizer's initial state is {@link #STOPPED}.
-	 */
-	enum State {
-		STOPPED,
-		READY,
-		EXECUTING,
-		REPEAT,
-		STOPPING
-	}
-
-	/**
-	 * A list of the uncaught exceptions thrown by the command.
-	 */
-	final Vector<Throwable> exceptions = new Vector<Throwable>();
-
-
-	// ********** construction **********
-
-	/**
-	 * Construct a synchronous synchronizer that uses the specified command to
-	 * perform the synchronization.
-	 */
-	public SynchronousSynchronizer(Command command) {
-		super();
-		if (command == null) {
-			throw new NullPointerException();
-		}
-		this.command = command;
-		// use the synchronizer as the mutex so it is freed up by the wait in #stop()
-		this.state = new SynchronizedObject<State>(State.STOPPED, this);
-	}
-
-
-	// ********** Synchronizer implementation **********
-
-	/**
-	 * Set the synchronizer's {@link #state} to {@link State#READY READY}
-	 * and execute the first synchronization. Throw an exception if the
-	 * synchronizer is not {@link State#STOPPED STOPPED}.
-	 */
-	public synchronized void start() {
-		switch (this.state.getValue()) {
-			case STOPPED:
-				this.state.setValue(State.READY);
-				this.synchronize();
-				break;
-			case READY:
-			case EXECUTING:
-			case REPEAT:
-			case STOPPING:
-			default:
-				throw this.buildIllegalStateException();
-		}
-	}
-
-	/**
-	 * It's possible to come back here if the synchronization command recurses
-	 * and triggers another synchronization.
-	 */
-	public void synchronize() {
-		if (this.beginSynchronization()) {
-			this.synchronize_();
-		}
-	}
-
-	/**
-	 * A client has requested a synchronization.
-	 * Return whether we can begin a new synchronization.
-	 * If a synchronization is already under way, return <code>false</code>;
-	 * but set the {@link #state} to {@link State#REPEAT REPEAT}
-	 * so another synchronization will occur once the current
-	 * synchronization is complete.
-	 */
-	private synchronized boolean beginSynchronization() {
-		switch (this.state.getValue()) {
-			case STOPPED:
-				// synchronization is not allowed
-				return false;
-			case READY:
-				// begin a new synchronization
-				this.state.setValue(State.EXECUTING);
-				return true;
-			case EXECUTING:
-				// set flag so a new synchronization will occur once the current one is finished
-				this.state.setValue(State.REPEAT);
-				return false;
-			case REPEAT:
-				// the "repeat" flag is already set
-				return false;
-			case STOPPING:
-				// no further synchronizations are allowed
-				return false;
-			default:
-				throw this.buildIllegalStateException();
-		}
-	}
-
-	/**
-	 * This method should be called only once per set of "recursing"
-	 * synchronizations. Any recursive call to {@link #synchronize()} will
-	 * simply set the {@link #state} to {@link State#REPEAT REPEAT},
-	 * causing the command to execute again.
-	 */
-	private void synchronize_() {
-		do {
-			this.execute();
-		} while (this.endSynchronization());
-	}
-
-	/**
-	 * Execute the client-supplied command. Do not allow any unhandled
-	 * exceptions to kill the thread. Store them up for later pain.
-	 */
-	private void execute() {
-		try {
-			this.execute_();
-		} catch (Throwable ex) {
-			this.exceptions.add(ex);
-		}
-	}
-
-	/**
-	 * By default, just execute the command.
-	 */
-	void execute_() {
-		this.command.execute();
-	}
-
-	/**
-	 * The current synchronization has finished.
-	 * Return whether we should begin another synchronization.
-	 */
-	private synchronized boolean endSynchronization() {
-		switch (this.state.getValue()) {
-			case STOPPED:
-			case READY:
-				throw this.buildIllegalStateException();
-			case EXECUTING:
-				// synchronization has finished and there are no outstanding requests for another; return to "ready"
-				this.state.setValue(State.READY);
-				return false;
-			case REPEAT:
-				// the "repeat" flag was set; clear it and start another synchronization
-				this.state.setValue(State.EXECUTING);
-				return true;
-			case STOPPING:
-				// a client has initiated a "stop"; mark the "stop" complete and perform no more synchronizations
-				this.state.setValue(State.STOPPED);
-				return false;
-			default:
-				throw this.buildIllegalStateException();
-		}
-	}
-
-	/**
-	 * Set the flags so that no further synchronizations occur. If any uncaught
-	 * exceptions were thrown while the synchronization was executing,
-	 * wrap them in a composite exception and throw the composite exception.
-	 */
-	public synchronized void stop() {
-		switch (this.state.getValue()) {
-			case STOPPED:
-				throw this.buildIllegalStateException();
-			case READY:
-				// simply return to "stopped" state
-				this.state.setValue(State.STOPPED);
-				break;
-			case EXECUTING:
-			case REPEAT:
-				// set the "stopping" flag and wait until the synchronization has finished
-				this.state.setValue(State.STOPPING);
-				this.waitUntilStopped();
-				break;
-			case STOPPING:
-				throw this.buildIllegalStateException();
-			default:
-				throw this.buildIllegalStateException();
-		}
-
-		if (this.exceptions.size() > 0) {
-			Throwable[] temp = this.exceptions.toArray(new Throwable[this.exceptions.size()]);
-			this.exceptions.clear();
-			throw new CompositeException(temp);
-		}
-	}
-
-	/**
-	 * This wait will free up the synchronizer's synchronized methods
-	 * (since the synchronizer is the state's mutex).
-	 */
-	private void waitUntilStopped() {
-		try {
-			this.state.waitUntilValueIs(State.STOPPED);
-		} catch (InterruptedException ex) {
-			// the thread that called #stop() was interrupted while waiting
-			// for the synchronization to finish - ignore;
-			// 'state' is still set to 'STOPPING', so the #synchronize_() loop
-			// will still stop - we just won't wait around for it...
-		}
-	}
-
-	private IllegalStateException buildIllegalStateException() {
-		return new IllegalStateException("state: " + this.state); //$NON-NLS-1$
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.state);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/Model.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/Model.java
deleted file mode 100644
index 422532b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/Model.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model;
-
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-import org.eclipse.jpt.utility.model.listener.TreeChangeListener;
-
-/**
- * Interface to be implemented by models that notify listeners of
- * changes to bound properties, collections, lists, and/or trees.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- * 
- * @see ChangeListener
- * @see StateChangeListener
- * @see PropertyChangeListener
- * @see CollectionChangeListener
- * @see ListChangeListener
- * @see TreeChangeListener
- * @see org.eclipse.jpt.utility.internal.model.AbstractModel
- */
-// TODO use objects (IDs?) instead of strings to identify aspects?
-public interface Model {
-
-	// ********** change **********
-
-	/**
-	 * Add a listener that listens to all change events.
-	 * Throw an exception if the same listener is added more than once.
-	 * The listener cannot be null.
-	 */
-	void addChangeListener(ChangeListener listener);
-
-	/**
-	 * Remove the specified change listener.
-	 * Throw an exception if the listener is null or if the listener was never added.
-	 */
-	void removeChangeListener(ChangeListener listener);
-
-
-	// ********** state change **********
-
-	/**
-	 * Add a listener that listens to all state change events.
-	 * Throw an exception if the same listener is added more than once.
-	 * The listener cannot be null.
-	 */
-	void addStateChangeListener(StateChangeListener listener);
-
-	/**
-	 * Remove the specified state change listener.
-	 * Throw an exception if the listener is null or if the listener was never added.
-	 */
-	void removeStateChangeListener(StateChangeListener listener);
-
-
-	// ********** property change **********
-
-	/**
-	 * Add a listener that listens to all property change events with
-	 * the specified property name.
-	 * Throw an exception if the same listener is added more than once.
-	 * The listener cannot be null.
-	 */
-	void addPropertyChangeListener(String propertyName, PropertyChangeListener listener);
-
-	/**
-	 * Remove a listener that listens to all property change events,
-	 * with the specified property name.
-	 * Throw an exception if the listener is null or if the listener was never added.
-	 */
-	void removePropertyChangeListener(String propertyName, PropertyChangeListener listener);
-
-
-	// ********** collection change **********
-
-	/**
-	 * Add a listener that listens to all collection change events with
-	 * the specified collection name.
-	 * Throw an exception if the same listener is added more than once.
-	 * The listener cannot be null.
-	 */
-	void addCollectionChangeListener(String collectionName, CollectionChangeListener listener);
-
-	/**
-	 * Remove a listener that listens to all collection change events,
-	 * with the specified collection name.
-	 * Throw an exception if the listener is null or if the listener was never added.
-	 */
-	void removeCollectionChangeListener(String collectionName, CollectionChangeListener listener);
-
-
-	// ********** list change **********
-
-	/**
-	 * Add a listener that listens to all list change events with
-	 * the specified list name.
-	 * Throw an exception if the same listener is added more than once.
-	 * The listener cannot be null.
-	 */
-	void addListChangeListener(String listName, ListChangeListener listener);
-
-	/**
-	 * Remove a listener that listens to all list change events,
-	 * with the specified list name.
-	 * Throw an exception if the listener is null or if the listener was never added.
-	 */
-	void removeListChangeListener(String listName, ListChangeListener listener);
-
-
-	// ********** tree change **********
-
-	/**
-	 * Add a listener that listens to all tree change events with
-	 * the specified tree name.
-	 * Throw an exception if the same listener is added more than once.
-	 * The listener cannot be null.
-	 */
-	void addTreeChangeListener(String treeName, TreeChangeListener listener);
-
-	/**
-	 * Remove a listener that listens to all tree change events,
-	 * with the specified tree name.
-	 * Throw an exception if the listener is null or if the listener was never added.
-	 */
-	void removeTreeChangeListener(String treeName, TreeChangeListener listener);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ChangeEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ChangeEvent.java
deleted file mode 100644
index 890a9b8..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ChangeEvent.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import java.util.EventObject;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * Abstract class for all the change events that can be fired by models.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public abstract class ChangeEvent extends EventObject {
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * Construct a new change event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 */
-	protected ChangeEvent(Model source) {
-		super(source);
-	}
-
-	/**
-	 * Covariant override.
-	 */
-	@Override
-	public Model getSource() {
-		return (Model) super.getSource();
-	}
-
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		StringTools.buildSimpleToStringOn(this, sb);
-		sb.append('(');
-		int len = sb.length();
-		this.toString(sb);
-		if (sb.length() == len) {
-			sb.deleteCharAt(len - 1);
-		} else {
-			sb.append(')');
-		}
-		return sb.toString();
-	}
-
-	protected void toString(@SuppressWarnings("unused") StringBuilder sb) {
-		// subclasses should override this to do something a bit more helpful
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionAddEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionAddEvent.java
deleted file mode 100644
index 6968141..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionAddEvent.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "collection add" event gets delivered whenever a model adds items to a
- * "bound" or "constrained" collection. A <code>CollectionAddEvent</code> is sent as an
- * argument to the {@link org.eclipse.jpt.utility.model.listener.CollectionChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-/* 
- * Design options:
- * - create a collection to wrap a single added or removed item
- * 	(this is the option we implemented below and in collaborating code)
- * 	since there is no way to optimize downstream code for
- * 	single items, we take another performance hit by building
- * 	a collection each time  (@see Collections#singleton(Object))
- * 	and forcing downstream code to use an iterator every time
- * 
- * - fire a separate event for each item added or removed
- * 	eliminates any potential for optimizations to downstream code
- * 
- * - add protocol to support both single items and collections
- * 	adds conditional logic to downstream code
- */
-public final class CollectionAddEvent extends CollectionEvent {
-
-	/** The items added to the collection. */
-	private final Object[] items;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new collection add event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param collectionName The programmatic name of the collection that was changed.
-	 * @param item The item added to the collection.
-	 */
-	public CollectionAddEvent(Model source, String collectionName, Object item) {
-		this(source, collectionName, new Object[] {item});
-	}
-
-	/**
-	 * Construct a new collection add event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param collectionName The programmatic name of the collection that was changed.
-	 * @param items The items added to the collection.
-	 */
-	public CollectionAddEvent(Model source, String collectionName, Collection<?> items) {
-		this(source, collectionName, items.toArray());  // NPE if 'items' is null
-	}
-
-	private CollectionAddEvent(Model source, String collectionName, Object[] items) {
-		super(source, collectionName);
-		this.items = items;
-	}
-
-
-	// ********** standard state **********
-
-	/**
-	 * Return the items added to the collection.
-	 */
-	public Iterable<?> getItems() {
-		return new ArrayIterable<Object>(this.items);
-	}
-
-	/**
-	 * Return the number of items added to the collection.
-	 */
-	public int getItemsSize() {
-		return this.items.length;
-	}
-
-	@Override
-	protected void toString(StringBuilder sb) {
-		super.toString(sb);
-		sb.append(": "); //$NON-NLS-1$
-		StringTools.append(sb, this.items);
-	}
-
-
-	// ********** cloning **********
-
-	/**
-	 * Return a copy of the event with the specified source
-	 * replacing the current source.
-	 */
-	public CollectionAddEvent clone(Model newSource) {
-		return this.clone(newSource, this.collectionName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and collection name
-	 * replacing the current source and collection name.
-	 */
-	public CollectionAddEvent clone(Model newSource, String newCollectionName) {
-		return new CollectionAddEvent(newSource, newCollectionName, this.items);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionChangeEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionChangeEvent.java
deleted file mode 100644
index 0c2f4e0..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionChangeEvent.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "collection change" event gets delivered whenever a model changes a "bound"
- * or "constrained" collection in a manner that is not easily characterized by
- * the other collection events.
- * A <code>CollectionChangeEvent</code> is sent as an
- * argument to the {@link org.eclipse.jpt.utility.model.listener.CollectionChangeListener}.
- * A <code>CollectionChangeEvent</code> is accompanied by the collection name and
- * the current state of the collection.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public final class CollectionChangeEvent extends CollectionEvent {
-
-	/**
-	 * The the collection in its current state.
-	 * Clients will need to calculate the necessary changes to synchronize
-	 * with the collection.
-	 */
-	private final Object[] collection;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new collection change event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param collectionName The programmatic name of the collection that was changed.
-	 */
-	public CollectionChangeEvent(Model source, String collectionName, Collection<?> collection) {
-		this(source, collectionName, collection.toArray());  // NPE if 'collection' is null
-	}
-
-	private CollectionChangeEvent(Model source, String collectionName, Object[] collection) {
-		super(source, collectionName);
-		this.collection = collection;
-	}
-
-
-	// ********** standard state **********
-
-	/**
-	 * Return the current state of the collection.
-	 */
-	public Iterable<?> getCollection() {
-		return new ArrayIterable<Object>(this.collection);
-	}
-
-	/**
-	 * Return the number of items in the current state of the collection.
-	 */
-	public int getCollectionSize() {
-		return this.collection.length;
-	}
-
-	@Override
-	protected void toString(StringBuilder sb) {
-		super.toString(sb);
-		sb.append(": "); //$NON-NLS-1$
-		StringTools.append(sb, this.collection);
-	}
-
-
-	// ********** cloning **********
-
-	/**
-	 * Return a copy of the event with the specified source
-	 * replacing the current source.
-	 */
-	public CollectionChangeEvent clone(Model newSource) {
-		return this.clone(newSource, this.collectionName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and collection name
-	 * replacing the current source and collection name.
-	 */
-	public CollectionChangeEvent clone(Model newSource, String newCollectionName) {
-		return new CollectionChangeEvent(newSource, newCollectionName, this.collection);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionClearEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionClearEvent.java
deleted file mode 100644
index a982639..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionClearEvent.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "collection clear" event gets delivered whenever a model clears
- * a "bound" or "constrained" collection. A <code>CollectionClearEvent</code> is sent
- * as an argument to the {@link org.eclipse.jpt.utility.model.listener.CollectionChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public final class CollectionClearEvent extends CollectionEvent {
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new collection clear event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param collectionName The programmatic name of the collection that was changed.
-	 */
-	public CollectionClearEvent(Model source, String collectionName) {
-		super(source, collectionName);
-	}
-
-
-	// ********** cloning **********
-
-	/**
-	 * Return a copy of the event with the specified source
-	 * replacing the current source.
-	 */
-	public CollectionClearEvent clone(Model newSource) {
-		return this.clone(newSource, this.collectionName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and collection name
-	 * replacing the current source and collection name.
-	 */
-	public CollectionClearEvent clone(Model newSource, String newCollectionName) {
-		return new CollectionClearEvent(newSource, newCollectionName);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionEvent.java
deleted file mode 100644
index c6393b3..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionEvent.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import org.eclipse.jpt.utility.model.Model;
-// TODO add "item/original/nested event" for item changed?
-/**
- * A "collection" event gets delivered whenever a model changes a "bound"
- * or "constrained" collection. A <code>CollectionEvent</code> is sent as an
- * argument to the {@link org.eclipse.jpt.utility.model.listener.CollectionChangeListener}.
- * The intent is that any listener
- * can keep itself synchronized with the model's collection via the collection
- * events it receives and need not maintain a reference to the original
- * collection.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public abstract class CollectionEvent extends ChangeEvent {
-
-	/** Name of the collection that changed. */
-	final String collectionName;
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * Construct a new collection event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param collectionName The programmatic name of the collection that was changed.
-	 */
-	public CollectionEvent(Model source, String collectionName) {
-		super(source);
-		if (collectionName == null) {
-			throw new NullPointerException();
-		}
-		this.collectionName = collectionName;
-	}
-
-	/**
-	 * Return the programmatic name of the collection that was changed.
-	 */
-	public String getCollectionName() {
-		return this.collectionName;
-	}
-
-	@Override
-	protected void toString(StringBuilder sb) {
-		sb.append(this.collectionName);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionRemoveEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionRemoveEvent.java
deleted file mode 100644
index 7ed877e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/CollectionRemoveEvent.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "collection remove" event gets delivered whenever a model removes items
- * from a "bound" or "constrained" collection. A <code>CollectionRemoveEvent</code> is sent
- * as an argument to the {@link org.eclipse.jpt.utility.model.listener.CollectionChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-/*
- * See design discussion in CollectionAddEvent
- */
-public final class CollectionRemoveEvent extends CollectionEvent {
-
-	/** The items removed from the collection. */
-	private final Object[] items;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new collection remove event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param collectionName The programmatic name of the collection that was changed.
-	 * @param item The item removed from the collection.
-	 */
-	public CollectionRemoveEvent(Model source, String collectionName, Object item) {
-		this(source, collectionName, new Object[] {item});
-	}
-
-	/**
-	 * Construct a new collection remove event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param collectionName The programmatic name of the collection that was changed.
-	 * @param items The items removed from the collection.
-	 */
-	public CollectionRemoveEvent(Model source, String collectionName, Collection<?> items) {
-		this(source, collectionName, items.toArray());  // NPE if 'items' is null
-	}
-
-	private CollectionRemoveEvent(Model source, String collectionName, Object[] items) {
-		super(source, collectionName);
-		this.items = items;
-	}
-
-
-	// ********** standard state **********
-
-	/**
-	 * Return the items removed from the collection.
-	 */
-	public Iterable<?> getItems() {
-		return new ArrayIterable<Object>(this.items);
-	}
-
-	/**
-	 * Return the number of items removed from the collection.
-	 */
-	public int getItemsSize() {
-		return this.items.length;
-	}
-
-	@Override
-	protected void toString(StringBuilder sb) {
-		super.toString(sb);
-		sb.append(": "); //$NON-NLS-1$
-		StringTools.append(sb, this.items);
-	}
-
-
-	// ********** cloning **********
-
-	/**
-	 * Return a copy of the event with the specified source
-	 * replacing the current source.
-	 */
-	public CollectionRemoveEvent clone(Model newSource) {
-		return this.clone(newSource, this.collectionName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and collection name
-	 * replacing the current source and collection name.
-	 */
-	public CollectionRemoveEvent clone(Model newSource, String newCollectionName) {
-		return new CollectionRemoveEvent(newSource, newCollectionName, this.items);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListAddEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListAddEvent.java
deleted file mode 100644
index 6736c4d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListAddEvent.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import java.util.List;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "list add" event gets delivered whenever a model adds items to a
- * "bound" or "constrained" list. A <code>ListAddEvent</code> is sent as an
- * argument to the {@link org.eclipse.jpt.utility.model.listener.ListChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-/*
- * See design discussion in CollectionAddEvent
- */
-public final class ListAddEvent extends ListEvent {
-
-	/** The index at which the items were added. */
-	private final int index;
-
-	/** The items added to the list. */
-	private final Object[] items;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new list add event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param listName The programmatic name of the list that was changed.
-	 * @param index The index at which the items were added.
-	 * @param item The item added to the list.
-	 */
-	public ListAddEvent(Model source, String listName, int index, Object item) {
-		this(source, listName, index, new Object[] {item});
-	}
-
-	/**
-	 * Construct a new list add event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param listName The programmatic name of the list that was changed.
-	 * @param index The index at which the items were added.
-	 * @param items The items added to the list.
-	 */
-	public ListAddEvent(Model source, String listName, int index, List<?> items) {
-		this(source, listName, index, items.toArray());  // NPE if 'items' is null
-	}
-
-	private ListAddEvent(Model source, String listName, int index, Object[] items) {
-		super(source, listName);
-		this.index = index;
-		this.items = items;
-	}
-
-
-	// ********** standard state **********
-
-	/**
-	 * Return the index at which the items were added to the list.
-	 */
-	public int getIndex() {
-		return this.index;
-	}
-
-	/**
-	 * Return the items added to the list.
-	 */
-	public Iterable<?> getItems() {
-		return new ArrayIterable<Object>(this.items);
-	}
-
-	/**
-	 * Return the number of items added to the list.
-	 */
-	public int getItemsSize() {
-		return this.items.length;
-	}
-
-	@Override
-	protected void toString(StringBuilder sb) {
-		super.toString(sb);
-		sb.append(": "); //$NON-NLS-1$
-		StringTools.append(sb, this.items);
-	}
-
-
-	// ********** cloning **********
-
-	/**
-	 * Return a copy of the event with the specified source
-	 * replacing the current source.
-	 */
-	public ListAddEvent clone(Model newSource) {
-		return this.clone(newSource, this.listName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and list name
-	 * replacing the current source and list name.
-	 */
-	public ListAddEvent clone(Model newSource, String newListName) {
-		return this.clone(newSource, newListName, 0);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and list name
-	 * replacing the current source and list name and displacing
-	 * the index by the specified amount.
-	 */
-	public ListAddEvent clone(Model newSource, String newListName, int offset) {
-		return new ListAddEvent(newSource, newListName, this.index + offset, this.items);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListChangeEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListChangeEvent.java
deleted file mode 100644
index 33cbb9a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListChangeEvent.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import java.util.List;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "list change" event gets delivered whenever a model changes a "bound"
- * or "constrained" list in a manner that is not easily characterized by
- * the other list events.
- * A <code>ListChangeEvent</code> is sent as an
- * argument to the {@link org.eclipse.jpt.utility.model.listener.ListChangeListener}.
- * A <code>ListChangeEvent</code> is accompanied by the list name and
- * the current state of the list.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public final class ListChangeEvent extends ListEvent {
-
-	/**
-	 * The the list in its current state.
-	 * Clients will need to calculate the necessary changes to synchronize
-	 * with the list.
-	 */
-	private final Object[] list;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new list change event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param listName The programmatic name of the list that was changed.
-	 */
-	public ListChangeEvent(Model source, String listName, List<?> list) {
-		this(source, listName, list.toArray());  // NPE if 'list' is null
-	}
-
-	private ListChangeEvent(Model source, String listName, Object[] list) {
-		super(source, listName);
-		this.list = list;
-	}
-
-
-	// ********** standard state **********
-
-	/**
-	 * Return the current state of the list.
-	 */
-	public Iterable<?> getList() {
-		return new ArrayIterable<Object>(this.list);
-	}
-
-	/**
-	 * Return the number of items in the current state of the list.
-	 */
-	public int getListSize() {
-		return this.list.length;
-	}
-
-	@Override
-	protected void toString(StringBuilder sb) {
-		super.toString(sb);
-		sb.append(": "); //$NON-NLS-1$
-		StringTools.append(sb, this.list);
-	}
-
-
-	// ********** cloning **********
-
-	/**
-	 * Return a copy of the event with the specified source
-	 * replacing the current source.
-	 */
-	public ListChangeEvent clone(Model newSource) {
-		return this.clone(newSource, this.listName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and list name
-	 * replacing the current source and list name.
-	 */
-	public ListChangeEvent clone(Model newSource, String newListName) {
-		return new ListChangeEvent(newSource, newListName, this.list);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListClearEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListClearEvent.java
deleted file mode 100644
index f0c32f1..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListClearEvent.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "list clear" event gets delivered whenever a model clears
- * a "bound" or "constrained" list. A <code>ListClearEvent</code> is sent
- * as an argument to the {@link org.eclipse.jpt.utility.model.listener.ListChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public final class ListClearEvent extends ListEvent {
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructor **********
-
-	/**
-	 * Construct a new list clear event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param listName The programmatic name of the list that was changed.
-	 */
-	public ListClearEvent(Model source, String listName) {
-		super(source, listName);
-	}
-
-
-	// ********** cloning **********
-
-	/**
-	 * Return a copy of the event with the specified source
-	 * replacing the current source.
-	 */
-	public ListClearEvent clone(Model newSource) {
-		return this.clone(newSource, this.listName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and list name
-	 * replacing the current source and list name.
-	 */
-	public ListClearEvent clone(Model newSource, String newListName) {
-		return new ListClearEvent(newSource, newListName);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListEvent.java
deleted file mode 100644
index 7a3d383..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListEvent.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import org.eclipse.jpt.utility.model.Model;
-
-// TODO add "item/original/nested event" for item changed?
-/**
- * A "list" event gets delivered whenever a model changes a "bound"
- * or "constrained" list. A <code>ListEvent</code> is sent as an
- * argument to the {@link org.eclipse.jpt.utility.model.listener.ListChangeListener}.
- * The intent is that any listener
- * can keep itself synchronized with the model's list via the list
- * events it receives and need not maintain a reference to the original
- * list.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public class ListEvent extends ChangeEvent {
-
-	/** Name of the list that changed. */
-	final String listName;
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * Construct a new list event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param listName The programmatic name of the list that was changed.
-	 */
-	public ListEvent(Model source, String listName) {
-		super(source);
-		if (listName == null) {
-			throw new NullPointerException();
-		}
-		this.listName = listName;
-	}
-
-	/**
-	 * Return the programmatic name of the list that was changed.
-	 */
-	public String getListName() {
-		return this.listName;
-	}
-
-	@Override
-	protected void toString(StringBuilder sb) {
-		sb.append(this.listName);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListMoveEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListMoveEvent.java
deleted file mode 100644
index 2de5c7a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListMoveEvent.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "list move" event gets delivered whenever a model moves the elements in
- * a "bound" or "constrained" list. A <code>ListMoveEvent</code> is sent
- * as an argument to the {@link org.eclipse.jpt.utility.model.listener.ListChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public final class ListMoveEvent extends ListEvent {
-
-	/** The index to which the items were moved. */
-	private final int targetIndex;
-
-	/** The index from which the items were moved. */
-	private final int sourceIndex;
-
-	/** The number of items moved. */
-	private final int length;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructor **********
-
-	/**
-	 * Construct a new list move event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param listName The programmatic name of the list that was changed.
-	 * @param targetIndex The index to which the items were moved.
-	 * @param sourceIndex The index from which the items were moved.
-	 * @param length The number of items moved.
-	 */
-	public ListMoveEvent(Model source, String listName, int targetIndex, int sourceIndex, int length) {
-		super(source, listName);
-		this.targetIndex = targetIndex;
-		this.sourceIndex = sourceIndex;
-		this.length = length;
-	}
-
-
-	// ********** standard state **********
-
-	/**
-	 * Return the index to which the items were moved.
-	 */
-	public int getTargetIndex() {
-		return this.targetIndex;
-	}
-
-	/**
-	 * Return the index from which the items were moved.
-	 */
-	public int getSourceIndex() {
-		return this.sourceIndex;
-	}
-
-	/**
-	 * Return the number of items moved.
-	 */
-	public int getLength() {
-		return this.length;
-	}
-
-	@Override
-	protected void toString(StringBuilder sb) {
-		super.toString(sb);
-		sb.append(": "); //$NON-NLS-1$
-		sb.append(this.sourceIndex);
-		sb.append(" => "); //$NON-NLS-1$
-		sb.append(this.targetIndex);
-		sb.append(" length="); //$NON-NLS-1$
-		sb.append(this.length);
-	}
-
-
-	// ********** cloning **********
-
-	/**
-	 * Return a copy of the event with the specified source
-	 * replacing the current source.
-	 */
-	public ListMoveEvent clone(Model newSource) {
-		return this.clone(newSource, this.listName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and list name
-	 * replacing the current source and list name.
-	 */
-	public ListMoveEvent clone(Model newSource, String newListName) {
-		return this.clone(newSource, newListName, 0);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and list name
-	 * replacing the current source and list name and displacing
-	 * the index by the specified amount.
-	 */
-	public ListMoveEvent clone(Model newSource, String newListName, int offset) {
-		return new ListMoveEvent(newSource, newListName, this.targetIndex + offset, this.sourceIndex + offset, this.length);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListRemoveEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListRemoveEvent.java
deleted file mode 100644
index 4666967..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListRemoveEvent.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "list remove" event gets delivered whenever a model removes items
- * from a "bound" or "constrained" list. A <code>ListRemoveEvent</code> is sent
- * as an argument to the {@link org.eclipse.jpt.utility.model.listener.ListChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-/*
- * See design discussion in CollectionAddEvent
- */
-public final class ListRemoveEvent extends ListEvent {
-
-	/** The index at which the items were removed. */
-	private final int index;
-
-	/** The items removed from the list. */
-	private final Object[] items;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new list remove event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param collectionName The programmatic name of the list that was changed.
-	 * @param index The index at which the items were removed.
-	 * @param item The item removed from the list.
-	 */
-	public ListRemoveEvent(Model source, String listName, int index, Object item) {
-		this(source, listName, index, new Object[] {item});
-	}
-
-	/**
-	 * Construct a new list remove event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param collectionName The programmatic name of the list that was changed.
-	 * @param index The index at which the items were removed.
-	 * @param items The items removed from the list.
-	 */
-	public ListRemoveEvent(Model source, String listName, int index, Collection<?> items) {
-		this(source, listName, index, items.toArray());  // NPE if 'items' is null
-	}
-
-	private ListRemoveEvent(Model source, String listName, int index, Object[] items) {
-		super(source, listName);
-		this.index = index;
-		this.items = items;
-	}
-
-
-	// ********** standard state **********
-
-	/**
-	 * Return the index at which the items were removed from the list.
-	 */
-	public int getIndex() {
-		return this.index;
-	}
-
-	/**
-	 * Return the items removed from the list.
-	 */
-	public Iterable<?> getItems() {
-		return new ArrayIterable<Object>(this.items);
-	}
-
-	/**
-	 * Return the number of items removed from the list.
-	 */
-	public int getItemsSize() {
-		return this.items.length;
-	}
-
-	@Override
-	protected void toString(StringBuilder sb) {
-		super.toString(sb);
-		sb.append(": "); //$NON-NLS-1$
-		StringTools.append(sb, this.items);
-	}
-
-
-	// ********** cloning **********
-
-	/**
-	 * Return a copy of the event with the specified source
-	 * replacing the current source.
-	 */
-	public ListRemoveEvent clone(Model newSource) {
-		return this.clone(newSource, this.listName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and list name
-	 * replacing the current source and list name.
-	 */
-	public ListRemoveEvent clone(Model newSource, String newListName) {
-		return this.clone(newSource, newListName, 0);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and list name
-	 * replacing the current source and list name and displacing
-	 * the index by the specified amount.
-	 */
-	public ListRemoveEvent clone(Model newSource, String newListName, int offset) {
-		return new ListRemoveEvent(newSource, newListName, this.index + offset, this.items);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListReplaceEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListReplaceEvent.java
deleted file mode 100644
index 602aa40..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/ListReplaceEvent.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import java.util.List;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "list replace" event gets delivered whenever a model replaces items in a
- * "bound" or "constrained" list. A <code>ListReplaceEvent</code> is sent as an
- * argument to the {@link org.eclipse.jpt.utility.model.listener.ListChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public final class ListReplaceEvent extends ListEvent {
-
-	/** The index at which the items were replaced. */
-	private final int index;
-
-	/** The new items that replaced the old items in the list. */
-	private final Object[] newItems;
-
-	/** The old items that were replaced by the new items in the list. */
-	private final Object[] oldItems;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new list replace event for a list of replaced items.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param listName The programmatic name of the list that was changed.
-	 * @param index The index at which the item in the list was replaced.
-	 * @param newItem The new item in the list.
-	 * @param oldItem The old item in the list that were replaced.
-	 */
-	public ListReplaceEvent(Model source, String listName, int index, Object newItem, Object oldItem) {
-		this(source, listName, index, new Object[] {newItem}, new Object[] {oldItem});
-	}
-
-	/**
-	 * Construct a new list replace event for a list of replaced items.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param listName The programmatic name of the list that was changed.
-	 * @param index The index at which the items in the list were replaced.
-	 * @param newItems The new items in the list.
-	 * @param oldItems The old items in the list that were replaced.
-	 */
-	public ListReplaceEvent(Model source, String listName, int index, List<?> newItems, List<?> oldItems) {
-		this(source, listName, index, newItems.toArray(), oldItems.toArray());  // NPE if either 'newItems' or 'oldItems' is null
-	}
-
-	private ListReplaceEvent(Model source, String listName, int index, Object[] newItems, Object[] oldItems) {
-		super(source, listName);
-		if (newItems.length != oldItems.length) {
-			throw new IllegalArgumentException("sizes must match - new items size: " + newItems.length //$NON-NLS-1$
-					+ " old items size: " + oldItems.length); //$NON-NLS-1$
-		}
-		this.index = index;
-		this.newItems = newItems;
-		this.oldItems = oldItems;
-	}
-
-
-	// ********** standard state **********
-
-	/**
-	 * Return the index at which the items were replaced in the list.
-	 */
-	public int getIndex() {
-		return this.index;
-	}
-
-	/**
-	 * Return the new items that replaced the old items in the list.
-	 */
-	public Iterable<?> getNewItems() {
-		return new ArrayIterable<Object>(this.newItems);
-	}
-
-	/**
-	 * Return the old items that were replaced by the new items in the list.
-	 */
-	public Iterable<?> getOldItems() {
-		return new ArrayIterable<Object>(this.oldItems);
-	}
-
-	/**
-	 * Return the number of items that were replaced.
-	 */
-	public int getItemsSize() {
-		return this.newItems.length;
-	}
-
-	@Override
-	protected void toString(StringBuilder sb) {
-		super.toString(sb);
-		sb.append(": "); //$NON-NLS-1$
-		StringTools.append(sb, this.oldItems);
-		sb.append(" => "); //$NON-NLS-1$
-		StringTools.append(sb, this.newItems);
-	}
-
-
-	// ********** cloning **********
-
-	/**
-	 * Return a copy of the event with the specified source
-	 * replacing the current source.
-	 */
-	public ListReplaceEvent clone(Model newSource) {
-		return this.clone(newSource, this.listName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and list name
-	 * replacing the current source and list name.
-	 */
-	public ListReplaceEvent clone(Model newSource, String newListName) {
-		return this.clone(newSource, newListName, 0);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and list name
-	 * replacing the current source and list name and displacing
-	 * the index by the specified amount.
-	 */
-	public ListReplaceEvent clone(Model newSource, String newListName, int offset) {
-		return new ListReplaceEvent(newSource, newListName, this.index + offset, this.newItems, this.oldItems);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/PropertyChangeEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/PropertyChangeEvent.java
deleted file mode 100644
index 718695a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/PropertyChangeEvent.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "property change" event gets delivered whenever a model changes a "bound"
- * or "constrained" property. A <code>PropertyChangeEvent</code> is sent as an
- * argument to the {@link org.eclipse.jpt.utility.model.listener.PropertyChangeListener}.
- * A <code>PropertyChangeEvent</code> is accompanied by the old and new values
- * of the property.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public final class PropertyChangeEvent extends ChangeEvent {
-
-	/** Name of the property that changed. */
-	private final String propertyName;
-
-	/** The property's old value, before the change. */
-	private final Object oldValue;
-
-	/** The property's new value, after the change. */
-	private final Object newValue;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new property change event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param propertyName The programmatic name of the property that was changed.
-	 * @param oldValue The old value of the property.
-	 * @param newValue The new value of the property.
-	 */
-	public PropertyChangeEvent(Model source, String propertyName, Object oldValue, Object newValue) {
-		super(source);
-		if (propertyName == null) {
-			throw new NullPointerException();
-		}
-		this.propertyName = propertyName;
-		this.oldValue = oldValue;
-		this.newValue = newValue;
-	}
-
-
-	// ********** standard state **********
-
-	/**
-	 * Return the programmatic name of the property that was changed.
-	 */
-	public String getPropertyName() {
-		return this.propertyName;
-	}
-
-	/**
-	 * Return the old value of the property.
-	 */
-	public Object getOldValue() {
-		return this.oldValue;
-	}
-
-	/**
-	 * Return the new value of the property.
-	 */
-	public Object getNewValue() {
-		return this.newValue;
-	}
-
-	@Override
-	protected void toString(StringBuilder sb) {
-		sb.append(this.propertyName);
-		sb.append(": "); //$NON-NLS-1$
-		sb.append(this.oldValue);
-		sb.append(" => "); //$NON-NLS-1$
-		sb.append(this.newValue);
-	}
-
-
-	// ********** cloning **********
-
-	public PropertyChangeEvent clone(Model newSource) {
-		return new PropertyChangeEvent(newSource, this.propertyName, this.oldValue, this.newValue);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and property name
-	 * replacing the current source and property name.
-	 */
-	public PropertyChangeEvent clone(Model newSource, String newPropertyName) {
-		return new PropertyChangeEvent(newSource, newPropertyName, this.oldValue, this.newValue);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/StateChangeEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/StateChangeEvent.java
deleted file mode 100644
index d5154df..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/StateChangeEvent.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A generic "state change" event gets delivered whenever a model changes to
- * such extent that it cannot be delineated all aspects of it that have changed.
- * Any listener can synchronize with the model as necessary since the model is
- * available as the event's 'source'.
- * A <code>StateChangeEvent</code> is sent as an argument to the
- * {@link org.eclipse.jpt.utility.model.listener.StateChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public final class StateChangeEvent extends ChangeEvent {
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new state change event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 */
-	public StateChangeEvent(Model source) {
-		super(source);
-	}
-
-
-	// ********** cloning **********
-
-	public StateChangeEvent clone(Model newSource) {
-		return new StateChangeEvent(newSource);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeAddEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeAddEvent.java
deleted file mode 100644
index 3441822..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeAddEvent.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import java.util.List;
-
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "tree add" event gets delivered whenever a model adds a node to a "bound"
- * or "constrained" tree. A <code>TreeChangeEvent</code> is sent as an
- * argument to the {@link org.eclipse.jpt.utility.model.listener.TreeChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public final class TreeAddEvent extends TreeEvent {
-
-	/**
-     * Path to the node added to the tree.
-     */
-	protected final Object[] path;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new tree add event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param treeName The programmatic name of the tree that was changed.
-	 * @param path The path to the part of the tree that was added.
-	 */
-	public TreeAddEvent(Model source, String treeName, List<?> path) {
-		this(source, treeName, path.toArray());  // NPE if 'path' is null
-	}
-
-	private TreeAddEvent(Model source, String treeName, Object[] path) {
-		super(source, treeName);
-		this.path = path;
-	}
-
-
-	// ********** standard state **********
-
-	/**
-	 * Return the path to the part of the tree that was added.
-	 */
-	public Iterable<?> getPath() {
-		return new ArrayIterable<Object>(this.path);
-	}
-
-
-	// ********** cloning **********
-
-	public TreeAddEvent clone(Model newSource) {
-		return this.clone(newSource, this.treeName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and tree name
-	 * replacing the current source and tree name.
-	 */
-	public TreeAddEvent clone(Model newSource, String newTreeName) {
-		return new TreeAddEvent(newSource, newTreeName, this.path);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeChangeEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeChangeEvent.java
deleted file mode 100644
index 78b9a8f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeChangeEvent.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import java.util.Collection;
-
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "tree change" event gets delivered whenever a model changes a "bound"
- * or "constrained" tree in a manner that is not easily characterized by
- * the other tree events.
- * A <code>TreeChangeEvent</code> is sent as an
- * argument to the {@link org.eclipse.jpt.utility.model.listener.TreeChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public final class TreeChangeEvent extends TreeEvent {
-
-    /**
-     * The current nodes in the changed tree.
-     */
-	protected final Object[] nodes;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructor **********
-
-	/**
-	 * Construct a new tree change event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param treeName The programmatic name of the tree that was changed.
-	 * @param nodes The current nodes in the changed tree.
-	 */
-	public TreeChangeEvent(Model source, String treeName, Collection<?> nodes) {
-		this(source, treeName, nodes.toArray());  // NPE if 'nodes' is null
-	}
-	
-	private TreeChangeEvent(Model source, String treeName, Object[] nodes) {
-		super(source, treeName);
-		this.nodes = nodes;
-	}
-	
-
-	// ********** standard state **********
-
-	/**
-	 * Return the current nodes in the changed tree.
-	 */
-	public Iterable<?> getNodes() {
-		return new ArrayIterable<Object>(this.nodes);
-	}
-
-	/**
-	 * Return the current nodes in the changed tree.
-	 */
-	public int getNodesSize() {
-		return this.nodes.length;
-	}
-
-
-	// ********** cloning **********
-
-	public TreeChangeEvent clone(Model newSource) {
-		return this.clone(newSource, this.treeName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and tree name
-	 * replacing the current source and tree name.
-	 */
-	public TreeChangeEvent clone(Model newSource, String newTreeName) {
-		return new TreeChangeEvent(newSource, newTreeName, this.nodes);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeClearEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeClearEvent.java
deleted file mode 100644
index 0c80dbe..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeClearEvent.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "tree clear" event gets delivered whenever a model clears
- * a "bound" or "constrained" tree. A <code>TreeClearEvent</code> is sent
- * as an argument to the {@link org.eclipse.jpt.utility.model.listener.TreeChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public final class TreeClearEvent extends TreeEvent {
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new tree clear event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param collectionName The programmatic name of the tree that was changed.
-	 */
-	public TreeClearEvent(Model source, String treeName) {
-		super(source, treeName);
-	}
-
-
-	// ********** cloning **********
-
-	/**
-	 * Return a copy of the event with the specified source
-	 * replacing the current source.
-	 */
-	public TreeClearEvent clone(Model newSource) {
-		return this.clone(newSource, this.treeName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and collection name
-	 * replacing the current source and collection name.
-	 */
-	public TreeClearEvent clone(Model newSource, String newCollectionName) {
-		return new TreeClearEvent(newSource, newCollectionName);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeEvent.java
deleted file mode 100644
index 72e7630..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeEvent.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "tree" event gets delivered whenever a model changes a "bound"
- * or "constrained" tree. A <code>TreeEvent</code> is sent as an
- * argument to the {@link org.eclipse.jpt.utility.model.listener.TreeChangeListener}.
- * The intent is that any listener
- * can keep itself synchronized with the model's tree via the tree events
- * it receives and need not maintain a reference to the original tree.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public abstract class TreeEvent extends ChangeEvent {
-
-	/** Name of the tree that changed. */
-	final String treeName;
-
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * Construct a new tree event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param treeName The programmatic name of the tree that was changed.
-	 */
-	public TreeEvent(Model source, String treeName) {
-		super(source);
-		if (treeName == null) {
-			throw new NullPointerException();
-		}
-		this.treeName = treeName;
-	}
-
-	/**
-	 * Return the programmatic name of the tree that was changed.
-	 */
-	public String getTreeName() {
-		return this.treeName;
-	}
-
-	@Override
-	protected void toString(StringBuilder sb) {
-		sb.append(this.treeName);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeRemoveEvent.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeRemoveEvent.java
deleted file mode 100644
index ba4da15..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/event/TreeRemoveEvent.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.event;
-
-import java.util.List;
-
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * A "tree remove" event gets delivered whenever a model removes a node rom a
- * "bound" or "constrained" tree. A <code>TreeChangeEvent</code> is sent as an
- * argument to the {@link org.eclipse.jpt.utility.model.listener.TreeChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public final class TreeRemoveEvent extends TreeEvent {
-
-	/**
-     * Path to the node removed from the tree.
-     */
-	protected final Object[] path;
-
-	private static final long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a new tree remove event.
-	 *
-	 * @param source The object on which the event initially occurred.
-	 * @param treeName The programmatic name of the tree that was changed.
-	 * @param path The path to the part of the tree that was removed.
-	 */
-	public TreeRemoveEvent(Model source, String treeName, List<?> path) {
-		this(source, treeName, path.toArray());  // NPE if 'path' is null
-	}
-
-	private TreeRemoveEvent(Model source, String treeName, Object[] path) {
-		super(source, treeName);
-		this.path = path;
-	}
-
-
-	// ********** standard state **********
-
-	/**
-	 * Return the path to the part of the tree that was removed.
-	 */
-	public Iterable<?> getPath() {
-		return new ArrayIterable<Object>(this.path);
-	}
-
-
-	// ********** cloning **********
-
-	public TreeRemoveEvent clone(Model newSource) {
-		return this.clone(newSource, this.treeName);
-	}
-
-	/**
-	 * Return a copy of the event with the specified source and tree name
-	 * replacing the current source and tree name.
-	 */
-	public TreeRemoveEvent clone(Model newSource, String newTreeName) {
-		return new TreeRemoveEvent(newSource, newTreeName, this.path);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ChangeAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ChangeAdapter.java
deleted file mode 100644
index 27060d7..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ChangeAdapter.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-
-/**
- * Convenience implementation of {@link ChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public class ChangeAdapter implements ChangeListener {
-
-	// ***** state
-	public void stateChanged(StateChangeEvent event) {
-		// do nothing
-	}
-
-	// ***** property
-	public void propertyChanged(PropertyChangeEvent event) {
-		// do nothing
-	}
-
-	// ***** collection
-	public void itemsAdded(CollectionAddEvent event) {
-		// do nothing
-	}
-
-	public void itemsRemoved(CollectionRemoveEvent event) {
-		// do nothing
-	}
-
-	public void collectionCleared(CollectionClearEvent event) {
-		// do nothing
-	}
-
-	public void collectionChanged(CollectionChangeEvent event) {
-		// do nothing
-	}
-
-	// ***** list
-	public void itemsAdded(ListAddEvent event) {
-		// do nothing
-	}
-
-	public void itemsRemoved(ListRemoveEvent event) {
-		// do nothing
-	}
-
-	public void itemsReplaced(ListReplaceEvent event) {
-		// do nothing
-	}
-
-	public void itemsMoved(ListMoveEvent event) {
-		// do nothing
-	}
-
-	public void listCleared(ListClearEvent event) {
-		// do nothing
-	}
-
-	public void listChanged(ListChangeEvent event) {
-		// do nothing
-	}
-
-	// ***** tree
-	public void nodeAdded(TreeAddEvent event) {
-		// do nothing
-	}
-
-	public void nodeRemoved(TreeRemoveEvent event) {
-		// do nothing
-	}
-
-	public void treeCleared(TreeClearEvent event) {
-		// do nothing
-	}
-
-	public void treeChanged(TreeChangeEvent event) {
-		// do nothing
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ChangeListener.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ChangeListener.java
deleted file mode 100644
index 3ff58e1..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ChangeListener.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-/**
- * General purpose change listener.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface ChangeListener
-	extends StateChangeListener, PropertyChangeListener, CollectionChangeListener, ListChangeListener, TreeChangeListener
-{
-	// combine the other listener interfaces
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/CollectionChangeAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/CollectionChangeAdapter.java
deleted file mode 100644
index cf75b91..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/CollectionChangeAdapter.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-
-/**
- * Convenience implementation of {@link CollectionChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public class CollectionChangeAdapter implements CollectionChangeListener {
-
-	/**
-	 * Default constructor.
-	 */
-	public CollectionChangeAdapter() {
-		super();
-	}
-
-	public void itemsAdded(CollectionAddEvent event) {
-		// do nothing
-	}
-
-	public void itemsRemoved(CollectionRemoveEvent event) {
-		// do nothing
-	}
-
-	public void collectionCleared(CollectionClearEvent event) {
-		// do nothing
-	}
-
-	public void collectionChanged(CollectionChangeEvent event) {
-		// do nothing
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/CollectionChangeListener.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/CollectionChangeListener.java
deleted file mode 100644
index c88b5c5..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/CollectionChangeListener.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import java.util.EventListener;
-
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-
-/**
- * A "collection change" event gets fired whenever a model changes a "bound"
- * collection. You can register a <code>CollectionChangeListener</code> with a source
- * model so as to be notified of any bound collection updates.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface CollectionChangeListener extends EventListener {
-
-	/**
-	 * This method gets called when items are added to a bound collection.
-	 * 
-	 * @param event An event describing the event source,
-	 * the collection that changed, and the items that were added.
-	 */
-	void itemsAdded(CollectionAddEvent event);
-
-	/**
-	 * This method gets called when items are removed from a bound collection.
-	 * 
-	 * @param event An event describing the event source,
-	 * the collection that changed, and the items that were removed.
-	 */
-	void itemsRemoved(CollectionRemoveEvent event);
-
-	/**
-	 * This method gets called when a bound collection is cleared.
-	 * 
-	 * @param event An event describing the event source 
-	 * and the collection that changed.
-	 */
-	void collectionCleared(CollectionClearEvent event);
-
-	/**
-	 * This method gets called when a bound collection is changed in a manner
-	 * that is not easily characterized by the other methods in this interface.
-	 * 
-	 * @param event An event describing the event source 
-	 * and the collection that changed.
-	 */
-	void collectionChanged(CollectionChangeEvent event);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/CommandChangeListener.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/CommandChangeListener.java
deleted file mode 100644
index 07da34c..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/CommandChangeListener.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import org.eclipse.jpt.utility.Command;
-
-/**
- * Convenience implementation of {@link ChangeListener}.
- * All change notifications are funneled through a single command.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public class CommandChangeListener
-	extends SimpleChangeListener
-{
-	protected final Command command;
-
-	/**
-	 * Construct a change listener that executes the specified command whenever
-	 * it receives any change notification from the model to which it is added
-	 * as a listener.
-	 */
-	public CommandChangeListener(Command command) {
-		super();
-		this.command = command;
-	}
-
-	@Override
-	protected void modelChanged() {
-		this.command.execute();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ListChangeAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ListChangeAdapter.java
deleted file mode 100644
index 0af86fe..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ListChangeAdapter.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-
-/**
- * Convenience implementation of {@link ListChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public class ListChangeAdapter implements ListChangeListener {
-
-	/**
-	 * Default constructor.
-	 */
-	public ListChangeAdapter() {
-		super();
-	}
-
-	public void itemsAdded(ListAddEvent event) {
-		// do nothing
-	}
-
-	public void itemsRemoved(ListRemoveEvent event) {
-		// do nothing
-	}
-
-	public void itemsReplaced(ListReplaceEvent event) {
-		// do nothing
-	}
-
-	public void itemsMoved(ListMoveEvent event) {
-		// do nothing
-	}
-
-	public void listCleared(ListClearEvent event) {
-		// do nothing
-	}
-
-	public void listChanged(ListChangeEvent event) {
-		// do nothing
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ListChangeListener.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ListChangeListener.java
deleted file mode 100644
index 863873d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ListChangeListener.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import java.util.EventListener;
-
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-
-/**
- * A "list change" event gets fired whenever a model changes a "bound"
- * list. You can register a <code>ListChangeListener</code> with a source
- * model so as to be notified of any bound list updates.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface ListChangeListener extends EventListener {
-
-	/**
-	 * This method gets called when items are added to a bound list.
-	 * 
-	 * @param event An event describing the event source,
-	 * the list that changed, the items that were added, and the index
-	 * at which the items were added.
-	 */
-	void itemsAdded(ListAddEvent event);
-
-	/**
-	 * This method gets called when items are removed from a bound list.
-	 * 
-	 * @param event An event describing the event source,
-	 * the list that changed, the items that were removed, and the index
-	 * at which the items were removed.
-	 */
-	void itemsRemoved(ListRemoveEvent event);
-
-	/**
-	 * This method gets called when items in a bound list are replaced.
-	 * 
-	 * @param event An event describing the event source,
-	 * the list that changed, the items that were added, the items that were
-	 * replaced, and the index at which the items were replaced.
-	 */
-	void itemsReplaced(ListReplaceEvent event);
-
-	/**
-	 * This method gets called when items in a bound list are moved.
-	 * 
-	 * @param event An event describing the event source,
-	 * the list that changed, and the indices of where items were moved
-	 * from and to.
-	 */
-	void itemsMoved(ListMoveEvent event);
-
-	/**
-	 * This method gets called when a bound list is cleared.
-	 * 
-	 * @param event A ListClearEvent object describing the event source 
-	 * and the list that changed.
-	 */
-	void listCleared(ListClearEvent event);
-
-	/**
-	 * This method gets called when a bound list is changed in a manner
-	 * that is not easily characterized by the other methods in this interface.
-	 * 
-	 * @param event A ListChangeEvent object describing the event source 
-	 * and the list that changed.
-	 */
-	void listChanged(ListChangeEvent event);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/MultiMethodReflectiveChangeListener.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/MultiMethodReflectiveChangeListener.java
deleted file mode 100644
index 5dbdd8f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/MultiMethodReflectiveChangeListener.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import java.lang.reflect.Method;
-
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-
-/**
- * This class is used by {@link ReflectiveChangeListener} when the requested listener
- * needs to implement multiple methods (i.e. {@link CollectionChangeListener},
- * {@link ListChangeListener}, or {@link TreeChangeListener}).
- */
-class MultiMethodReflectiveChangeListener
-	extends ReflectiveChangeListener 
-	implements CollectionChangeListener, ListChangeListener, TreeChangeListener
-{
-	/** the methods we will invoke on the target object */
-	private final Method addMethod;
-	private final Method removeMethod;
-	private final Method replaceMethod;	// this can be null
-	private final Method moveMethod;	// this can be null
-	private final Method clearMethod;
-	private final Method changeMethod;
-
-
-	/**
-	 * The "replace" and "move" methods are optional.
-	 */
-	MultiMethodReflectiveChangeListener(Object target, Method addMethod, Method removeMethod, Method replaceMethod, Method moveMethod, Method clearMethod, Method changeMethod) {
-		super(target);
-		this.addMethod = addMethod;
-		this.removeMethod = removeMethod;
-		this.replaceMethod = replaceMethod;
-		this.moveMethod = moveMethod;
-		this.clearMethod = clearMethod;
-		this.changeMethod = changeMethod;
-	}
-
-	/**
-	 * No "replace" or "move" methods.
-	 */
-	MultiMethodReflectiveChangeListener(Object target, Method addMethod, Method removeMethod, Method clearMethod, Method changeMethod) {
-		this(target, addMethod, removeMethod, null, null, clearMethod, changeMethod);
-	}
-
-
-	// ********** CollectionChangeListener implementation **********
-
-	private void invoke(Method method, CollectionEvent event) {
-		if (method.getParameterTypes().length == 0) {
-			ReflectionTools.executeMethod(method, this.target, EMPTY_OBJECT_ARRAY);
-		} else {
-			ReflectionTools.executeMethod(method, this.target, new CollectionEvent[] {event});
-		}
-	}
-
-	public void itemsAdded(CollectionAddEvent event) {
-		this.invoke(this.addMethod, event);
-	}
-
-	public void itemsRemoved(CollectionRemoveEvent event) {
-		this.invoke(this.removeMethod, event);
-	}
-
-	public void collectionCleared(CollectionClearEvent event) {
-		this.invoke(this.clearMethod, event);
-	}
-
-	public void collectionChanged(CollectionChangeEvent event) {
-		this.invoke(this.changeMethod, event);
-	}
-
-
-	// ********** ListChangeListener implementation **********
-
-	private void invoke(Method method, ListEvent event) {
-		if (method.getParameterTypes().length == 0) {
-			ReflectionTools.executeMethod(method, this.target, EMPTY_OBJECT_ARRAY);
-		} else {
-			ReflectionTools.executeMethod(method, this.target, new ListEvent[] {event});
-		}
-	}
-
-	public void itemsAdded(ListAddEvent event) {
-		this.invoke(this.addMethod, event);
-	}
-
-	public void itemsRemoved(ListRemoveEvent event) {
-		this.invoke(this.removeMethod, event);
-	}
-
-	public void itemsReplaced(ListReplaceEvent event) {
-		this.invoke(this.replaceMethod, event);
-	}
-
-	public void itemsMoved(ListMoveEvent event) {
-		this.invoke(this.moveMethod, event);
-	}
-
-	public void listCleared(ListClearEvent event) {
-		this.invoke(this.clearMethod, event);
-	}
-
-	public void listChanged(ListChangeEvent event) {
-		this.invoke(this.changeMethod, event);
-	}
-
-
-	// ********** TreeChangeListener implementation **********
-
-	private void invoke(Method method, TreeEvent event) {
-		if (method.getParameterTypes().length == 0) {
-			ReflectionTools.executeMethod(method, this.target, EMPTY_OBJECT_ARRAY);
-		} else {
-			ReflectionTools.executeMethod(method, this.target, new TreeEvent[] {event});
-		}
-	}
-
-	public void nodeAdded(TreeAddEvent event) {
-		this.invoke(this.addMethod, event);
-	}
-
-	public void nodeRemoved(TreeRemoveEvent event) {
-		this.invoke(this.removeMethod, event);
-	}
-
-	public void treeCleared(TreeClearEvent event) {
-		this.invoke(this.clearMethod, event);
-	}
-
-	public void treeChanged(TreeChangeEvent event) {
-		this.invoke(this.changeMethod, event);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/PropertyChangeAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/PropertyChangeAdapter.java
deleted file mode 100644
index 800bdf6..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/PropertyChangeAdapter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-
-/**
- * Convenience implementation of {@link PropertyChangeListener}.
- * This is probably of limited use, since there only a single method to implement;
- * maybe as a null implementation.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public class PropertyChangeAdapter implements PropertyChangeListener {
-
-	public void propertyChanged(PropertyChangeEvent event) {
-		// do nothing
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/PropertyChangeListener.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/PropertyChangeListener.java
deleted file mode 100644
index 1c9d403..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/PropertyChangeListener.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import java.util.EventListener;
-
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-
-/**
- * A "property change" event gets fired whenever a model changes a "bound"
- * property. You can register a <code>PropertyChangeListener</code> with a source
- * model so as to be notified of any bound property updates.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface PropertyChangeListener extends EventListener {
-
-	/**
-	 * This method gets called when a model has changed a bound property.
-	 * 
-	 * @param event An event describing the event source
-	 * and the property's old and new values.
-	 */
-	void propertyChanged(PropertyChangeEvent event);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ReflectiveChangeListener.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ReflectiveChangeListener.java
deleted file mode 100644
index 4840d56..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/ReflectiveChangeListener.java
+++ /dev/null
@@ -1,377 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import java.lang.reflect.Method;
-
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.model.event.ChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-
-/**
- * This factory builds listeners that reflectively forward change events.
- * If you are worried about having too many little classes that have to be
- * loaded and maintained by the class loader, you can use one of these.
- * Of course, this comes with the additional overhead of reflection....
- * Also note that the validity of the method name is not checked at compile
- * time, but at runtime; although we <em>do</em> check the method as soon as the
- * listener is instantiated.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public abstract class ReflectiveChangeListener {
-
-	/** the target object on which we will invoke the method */
-	protected final Object target;
-
-
-	protected static final Class<StateChangeEvent> STATE_CHANGE_EVENT_CLASS = StateChangeEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<StateChangeEvent>[] STATE_CHANGE_EVENT_CLASS_ARRAY = new Class[] {STATE_CHANGE_EVENT_CLASS};
-
-
-	protected static final Class<PropertyChangeEvent> PROPERTY_CHANGE_EVENT_CLASS = PropertyChangeEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<PropertyChangeEvent>[] PROPERTY_CHANGE_EVENT_CLASS_ARRAY = new Class[] {PROPERTY_CHANGE_EVENT_CLASS};
-
-
-	protected static final Class<CollectionEvent> COLLECTION_EVENT_CLASS = CollectionEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<CollectionEvent>[] COLLECTION_EVENT_CLASS_ARRAY = new Class[] {COLLECTION_EVENT_CLASS};
-
-	protected static final Class<CollectionAddEvent> COLLECTION_ADD_EVENT_CLASS = CollectionAddEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<CollectionAddEvent>[] COLLECTION_ADD_EVENT_CLASS_ARRAY = new Class[] {COLLECTION_ADD_EVENT_CLASS};
-
-	protected static final Class<CollectionRemoveEvent> COLLECTION_REMOVE_EVENT_CLASS = CollectionRemoveEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<CollectionRemoveEvent>[] COLLECTION_REMOVE_EVENT_CLASS_ARRAY = new Class[] {COLLECTION_REMOVE_EVENT_CLASS};
-
-	protected static final Class<CollectionClearEvent> COLLECTION_CLEAR_EVENT_CLASS = CollectionClearEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<CollectionClearEvent>[] COLLECTION_CLEAR_EVENT_CLASS_ARRAY = new Class[] {COLLECTION_CLEAR_EVENT_CLASS};
-
-	protected static final Class<CollectionChangeEvent> COLLECTION_CHANGE_EVENT_CLASS = CollectionChangeEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<CollectionChangeEvent>[] COLLECTION_CHANGE_EVENT_CLASS_ARRAY = new Class[] {COLLECTION_CHANGE_EVENT_CLASS};
-
-
-	protected static final Class<ListEvent> LIST_EVENT_CLASS = ListEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<ListEvent>[] LIST_EVENT_CLASS_ARRAY = new Class[] {LIST_EVENT_CLASS};
-
-	protected static final Class<ListAddEvent> LIST_ADD_EVENT_CLASS = ListAddEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<ListAddEvent>[] LIST_ADD_EVENT_CLASS_ARRAY = new Class[] {LIST_ADD_EVENT_CLASS};
-
-	protected static final Class<ListRemoveEvent> LIST_REMOVE_EVENT_CLASS = ListRemoveEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<ListRemoveEvent>[] LIST_REMOVE_EVENT_CLASS_ARRAY = new Class[] {LIST_REMOVE_EVENT_CLASS};
-
-	protected static final Class<ListReplaceEvent> LIST_REPLACE_EVENT_CLASS = ListReplaceEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<ListReplaceEvent>[] LIST_REPLACE_EVENT_CLASS_ARRAY = new Class[] {LIST_REPLACE_EVENT_CLASS};
-
-	protected static final Class<ListMoveEvent> LIST_MOVE_EVENT_CLASS = ListMoveEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<ListMoveEvent>[] LIST_MOVE_EVENT_CLASS_ARRAY = new Class[] {LIST_MOVE_EVENT_CLASS};
-
-	protected static final Class<ListClearEvent> LIST_CLEAR_EVENT_CLASS = ListClearEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<ListClearEvent>[] LIST_CLEAR_EVENT_CLASS_ARRAY = new Class[] {LIST_CLEAR_EVENT_CLASS};
-
-	protected static final Class<ListChangeEvent> LIST_CHANGE_EVENT_CLASS = ListChangeEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<ListChangeEvent>[] LIST_CHANGE_EVENT_CLASS_ARRAY = new Class[] {LIST_CHANGE_EVENT_CLASS};
-
-
-	protected static final Class<TreeEvent> TREE_EVENT_CLASS = TreeEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<TreeEvent>[] TREE_EVENT_CLASS_ARRAY = new Class[] {TREE_EVENT_CLASS};
-
-	protected static final Class<TreeAddEvent> TREE_ADD_EVENT_CLASS = TreeAddEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<TreeAddEvent>[] TREE_ADD_EVENT_CLASS_ARRAY = new Class[] {TREE_ADD_EVENT_CLASS};
-
-	protected static final Class<TreeRemoveEvent> TREE_REMOVE_EVENT_CLASS = TreeRemoveEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<TreeRemoveEvent>[] TREE_REMOVE_EVENT_CLASS_ARRAY = new Class[] {TREE_REMOVE_EVENT_CLASS};
-
-	protected static final Class<TreeClearEvent> TREE_CLEAR_EVENT_CLASS = TreeClearEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<TreeClearEvent>[] TREE_CLEAR_EVENT_CLASS_ARRAY = new Class[] {TREE_CLEAR_EVENT_CLASS};
-
-	protected static final Class<TreeChangeEvent> TREE_CHANGE_EVENT_CLASS = TreeChangeEvent.class;
-	@SuppressWarnings("unchecked")
-	protected static final Class<TreeChangeEvent>[] TREE_CHANGE_EVENT_CLASS_ARRAY = new Class[] {TREE_CHANGE_EVENT_CLASS};
-
-	protected static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
-
-
-	// ********** helper methods **********
-
-	/**
-	 * Find and return a method implemented by the target that can be invoked
-	 * reflectively when a change event occurs.
-	 */
-	private static Method findChangeListenerMethod(Object target, String methodName, Class<? extends ChangeEvent>[] eventClassArray) {
-		try {
-			return ReflectionTools.getMethod(target, methodName, eventClassArray);
-		} catch (RuntimeException ex1) {
-			return ReflectionTools.getMethod(target, methodName);
-		}
-	}
-
-	/**
-	 * Check whether the specified method is suitable for being invoked when a
-	 * change event has occurred. Throw an exception if it is not suitable.
-	 */
-	private static void checkChangeListenerMethod(Method method, Class<? extends ChangeEvent> eventClass) {
-		Class<?>[] parmTypes = method.getParameterTypes();
-		int parmTypesLength = parmTypes.length;
-		if (parmTypesLength == 0) {
-			return;
-		}
-		if ((parmTypesLength == 1) && parmTypes[0].isAssignableFrom(eventClass)) {
-			return;
-		}
-		throw new IllegalArgumentException(method.toString());
-	}
-
-
-	// ********** factory methods: StateChangeListener **********
-
-	/**
-	 * Construct a state change listener that will invoke the specified method
-	 * on the specified target.
-	 */
-	public static StateChangeListener buildStateChangeListener(Object target, Method method) {
-		checkChangeListenerMethod(method, STATE_CHANGE_EVENT_CLASS);
-		return new SingleMethodReflectiveChangeListener(target, method);
-	}
-
-	/**
-	 * Construct a state change listener that will invoke the specified method
-	 * on the specified target. If a single-argument method with the specified
-	 * name and appropriate argument is found, it will be invoked; otherwise,
-	 * a zero-argument method with the specified name will be invoked.
-	 */
-	public static StateChangeListener buildStateChangeListener(Object target, String methodName) {
-		return buildStateChangeListener(target, findChangeListenerMethod(target, methodName, STATE_CHANGE_EVENT_CLASS_ARRAY));
-	}
-
-
-	// ********** factory methods: PropertyChangeListener **********
-
-	/**
-	 * Construct a property change listener that will invoke the specified method
-	 * on the specified target.
-	 */
-	public static PropertyChangeListener buildPropertyChangeListener(Object target, Method method) {
-		checkChangeListenerMethod(method, PROPERTY_CHANGE_EVENT_CLASS);
-		return new SingleMethodReflectiveChangeListener(target, method);
-	}
-
-	/**
-	 * Construct a property change listener that will invoke the specified method
-	 * on the specified target. If a single-argument method with the specified
-	 * name and appropriate argument is found, it will be invoked; otherwise,
-	 * a zero-argument method with the specified name will be invoked.
-	 */
-	public static PropertyChangeListener buildPropertyChangeListener(Object target, String methodName) {
-		return buildPropertyChangeListener(target, findChangeListenerMethod(target, methodName, PROPERTY_CHANGE_EVENT_CLASS_ARRAY));
-	}
-
-
-	// ********** factory methods: CollectionChangeListener **********
-
-	/**
-	 * Construct a collection change listener that will invoke the specified methods
-	 * on the specified target.
-	 */
-	public static CollectionChangeListener buildCollectionChangeListener(Object target, Method addMethod, Method removeMethod, Method clearMethod, Method changeMethod) {
-		checkChangeListenerMethod(addMethod, COLLECTION_ADD_EVENT_CLASS);
-		checkChangeListenerMethod(removeMethod, COLLECTION_REMOVE_EVENT_CLASS);
-		checkChangeListenerMethod(clearMethod, COLLECTION_CLEAR_EVENT_CLASS);
-		checkChangeListenerMethod(changeMethod, COLLECTION_CHANGE_EVENT_CLASS);
-		return new MultiMethodReflectiveChangeListener(target, addMethod, removeMethod, clearMethod, changeMethod);
-	}
-
-	/**
-	 * Construct a collection change listener that will invoke the specified method
-	 * on the specified target for any change event.
-	 */
-	public static CollectionChangeListener buildCollectionChangeListener(Object target, Method method) {
-		return buildCollectionChangeListener(target, method, method, method, method);
-	}
-
-	/**
-	 * Construct a collection change listener that will invoke the specified methods
-	 * on the specified target for change events. If a single-argument method
-	 * with the specified name and appropriate argument is found, it will be invoked;
-	 * otherwise, a zero-argument method with the specified name will be invoked.
-	 */
-	public static CollectionChangeListener buildCollectionChangeListener(Object target, String addMethodName, String removeMethodName, String clearMethodName, String changeMethodName) {
-		return buildCollectionChangeListener(
-				target,
-				findChangeListenerMethod(target, addMethodName, COLLECTION_ADD_EVENT_CLASS_ARRAY),
-				findChangeListenerMethod(target, removeMethodName, COLLECTION_REMOVE_EVENT_CLASS_ARRAY),
-				findChangeListenerMethod(target, clearMethodName, COLLECTION_CLEAR_EVENT_CLASS_ARRAY),
-				findChangeListenerMethod(target, changeMethodName, COLLECTION_CHANGE_EVENT_CLASS_ARRAY)
-		);
-	}
-
-	/**
-	 * Construct a collection change listener that will invoke the specified method
-	 * on the specified target for any change event. If a single-argument method
-	 * with the specified name and appropriate argument is found, it will be invoked;
-	 * otherwise, a zero-argument method with the specified name will be invoked.
-	 */
-	public static CollectionChangeListener buildCollectionChangeListener(Object target, String methodName) {
-		return buildCollectionChangeListener(target, findChangeListenerMethod(target, methodName, COLLECTION_EVENT_CLASS_ARRAY));
-	}
-
-
-	// ********** factory methods: ListChangeListener **********
-
-	/**
-	 * Construct a list change listener that will invoke the specified methods
-	 * on the specified target.
-	 */
-	public static ListChangeListener buildListChangeListener(Object target, Method addMethod, Method removeMethod, Method replaceMethod, Method moveMethod, Method clearMethod, Method changeMethod) {
-		checkChangeListenerMethod(addMethod, LIST_ADD_EVENT_CLASS);
-		checkChangeListenerMethod(removeMethod, LIST_REMOVE_EVENT_CLASS);
-		checkChangeListenerMethod(replaceMethod, LIST_REPLACE_EVENT_CLASS);
-		checkChangeListenerMethod(moveMethod, LIST_MOVE_EVENT_CLASS);
-		checkChangeListenerMethod(clearMethod, LIST_CLEAR_EVENT_CLASS);
-		checkChangeListenerMethod(changeMethod, LIST_CHANGE_EVENT_CLASS);
-		return new MultiMethodReflectiveChangeListener(target, addMethod, removeMethod, replaceMethod, moveMethod, clearMethod, changeMethod);
-	}
-
-	/**
-	 * Construct a list change listener that will invoke the specified method
-	 * on the specified target for any change event.
-	 */
-	public static ListChangeListener buildListChangeListener(Object target, Method method) {
-		return buildListChangeListener(target, method, method, method, method, method, method);
-	}
-
-	/**
-	 * Construct a list change listener that will invoke the specified methods
-	 * on the specified target for change events. If a single-argument method
-	 * with the specified name and appropriate argument is found, it will be invoked;
-	 * otherwise, a zero-argument method with the specified name will be invoked.
-	 */
-	public static ListChangeListener buildListChangeListener(Object target, String addMethodName, String removeMethodName, String replaceMethodName, String moveMethodName, String clearMethodName, String changeMethodName) {
-		return buildListChangeListener(
-				target,
-				findChangeListenerMethod(target, addMethodName, LIST_ADD_EVENT_CLASS_ARRAY),
-				findChangeListenerMethod(target, removeMethodName, LIST_REMOVE_EVENT_CLASS_ARRAY),
-				findChangeListenerMethod(target, replaceMethodName, LIST_REPLACE_EVENT_CLASS_ARRAY),
-				findChangeListenerMethod(target, moveMethodName, LIST_MOVE_EVENT_CLASS_ARRAY),
-				findChangeListenerMethod(target, clearMethodName, LIST_CLEAR_EVENT_CLASS_ARRAY),
-				findChangeListenerMethod(target, changeMethodName, LIST_CHANGE_EVENT_CLASS_ARRAY)
-		);
-	}
-
-	/**
-	 * Construct a list change listener that will invoke the specified method
-	 * on the specified target for any change event. If a single-argument method
-	 * with the specified name and appropriate argument is found, it will be invoked;
-	 * otherwise, a zero-argument method with the specified name will be invoked.
-	 */
-	public static ListChangeListener buildListChangeListener(Object target, String methodName) {
-		return buildListChangeListener(target, findChangeListenerMethod(target, methodName, LIST_EVENT_CLASS_ARRAY));
-	}
-
-
-	// ********** factory methods: TreeChangeListener **********
-
-	/**
-	 * Construct a tree change listener that will invoke the specified methods
-	 * on the specified target.
-	 */
-	public static TreeChangeListener buildTreeChangeListener(Object target, Method addMethod, Method removeMethod, Method clearMethod, Method changeMethod) {
-		checkChangeListenerMethod(addMethod, TREE_ADD_EVENT_CLASS);
-		checkChangeListenerMethod(removeMethod, TREE_REMOVE_EVENT_CLASS);
-		checkChangeListenerMethod(clearMethod, TREE_CLEAR_EVENT_CLASS);
-		checkChangeListenerMethod(changeMethod, TREE_CHANGE_EVENT_CLASS);
-		return new MultiMethodReflectiveChangeListener(target, addMethod, removeMethod, clearMethod, changeMethod);
-	}
-
-	/**
-	 * Construct a tree change listener that will invoke the specified method
-	 * on the specified target for any change event.
-	 */
-	public static TreeChangeListener buildTreeChangeListener(Object target, Method method) {
-		return buildTreeChangeListener(target, method, method, method, method);
-	}
-
-	/**
-	 * Construct a tree change listener that will invoke the specified methods
-	 * on the specified target for change events. If a single-argument method
-	 * with the specified name and appropriate argument is found, it will be invoked;
-	 * otherwise, a zero-argument method with the specified name will be invoked.
-	 */
-	public static TreeChangeListener buildTreeChangeListener(Object target, String addMethodName, String removeMethodName, String clearMethodName, String changeMethodName) {
-		return buildTreeChangeListener(
-				target,
-				findChangeListenerMethod(target, addMethodName, TREE_ADD_EVENT_CLASS_ARRAY),
-				findChangeListenerMethod(target, removeMethodName, TREE_REMOVE_EVENT_CLASS_ARRAY),
-				findChangeListenerMethod(target, clearMethodName, TREE_CLEAR_EVENT_CLASS_ARRAY),
-				findChangeListenerMethod(target, changeMethodName, TREE_CHANGE_EVENT_CLASS_ARRAY)
-		);
-	}
-
-	/**
-	 * Construct a tree change listener that will invoke the specified method
-	 * on the specified target for any change event. If a single-argument method
-	 * with the specified name and appropriate argument is found, it will be invoked;
-	 * otherwise, a zero-argument method with the specified name will be invoked.
-	 */
-	public static TreeChangeListener buildTreeChangeListener(Object target, String methodName) {
-		return buildTreeChangeListener(target, findChangeListenerMethod(target, methodName, TREE_EVENT_CLASS_ARRAY));
-	}
-
-
-	// ********** constructor **********
-
-	/**
-	 * Construct a listener that will invoke the specified method
-	 * on the specified target.
-	 */
-	protected ReflectiveChangeListener(Object target) {
-		super();
-		this.target = target;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/SimpleChangeListener.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/SimpleChangeListener.java
deleted file mode 100644
index 6f83d90..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/SimpleChangeListener.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import org.eclipse.jpt.utility.model.event.ChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-
-/**
- * Convenience abstract implementation of {@link ChangeListener}.
- * All change notifications are funneled through a single method.
- * This class can be used by
- * subclassing it and overriding either {@link #modelChanged(ChangeEvent)}
- * (if access to the event is required) or {@link #modelChanged()} (if access
- * to the event is not required).
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public abstract class SimpleChangeListener
-	implements ChangeListener
-{
-	public SimpleChangeListener() {
-		super();
-	}
-
-	public void stateChanged(StateChangeEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void propertyChanged(PropertyChangeEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void collectionChanged(CollectionChangeEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void collectionCleared(CollectionClearEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void itemsAdded(CollectionAddEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void itemsRemoved(CollectionRemoveEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void itemsAdded(ListAddEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void itemsMoved(ListMoveEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void itemsRemoved(ListRemoveEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void itemsReplaced(ListReplaceEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void listChanged(ListChangeEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void listCleared(ListClearEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void nodeAdded(TreeAddEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void nodeRemoved(TreeRemoveEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void treeChanged(TreeChangeEvent event) {
-		this.modelChanged(event);
-	}
-
-	public void treeCleared(TreeClearEvent event) {
-		this.modelChanged(event);
-	}
-
-	/**
-	 * The model has notified the listener of the change described by the
-	 * specified change event. By default the listener executes {@link #modelChanged()}.
-	 */
-	protected void modelChanged(@SuppressWarnings("unused") ChangeEvent event) {
-		this.modelChanged();
-	}
-
-	/**
-	 * The model has notified the listener of a change.
-	 * By default the listener throws an exception.
-	 */
-	protected void modelChanged() {
-		throw new RuntimeException("This method was not overridden."); //$NON-NLS-1$
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/SingleMethodReflectiveChangeListener.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/SingleMethodReflectiveChangeListener.java
deleted file mode 100644
index 4d08543..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/SingleMethodReflectiveChangeListener.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import java.lang.reflect.Method;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-
-/**
- * This class is used by {@link ReflectiveChangeListener} when the requested listener
- * need only implement a single method (i.e. {@link StateChangeListener} or
- * {@link PropertyChangeListener}).
- */
-class SingleMethodReflectiveChangeListener
-	extends ReflectiveChangeListener
-	implements StateChangeListener, PropertyChangeListener
-{
-
-	/** the method we will invoke on the target object */
-	private final Method method;
-	/** cache the number of arguments */
-	private final boolean methodIsZeroArgument;
-
-	SingleMethodReflectiveChangeListener(Object target, Method method) {
-		super(target);
-		this.method = method;
-		this.methodIsZeroArgument = method.getParameterTypes().length == 0;
-	}
-
-
-	// ********** StateChangeListener implementation **********
-
-	public void stateChanged(StateChangeEvent event) {
-		if (this.methodIsZeroArgument) {
-			ReflectionTools.executeMethod(this.method, this.target, EMPTY_OBJECT_ARRAY);
-		} else {
-			ReflectionTools.executeMethod(this.method, this.target, new StateChangeEvent[] {event});
-		}
-	}
-
-
-	// ********** PropertyChangeListener implementation **********
-
-	public void propertyChanged(PropertyChangeEvent event) {
-		if (this.methodIsZeroArgument) {
-			ReflectionTools.executeMethod(this.method, this.target, EMPTY_OBJECT_ARRAY);
-		} else {
-			ReflectionTools.executeMethod(this.method, this.target, new PropertyChangeEvent[] {event});
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/StateChangeAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/StateChangeAdapter.java
deleted file mode 100644
index 76b7851..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/StateChangeAdapter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-
-/**
- * Convenience implementation of {@link StateChangeListener}.
- * This is probably of limited use, since there only a single method to implement;
- * maybe as a null implementation.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public class StateChangeAdapter implements StateChangeListener {
-
-	public void stateChanged(StateChangeEvent event) {
-		// do nothing
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/StateChangeListener.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/StateChangeListener.java
deleted file mode 100644
index 10189ca..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/StateChangeListener.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import java.util.EventListener;
-
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-
-/**
- * A generic "state change" event gets delivered whenever a model changes to 
- * such extent that it cannot be delineated all aspects of it that have changed. 
- * You can register a <code>StateChangeListener</code> with a source model so as to be notified 
- * of any such changes.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface StateChangeListener extends EventListener {
-
-	/**
-	 * This method gets called when a model has changed in some general fashion.
-	 * 
-	 * @param event An event describing the event source.
-	 */
-	void stateChanged(StateChangeEvent event);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/TreeChangeAdapter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/TreeChangeAdapter.java
deleted file mode 100644
index 051328c..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/TreeChangeAdapter.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-
-/**
- * Convenience implementation of {@link TreeChangeListener}.
- * <p>
- * Provisional API: This class is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public class TreeChangeAdapter implements TreeChangeListener {
-
-	/**
-	 * Default constructor.
-	 */
-	public TreeChangeAdapter() {
-		super();
-	}
-
-	public void nodeAdded(TreeAddEvent event) {
-		// do nothing
-	}
-
-	public void nodeRemoved(TreeRemoveEvent event) {
-		// do nothing
-	}
-
-	public void treeCleared(TreeClearEvent event) {
-		// do nothing
-	}
-
-	public void treeChanged(TreeChangeEvent event) {
-		// do nothing
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/TreeChangeListener.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/TreeChangeListener.java
deleted file mode 100644
index 42408ab..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/listener/TreeChangeListener.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.listener;
-
-import java.util.EventListener;
-
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-
-/**
- * A "tree change" event gets fired whenever a model changes a "bound"
- * tree. You can register a <code>TreeChangeListener</code> with a source
- * model so as to be notified of any bound tree updates.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- */
-public interface TreeChangeListener extends EventListener {
-
-	/**
-	 * This method gets called when a node is added to a bound tree.
-	 * 
-	 * @param event An event describing the event source,
-	 * the tree that changed, and the path to the node that was added.
-	 */
-	void nodeAdded(TreeAddEvent event);
-
-	/**
-	 * This method gets called when a node is removed from a bound tree.
-	 * 
-	 * @param event An event describing the event source,
-	 * the tree that changed, and the path to the node that was removed.
-	 */
-	void nodeRemoved(TreeRemoveEvent event);
-
-	/**
-	 * This method gets called when a bound tree is cleared.
-	 * 
-	 * @param event An event describing the event source,
-	 * the tree that changed, and an empty path.
-	 */
-	void treeCleared(TreeClearEvent event);
-
-	/**
-	 * This method gets called when a portion of a bound tree is changed in
-	 * a manner that is not easily characterized by the other methods in this
-	 * interface.
-	 * 
-	 * @param event An event describing the event source,
-	 * the tree that changed, and the current state of the
-	 * tree that changed.
-	 */
-	void treeChanged(TreeChangeEvent event);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/CollectionValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/CollectionValueModel.java
deleted file mode 100644
index 445ade6..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/CollectionValueModel.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.value;
-
-import java.util.Iterator;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * Interface used to abstract collection accessing and
- * change notification and make it more pluggable.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- * 
- * @param <E> the type of values held by the model
- */
-public interface CollectionValueModel<E>
-	extends Model, Iterable<E>
-{
-
-	/**
-	 * Return the collection's values.
-	 */
-	Iterator<E> iterator();
-		String VALUES = "values"; //$NON-NLS-1$
-
-	/**
-	 * Return the size of the collection.
-	 */
-	int size();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/ListValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/ListValueModel.java
deleted file mode 100644
index 8f400d2..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/ListValueModel.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.value;
-
-import java.util.Iterator;
-import java.util.ListIterator;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * Interface used to abstract list accessing and
- * change notification and make it more pluggable.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- * 
- * @param <E> the type of values held by the list model
- */
-public interface ListValueModel<E>
-	extends Model, Iterable<E>
-{
-	/**
-	 * Return the list's values.
-	 */
-	Iterator<E> iterator();
-		String LIST_VALUES = "list values"; //$NON-NLS-1$
-
-	/**
-	 * Return the list's values.
-	 */
-	ListIterator<E> listIterator();
-
-	/**
-	 * Return the size of the list.
-	 */
-	int size();
-
-	/**
-	 * Return the item at the specified index of the list.
-	 */
-	E get(int index);
-
-	/**
-	 * Return the list's values.
-	 */
-	Object[] toArray();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/PropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/PropertyValueModel.java
deleted file mode 100644
index b375e9f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/PropertyValueModel.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.value;
-
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * Interface used to abstract property accessing and
- * change notification and make it more pluggable.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- * 
- * @param <T> the type of value held by the model
- */
-public interface PropertyValueModel<T>
-	extends Model
-{
-
-	/**
-	 * Return the property's value.
-	 */
-	T getValue();
-		String VALUE = "value"; //$NON-NLS-1$
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/TreeNodeValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/TreeNodeValueModel.java
deleted file mode 100644
index 643e34e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/TreeNodeValueModel.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.value;
-
-/**
- * Extend {@link WritablePropertyValueModel} to better support
- * {@link org.eclipse.jpt.utility.internal.model.value.swing.TreeModelAdapter}.
- * <p>
- * Implementors of this interface should fire a "state change" event
- * whenever the node's internal state changes in a way that the
- * tree listeners should be notified.
- * <p>
- * Implementors of this interface should also fire a "value property change"
- * event whenever the node's value changes. Typically, only nodes that
- * hold "primitive" data will fire this event.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- * 
- * @param <T> the type of values held by the model
- * 
- * @see org.eclipse.jpt.utility.internal.model.value.AbstractTreeNodeValueModel
- */
-public interface TreeNodeValueModel<T>
-	extends WritablePropertyValueModel<T>
-{
-
-	/**
-	 * Return the node's parent node; null if the node
-	 * is the root.
-	 */
-	TreeNodeValueModel<T> parent();
-
-	/**
-	 * Return the path to the node.
-	 */
-	TreeNodeValueModel<T>[] path();
-
-	/**
-	 * Return a list value model of the node's child nodes.
-	 */
-	ListValueModel<TreeNodeValueModel<T>> childrenModel();
-
-	/**
-	 * Return the node's child at the specified index.
-	 */
-	TreeNodeValueModel<T> child(int index);
-
-	/**
-	 * Return the size of the node's list of children.
-	 */
-	int childrenSize();
-
-	/**
-	 * Return the index in the node's list of children of the specified child.
-	 */
-	int indexOfChild(TreeNodeValueModel<T> child);
-
-	/**
-	 * Return whether the node is a leaf (i.e. it has no children)
-	 */
-	boolean isLeaf();
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/TreeValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/TreeValueModel.java
deleted file mode 100644
index 9dfa6fa..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/TreeValueModel.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.value;
-
-import java.util.Iterator;
-import org.eclipse.jpt.utility.model.Model;
-
-/**
- * Interface used to abstract tree accessing and
- * change notification and make it more pluggable.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- * 
- * @param <E> the type of values held by the model
- */
-public interface TreeValueModel<E>
-	extends Model
-{
-	/**
-	 * Return the tree's nodes.
-	 */
-	Iterator<E> nodes();
-		String NODES = "nodes"; //$NON-NLS-1$
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/WritableCollectionValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/WritableCollectionValueModel.java
deleted file mode 100644
index 53ecb78..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/WritableCollectionValueModel.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.value;
-
-/**
- * Extend {@link CollectionValueModel} to allow the setting of the
- * collection's values.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- * 
- * @param <E> the type of values held by the model
- */
-public interface WritableCollectionValueModel<E>
-	extends CollectionValueModel<E>
-{
-
-	/**
-	 * Set the values and fire a collection change notification.
-	 * @see CollectionValueModel#VALUES
-	 */
-	void setValues(Iterable<E> values);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/WritableListValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/WritableListValueModel.java
deleted file mode 100644
index 9296f6b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/WritableListValueModel.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.value;
-
-/**
- * Extend {@link ListValueModel} to allow the setting of the
- * lists's values.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- * 
- * @param <E> the type of values held by the model
- */
-public interface WritableListValueModel<E>
-	extends ListValueModel<E>
-{
-
-	/**
-	 * Set the list values and fire a list change notification.
-	 * @see ListValueModel#LIST_VALUES
-	 */
-	void setListValues(Iterable<E> values);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/WritablePropertyValueModel.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/WritablePropertyValueModel.java
deleted file mode 100644
index 97231d6..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/model/value/WritablePropertyValueModel.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.model.value;
-
-/**
- * Extend {@link PropertyValueModel} to allow the setting of the property's value.
- * <p>
- * Provisional API: This interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is available at this early stage to solicit feedback from
- * pioneering adopters on the understanding that any code that uses this API
- * will almost certainly be broken (repeatedly) as the API evolves.
- * 
- * @param <T> the type of value held by the model
- */
-public interface WritablePropertyValueModel<T>
-	extends PropertyValueModel<T>
-{
-
-	/**
-	 * Set the value and fire a property change notification.
-	 * @see PropertyValueModel#VALUE
-	 */
-	void setValue(T value);
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.classpath b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.classpath
deleted file mode 100644
index 764d643..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.classpath
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		<accessrules>
-			<accessrule kind="accessible" pattern="org/eclipse/jpt/core/**"/>
-		</accessrules>
-	</classpathentry>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.cvsignore b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.cvsignore
deleted file mode 100644
index a196dd7..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-bin
-@dot
-temp.folder
-build.xml
-javaCompiler...args
-javaCompiler...args.*
\ No newline at end of file
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.project b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.project
deleted file mode 100644
index bb6561e..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.core.tests.extension.resource</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.settings/org.eclipse.core.resources.prefs b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 55044aa..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Mon Apr 07 14:26:32 EDT 2008
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.settings/org.eclipse.jdt.core.prefs b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 929d545..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun May 27 14:59:18 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/META-INF/MANIFEST.MF b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/META-INF/MANIFEST.MF
deleted file mode 100644
index 1bd29e9..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,22 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.core.tests.extension.resource;singleton:=true
-Bundle-Version: 2.3.0.qualifier
-Bundle-Activator: org.eclipse.jpt.core.tests.extension.resource.ExtensionTestPlugin
-Bundle-ActivationPolicy: lazy
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.core.resources,
- org.eclipse.core.runtime,
- org.eclipse.jdt.core,
- org.eclipse.jpt.core,
- org.eclipse.jpt.ui,
- org.eclipse.jpt.core,
- org.eclipse.jpt.gen,
- org.eclipse.jpt.db,
- org.eclipse.jpt.utility,
- org.eclipse.swt,
- org.eclipse.wst.validation
-Export-Package: org.eclipse.jpt.core.tests.extension.resource;x-friends:="org.eclipse.jpt.ui.tests,org.eclipse.jpt.core.tests"
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/about.html b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/about.html
deleted file mode 100644
index be534ba..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 02, 2008</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/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</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>
-
-</BODY>
-</HTML>
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/build.properties b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/build.properties
deleted file mode 100644
index f33b241..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-################################################################################
-# Copyright (c) 2007 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-javacSource=1.5
-javacTarget=1.5
-source.. = src/
-output.. = bin/
-bin.includes = .,\
-               META-INF/,\
-               plugin.xml,\
-               plugin.properties,\
-               about.html
-jars.compile.order = .
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/plugin.properties b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/plugin.properties
deleted file mode 100644
index 0558789..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/plugin.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-################################################################################
-# Copyright (c) 2007, 2009 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-# ====================================================================
-# To code developer:
-#   Do NOT change the properties between this line and the
-#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
-#   Make a new property name, append to the end of the file and change
-#   the code to use the new property.
-# ====================================================================
-
-# ====================================================================
-# %%% END OF TRANSLATED PROPERTIES %%%
-# ====================================================================
-
-pluginName = Dali Java Persistence Tools - Extension Tests
-providerName = Eclipse Web Tools Platform
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/plugin.xml b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/plugin.xml
deleted file mode 100644
index c0577cb..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/plugin.xml
+++ /dev/null
Binary files differ
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/ExtensionTestPlugin.java b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/ExtensionTestPlugin.java
deleted file mode 100644
index 47ff993..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/ExtensionTestPlugin.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.core.tests.extension.resource;
-
-import org.eclipse.core.runtime.Plugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class ExtensionTestPlugin extends Plugin {
-
-	// The plug-in ID
-	public static final String PLUGIN_ID = "org.eclipse.jpt.core.tests.extension.resource"; //$NON-NLS-1$
-
-	// The shared instance
-	private static ExtensionTestPlugin plugin;
-	
-	/**
-	 * The constructor
-	 */
-	public ExtensionTestPlugin() {
-		super();
-	}
-
-	@Override
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		plugin = this;
-	}
-
-	@Override
-	public void stop(BundleContext context) throws Exception {
-		plugin = null;
-		super.stop(context);
-	}
-
-	/**
-	 * Returns the shared instance
-	 *
-	 * @return the shared instance
-	 */
-	public static ExtensionTestPlugin getDefault() {
-		return plugin;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/JavaTestAttributeMapping.java b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/JavaTestAttributeMapping.java
deleted file mode 100644
index 251439b..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/JavaTestAttributeMapping.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.core.tests.extension.resource;
-
-import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
-import org.eclipse.jpt.core.internal.context.java.AbstractJavaAttributeMapping;
-import org.eclipse.jpt.core.resource.java.Annotation;
-
-public class JavaTestAttributeMapping extends AbstractJavaAttributeMapping<Annotation>
-{
-	public static final String TEST_ATTRIBUTE_MAPPING_KEY = "testAttribute"; //$NON-NLS-1$
-	public static final String TEST_ATTRIBUTE_ANNOTATION_NAME = "test.TestAttribute"; //$NON-NLS-1$
-
-
-	public JavaTestAttributeMapping(JavaPersistentAttribute parent) {
-		super(parent);
-	}
-	
-	public String getKey() {
-		return JavaTestAttributeMapping.TEST_ATTRIBUTE_MAPPING_KEY;
-	}
-
-	public String getAnnotationName() {
-		return JavaTestAttributeMapping.TEST_ATTRIBUTE_ANNOTATION_NAME;
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/JavaTestAttributeMappingDefinition.java b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/JavaTestAttributeMappingDefinition.java
deleted file mode 100644
index fcc3ff9..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/JavaTestAttributeMappingDefinition.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.core.tests.extension.resource;
-
-import org.eclipse.jpt.core.JpaFactory;
-import org.eclipse.jpt.core.context.java.JavaAttributeMappingDefinition;
-import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
-import org.eclipse.jpt.core.internal.context.java.AbstractJavaAttributeMappingDefinition;
-
-public class JavaTestAttributeMappingDefinition
-	extends AbstractJavaAttributeMappingDefinition
-{
-	// singleton
-	private static final JavaTestAttributeMappingDefinition INSTANCE = 
-		new JavaTestAttributeMappingDefinition();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static JavaAttributeMappingDefinition instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private JavaTestAttributeMappingDefinition() {
-		super();
-	}
-	
-	
-	public String getKey() {
-		return JavaTestAttributeMapping.TEST_ATTRIBUTE_MAPPING_KEY;
-	}
-
-	public String getAnnotationName() {
-		return JavaTestAttributeMapping.TEST_ATTRIBUTE_ANNOTATION_NAME;
-	}
-
-	public JavaTestAttributeMapping buildMapping(JavaPersistentAttribute parent, JpaFactory factory) {
-		return ((TestJpaFactory) factory).buildJavaTestAttributeMapping(parent);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/JavaTestTypeMapping.java b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/JavaTestTypeMapping.java
deleted file mode 100644
index ad0f8c8..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/JavaTestTypeMapping.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.core.tests.extension.resource;
-
-import org.eclipse.jpt.core.context.java.JavaPersistentType;
-import org.eclipse.jpt.core.internal.context.java.AbstractJavaTypeMapping;
-import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
-
-public class JavaTestTypeMapping extends AbstractJavaTypeMapping
-{
-	public static final String TEST_TYPE_MAPPING_KEY = "test"; //$NON-NLS-1$
-	public static final String TEST_TYPE_ANNOTATION_NAME = "test.Test"; //$NON-NLS-1$
-
-
-	public JavaTestTypeMapping(JavaPersistentType parent) {
-		super(parent);
-	}
-
-	public String getAnnotationName() {
-		return TEST_TYPE_ANNOTATION_NAME;
-	}
-
-	public String getKey() {
-		return TEST_TYPE_MAPPING_KEY;
-	}
-
-	public Iterable<String> getSupportingAnnotationNames() {
-		return EmptyIterable.<String>instance();
-	}
-
-	public boolean isMapped() {
-		return true;
-	}
-
-	public boolean tableNameIsInvalid(String tableName) {
-		return false;
-	}
-	
-	public boolean shouldValidateDbInfo() {
-		return false;
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/JavaTestTypeMappingDefinition.java b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/JavaTestTypeMappingDefinition.java
deleted file mode 100644
index 98e38ab..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/JavaTestTypeMappingDefinition.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.core.tests.extension.resource;
-
-import org.eclipse.jpt.core.JpaFactory;
-import org.eclipse.jpt.core.context.java.JavaPersistentType;
-import org.eclipse.jpt.core.context.java.JavaTypeMappingDefinition;
-import org.eclipse.jpt.core.internal.context.java.AbstractJavaTypeMappingDefinition;
-
-public class JavaTestTypeMappingDefinition
-	extends AbstractJavaTypeMappingDefinition
-{
-	// singleton
-	private static final JavaTestTypeMappingDefinition INSTANCE = 
-			new JavaTestTypeMappingDefinition();
-	
-	
-	/**
-	 * Return the singleton
-	 */
-	public static JavaTypeMappingDefinition instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private JavaTestTypeMappingDefinition() {
-		super();
-	}
-	
-	
-	public String getKey() {
-		return JavaTestTypeMapping.TEST_TYPE_MAPPING_KEY;
-	}
-	
-	public String getAnnotationName() {
-		return JavaTestTypeMapping.TEST_TYPE_ANNOTATION_NAME;
-	}
-
-	public JavaTestTypeMapping buildMapping(JavaPersistentType parent, JpaFactory factory) {
-		return ((TestJpaFactory) factory).buildJavaTestTypeMapping(parent);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJavaBasicMapping.java b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJavaBasicMapping.java
deleted file mode 100644
index 0816af9..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJavaBasicMapping.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.core.tests.extension.resource;
-
-import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
-import org.eclipse.jpt.core.internal.context.java.AbstractJavaBasicMapping;
-
-public class TestJavaBasicMapping extends AbstractJavaBasicMapping
-{
-	public TestJavaBasicMapping(JavaPersistentAttribute parent) {
-		super(parent);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJavaEntity.java b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJavaEntity.java
deleted file mode 100644
index 89dbb74..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJavaEntity.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.core.tests.extension.resource;
-
-import org.eclipse.jpt.core.context.java.JavaPersistentType;
-import org.eclipse.jpt.core.internal.context.java.AbstractJavaEntity;
-import org.eclipse.jpt.core.jpa2.context.java.JavaCacheable2_0;
-
-public class TestJavaEntity extends AbstractJavaEntity
-{
-	protected TestJavaEntity(JavaPersistentType parent) {
-		super(parent);
-	}
-
-	public JavaCacheable2_0 getCacheable() {
-		return null;
-	}
-	
-	public boolean calculateDefaultCacheable() {
-		return false;
-	}
-
-	
-}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaFactory.java b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaFactory.java
deleted file mode 100644
index 1908ca3..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.core.tests.extension.resource;
-
-import org.eclipse.jpt.core.context.java.JavaBasicMapping;
-import org.eclipse.jpt.core.context.java.JavaEntity;
-import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
-import org.eclipse.jpt.core.context.java.JavaPersistentType;
-import org.eclipse.jpt.core.internal.AbstractJpaFactory;
-
-public class TestJpaFactory extends AbstractJpaFactory
-{
-	
-	@Override
-	public JavaEntity buildJavaEntity(JavaPersistentType parent) {
-		return new TestJavaEntity(parent);
-	}
-	
-	@Override
-	public JavaBasicMapping buildJavaBasicMapping(JavaPersistentAttribute parent) {
-		return new TestJavaBasicMapping(parent);
-	}
-	
-	public JavaTestTypeMapping buildJavaTestTypeMapping(JavaPersistentType parent) {
-		return new JavaTestTypeMapping(parent);
-	}
-	
-	public JavaTestAttributeMapping buildJavaTestAttributeMapping(JavaPersistentAttribute parent) {
-		return new JavaTestAttributeMapping(parent);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformFactory.java b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformFactory.java
deleted file mode 100644
index 1ee8e10..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.core.tests.extension.resource;
-
-import org.eclipse.jpt.core.JpaPlatform;
-import org.eclipse.jpt.core.JpaPlatformFactory;
-import org.eclipse.jpt.core.JpaPlatformVariation;
-import org.eclipse.jpt.core.JptCorePlugin;
-import org.eclipse.jpt.core.internal.GenericJpaAnnotationDefinitionProvider;
-import org.eclipse.jpt.core.internal.GenericJpaAnnotationProvider;
-import org.eclipse.jpt.core.internal.GenericJpaPlatform;
-import org.eclipse.jpt.core.internal.GenericJpaPlatformFactory.SimpleVersion;
-
-/**
- * All the state in the JPA platform should be "static" (i.e. unchanging once
- * it is initialized).
- */
-@SuppressWarnings("nls")
-public class TestJpaPlatformFactory
-	implements JpaPlatformFactory
-{
-	/**
-	 * zero-argument constructor
-	 */
-	public TestJpaPlatformFactory() {
-		super();
-	}
-	
-	
-	public JpaPlatform buildJpaPlatform(String id) {
-		return new GenericJpaPlatform(
-			id,
-			buildJpaVersion(),
-			new TestJpaFactory(), 
-			new GenericJpaAnnotationProvider(GenericJpaAnnotationDefinitionProvider.instance()), 
-			TestJpaPlatformProvider.instance(),
-			buildJpaPlatformVariation());
-	}
-	
-	private JpaPlatform.Version buildJpaVersion() {
-		return new SimpleVersion(JptCorePlugin.JPA_FACET_VERSION_1_0) {
-			@Override
-			public String getVersion() {
-				return "BOOOYAH!";
-			}
-		};
-	}
-	
-	protected JpaPlatformVariation buildJpaPlatformVariation() {
-		return new JpaPlatformVariation() {
-			public Supported getTablePerConcreteClassInheritanceIsSupported() {
-				return Supported.MAYBE;
-			}
-			public boolean isJoinTableOverridable() {
-				return false;
-			}
-		};
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformProvider.java b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformProvider.java
deleted file mode 100644
index 466b73f..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformProvider.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.core.tests.extension.resource;
-
-import org.eclipse.core.runtime.content.IContentType;
-import org.eclipse.jpt.core.JpaPlatformProvider;
-import org.eclipse.jpt.core.JpaResourceModelProvider;
-import org.eclipse.jpt.core.JpaResourceType;
-import org.eclipse.jpt.core.JptCorePlugin;
-import org.eclipse.jpt.core.ResourceDefinition;
-import org.eclipse.jpt.core.context.java.JavaAttributeMappingDefinition;
-import org.eclipse.jpt.core.context.java.JavaTypeMappingDefinition;
-import org.eclipse.jpt.core.internal.AbstractJpaPlatformProvider;
-import org.eclipse.jpt.core.internal.JarResourceModelProvider;
-import org.eclipse.jpt.core.internal.JavaResourceModelProvider;
-import org.eclipse.jpt.core.internal.OrmResourceModelProvider;
-import org.eclipse.jpt.core.internal.PersistenceResourceModelProvider;
-import org.eclipse.jpt.core.internal.context.java.JavaBasicMappingDefinition;
-import org.eclipse.jpt.core.internal.context.java.JavaEmbeddableDefinition;
-import org.eclipse.jpt.core.internal.context.java.JavaEmbeddedIdMappingDefinition;
-import org.eclipse.jpt.core.internal.context.java.JavaEmbeddedMappingDefinition;
-import org.eclipse.jpt.core.internal.context.java.JavaEntityDefinition;
-import org.eclipse.jpt.core.internal.context.java.JavaIdMappingDefinition;
-import org.eclipse.jpt.core.internal.context.java.JavaManyToManyMappingDefinition;
-import org.eclipse.jpt.core.internal.context.java.JavaManyToOneMappingDefinition;
-import org.eclipse.jpt.core.internal.context.java.JavaMappedSuperclassDefinition;
-import org.eclipse.jpt.core.internal.context.java.JavaOneToManyMappingDefinition;
-import org.eclipse.jpt.core.internal.context.java.JavaOneToOneMappingDefinition;
-import org.eclipse.jpt.core.internal.context.java.JavaTransientMappingDefinition;
-import org.eclipse.jpt.core.internal.context.java.JavaVersionMappingDefinition;
-import org.eclipse.jpt.core.internal.jpa1.context.orm.GenericOrmXmlDefinition;
-import org.eclipse.jpt.core.internal.jpa1.context.persistence.GenericPersistenceXmlDefinition;
-
-public class TestJpaPlatformProvider extends AbstractJpaPlatformProvider
-{
-	public static final String ID = "core.testJpaPlatform"; //$NON-NLS-1$
-	
-	// singleton
-	private static final JpaPlatformProvider INSTANCE = 
-			new TestJpaPlatformProvider();
-	
-	
-	/**
-	 * Return the singleton.
-	 */
-	public static JpaPlatformProvider instance() {
-		return INSTANCE;
-	}
-	
-	
-	/**
-	 * Enforce singleton usage
-	 */
-	private TestJpaPlatformProvider() {
-		super();
-	}
-	
-	
-	// ********** resource models **********
-	
-	public JpaResourceType getMostRecentSupportedResourceType(IContentType contentType) {
-		if (contentType.equals(JptCorePlugin.JAVA_SOURCE_CONTENT_TYPE)) {
-			return JptCorePlugin.JAVA_SOURCE_RESOURCE_TYPE;
-		}
-		else if (contentType.equals(JptCorePlugin.JAR_CONTENT_TYPE)) {
-			return JptCorePlugin.JAR_RESOURCE_TYPE;
-		}
-		else if (contentType.equals(JptCorePlugin.PERSISTENCE_XML_CONTENT_TYPE)) {
-			return JptCorePlugin.PERSISTENCE_XML_1_0_RESOURCE_TYPE;
-		}
-		else if (contentType.equals(JptCorePlugin.ORM_XML_CONTENT_TYPE)) {
-			return JptCorePlugin.ORM_XML_1_0_RESOURCE_TYPE;
-		}
-		else {
-			throw new IllegalArgumentException(contentType.toString());
-		}
-	}
-	
-	@Override
-	protected JpaResourceModelProvider[] buildResourceModelProviders() {
-		// order should not be important here
-		return new JpaResourceModelProvider[] {
-			JavaResourceModelProvider.instance(),
-			JarResourceModelProvider.instance(),
-			PersistenceResourceModelProvider.instance(),
-			OrmResourceModelProvider.instance()};
-	}
-	
-	
-	// ********** Java type mappings **********
-	
-	@Override
-	protected JavaTypeMappingDefinition[] buildNonNullJavaTypeMappingDefinitions() {
-		// order determined by analyzing order that reference implementation (toplink) uses
-		return new JavaTypeMappingDefinition[] {
-			JavaEntityDefinition.instance(),
-			JavaEmbeddableDefinition.instance(),
-			JavaMappedSuperclassDefinition.instance(),
-			JavaTestTypeMappingDefinition.instance()};  // added
-	}
-
-
-	// ********** Java attribute mappings **********
-	@Override
-	protected JavaAttributeMappingDefinition[] buildNonNullDefaultJavaAttributeMappingDefinitions() {
-		// order determined by analyzing order that reference implementation (toplink) uses
-		return new JavaAttributeMappingDefinition[] {
-			JavaEmbeddedMappingDefinition.instance(),
-			JavaBasicMappingDefinition.instance()};
-	}
-	
-	@Override
-	protected JavaAttributeMappingDefinition[] buildNonNullSpecifiedJavaAttributeMappingDefinitions() {
-		// order determined by analyzing order that reference implementation (toplink) uses
-		return new JavaAttributeMappingDefinition[] {
-			JavaTransientMappingDefinition.instance(),
-			JavaIdMappingDefinition.instance(),
-			JavaVersionMappingDefinition.instance(),
-			JavaBasicMappingDefinition.instance(),
-			JavaEmbeddedMappingDefinition.instance(),
-			JavaEmbeddedIdMappingDefinition.instance(),
-			JavaManyToManyMappingDefinition.instance(),
-			JavaManyToOneMappingDefinition.instance(),
-			JavaOneToManyMappingDefinition.instance(),
-			JavaOneToOneMappingDefinition.instance(),
-			JavaTestAttributeMappingDefinition.instance()}; // added
-	}
-	
-	// ********** Mapping Files **********
-	
-	@Override
-	protected ResourceDefinition[] buildResourceDefinitions() {
-		return new ResourceDefinition[] {
-			GenericPersistenceXmlDefinition.instance(),
-			GenericOrmXmlDefinition.instance()};
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformUiFactory.java b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformUiFactory.java
deleted file mode 100644
index c120dd3..0000000
--- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformUiFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.core.tests.extension.resource;
-
-import org.eclipse.jpt.ui.JpaPlatformUi;
-import org.eclipse.jpt.ui.JpaPlatformUiFactory;
-import org.eclipse.jpt.ui.internal.GenericJpaPlatformUiProvider;
-import org.eclipse.jpt.ui.internal.platform.generic.GenericJpaPlatformUi;
-import org.eclipse.jpt.ui.internal.platform.generic.GenericNavigatorProvider;
-
-public class TestJpaPlatformUiFactory implements JpaPlatformUiFactory
-{
-
-	/**
-	 * Zero arg constructor for extension point
-	 */
-	public TestJpaPlatformUiFactory() {
-		super();
-	}
-
-	public JpaPlatformUi buildJpaPlatformUi() {
-		return new GenericJpaPlatformUi(
-			new GenericNavigatorProvider(),
-			GenericJpaPlatformUiProvider.instance());
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/.classpath b/jpa/tests/org.eclipse.jpt.db.tests/.classpath
deleted file mode 100644
index ef8d91c..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/.classpath
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		<accessrules>
-			<accessrule kind="accessible" pattern="org/eclipse/jpt/utility/**"/>
-		</accessrules>
-	</classpathentry>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/.cvsignore b/jpa/tests/org.eclipse.jpt.db.tests/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/.project b/jpa/tests/org.eclipse.jpt.db.tests/.project
deleted file mode 100644
index f5b0127..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.db.tests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/.settings/org.eclipse.core.resources.prefs b/jpa/tests/org.eclipse.jpt.db.tests/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index b23d0c7..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue Jan 15 11:11:11 EST 2008
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/.settings/org.eclipse.jdt.core.prefs b/jpa/tests/org.eclipse.jpt.db.tests/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 929d545..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun May 27 14:59:18 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/META-INF/MANIFEST.MF b/jpa/tests/org.eclipse.jpt.db.tests/META-INF/MANIFEST.MF
deleted file mode 100644
index 8d2559e..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,19 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.db.tests
-Bundle-Version: 1.0.100.qualifier
-Bundle-Activator: org.eclipse.jpt.db.tests.internal.JptDbTestsPlugin
-Bundle-ActivationPolicy: lazy
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.datatools.connectivity;bundle-version="[1.1.0,1.3.0)",
- org.eclipse.datatools.connectivity.sqm.core;bundle-version="1.0.1",
- org.eclipse.datatools.modelbase.sql;bundle-version="1.0.0",
- org.eclipse.jpt.utility;bundle-version="[1.2.0,2.0.0)",
- org.eclipse.jpt.db;bundle-version="[1.2.0,2.0.0)",
- org.junit;bundle-version="3.8.0"
-Export-Package: org.eclipse.jpt.db.tests.internal;x-internal:=true,
- org.eclipse.jpt.db.tests.internal.platforms;x-internal:=true
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/about.html b/jpa/tests/org.eclipse.jpt.db.tests/about.html
deleted file mode 100644
index be534ba..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 02, 2008</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/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</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>
-
-</BODY>
-</HTML>
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/build.properties b/jpa/tests/org.eclipse.jpt.db.tests/build.properties
deleted file mode 100644
index d27ab8f..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-################################################################################
-# Copyright (c) 2007 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-source.. = src/
-output.. = bin/
-bin.includes = .,\
-               META-INF/,\
-               plugin.properties
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/config/derby.properties b/jpa/tests/org.eclipse.jpt.db.tests/config/derby.properties
deleted file mode 100644
index 242d156..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/config/derby.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-################################################################################
-# Copyright (c) 2007, 2008 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-
-# Configure the workspace- and database server-specific settings here.
-
-# user and password are optional for Derby
-userID = 
-password = 
-
-# the JDBC driver JAR(s) must be specified;
-# if there are multiple JARs, separate the names with commas
-# jars = C:/derby/lib/derby.jar
-jars = 
-
-# the JDBC URL is required for Derby
-# url = jdbc:derby:C:/derby/data/testdb;create=true
-url = 
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/config/mysql.properties b/jpa/tests/org.eclipse.jpt.db.tests/config/mysql.properties
deleted file mode 100644
index d6407de..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/config/mysql.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-################################################################################
-# Copyright (c) 2007, 2008 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-
-# Configure the workspace- and database server-specific settings here.
-
-# user and password are optional, depending on the platform
-userID = 
-password = 
-
-# the JDBC driver JAR(s) must be specified;
-# if there are multiple JARs, separate the names with commas
-# jars = C:/mysql/mysql-connector-java-5.0.6-bin.jar
-jars = 
-
-# the JDBC URL is optional for MySQL
-# url = jdbc:mysql://localhost:3306
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/config/oracle10g.properties b/jpa/tests/org.eclipse.jpt.db.tests/config/oracle10g.properties
deleted file mode 100644
index 4b911b4..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/config/oracle10g.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-################################################################################
-# Copyright (c) 2007, 2008 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-
-# Configure the workspace- and database server-specific settings here.
-
-# user and password are optional, depending on the platform
-userID = scott
-password = tiger
-
-# the JDBC driver JAR(s) must be specified;
-# if there are multiple JARs, separate the names with commas
-# jars = C:/oracle/jdbc/lib/ojdbc5.jar
-jars = 
-
-# the JDBC URL is required
-# url = jdbc:oracle:thin:@localhost:1521:testdb
-url = 
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/config/oracle10gXE.properties b/jpa/tests/org.eclipse.jpt.db.tests/config/oracle10gXE.properties
deleted file mode 100644
index e67c01a..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/config/oracle10gXE.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-################################################################################
-# Copyright (c) 2007, 2008 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-
-# Configure the workspace- and database server-specific settings here.
-
-# user and password are optional, depending on the platform
-userID = scott
-password = tiger
-
-# the JDBC driver JAR(s) must be specified;
-# if there are multiple JARs, separate the names with commas
-# jars = C:/oracle/jdbc/lib/ojdbc5.jar
-jars = 
-
-# the JDBC URL is required
-# url = jdbc:oracle:thin:@localhost:1521:XE
-url = 
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/config/oracle9i.properties b/jpa/tests/org.eclipse.jpt.db.tests/config/oracle9i.properties
deleted file mode 100644
index 4b911b4..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/config/oracle9i.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-################################################################################
-# Copyright (c) 2007, 2008 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-
-# Configure the workspace- and database server-specific settings here.
-
-# user and password are optional, depending on the platform
-userID = scott
-password = tiger
-
-# the JDBC driver JAR(s) must be specified;
-# if there are multiple JARs, separate the names with commas
-# jars = C:/oracle/jdbc/lib/ojdbc5.jar
-jars = 
-
-# the JDBC URL is required
-# url = jdbc:oracle:thin:@localhost:1521:testdb
-url = 
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/config/postgresql.properties b/jpa/tests/org.eclipse.jpt.db.tests/config/postgresql.properties
deleted file mode 100644
index 32fafe4..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/config/postgresql.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-################################################################################
-# Copyright (c) 2007, 2008 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-
-# Configure the workspace- and database server-specific settings here.
-
-# user and password are optional, depending on the platform
-userID = 
-password = 
-
-# the JDBC driver JAR(s) must be specified;
-# if there are multiple JARs, separate the names with commas
-# jars = C:/postgresql/jdbc/postgresql-8.2-505.jdbc3.jar
-jars = 
-
-# the JDBC URL is optional for PostgreSQL
-# url = jdbc:postgresql
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/config/sqlserver.properties b/jpa/tests/org.eclipse.jpt.db.tests/config/sqlserver.properties
deleted file mode 100644
index f72b645..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/config/sqlserver.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-################################################################################
-# Copyright (c) 2007, 2008 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-
-# Configure the workspace- and database server-specific settings here.
-
-# user and password are optional, depending on the platform
-userID = 
-password = 
-
-# the JDBC driver JAR(s) must be specified;
-# if there are multiple JARs, separate the names with commas
-# jars = C:/sqlserver/lib/sqljdbc.jar
-jars = 
-
-# the JDBC URL is required
-# url = jdbc:sqlserver://localhost:1433
-url = 
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/config/sybase.properties b/jpa/tests/org.eclipse.jpt.db.tests/config/sybase.properties
deleted file mode 100644
index 493d5d4..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/config/sybase.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-################################################################################
-# Copyright (c) 2007, 2008 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-
-# Configure the workspace- and database server-specific settings here.
-
-# user and password are optional, depending on the platform
-userID = 
-password = 
-
-# the JDBC driver JAR(s) must be specified;
-# if there are multiple JARs, separate the names with commas
-# jars = C:/sybase/lib/jconn3.jar
-jars = 
-
-# the JDBC URL is required
-# url = jdbc:sybase:Tds:localhost:5000
-url = 
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/plugin.properties b/jpa/tests/org.eclipse.jpt.db.tests/plugin.properties
deleted file mode 100644
index 2c98779..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/plugin.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-################################################################################
-# Copyright (c) 2007 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-# ====================================================================
-# To code developer:
-#   Do NOT change the properties between this line and the
-#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
-#   Make a new property name, append to the end of the file and change
-#   the code to use the new property.
-# ====================================================================
-
-# ====================================================================
-# %%% END OF TRANSLATED PROPERTIES %%%
-# ====================================================================
-
-pluginName = JPA DB Tests
-providerName = Eclipse.org
-
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JDBCTests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JDBCTests.java
deleted file mode 100644
index ce05d76..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JDBCTests.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-
-import junit.framework.TestCase;
-
-/**
- * These aren't tests. They are just an easy way to dump JDBC metadata to the
- * console.
- */
-@SuppressWarnings("nls")
-public class JDBCTests extends TestCase {
-
-	public JDBCTests(String name) {
-		super(name);
-	}
-
-	public void testDerby() throws Exception {
-		this.dumpMetaData(DERBY);
-	}
-
-	public void testMySQL() throws Exception {
-		this.dumpMetaData(MYSQL);
-	}
-
-	public void testOracle() throws Exception {
-		this.dumpMetaData(ORACLE);
-	}
-
-	public void testPostgreSQL() throws Exception {
-		this.dumpMetaData(POSTGRESQL);
-	}
-
-	public void testSybase() throws Exception {
-		this.dumpMetaData(SYBASE);
-	}
-
-	protected void dumpMetaData(ConnectionConfig config) throws Exception {
-		System.out.println("***** PLATFORM: " + config.platformName + " *****");
-		System.out.println();
-		Class.forName(config.driverClassName);
-		Connection connection = DriverManager.getConnection(this.buildURL(config), config.user, config.password);
-		System.out.println("CATALOGS:");
-		JDBCTools.dump(connection.getMetaData().getCatalogs());
-		System.out.println();
-		System.out.println("SCHEMATA:");
-		JDBCTools.dump(connection.getMetaData().getSchemas());
-		connection.close();
-		System.out.println();
-	}
-
-	protected String buildURL(ConnectionConfig config) {
-		return "jdbc:" + config.databaseURL;
-	}
-
-	protected static final ConnectionConfig DERBY =
-		new ConnectionConfig(
-			"Derby",
-			"org.apache.derby.jdbc.EmbeddedDriver",
-			"derby:C:/derby/data/test",
-			null,
-			null
-		);
-
-	protected static final ConnectionConfig MYSQL =
-		new ConnectionConfig(
-			"MySQL",
-			"com.mysql.jdbc.Driver",
-			"mysql://localhost:3306",
-			"root",
-			"oracle"
-		);
-
-	protected static final ConnectionConfig ORACLE =
-		new ConnectionConfig(
-			"Oracle",
-			"oracle.jdbc.OracleDriver",
-			"oracle:thin:@localhost:1521:orcl",
-			"scott",
-			"tiger"
-		);
-
-	protected static final ConnectionConfig POSTGRESQL =
-		new ConnectionConfig(
-			"PostgreSQL",
-			"org.postgresql.Driver",
-			"postgresql:postgres",
-			"postgres",
-			"oracle"
-		);
-
-	// the Sybase server must be configured explicitly to "localhost"
-	// in the config file [SYBASE]/ini/sql.ini
-	protected static final ConnectionConfig SYBASE =
-		new ConnectionConfig(
-			"Sybase",
-			"com.sybase.jdbc3.jdbc.SybDriver",
-			"sybase:Tds:localhost:5000",
-			"sa",
-			"oracle"
-		);
-
-	protected static class ConnectionConfig {
-		protected final String platformName;
-		protected final String driverClassName;
-		protected final String databaseURL;
-		protected final String user;
-		protected final String password;
-		protected ConnectionConfig(
-				String platformName,
-				String driverClassName,
-				String databaseURL,
-				String user,
-				String password
-		) {
-			super();
-			this.platformName = platformName;
-			this.driverClassName = driverClassName;
-			this.databaseURL = databaseURL;
-			this.user = user;
-			this.password = password;
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JDBCTools.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JDBCTools.java
deleted file mode 100644
index 57c98fe..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JDBCTools.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal;
-
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.eclipse.jpt.utility.internal.iterators.ResultSetIterator;
-
-@SuppressWarnings("nls")
-public class JDBCTools {
-
-	public static void dump(Connection connection, String sql) throws SQLException {
-		dump(execute(connection, sql));
-	}
-
-	public static void dump(ResultSet resultSet) throws SQLException {
-		PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
-		// synchronize the console so everything is contiguous
-		synchronized (System.out) {
-			dumpOn(resultSet, pw);
-		}
-		pw.flush();
-	}
-
-	public static void dumpOn(ResultSet resultSet, PrintWriter pw) throws SQLException {
-		ArrayList<HashMap<String, Object>> maps = convertToMaps(resultSet);
-		for (Iterator<HashMap<String, Object>> mapStream = maps.iterator(); mapStream.hasNext(); ) {
-			for (Iterator<Map.Entry<String, Object>> entryStream = mapStream.next().entrySet().iterator(); entryStream.hasNext(); ) {
-				Map.Entry<String, Object> entry = entryStream.next();
-				pw.print(entry.getKey());
-				pw.print(" = ");
-				pw.print(entry.getValue());
-				pw.println();
-			}
-			if (mapStream.hasNext()) {
-				pw.println();
-			}
-		}
-		pw.println("total rows: " + maps.size());
-	}
-
-	public static ArrayList<HashMap<String, Object>> convertToMaps(Connection connection, String sql) throws SQLException {
-		return convertToMaps(execute(connection, sql));
-	}
-
-	public static ResultSet execute(Connection connection, String sql) throws SQLException {
-		Statement statement = connection.createStatement();
-		statement.execute(sql);
-		ResultSet resultSet = statement.getResultSet();
-		statement.close();
-		return resultSet;
-	}
-
-	public static ArrayList<HashMap<String, Object>> convertToMaps(ResultSet resultSet) throws SQLException {
-		ArrayList<HashMap<String, Object>> rows = new ArrayList<HashMap<String, Object>>();
-		for (Iterator<HashMap<String, Object>> stream = buildMapIterator(resultSet); stream.hasNext(); ) {
-			rows.add(stream.next());
-		}
-		return rows;
-	}
-
-	public static Iterator<HashMap<String, Object>> buildMapIterator(ResultSet resultSet) throws SQLException {
-		return new ResultSetIterator<HashMap<String, Object>>(resultSet, new MapResultSetIteratorAdapter(buildColumnNames(resultSet)));
-	}
-
-	public static String[] buildColumnNames(ResultSet resultSet) throws SQLException {
-		String[] names = new String[resultSet.getMetaData().getColumnCount()];
-		for (int i = 0; i < names.length; i++) {
-			names[i] = resultSet.getMetaData().getColumnName(i + 1);  // NB: ResultSet index/subscript is 1-based
-		}
-		return names;
-	}
-
-	public static class MapResultSetIteratorAdapter implements ResultSetIterator.Adapter<HashMap<String, Object>> {
-		private final String[] columnNames;
-		public MapResultSetIteratorAdapter(String[] columnNames) {
-			super();
-			this.columnNames = columnNames;
-		}
-		public HashMap<String, Object> buildNext(ResultSet rs) throws SQLException {
-			HashMap<String, Object> map = new HashMap<String, Object>(this.columnNames.length);
-			for (int i = 0; i < this.columnNames.length; i++) {
-				map.put(this.columnNames[i], rs.getObject(i + 1));  // NB: ResultSet index/subscript is 1-based
-			}
-			return map;
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JptDbTests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JptDbTests.java
deleted file mode 100644
index ea34d08..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JptDbTests.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.jpt.db.tests.internal.platforms.AllPlatformTests;
-
-/**
- *  JPT DB Tests
- */
-public class JptDbTests {
-
-    public static Test suite() {
-		TestSuite suite = new TestSuite(JptDbTests.class.getPackage().getName());
-    
-        suite.addTest( AllPlatformTests.suite());
-    
-        return suite;
-    }
-    
-    private JptDbTests() {
-        super();
-        throw new UnsupportedOperationException();
-    }
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JptDbTestsPlugin.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JptDbTestsPlugin.java
deleted file mode 100644
index 6d517b5..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JptDbTestsPlugin.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal;
-
-import org.eclipse.core.runtime.Plugin;
-import org.osgi.framework.BundleContext;
-
-/**
- *  JptDbTestsPlugin
- */
-public class JptDbTestsPlugin extends Plugin {
-
-	// The shared instance
-	private static JptDbTestsPlugin INSTANCE;
-
-	public static final String BUNDLE_ID = "org.eclipse.jpt.db.tests"; //$NON-NLS-1$
-
-	/**
-	 * Returns the shared instance
-	 */
-	public static JptDbTestsPlugin instance() {
-		return INSTANCE;
-	}
-	
-	/**
-	 * The constructor
-	 */
-	public JptDbTestsPlugin() {
-		super();
-		INSTANCE = this;
-	}
-
-	/**
-	 * This method is called upon plug-in activation
-	 */
-	@Override
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-	}
-
-	/**
-	 * This method is called when the plug-in is stopped
-	 */
-	@Override
-	public void stop(BundleContext context) throws Exception {
-		INSTANCE = null;
-		super.stop(context);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/AllPlatformTests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/AllPlatformTests.java
deleted file mode 100644
index 22ece7e..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/AllPlatformTests.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllPlatformTests {
-
-    public static Test suite() {
-		TestSuite suite = new TestSuite(AllPlatformTests.class.getPackage().getName());
-
-		suite.addTestSuite(DerbyTests.class);
-		suite.addTestSuite(MySQLTests.class);
-		suite.addTestSuite(Oracle10gTests.class);
-//		suite.addTestSuite(Oracle10gXETests.class);
-//		suite.addTestSuite(Oracle9iTests.class);
-		suite.addTestSuite(PostgreSQLTests.class);
-//		suite.addTestSuite(SQLServerTests.class);
-		suite.addTestSuite(SybaseTests.class);
-
-        return suite;
-    }
-
-    private AllPlatformTests() {
-        super();
-        throw new UnsupportedOperationException();
-    }
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/DTPPlatformTests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/DTPPlatformTests.java
deleted file mode 100644
index 7c3ecf1..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/DTPPlatformTests.java
+++ /dev/null
@@ -1,1027 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.net.URL;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-
-import junit.framework.TestCase;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.datatools.connectivity.ConnectionProfileException;
-import org.eclipse.datatools.connectivity.IConnectionProfile;
-import org.eclipse.datatools.connectivity.IManagedConnection;
-import org.eclipse.datatools.connectivity.ProfileManager;
-import org.eclipse.datatools.connectivity.drivers.IDriverMgmtConstants;
-import org.eclipse.datatools.connectivity.drivers.IPropertySet;
-import org.eclipse.datatools.connectivity.drivers.PropertySetImpl;
-import org.eclipse.datatools.connectivity.drivers.XMLFileManager;
-import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
-import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
-import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo;
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.jpt.db.Catalog;
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.ConnectionListener;
-import org.eclipse.jpt.db.ConnectionProfile;
-import org.eclipse.jpt.db.ConnectionProfileFactory;
-import org.eclipse.jpt.db.ConnectionProfileListener;
-import org.eclipse.jpt.db.Database;
-import org.eclipse.jpt.db.DatabaseIdentifierAdapter;
-import org.eclipse.jpt.db.ForeignKey;
-import org.eclipse.jpt.db.JptDbPlugin;
-import org.eclipse.jpt.db.Schema;
-import org.eclipse.jpt.db.SchemaContainer;
-import org.eclipse.jpt.db.Sequence;
-import org.eclipse.jpt.db.Table;
-import org.eclipse.jpt.db.ForeignKey.ColumnPair;
-import org.eclipse.jpt.db.tests.internal.JptDbTestsPlugin;
-import org.eclipse.jpt.utility.IndentingPrintWriter;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.ResultSetIterator;
-
-/**
- * Base class for testing DTP wrappers on various databases.
- */
-@SuppressWarnings("nls")
-public abstract class DTPPlatformTests extends TestCase {
-
-	/**
-	 * The platform properties are loaded from a Java properties file in the
-	 * 'org.eclipse.jpt.db.tests/config' directory. Each database platform has
-	 * its own properties file (e.g. 'derby.properties').
-	 */
-	private Properties platformProperties;
-
-	/**
-	 * This is the Dali connection profile wrapper.
-	 */
-	protected ConnectionProfile connectionProfile;
-
-
-	// ********** constants **********
-
-	private static final String PLATFORM_CONFIG_DIRECTORY = "config";
-
-	private static final String DB_USER_ID_PROPERTY = "userID";
-		private static final String DB_USER_ID_DEFAULT = "user";
-
-	private static final String DB_PASSWORD_PROPERTY = "password";
-		private static final String DB_PASSWORD_DEFAULT = "";
-
-	private static final String DB_DRIVER_JARS_PROPERTY = "jars";
-		// required - no default
-
-	private static final String DB_URL_PROPERTY = "url";
-		// required - no default
-
-
-
-	// ********** constructor **********
-
-	protected DTPPlatformTests(String name) {
-		super(name);
-	}
-
-
-	// ********** set-up/tear-down **********
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
-		this.platformProperties = this.loadPlatformProperties();
-		this.buildDTPDriverDefinitionFile();
-		this.buildDTPConnectionProfile();
-		this.connectionProfile = this.getConnectionProfileFactory().buildConnectionProfile(this.getProfileName(), DatabaseIdentifierAdapter.Default.instance());
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		this.connectionProfile = null;
-		this.platformProperties = null;
-
-		super.tearDown();
-	}
-
-	// ***** platform properties file
-	private Properties loadPlatformProperties() throws IOException {
-		Properties p = new Properties();
-		p.load(this.buildPlatformPropertiesFileURL().openStream());
-		return p;
-	}
-
-	private URL buildPlatformPropertiesFileURL() {
-		return Platform.getBundle(this.getTestPluginBundleID()).getEntry(this.getPlatformPropertiesFilePath());
-	}
-
-	private String getTestPluginBundleID() {
-		return JptDbTestsPlugin.BUNDLE_ID;
-	}
-
-	private String getPlatformPropertiesFilePath() {
-		return this.getPlatformPropertiesDirectoryName() + '/' + this.getPlatformPropertiesFileName();
-	}
-
-	private String getPlatformPropertiesDirectoryName() {
-		return PLATFORM_CONFIG_DIRECTORY;
-	}
-
-	/**
-	 * Each database platform has a separate properties file in the 'config'
-	 * directory that must be customized by whomever is executing the tests.
-	 */
-	protected abstract String getPlatformPropertiesFileName();
-
-	// ***** driver definition file
-	private void buildDTPDriverDefinitionFile() throws CoreException {
-		XMLFileManager.setStorageLocation(this.getDTPDriverDefinitionLocation());
-		XMLFileManager.setFileName(this.getDTPDriverFileName());
-
-		IPropertySet[] sets = XMLFileManager.loadPropertySets();
-		for (IPropertySet set : sets) {
-			if (set.getID().equals(this.getDriverDefinitionID())) {
-				return;  // property sets live across tests
-			}
-		}
-
-		XMLFileManager.saveNamedPropertySet(this.buildDTPDriverDefinitionPropertySets());
-
-		// verify the file was created:
-		File driverDefinitioneFile = this.getDTPDriverDefinitionLocation().append(this.getDTPDriverFileName()).toFile();
-		assertTrue(driverDefinitioneFile.exists());
-	}
-
-	private IPath getDTPDriverDefinitionLocation() {
-		return ConnectivityPlugin.getDefault().getStateLocation();
-	}
-
-	private String getDTPDriverFileName() {
-		return IDriverMgmtConstants.DRIVER_FILE;
-	}
-
-	private IPropertySet[] buildDTPDriverDefinitionPropertySets() {
-		IPropertySet[] propertySets = new IPropertySet[1];
-		PropertySetImpl propertySet = new PropertySetImpl(this.getDriverName(), this.getDriverDefinitionID());
-		propertySet.setProperties(this.getDriverDefinitionID(), this.buildDTPDriverDefinitionProperties());
-		propertySets[0] = propertySet;
-		return propertySets;
-	}
-
-	protected abstract String getDriverName();
-
-	protected abstract String getDriverDefinitionID();
-
-	private Properties buildDTPDriverDefinitionProperties() {
-		Properties p = new Properties();
-		p.setProperty(ConnectionProfile.DRIVER_DEFINITION_TYPE_PROP_ID, this.getDriverDefinitionType());
-		p.setProperty(ConnectionProfile.DRIVER_JAR_LIST_PROP_ID, this.getJDBCDriverJarList());
-		p.setProperty(IJDBCDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID, this.getDatabaseVendor());
-		p.setProperty(IJDBCDriverDefinitionConstants.DATABASE_VERSION_PROP_ID, this.getDatabaseVersion());
-		p.setProperty(IJDBCDriverDefinitionConstants.DRIVER_CLASS_PROP_ID, this.getDriverClass());
-		p.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID, this.getJDBCURL());
-		p.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID, this.getUserID());
-		p.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID, this.getPassword());
-		return p;
-	}
-
-	protected abstract String getDriverDefinitionType();
-
-	/**
-	 * The JAR list is workspace-specific and is set in the properties file.
-	 */
-	private String getJDBCDriverJarList() {
-		return this.getRequiredPlatformProperty(DB_DRIVER_JARS_PROPERTY);
-	}
-
-	protected abstract String getDatabaseVendor();
-
-	protected abstract String getDatabaseVersion();
-
-	protected abstract String getDriverClass();
-
-	/**
-	 * The database URL is workspace-specific and is set in the properties file
-	 * for some databases.
-	 */
-	private String getJDBCURL() {
-		return this.platformProperties.getProperty(DB_URL_PROPERTY, this.getDefaultJDBCURL());
-	}
-
-	protected String getDefaultJDBCURL() {
-		return "";
-	}
-
-	/**
-	 * The user ID is optional and can be set in the properties file.
-	 */
-	protected String getUserID() {
-		return this.platformProperties.getProperty(DB_USER_ID_PROPERTY, DB_USER_ID_DEFAULT);
-	}
-
-	/**
-	 * The password is optional and can be set in the properties file.
-	 */
-	private String getPassword() {
-		return this.platformProperties.getProperty(DB_PASSWORD_PROPERTY, DB_PASSWORD_DEFAULT);
-	}
-
-	// ***** DTP connection profile
-	private void buildDTPConnectionProfile() throws ConnectionProfileException {
-		if (this.getDTPProfileManager().getProfileByName(this.getProfileName()) != null) {
-			return;  // profiles live across tests
-		}
-		this.createProfile(this.getProfileName());
-		assertNotNull(this.getDTPProfileManager().getProfileByName(this.getProfileName()));
-	}
-
-	protected void createProfile(String profileName) throws ConnectionProfileException {
-		this.getDTPProfileManager().createProfile(
-				profileName,
-				this.getProfileDescription(),
-				this.getProviderID(),
-				this.buildDTPConnectionProfileProperties()
-		);
-	}
-
-	protected abstract String getProfileName();
-
-	protected abstract String getProfileDescription();
-
-	protected String getProviderID() {
-		return ConnectionProfile.CONNECTION_PROFILE_TYPE;
-	}
-	 
-	protected Properties buildDTPConnectionProfileProperties() {
-		Properties p = new Properties();
-		p.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID, this.getUserID());
-		p.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID, this.getPassword());
-		p.setProperty(ConnectionProfile.DRIVER_DEFINITION_PROP_ID, this.getDriverDefinitionID());
-
-		p.setProperty(IJDBCDriverDefinitionConstants.DRIVER_CLASS_PROP_ID, this.getDriverClass());
-		p.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID, this.getJDBCURL());
-		p.setProperty(IJDBCDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID, this.getDatabaseVendor());
-		p.setProperty(IJDBCDriverDefinitionConstants.DATABASE_VERSION_PROP_ID, this.getDatabaseVersion());
-
-		p.setProperty(ConnectionProfile.DATABASE_SAVE_PWD_PROP_ID, this.passwordIsSaved());
-		return p;
-	}
-
-	private String passwordIsSaved() {
-		return "true";
-	}
-
-
-	// ********** tests **********
-
-	public void testConnectionProfileListener() throws ConnectionProfileException {
-		TestConnectionProfileListener listener = new TestConnectionProfileListener();
-		this.getConnectionProfileFactory().addConnectionProfileListener(listener);
-
-		String cpName1 = this.getProfileName() + "1";
-		this.createProfile(cpName1);
-		IConnectionProfile dtpCP = this.getDTPProfileManager().getProfileByName(cpName1);
-		assertNotNull(dtpCP);
-
-		assertEquals(cpName1, listener.addedName);
-		listener.clear();
-
-		String cpName2 = this.getProfileName() + "2";
-		this.getDTPProfileManager().modifyProfile(dtpCP, cpName2, null);
-		assertEquals(cpName1, listener.renamedOldName);
-		assertEquals(cpName2, listener.renamedNewName);
-		listener.clear();
-
-		ConnectionProfile cp = this.getConnectionProfileFactory().buildConnectionProfile(cpName2);
-		assertNotNull(cp);
-
-		this.getDTPProfileManager().deleteProfile(dtpCP);
-		assertEquals(cpName2, listener.removedName);
-		listener.clear();
-
-		cp = this.getConnectionProfileFactory().buildConnectionProfile(cpName2);
-		assertNull(cp);
-
-		this.getConnectionProfileFactory().removeConnectionProfileListener(listener);
-	}
-
-	public void testName() {
-		assertEquals(this.getProfileName(), this.connectionProfile.getName());
-	}
-
-	public void testConnection() throws Exception {
-		assertTrue(this.connectionProfile.isInactive());
-		assertTrue(this.connectionProfile.isDisconnected());
-		this.connectionProfile.connect();
-		assertTrue(this.connectionProfile.isActive());
-		assertTrue(this.connectionProfile.isConnected());
-
-		this.verifyDatabaseVersionNumber();
-		this.verifyDatabaseVendor();
-		this.verifyDatabaseContent();
-
-		this.connectionProfile.disconnect();
-		assertTrue(this.connectionProfile.isInactive());
-		assertTrue(this.connectionProfile.isDisconnected());
-	}
-
-	private void verifyDatabaseVersionNumber() {
-		Database database = this.connectionProfile.getDatabase();
-		assertNotNull(database);
-
-		String actual = database.getVersion();
-		String expected = this.getDatabaseVersion();
-		String errorMessage = "expected: " + expected + " - actual: " + actual;
-		// partial match is good enough
-		assertTrue(errorMessage, actual.indexOf(expected) != -1);
-	}
-
-	private void verifyDatabaseVendor() {
-		Database database = this.connectionProfile.getDatabase();
-		String actual = database.getVendorName();
-		String expected = this.getDatabaseVendor();
-		assertEquals(expected, actual);
-	}
-
-	private void verifyDatabaseContent() {
-		Database database = this.connectionProfile.getDatabase();
-		assertTrue(database.getSchemataSize() >= 0);
-
-		Schema schema = database.getDefaultSchema();
-		if (schema != null) {
-			if (schema.getTablesSize() > 0) {
-				Table table = schema.getTables().iterator().next();
-				assertTrue(table.getColumnsSize() >= 0);
-				assertTrue(table.getPrimaryKeyColumnsSize() >= 0);
-				assertTrue(table.getForeignKeysSize() >= 0);
-			}
-		}
-	}
-
-	protected abstract boolean executeOfflineTests();
-
-	public final void testOffline() {
-		if ( ! this.executeOfflineTests()) {
-			return;
-		}
-		if ( ! this.connectionProfile.supportsWorkOfflineMode()) {
-			return;
-		}
-
-		this.prepareForOfflineWork();
-
-		IStatus status = this.connectionProfile.workOffline();
-		assertTrue(status.isOK());
-		assertTrue(this.connectionProfile.isActive());
-		assertTrue(this.connectionProfile.isWorkingOffline());
-
-		this.connectionProfile.disconnect();
-		assertTrue(this.connectionProfile.isInactive());
-		assertTrue(this.connectionProfile.isDisconnected());
-	}
-
-	protected void prepareForOfflineWork() {
-		if ( ! this.connectionProfile.canWorkOffline()) {
-			this.connectionProfile.connect();
-			IStatus status = this.connectionProfile.saveWorkOfflineData();
-			assertTrue(status.isOK());
-			this.connectionProfile.disconnect();
-			assertTrue(this.connectionProfile.canWorkOffline());
-		}
-	}
-
-	public void testConnectionListenerConnect() {
-		assertTrue(this.connectionProfileHasNoListeners());
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-		assertTrue(this.connectionProfileHasAnyListeners());
-
-		this.connectionProfile.connect();
-		assertSame(this.connectionProfile, listener.openedProfile);
-		listener.clear();
-
-		this.connectionProfile.disconnect();
-		assertSame(this.connectionProfile, listener.okToCloseProfile);
-		assertSame(this.connectionProfile, listener.aboutToCloseProfile);
-		assertSame(this.connectionProfile, listener.closedProfile);
-
-		this.connectionProfile.removeConnectionListener(listener);
-		assertTrue(this.connectionProfileHasNoListeners());
-	}
-
-	public final void testConnectionListenerOffline() {
-		if ( ! this.executeOfflineTests()) {
-			return;
-		}
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.prepareForOfflineWork();
-		listener.clear();
-
-		this.connectionProfile.workOffline();
-		assertSame(this.connectionProfile, listener.openedProfile);
-		listener.clear();
-
-		this.connectionProfile.disconnect();
-		assertSame(this.connectionProfile, listener.okToCloseProfile);
-		assertSame(this.connectionProfile, listener.aboutToCloseProfile);
-		assertSame(this.connectionProfile, listener.closedProfile);
-		listener.clear();
-
-		this.connectionProfile.removeConnectionListener(listener);
-	}
-
-	public void testConnectionListenerDatabase() {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-		assertSame(this.connectionProfile.getDatabase(), listener.changedDatabase);
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testConnectionListenerCatalog() {
-		this.connectionProfile.connect();
-		if ( ! this.connectionProfile.getDatabase().supportsCatalogs()) {
-			this.connectionProfile.disconnect();
-			return;
-		}
-			
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		// take the first catalog
-		org.eclipse.datatools.modelbase.sql.schema.Catalog dtpCatalog = this.getFirstDTPCatalog();
-		Catalog catalog = this.getCatalogNamed(dtpCatalog.getName());
-		((ICatalogObject) dtpCatalog).refresh();
-		assertSame(catalog, listener.changedCatalog);
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testConnectionListenerSchema() {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		List<org.eclipse.datatools.modelbase.sql.schema.Catalog> dtpCatalogs = this.getDTPCatalogs();
-		org.eclipse.datatools.modelbase.sql.schema.Catalog dtpCatalog = null;
-		org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema = null;
-		Schema schema = null;
-		if (this.connectionProfile.getDatabase().supportsCatalogs()) {
-			dtpCatalog = dtpCatalogs.get(0);
-			dtpSchema = (org.eclipse.datatools.modelbase.sql.schema.Schema) dtpCatalog.getSchemas().get(0);
-			schema = this.getCatalogNamed(dtpCatalog.getName()).getSchemaNamed(dtpSchema.getName());
-		} else {
-			if (dtpCatalogs.isEmpty()) {
-				dtpSchema = (org.eclipse.datatools.modelbase.sql.schema.Schema) this.getDTPDatabase().getSchemas().get(0);
-				schema = this.connectionProfile.getDatabase().getSchemaNamed(dtpSchema.getName());
-			} else {
-				dtpCatalog = dtpCatalogs.get(0);  // should be the "virtual" catalog
-				assertEquals("", dtpCatalog.getName());
-				dtpSchema = (org.eclipse.datatools.modelbase.sql.schema.Schema) dtpCatalog.getSchemas().get(0);
-				// the schemata are held directly by the database in this situation
-				schema = this.getDatabase().getSchemaNamed(dtpSchema.getName());
-			}
-		}
-		assertTrue(schema.getTablesSize() >= 0);  // force tables to be loaded
-		((ICatalogObject) dtpSchema).refresh();
-		assertSame(schema, listener.changedSchema);
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testSupportsCatalogs() {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		boolean supportsCatalogs = this.supportsCatalogs();
-		assertEquals(supportsCatalogs, this.connectionProfile.getDatabase().supportsCatalogs());
-		if (supportsCatalogs) {
-			assertTrue(this.connectionProfile.getDatabase().getCatalogsSize() > 0);
-			assertEquals(0, this.connectionProfile.getDatabase().getSchemataSize());
-		} else {
-			assertEquals(0, this.connectionProfile.getDatabase().getCatalogsSize());
-			assertTrue(this.connectionProfile.getDatabase().getSchemataSize() > 0);
-		}
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	protected abstract boolean supportsCatalogs();
-
-//	public void testDEBUG() throws Exception {
-//		this.connectionProfile.connect();
-//		this.dumpJDBCCatalogs();
-//		this.dumpJDBCSchemata();
-//		this.dumpDatabaseContainers();
-//		this.connectionProfile.disconnect();
-//	}
-
-
-	// ********** convenience methods **********
-
-	protected ConnectionProfileFactory getConnectionProfileFactory() {
-		return JptDbPlugin.instance().getConnectionProfileFactory();
-	}
-
-	protected ConnectionProfile getConnectionProfile() {
-		return this.connectionProfile;
-	}
-
-	protected Database getDatabase() {
-		return this.connectionProfile.getDatabase();
-	}
-
-	protected Catalog getDefaultCatalog() {
-		return this.getDatabase().getDefaultCatalog();
-	}
-
-	/**
-	 * only valid on databases that do not support catalogs
-	 */
-	protected Schema getDefaultSchema() {
-		return this.getDatabase().getDefaultSchema();
-	}
-
-	protected Catalog getCatalogNamed(String catalogName) {
-		return this.connectionProfile.getDatabase().getCatalogNamed(catalogName);
-	}
-
-	protected String getRequiredPlatformProperty(String propertyKey) {
-		String propertyValue = this.platformProperties.getProperty(propertyKey);
-		if (StringTools.stringIsEmpty(propertyValue)) {
-			throw new IllegalArgumentException("The database platform properties file '" + this.getPlatformPropertiesFilePath()
-					+ "' is missing a value for the property '" + propertyKey + "'.");
-		}
-		return propertyValue;
-	}
-
-	protected boolean connectionProfileHasAnyListeners() {
-		return connectionProfileHasAnyListeners(this.connectionProfile);
-	}
-
-	protected static boolean connectionProfileHasAnyListeners(ConnectionProfile cp) {
-		return ((Boolean) ReflectionTools.executeMethod(cp, "hasAnyListeners")).booleanValue();
-	}
-
-	protected boolean connectionProfileHasNoListeners() {
-		return connectionProfileHasNoListeners(this.connectionProfile);
-	}
-
-	protected static boolean connectionProfileHasNoListeners(ConnectionProfile cp) {
-		return ((Boolean) ReflectionTools.executeMethod(cp, "hasNoListeners")).booleanValue();
-	}
-
-
-	// ********** DTP model **********
-
-	protected ProfileManager getDTPProfileManager() {
-		return ProfileManager.getInstance();
-	}
-
-	protected IConnectionProfile getDTPConnectionProfile() {
-		return getDTPConnectionProfile(this.connectionProfile);
-	}
-
-	protected static IConnectionProfile getDTPConnectionProfile(ConnectionProfile cp) {
-		return (IConnectionProfile) ReflectionTools.getFieldValue(cp, "dtpConnectionProfile");
-	}
-
-	protected IManagedConnection getDTPManagedConnection() {
-		return (IManagedConnection) ReflectionTools.getFieldValue(this.connectionProfile, "dtpManagedConnection");
-	}
-
-	protected org.eclipse.datatools.modelbase.sql.schema.Database getDTPDatabase() {
-		return getDTPDatabase(this.connectionProfile.getDatabase());
-	}
-
-	protected static org.eclipse.datatools.modelbase.sql.schema.Database getDTPDatabase(Database database) {
-		return (org.eclipse.datatools.modelbase.sql.schema.Database) ReflectionTools.getFieldValue(database, "dtpDatabase");
-	}
-
-	@SuppressWarnings("unchecked")
-	protected List<org.eclipse.datatools.modelbase.sql.schema.Catalog> getDTPCatalogs() {
-		return this.getDTPDatabase().getCatalogs();
-	}
-
-	protected org.eclipse.datatools.modelbase.sql.schema.Catalog getFirstDTPCatalog() {
-		return this.getDTPCatalogs().get(0);
-	}
-
-	protected org.eclipse.datatools.modelbase.sql.schema.Catalog getDTPCatalogNamed(String name) {
-		return getDTPCatalog(this.getDatabase().getCatalogNamed(name));
-	}
-
-	protected static org.eclipse.datatools.modelbase.sql.schema.Catalog getDTPCatalog(Catalog catalog) {
-		return (org.eclipse.datatools.modelbase.sql.schema.Catalog) ReflectionTools.getFieldValue(catalog, "dtpCatalog");
-	}
-
-	protected org.eclipse.datatools.modelbase.sql.schema.Schema getDTPSchemaNamed(String name) {
-		return getDTPSchema(this.getDatabase().getSchemaNamed(name));
-	}
-
-	protected static org.eclipse.datatools.modelbase.sql.schema.Schema getDTPSchema(Schema schema) {
-		return (org.eclipse.datatools.modelbase.sql.schema.Schema) ReflectionTools.getFieldValue(schema, "dtpSchema");
-	}
-
-
-	// ********** execute SQL **********
-
-	/**
-	 * ignore any errors (useful for dropping database objects that might
-	 * not be there)
-	 */
-	protected void executeUpdateIgnoreErrors(String sql) {
-		try {
-			this.executeUpdate(sql);
-		} catch (Exception ex) {
-//			System.err.println("SQL: " + sql);
-//			ex.printStackTrace();
-		}
-	}
-
-	protected void executeUpdate(String sql) throws SQLException {
-		Statement jdbcStatement = this.createJDBCStatement();
-		try {
-			jdbcStatement.executeUpdate(sql);
-		} finally {
-			jdbcStatement.close();
-		}
-	}
-
-	protected void dump(String sql) throws SQLException {
-		this.dump(sql, 20);
-	}
-
-	protected void dump(String sql, int columnWidth) throws SQLException {
-		IndentingPrintWriter pw = new IndentingPrintWriter(new OutputStreamWriter(System.out));
-		// synchronize the console so everything is contiguous
-		synchronized (System.out) {
-			this.dumpOn(sql, pw, columnWidth);
-		}
-		pw.flush();
-	}
-
-	protected void dumpOn(String sql, IndentingPrintWriter pw, int columnWidth) throws SQLException {
-		pw.println(sql);
-		for (ArrayList<Object> row : this.execute(sql)) {
-			for (Object columnValue : row) {
-				StringTools.padOrTruncateOn(String.valueOf(columnValue), columnWidth, pw);
-				pw.print(' ');
-			}
-			pw.println();
-		}
-	}
-
-	protected ArrayList<ArrayList<Object>> execute(String sql) throws SQLException {
-		Statement jdbcStatement = this.createJDBCStatement();
-		jdbcStatement.execute(sql);
-		ArrayList<ArrayList<Object>> rows = this.buildRows(jdbcStatement.getResultSet());
-		jdbcStatement.close();
-		return rows;
-	}
-
-	protected ArrayList<ArrayList<Object>> buildRows(ResultSet resultSet) throws SQLException {
-		ArrayList<ArrayList<Object>> rows = new ArrayList<ArrayList<Object>>();
-		for (Iterator<ArrayList<Object>> stream = this.buildArrayIterator(resultSet); stream.hasNext(); ) {
-			rows.add(stream.next());
-		}
-		return rows;
-	}
-
-	protected Iterator<ArrayList<Object>> buildArrayIterator(ResultSet resultSet) throws SQLException {
-		return new ResultSetIterator<ArrayList<Object>>(resultSet, new ListResultSetIteratorAdapter(resultSet.getMetaData().getColumnCount()));
-	}
-
-	public static class ListResultSetIteratorAdapter implements ResultSetIterator.Adapter<ArrayList<Object>> {
-		private final int columnCount;
-		public ListResultSetIteratorAdapter(int columnCount) {
-			super();
-			this.columnCount = columnCount;
-		}
-		public ArrayList<Object> buildNext(ResultSet rs) throws SQLException {
-			ArrayList<Object> list = new ArrayList<Object>(this.columnCount);
-			for (int i = 1; i <= this.columnCount; i++) {  // NB: ResultSet index/subscript is 1-based
-				list.add(rs.getObject(i));
-			}
-			return list;
-		}
-	}
-
-	protected Statement createJDBCStatement() throws SQLException {
-		return this.getJDBCConnection().createStatement();
-	}
-
-	protected Connection getJDBCConnection() {
-		return ((ConnectionInfo) this.getDTPManagedConnection().getConnection().getRawConnection()).getSharedConnection();
-	}
-
-	protected DatabaseMetaData getDatabaseMetaData() throws SQLException {
-		return this.getJDBCConnection().getMetaData();
-	}
-
-
-	// ********** dump DTP metadata **********
-
-	/**
-	 * dump all the database metadata to the console
-	 */
-	protected void dumpDatabase() {
-		this.dumpDatabase(true);
-	}
-
-	/**
-	 * dump the database catalogs and schemata to the console
-	 */
-	protected void dumpDatabaseContainers() {
-		this.dumpDatabase(false);
-	}
-
-	protected void dumpDatabase(boolean deep) {
-		IndentingPrintWriter pw = new IndentingPrintWriter(new OutputStreamWriter(System.out));
-		// synchronize the console so everything is contiguous
-		synchronized (System.out) {
-			this.dumpDatabaseOn(pw, deep);
-		}
-		pw.flush();
-	}
-
-	protected void dumpDatabaseOn(IndentingPrintWriter pw, boolean deep) {
-		Database database = this.connectionProfile.getDatabase();
-		pw.print("database: ");
-		pw.println(database.getName());
-		if (database.supportsCatalogs()) {
-			for (Catalog catalog : database.getCatalogs()) {
-				this.dumpCatalogOn(catalog, pw, deep);
-			}
-		} else {
-			this.dumpSchemaContainerOn(database, pw, deep);
-		}
-	}
-
-	protected void dumpCatalogOn(Catalog catalog, IndentingPrintWriter pw, boolean deep) {
-		pw.print("catalog: ");
-		pw.println(catalog.getName());
-		pw.indent();
-			this.dumpSchemaContainerOn(catalog, pw, deep);
-		pw.undent();
-	}
-
-	protected void dumpSchemaContainerOn(SchemaContainer schemaContainer, IndentingPrintWriter pw, boolean deep) {
-		for (Schema schema : schemaContainer.getSchemata()) {
-			this.dumpSchemaOn(schema, pw, deep);
-		}
-	}
-
-	protected void dumpSchema(Schema schema) {
-		this.dumpSchema(schema, true);
-	}
-
-	protected void dumpSchema(Schema schema, boolean deep) {
-		IndentingPrintWriter pw = new IndentingPrintWriter(new OutputStreamWriter(System.out));
-		// synchronize the console so everything is contiguous
-		synchronized (System.out) {
-			this.dumpSchemaOn(schema, pw, deep);
-		}
-		pw.flush();
-	}
-
-	protected void dumpSchemaOn(Schema schema, IndentingPrintWriter pw, boolean deep) {
-		pw.print("schema: ");
-		pw.println(schema.getName());
-		if (deep) {
-			pw.indent();
-				for (Table table : schema.getTables()) {
-					this.dumpTableOn(table, pw);
-				}
-				for (Sequence sequence : schema.getSequences()) {
-					this.dumpSequenceOn(sequence, pw);
-				}
-			pw.undent();
-		}
-	}
-
-	protected void dumpTableOn(Table table, IndentingPrintWriter pw) {
-		pw.print("table: ");
-		pw.println(table.getName());
-		pw.indent();
-			for (Column column : table.getColumns()) {
-				this.dumpColumnOn(column, pw);
-			}
-			for (ForeignKey foreignKey : table.getForeignKeys()) {
-				this.dumpForeignKeyOn(foreignKey, pw);
-			}
-		pw.undent();
-	}
-
-	protected void dumpColumnOn(Column column, IndentingPrintWriter pw) {
-		pw.print("column: ");
-		pw.print(column.getName());
-		pw.print(" : ");
-		pw.print(column.getDataTypeName());
-		if (column.isPartOfPrimaryKey()) {
-			pw.print(" [primary key]");
-		}
-		pw.println();
-	}
-
-	protected void dumpForeignKeyOn(ForeignKey foreignKey, IndentingPrintWriter pw) {
-		pw.print("foreign key: ");
-		pw.print(foreignKey.getName());
-		pw.print("=>");
-		pw.print(foreignKey.getReferencedTable().getName());
-		pw.print(" (");
-		for (Iterator<ColumnPair> stream = foreignKey.getColumnPairs().iterator(); stream.hasNext(); ) {
-			ColumnPair cp = stream.next();
-			pw.print(cp.getBaseColumn().getName());
-			pw.print("=>");
-			pw.print(cp.getReferencedColumn().getName());
-			if (stream.hasNext()) {
-				pw.print(", ");
-			}
-		}
-		pw.print(')');
-		pw.println();
-	}
-
-	protected void dumpSequenceOn(Sequence sequence, IndentingPrintWriter pw) {
-		pw.print("sequence: ");
-		pw.println(sequence.getName());
-	}
-
-
-	// ********** dump JDBC metadata **********
-
-	protected void dumpJDBCCatalogs() throws SQLException {
-		IndentingPrintWriter pw = new IndentingPrintWriter(new OutputStreamWriter(System.out));
-		// synchronize the console so everything is contiguous
-		synchronized (System.out) {
-			this.dumpJDBCCatalogsOn(pw);
-		}
-		pw.flush();
-	}
-
-	protected void dumpJDBCCatalogsOn(IndentingPrintWriter pw) throws SQLException {
-		pw.println("JDBC catalogs: ");
-		pw.indent();
-			ArrayList<ArrayList<Object>> rows = this.buildRows(this.getDatabaseMetaData().getCatalogs());
-			for (Iterator<ArrayList<Object>> stream = rows.iterator(); stream.hasNext(); ) {
-				pw.println(stream.next().get(0));
-			}
-		pw.undent();
-	}
-
-	protected void dumpJDBCSchemata() throws SQLException {
-		IndentingPrintWriter pw = new IndentingPrintWriter(new OutputStreamWriter(System.out));
-		// synchronize the console so everything is contiguous
-		synchronized (System.out) {
-			this.dumpJDBCSchemataOn(pw);
-		}
-		pw.flush();
-	}
-
-	protected void dumpJDBCSchemataOn(IndentingPrintWriter pw) throws SQLException {
-		pw.println("JDBC schemata: ");
-		pw.indent();
-			ArrayList<ArrayList<Object>> rows = this.buildRows(this.getDatabaseMetaData().getSchemas());
-			for (ArrayList<Object> row : rows) {
-				if (row.size() == 2) {  // catalogs were added in jdk 1.4
-					Object catalog = row.get(1);
-					pw.print(catalog);
-					pw.print('.');
-				}
-				Object schema = row.get(0);
-				pw.println(schema);
-			}
-		pw.undent();
-	}
-
-
-	// ********** connection profile listener **********
-
-	protected static class TestConnectionProfileListener implements ConnectionProfileListener {
-		public String addedName;
-		public String removedName;
-		public String renamedOldName;
-		public String renamedNewName;
-
-		public void connectionProfileAdded(String name) {
-			this.addedName = name;
-		}
-		public void connectionProfileRemoved(String name) {
-			this.removedName = name;
-		}
-		public void connectionProfileRenamed(String oldName, String newName) {
-			this.renamedOldName = oldName;
-			this.renamedNewName = newName;
-		}
-		public void clear() {
-			this.addedName = null;
-			this.removedName = null;
-			this.renamedOldName = null;
-			this.renamedNewName = null;
-		}
-	}
-
-
-	// ********** connection listener **********
-
-	protected static class TestConnectionListener implements ConnectionListener {
-		public ConnectionProfile openedProfile;
-		public ConnectionProfile modifiedProfile;
-		public ConnectionProfile okToCloseProfile;
-		public ConnectionProfile aboutToCloseProfile;
-		public ConnectionProfile closedProfile;
-		public Database changedDatabase;
-		public Catalog changedCatalog;
-		public Schema changedSchema;
-		public Sequence changedSequence;
-		public Table changedTable;
-		public Column changedColumn;
-		public ForeignKey changedForeignKey;
-
-		public void opened(ConnectionProfile profile) {
-			this.openedProfile = profile;
-		}
-		public void modified(ConnectionProfile profile) {
-			this.modifiedProfile = profile;
-		}
-		public boolean okToClose(ConnectionProfile profile) {
-			this.okToCloseProfile = profile;
-			return true;
-		}
-		public void aboutToClose(ConnectionProfile profile) {
-			this.aboutToCloseProfile = profile;
-		}
-		public void closed(ConnectionProfile profile) {
-			this.closedProfile = profile;
-		}
-		public void databaseChanged(ConnectionProfile profile, Database database) {
-			this.changedDatabase = database;
-		}
-		public void catalogChanged(ConnectionProfile profile, Catalog catalog) {
-			this.changedCatalog = catalog;
-		}
-		public void schemaChanged(ConnectionProfile profile, Schema schema) {
-			this.changedSchema = schema;
-		}
-		public void sequenceChanged(ConnectionProfile profile, Sequence sequence) {
-			this.changedSequence = sequence;
-		}
-		public void tableChanged(ConnectionProfile profile, Table table) {
-			this.changedTable = table;
-		}
-		public void columnChanged(ConnectionProfile profile, Column column) {
-			this.changedColumn = column;
-		}
-		public void foreignKeyChanged(ConnectionProfile profile, ForeignKey foreignKey) {
-			this.changedForeignKey = foreignKey;
-		}
-		public void clear() {
-			this.openedProfile = null;
-			this.modifiedProfile = null;
-			this.okToCloseProfile = null;
-			this.aboutToCloseProfile = null;
-			this.closedProfile = null;
-			this.changedDatabase = null;
-			this.changedCatalog = null;
-			this.changedSchema = null;
-			this.changedSequence = null;
-			this.changedTable = null;
-			this.changedColumn = null;
-			this.changedForeignKey = null;
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/DerbyTests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/DerbyTests.java
deleted file mode 100644
index 6ec1ba4..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/DerbyTests.java
+++ /dev/null
@@ -1,482 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.ForeignKey;
-import org.eclipse.jpt.db.Schema;
-import org.eclipse.jpt.db.Table;
-
-@SuppressWarnings("nls")
-public class DerbyTests extends DTPPlatformTests {
-
-	public DerbyTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		super.tearDown();
-	}
-
-	@Override
-	protected String getPlatformPropertiesFileName() {
-		return "derby.properties";
-	}
-
-	@Override
-	protected String getDriverName() {
-		return "Derby Embedded JDBC Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionID() {
-		return "DriverDefn.Derby Embedded JDBC Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionType() {
-		return "org.eclipse.datatools.connectivity.db.derby101.genericDriverTemplate";
-	}
-
-	@Override
-	protected String getDatabaseVendor() {
-		return "Derby";
-	}
-
-	@Override
-	protected String getDatabaseVersion() {
-		return "10.1";
-	}
-
-	@Override
-	protected String getDriverClass() {
-		return "org.apache.derby.jdbc.EmbeddedDriver";
-	}
-
-	@Override
-	protected String getProfileName() {
-		return "Derby_10.1_Embedded";
-	}
-
-	@Override
-	protected String getProfileDescription() {
-		return "Derby 10.1 Embedded JDBC Profile [Test]";
-	}
-
-	@Override
-	protected String getProviderID() {
-		return "org.eclipse.datatools.connectivity.db.derby.embedded.connectionProfile";
-	}
-
-	@Override
-	protected boolean supportsCatalogs() {
-		return false;
-	}
-
-	@Override
-	protected boolean executeOfflineTests() {
-		return true;
-	}
-
-	public void testSchema() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropSchema("TEST1");
-		this.dropSchema("TEST2");
-
-		this.executeUpdate("CREATE SCHEMA TEST1");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Schema schema1 = this.getDatabase().getSchemaNamed("TEST1");
-		assertNotNull(schema1);
-
-		this.executeUpdate("CREATE SCHEMA TEST2");
-		Schema schema2 = this.getDatabase().getSchemaNamed("TEST2");
-		assertNull(schema2);  // should be null until refresh
-
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-		assertSame(this.getDatabase(), listener.changedDatabase);
-
-		schema2 = this.getDatabase().getSchemaNamed("TEST2");
-		assertNotNull(schema2);
-		assertNotSame(schema1, this.getDatabase().getSchemaNamed("TEST1"));  // we should have a new schema after the refresh
-
-		this.dropSchema("TEST2");
-		this.dropSchema("TEST1");
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testSchemaLookup() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropSchema("LOOKUP_TEST");
-		this.dropSchema("\"lookup_TEST\"");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		this.executeUpdate("CREATE SCHEMA LOOKUP_TEST");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		assertNotNull(this.getDatabase().getSchemaNamed("LOOKUP_TEST"));
-		assertNotNull(this.getDatabase().getSchemaForIdentifier("LOOKUP_TEST"));
-
-		assertNull(this.getDatabase().getSchemaNamed("lookup_test"));
-		assertNotNull(this.getDatabase().getSchemaForIdentifier("lookup_test"));
-
-		assertNull(this.getDatabase().getSchemaNamed("lookup_TEST"));
-		assertNotNull(this.getDatabase().getSchemaForIdentifier("lookup_TEST"));
-
-		assertNotNull(this.getDatabase().getSchemaForIdentifier("\"LOOKUP_TEST\""));
-		assertNull(this.getDatabase().getSchemaForIdentifier("\"lookup_TEST\""));
-
-		this.dropSchema("LOOKUP_TEST");
-
-		this.executeUpdate("CREATE SCHEMA \"lookup_TEST\"");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		assertNull(this.getDatabase().getSchemaNamed("LOOKUP_TEST"));
-		assertNull(this.getDatabase().getSchemaForIdentifier("LOOKUP_TEST"));
-
-		assertNull(this.getDatabase().getSchemaNamed("lookup_test"));
-		assertNull(this.getDatabase().getSchemaForIdentifier("lookup_test"));
-
-		assertNotNull(this.getDatabase().getSchemaNamed("lookup_TEST"));
-		assertNull(this.getDatabase().getSchemaForIdentifier("lookup_TEST"));
-
-		assertNull(this.getDatabase().getSchemaForIdentifier("\"LOOKUP_TEST\""));
-		assertNotNull(this.getDatabase().getSchemaForIdentifier("\"lookup_TEST\""));
-
-		this.dropSchema("\"lookup_TEST\"");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testSchemaIdentifier() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropSchema("LOOKUP_TEST");
-		this.dropSchema("\"lookup_TEST\"");
-
-		this.executeUpdate("CREATE SCHEMA lookup_test");  // this gets folded to uppercase
-		this.executeUpdate("CREATE SCHEMA \"lookup_TEST\"");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Schema schema = this.getDatabase().getSchemaForIdentifier("LOOKUP_TEST");
-		assertEquals("LOOKUP_TEST", schema.getIdentifier());
-		assertEquals("LOOKUP_TEST", schema.getIdentifier("LookupTest"));
-		assertNull(schema.getIdentifier("Lookup_Test"));
-
-		schema = this.getDatabase().getSchemaForIdentifier("lookup_test");
-		assertEquals("LOOKUP_TEST", schema.getIdentifier());
-
-		schema = this.getDatabase().getSchemaForIdentifier("\"lookup_TEST\"");
-		assertEquals("\"lookup_TEST\"", schema.getIdentifier());
-		assertEquals("\"lookup_TEST\"", schema.getIdentifier("lookup_TEST"));
-
-		this.dropSchema("\"lookup_TEST\"");
-		this.dropSchema("LOOKUP_TEST");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testTable() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropTable("TABLE_TEST", "FOO_BAZ");
-		this.dropTable("TABLE_TEST", "BAZ");
-		this.dropTable("TABLE_TEST", "FOO");
-		this.dropTable("TABLE_TEST", "BAR");
-		this.dropSchema("TABLE_TEST");
-
-		this.executeUpdate("CREATE SCHEMA TABLE_TEST");
-		this.executeUpdate("SET SCHEMA = TABLE_TEST");
-
-		this.executeUpdate(this.buildBarDDL());
-		this.executeUpdate(this.buildFooDDL());
-		this.executeUpdate(this.buildBazDDL());
-		this.executeUpdate(this.buildFooBazDDL());
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Schema schema = this.getDatabase().getSchemaNamed("TABLE_TEST");
-
-		// FOO
-		Table fooTable = schema.getTableNamed("FOO");
-		assertEquals(4, fooTable.getColumnsSize());
-		assertEquals(1, fooTable.getPrimaryKeyColumnsSize());
-		assertEquals(1, fooTable.getForeignKeysSize());
-
-		Column pkColumn = fooTable.getPrimaryKeyColumn();
-		assertEquals("ID", pkColumn.getName());
-		Column idColumn = fooTable.getColumnNamed("ID");
-		assertSame(pkColumn, idColumn);
-		assertEquals("INTEGER", idColumn.getDataTypeName());
-		assertSame(fooTable, idColumn.getTable());
-		assertTrue(idColumn.isPartOfPrimaryKey());
-		assertFalse(idColumn.isPartOfForeignKey());
-		assertEquals("int", idColumn.getJavaTypeDeclaration());
-
-		Column nameColumn = fooTable.getColumnNamed("NAME");
-		assertEquals("VARCHAR", nameColumn.getDataTypeName());
-		assertEquals("java.lang.String", nameColumn.getJavaTypeDeclaration());
-		assertEquals(20, nameColumn.getLength());
-		assertFalse(nameColumn.isPartOfPrimaryKey());
-		assertFalse(nameColumn.isNumeric());
-		assertTrue(nameColumn.isNullable());
-
-		Column barColumn = fooTable.getColumnNamed("BAR_ID");
-		assertEquals("INTEGER", barColumn.getDataTypeName());
-		assertTrue(barColumn.isPartOfForeignKey());
-		assertFalse(barColumn.isPartOfPrimaryKey());
-
-		Column salaryColumn = fooTable.getColumnNamed("SALARY");
-		assertEquals("DECIMAL", salaryColumn.getDataTypeName());
-		assertTrue(salaryColumn.isNullable());
-		assertTrue(salaryColumn.isNumeric());
-		assertEquals(11, salaryColumn.getPrecision());
-		assertEquals(2, salaryColumn.getScale());
-		assertEquals(-1, salaryColumn.getLength());
-
-		ForeignKey barFK = fooTable.getForeignKeys().iterator().next();  // there should only be 1 foreign key
-		assertEquals(1, barFK.getColumnPairsSize());
-		assertEquals("BAR", barFK.getAttributeName());
-		assertNull(barFK.getJoinColumnAnnotationIdentifier("bar"));
-		assertEquals("BAR_ID", barFK.getJoinColumnAnnotationIdentifier("primaryBar"));
-		assertSame(fooTable, barFK.getBaseTable());
-
-		assertFalse(fooTable.isPossibleJoinTable());
-		assertSame(schema, fooTable.getSchema());
-
-		// BAR
-		Table barTable = schema.getTableNamed("BAR");
-		assertEquals(3, barTable.getColumnsSize());
-		assertEquals(1, barTable.getPrimaryKeyColumnsSize());
-		assertEquals(0, barTable.getForeignKeysSize());
-		assertEquals("ID", barTable.getPrimaryKeyColumn().getName());
-		assertFalse(barTable.isPossibleJoinTable());
-
-		Column id2Column = barTable.getColumnNamed("ID2");
-		assertEquals("INTEGER", id2Column.getDataTypeName());
-//		assertTrue(id2Column.isPartOfUniqueConstraint());  // doesn't work(?)
-		assertFalse(id2Column.isNullable());
-		assertTrue(id2Column.isNumeric());
-		assertEquals(0, id2Column.getPrecision());  // not sure what to expect here...
-		assertEquals(0, id2Column.getScale());  // not sure what to expect here either...
-		assertEquals("BLOB", barTable.getColumnNamed("CHUNK").getDataTypeName());
-		assertEquals("byte[]", barTable.getColumnNamed("CHUNK").getJavaTypeDeclaration());
-		assertTrue(barTable.getColumnNamed("CHUNK").isLOB());
-		assertSame(barTable, barFK.getReferencedTable());
-
-		// BAZ
-		Table bazTable = schema.getTableNamed("BAZ");
-		Column nicknameColumn = bazTable.getColumnNamed("NICKNAME");
-		assertEquals(20, nicknameColumn.getLength());
-//		assertTrue(nicknameColumn.isPartOfUniqueConstraint());  // doesn't work(?)
-
-		// FOO_BAZ
-		Table foo_bazTable = schema.getTableNamed("FOO_BAZ");
-		assertEquals(2, foo_bazTable.getColumnsSize());
-		assertEquals(0, foo_bazTable.getPrimaryKeyColumnsSize());
-		assertEquals(2, foo_bazTable.getForeignKeysSize());
-		assertTrue(foo_bazTable.isPossibleJoinTable());
-		assertTrue(foo_bazTable.joinTableNameIsDefault());
-		assertTrue(foo_bazTable.getColumnNamed("FOO_ID").isPartOfForeignKey());
-
-		this.dropTable("TABLE_TEST", "FOO_BAZ");
-		this.dropTable("TABLE_TEST", "BAZ");
-		this.dropTable("TABLE_TEST", "FOO");
-		this.dropTable("TABLE_TEST", "BAR");
-		this.dropSchema("TABLE_TEST");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	private static final String CR = System.getProperty("line.separator");  //$NON-NLS-1$
-
-	private String buildBarDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE BAR (").append(CR);
-		sb.append("    ID INT PRIMARY KEY,").append(CR);
-		sb.append("    ID2 INT UNIQUE NOT NULL,").append(CR);
-		sb.append("    CHUNK BLOB(100K)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildFooDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE FOO (").append(CR);
-		sb.append("    ID INT PRIMARY KEY,").append(CR);
-		sb.append("    NAME VARCHAR(20),").append(CR);
-		sb.append("    SALARY DECIMAL(11, 2),").append(CR);
-		sb.append("    BAR_ID INT REFERENCES BAR(ID)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildBazDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE BAZ (").append(CR);
-		sb.append("    ID INT PRIMARY KEY,").append(CR);
-		sb.append("    NICKNAME VARCHAR(20) NOT NULL UNIQUE").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildFooBazDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE FOO_BAZ (").append(CR);
-		sb.append("    FOO_ID INT REFERENCES FOO(ID),").append(CR);
-		sb.append("    BAZ_ID INT REFERENCES BAZ(ID)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	public void testColumnLookup() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropTable("COLUMN_TEST", "test");
-		this.dropSchema("COLUMN_TEST");
-
-		this.executeUpdate("CREATE SCHEMA COLUMN_TEST");
-		this.executeUpdate("SET SCHEMA = COLUMN_TEST");
-
-		// lowercase
-		this.executeUpdate("CREATE TABLE test (id INTEGER, name VARCHAR(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Table table = this.getDatabase().getSchemaNamed("COLUMN_TEST").getTableForIdentifier("test");
-		assertNotNull(table.getColumnForIdentifier("id"));
-		assertNotNull(table.getColumnForIdentifier("name"));
-
-		this.dropTable("COLUMN_TEST", "test");
-
-		// uppercase
-		this.executeUpdate("CREATE TABLE test (ID INTEGER, NAME VARCHAR(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDatabase().getSchemaNamed("COLUMN_TEST").getTableForIdentifier("test");
-		assertNotNull(table.getColumnForIdentifier("ID"));
-		assertNotNull(table.getColumnForIdentifier("NAME"));
-
-		this.dropTable("COLUMN_TEST", "test");
-
-		// mixed case
-		this.executeUpdate("CREATE TABLE test (Id INTEGER, Name VARCHAR(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDatabase().getSchemaNamed("COLUMN_TEST").getTableForIdentifier("test");
-		assertNotNull(table.getColumnForIdentifier("Id"));
-		assertNotNull(table.getColumnForIdentifier("Name"));
-
-		this.dropTable("COLUMN_TEST", "test");
-
-		// delimited
-		this.executeUpdate("CREATE TABLE test (\"Id\" INTEGER, \"Name\" VARCHAR(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDatabase().getSchemaNamed("COLUMN_TEST").getTableForIdentifier("test");
-		assertNotNull(table.getColumnForIdentifier("\"Id\""));
-		assertNotNull(table.getColumnForIdentifier("\"Name\""));
-
-		this.dropTable("COLUMN_TEST", "test");
-		this.dropSchema("COLUMN_TEST");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testCrossSchemaReference() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropTable("XREF_TEST2", "EMP");
-		this.dropSchema("XREF_TEST2");
-		this.dropTable("XREF_TEST1", "ORG");
-		this.dropSchema("XREF_TEST1");
-
-		this.executeUpdate("CREATE SCHEMA XREF_TEST1");
-		this.executeUpdate("SET SCHEMA = XREF_TEST1");
-		this.executeUpdate("CREATE TABLE ORG (ID INTEGER PRIMARY KEY, NAME VARCHAR(20))");
-
-		this.executeUpdate("CREATE SCHEMA XREF_TEST2");
-		this.executeUpdate("SET SCHEMA = XREF_TEST2");
-		this.executeUpdate("CREATE TABLE EMP (ID INTEGER PRIMARY KEY, NAME VARCHAR(20), " +
-				"ORG_ID INTEGER REFERENCES XREF_TEST1.ORG(ID))");
-
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-		Schema schema1 = this.getDatabase().getSchemaNamed("XREF_TEST1");
-		assertNotNull(schema1);
-		Table orgTable = schema1.getTableNamed("ORG");
-		assertNotNull(orgTable);
-
-		Schema schema2 = this.getDatabase().getSchemaNamed("XREF_TEST2");
-		assertNotNull(schema2);
-		Table empTable = schema2.getTableNamed("EMP");
-		assertNotNull(empTable);
-		assertEquals(1, empTable.getForeignKeysSize());
-		ForeignKey fk = empTable.getForeignKeys().iterator().next();
-		Table refTable = fk.getReferencedTable();
-		assertNotNull(refTable);
-		assertEquals("ORG", refTable.getName());
-		assertEquals(1, fk.getColumnPairsSize());
-		ForeignKey.ColumnPair cp = fk.getColumnPairs().iterator().next();
-		Column baseColumn = cp.getBaseColumn();
-		assertEquals("ORG_ID", baseColumn.getName());
-		Column refColumn = cp.getReferencedColumn();
-		assertEquals("ID", refColumn.getName());
-
-		this.dropTable("XREF_TEST2", "EMP");
-		this.dropSchema("XREF_TEST2");
-		this.dropTable("XREF_TEST1", "ORG");
-		this.dropSchema("XREF_TEST1");
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	private void dropTable(String schemaName, String tableName) throws Exception {
-		Schema schema= this.getDatabase().getSchemaForIdentifier(schemaName);
-		if (schema != null) {
-			if (schema.getTableForIdentifier(tableName) != null) {
-				this.executeUpdate("DROP TABLE " + schemaName + '.' + tableName);
-			}
-		}
-	}
-
-	/**
-	 * NB: A Derby schema must be empty before it can be dropped.
-	 */
-	private void dropSchema(String name) throws Exception {
-		if (this.getDatabase().getSchemaForIdentifier(name) != null) {
-			this.executeUpdate("DROP SCHEMA " + name + " RESTRICT");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/MySQLTests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/MySQLTests.java
deleted file mode 100644
index 28c944e..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/MySQLTests.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-import java.util.Properties;
-
-import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.ForeignKey;
-import org.eclipse.jpt.db.Schema;
-import org.eclipse.jpt.db.Table;
-
-/**
- * MySQL
- * 
- * Notes:
- * - We can only get database objects from the database associated with our
- *     connection profile.
- * - We can reference objects across multiple databases, so they are sorta like
- *     schemas....
- * - Foreign keys must be defined as table-level constraints; they cannot be
- *     defined as part of the column clause.
- * - Case-sensitivity and -folding is whacked on MySQL....
- */
-@SuppressWarnings("nls")
-public class MySQLTests extends DTPPlatformTests {
-
-	public MySQLTests( String name) {
-		super(name);
-	}
-
-	@Override
-	protected String getPlatformPropertiesFileName() {
-		return "mysql.properties";
-	}
-
-	@Override
-	protected String getDriverName() {
-		return "MySQL JDBC Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionID() {
-		return "DriverDefn.MySQL JDBC Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionType() {
-		return "org.eclipse.datatools.enablement.mysql.4_1.driverTemplate";
-	}
-
-	@Override
-	protected String getDatabaseVendor() {
-		return "MySql";
-	}
-
-	@Override
-	protected String getDatabaseVersion() {
-		return "4.1";
-	}
-
-	@Override
-	protected String getDriverClass() {
-		return "com.mysql.jdbc.Driver";
-	}
-
-	@Override
-	protected String getDefaultJDBCURL() {
-		return "jdbc:mysql://localhost:3306";
-	}
-
-	@Override
-	protected String getProfileName() {
-		return "MySQL_4.1";
-	}
-
-	@Override
-	protected String getProfileDescription() {
-		return "MySQL 4.1 JDBC Profile [Test]";
-	}
-
-	@Override
-	protected boolean supportsCatalogs() {
-		return false;
-	}
-
-	@Override
-	protected Properties buildDTPConnectionProfileProperties() {
-		Properties p = super.buildDTPConnectionProfileProperties();
-		p.setProperty(IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID, this.getDatabaseName());
-		return p;
-	}
-
-	private String getDatabaseName() {
-		return "dalitest";
-	}
-
-	@Override
-	protected boolean executeOfflineTests() {
-		return true;  // seems to work...
-	}
-
-	public void testDatabase() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		// DTP: MySQL has a single schema with the same name as the database
-		Schema schema = this.getDatabase().getSchemaNamed(this.getDatabaseName());
-		assertNotNull(schema);
-		assertSame(this.getDefaultSchema(), schema);
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testTable() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropDatabase(this.getDatabaseName());
-		this.executeUpdate("CREATE DATABASE " + this.getDatabaseName());
-		this.getJDBCConnection().setCatalog(this.getDatabaseName());
-
-		this.dropTable(this.getDatabaseName(), "foo_baz");
-		this.dropTable(this.getDatabaseName(), "baz");
-		this.dropTable(this.getDatabaseName(), "foo");
-		this.dropTable(this.getDatabaseName(), "bar");
-
-		this.executeUpdate(this.buildBarDDL());
-		this.executeUpdate(this.buildFooDDL());
-		this.executeUpdate(this.buildBazDDL());
-		this.executeUpdate(this.buildFooBazDDL());
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Schema schema = this.getDefaultSchema();
-
-		// foo
-		Table fooTable = schema.getTableNamed("foo");
-		assertEquals(3, fooTable.getColumnsSize());
-		assertEquals(1, fooTable.getPrimaryKeyColumnsSize());
-		assertEquals(1, fooTable.getForeignKeysSize());
-
-		Column pkColumn = fooTable.getPrimaryKeyColumn();
-		assertEquals("id", pkColumn.getName());
-		Column idColumn = fooTable.getColumnNamed("id");
-		assertSame(pkColumn, idColumn);
-		assertEquals("INT", idColumn.getDataTypeName());
-		assertSame(fooTable, idColumn.getTable());
-		assertTrue(idColumn.isPartOfPrimaryKey());
-		assertFalse(idColumn.isPartOfForeignKey());
-		assertEquals("int", idColumn.getJavaTypeDeclaration());
-
-		Column nameColumn = fooTable.getColumnNamed("name");
-		assertEquals("VARCHAR", nameColumn.getDataTypeName());
-		assertEquals("java.lang.String", nameColumn.getJavaTypeDeclaration());
-		assertFalse(nameColumn.isPartOfPrimaryKey());
-
-		Column barColumn = fooTable.getColumnNamed("bar_id");
-		assertEquals("INT", barColumn.getDataTypeName());
-		assertTrue(barColumn.isPartOfForeignKey());
-		assertFalse(barColumn.isPartOfPrimaryKey());
-
-		ForeignKey barFK = fooTable.getForeignKeys().iterator().next();  // there should only be 1 foreign key
-		assertEquals(1, barFK.getColumnPairsSize());
-		assertEquals("bar", barFK.getAttributeName());
-		assertNull(barFK.getJoinColumnAnnotationIdentifier("bar"));
-		assertEquals("bar_id", barFK.getJoinColumnAnnotationIdentifier("primaryBar"));
-		assertSame(fooTable, barFK.getBaseTable());
-
-		assertFalse(fooTable.isPossibleJoinTable());
-		assertSame(schema, fooTable.getSchema());
-
-		// BAR
-		Table barTable = schema.getTableNamed("bar");
-		assertEquals(2, barTable.getColumnsSize());
-		assertEquals(1, barTable.getPrimaryKeyColumnsSize());
-		assertEquals(0, barTable.getForeignKeysSize());
-		assertEquals("id", barTable.getPrimaryKeyColumn().getName());
-		assertFalse(barTable.isPossibleJoinTable());
-		assertEquals("BLOB", barTable.getColumnNamed("chunk").getDataTypeName());
-		assertEquals("byte[]", barTable.getColumnNamed("chunk").getJavaTypeDeclaration());
-		assertTrue(barTable.getColumnNamed("chunk").isLOB());
-		assertSame(barTable, barFK.getReferencedTable());
-
-		// FOO_BAZ
-		Table foo_bazTable = schema.getTableNamed("foo_baz");
-		assertEquals(2, foo_bazTable.getColumnsSize());
-		assertEquals(0, foo_bazTable.getPrimaryKeyColumnsSize());
-		assertEquals(2, foo_bazTable.getForeignKeysSize());
-		assertTrue(foo_bazTable.isPossibleJoinTable());
-		assertTrue(foo_bazTable.joinTableNameIsDefault());
-		assertTrue(foo_bazTable.getColumnNamed("foo_id").isPartOfForeignKey());
-
-		this.dropTable(this.getDatabaseName(), "foo_baz");
-		this.dropTable(this.getDatabaseName(), "baz");
-		this.dropTable(this.getDatabaseName(), "foo");
-		this.dropTable(this.getDatabaseName(), "bar");
-
-		this.dropDatabase(this.getDatabaseName());
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	private static final String CR = System.getProperty("line.separator");  //$NON-NLS-1$
-
-	private String buildBarDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE bar (").append(CR);
-		sb.append("    id INTEGER PRIMARY KEY,").append(CR);
-		sb.append("    chunk BLOB").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildFooDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE foo (").append(CR);
-		sb.append("    id INTEGER PRIMARY KEY,").append(CR);
-		sb.append("    name VARCHAR(20),").append(CR);
-		sb.append("    bar_id INTEGER,").append(CR);
-		sb.append("    FOREIGN KEY (bar_id) REFERENCES bar(id)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildBazDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE baz (").append(CR);
-		sb.append("    id INTEGER PRIMARY KEY,").append(CR);
-		sb.append("    name VARCHAR(20)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildFooBazDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE foo_baz (").append(CR);
-		sb.append("    foo_id INT,").append(CR);
-		sb.append("    baz_id INT,").append(CR);
-		sb.append("    FOREIGN KEY (foo_id) REFERENCES foo(id),").append(CR);
-		sb.append("    FOREIGN KEY (baz_id) REFERENCES baz(id)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	/**
-	 * On Windows, table names get folded to lowercase by default;
-	 * even if the name is delimited (apparently).
-	 */
-	public void testTableLookup() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropDatabase(this.getDatabaseName());
-		this.executeUpdate("CREATE DATABASE " + this.getDatabaseName());
-		this.getJDBCConnection().setCatalog(this.getDatabaseName());
-
-		this.dropTable(this.getDatabaseName(), "test1");
-		this.dropTable(this.getDatabaseName(), "TEST2");
-		this.dropTable(this.getDatabaseName(), "`TEST3`");
-
-		this.executeUpdate("CREATE TABLE test1 (id INTEGER, name VARCHAR(20))");
-		this.executeUpdate("CREATE TABLE TEST2 (id INTEGER, name VARCHAR(20))");
-		this.executeUpdate("CREATE TABLE `TEST3` (id INTEGER, name VARCHAR(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Schema schema = this.getDefaultSchema();
-
-		Table test1Table = schema.getTableForIdentifier("test1");
-		assertNotNull(test1Table);
-
-		// this probably only works on Windows
-		Table test2Table = schema.getTableForIdentifier("test2");
-		assertNotNull(test2Table);
-
-		// this probably only works on Windows
-		Table test3Table = schema.getTableForIdentifier("`test3`");
-		assertNotNull(test3Table);
-
-		this.dropTable(this.getDatabaseName(), "test1");
-		this.dropTable(this.getDatabaseName(), "TEST2");
-		this.dropTable(this.getDatabaseName(), "`TEST3`");
-
-		this.dropDatabase(this.getDatabaseName());
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testColumnLookup() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropDatabase(this.getDatabaseName());
-		this.executeUpdate("CREATE DATABASE " + this.getDatabaseName());
-		this.getJDBCConnection().setCatalog(this.getDatabaseName());
-
-		this.dropTable(this.getDatabaseName(), "test");
-
-		// lowercase
-		this.executeUpdate("CREATE TABLE test (id INTEGER, name VARCHAR(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Table table = this.getDefaultSchema().getTableNamed("test");
-		assertNotNull(table.getColumnNamed("id"));
-		assertNotNull(table.getColumnNamed("name"));
-
-		this.dropTable(this.getDatabaseName(), "test");
-
-		// uppercase
-		this.executeUpdate("CREATE TABLE test (ID INTEGER, NAME VARCHAR(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDefaultSchema().getTableNamed("test");
-		assertNotNull(table.getColumnNamed("ID"));
-		assertNotNull(table.getColumnNamed("NAME"));
-
-		this.dropTable(this.getDatabaseName(), "test");
-
-		// mixed case
-		this.executeUpdate("CREATE TABLE test (Id INTEGER, Name VARCHAR(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDefaultSchema().getTableNamed("test");
-		assertNotNull(table.getColumnNamed("Id"));
-		assertNotNull(table.getColumnNamed("Name"));
-
-		this.dropTable(this.getDatabaseName(), "test");
-
-		// delimited
-		this.executeUpdate("CREATE TABLE test (`Id` INTEGER, `Name` VARCHAR(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDefaultSchema().getTableNamed("test");
-		assertNotNull(table.getColumnForIdentifier("`Id`"));
-		assertNotNull(table.getColumnForIdentifier("`Name`"));
-
-		this.dropTable(this.getDatabaseName(), "test");
-
-		this.dropDatabase(this.getDatabaseName());
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	/**
-	 * We can only get a single "schema" per connection via DTP,
-	 * so cross-schema references are not visible.
-	 */
-	public void testCrossSchemaReference() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropDatabase("xref_test2");
-		this.dropDatabase("xref_test1");
-
-		this.executeUpdate("CREATE DATABASE xref_test1");
-		this.getJDBCConnection().setCatalog("xref_test1");
-		this.executeUpdate("CREATE TABLE org (id INTEGER PRIMARY KEY, name VARCHAR(20))");
-
-		this.executeUpdate("CREATE DATABASE xref_test2");
-		this.getJDBCConnection().setCatalog("xref_test2");
-		this.executeUpdate("CREATE TABLE emp (id INTEGER PRIMARY KEY, name VARCHAR(20), " +
-				"org_id INTEGER, FOREIGN KEY (org_id) REFERENCES xref_test1.org(id))");
-
-		this.getJDBCConnection().setCatalog("xref_test2");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-		Schema schema2 = this.getDefaultSchema();
-		assertNotNull(schema2);
-		Table empTable = schema2.getTableNamed("emp");
-		assertNotNull(empTable);
-		// no foreign keys
-		assertEquals(0, empTable.getForeignKeysSize());
-
-		this.dropDatabase("xref_test2");
-		this.dropDatabase("xref_test1");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	private void dropTable(String dbName, String tableName) throws Exception {
-		this.executeUpdate("DROP TABLE IF EXISTS " + dbName + '.' + tableName);
-	}
-
-	private void dropDatabase(String name) throws Exception {
-		this.executeUpdate("DROP DATABASE IF EXISTS " + name);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Oracle10gTests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Oracle10gTests.java
deleted file mode 100644
index c70e343..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Oracle10gTests.java
+++ /dev/null
@@ -1,397 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-import java.sql.SQLException;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.ForeignKey;
-import org.eclipse.jpt.db.Schema;
-import org.eclipse.jpt.db.Table;
-
-@SuppressWarnings("nls")
-public class Oracle10gTests extends DTPPlatformTests {
-
-	public Oracle10gTests( String name) {
-		super( name);
-	}
-
-	@Override
-	protected String getPlatformPropertiesFileName() {
-		return "oracle10g.properties";
-	}
-
-	@Override
-	protected String getDriverName() {
-		return "Oracle 10g Thin Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionID() {
-		return "DriverDefn.Oracle Thin Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionType() {
-		return "org.eclipse.datatools.enablement.oracle.10.driverTemplate";
-	}
-
-	@Override
-	protected String getDatabaseVendor() {
-		return "Oracle";
-	}
-
-	@Override
-	protected String getDatabaseVersion() {
-		return "10";
-	}
-
-	@Override
-	protected String getDriverClass() {
-		return "oracle.jdbc.OracleDriver";
-	}
-
-	@Override
-	protected String getProfileName() {
-		return "Oracle10g_10.1.0.4";
-	}
-
-	@Override
-	protected String getProfileDescription() {
-		return "Oracle10g (10.1.0.4) JDBC Profile [Test]";
-	}
-
-	@Override
-	protected boolean supportsCatalogs() {
-		return false;
-	}
-
-	@Override
-	protected boolean executeOfflineTests() {
-		// working offline is pretty ugly
-		return false;
-	}
-
-	public void testDatabase() throws Exception {
-		if (this.connectionProfile.getUserName().toUpperCase().equals("SYS")) {
-			System.out.println("skipped test: " + this.getClass() + '.' + this.getName());
-			return;  // SYS does not have a schema
-		}
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		// Oracle should have a schema with the same name as the user
-		Schema schema = this.getDatabase().getSchemaForIdentifier(this.getUserID());
-		assertNotNull(schema);
-		assertSame(this.getDefaultSchema(), schema);
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testTable() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropTable("foo_baz");
-		this.dropTable("baz");
-		this.dropTable("foo");
-		this.dropTable("bar");
-
-		this.executeUpdate(this.buildBarDDL());
-		this.executeUpdate(this.buildFooDDL());
-		this.executeUpdate(this.buildBazDDL());
-		this.executeUpdate(this.buildFooBazDDL());
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Schema schema = this.getDefaultSchema();
-
-		// foo
-		Table fooTable = schema.getTableForIdentifier("foo");
-		assertEquals(3, fooTable.getColumnsSize());
-		assertEquals(1, fooTable.getPrimaryKeyColumnsSize());
-		assertEquals(1, fooTable.getForeignKeysSize());
-
-		Column pkColumn = fooTable.getPrimaryKeyColumn();
-		assertEquals("ID", pkColumn.getName());
-		Column idColumn = fooTable.getColumnForIdentifier("id");
-		assertSame(pkColumn, idColumn);
-		assertEquals("NUMBER", idColumn.getDataTypeName());
-		assertSame(fooTable, idColumn.getTable());
-		assertTrue(idColumn.isPartOfPrimaryKey());
-		assertFalse(idColumn.isPartOfForeignKey());
-		assertEquals("java.math.BigDecimal", idColumn.getJavaTypeDeclaration());
-
-		Column nameColumn = fooTable.getColumnForIdentifier("name");
-		assertEquals("VARCHAR2", nameColumn.getDataTypeName());
-		assertEquals("java.lang.String", nameColumn.getJavaTypeDeclaration());
-		assertFalse(nameColumn.isPartOfPrimaryKey());
-
-		Column barColumn = fooTable.getColumnForIdentifier("bar_id");
-		assertEquals("NUMBER", barColumn.getDataTypeName());
-		assertTrue(barColumn.isPartOfForeignKey());
-		assertFalse(barColumn.isPartOfPrimaryKey());
-
-		ForeignKey barFK = fooTable.getForeignKeys().iterator().next();  // there should only be 1 foreign key
-		assertEquals(1, barFK.getColumnPairsSize());
-		assertEquals("BAR", barFK.getAttributeName());
-		assertNull(barFK.getJoinColumnAnnotationIdentifier("bar"));
-		assertEquals("BAR_ID", barFK.getJoinColumnAnnotationIdentifier("primaryBar"));
-		assertSame(fooTable, barFK.getBaseTable());
-
-		assertFalse(fooTable.isPossibleJoinTable());
-		assertSame(schema, fooTable.getSchema());
-
-		// BAR
-		Table barTable = schema.getTableForIdentifier("bar");
-		assertEquals(2, barTable.getColumnsSize());
-		assertEquals(1, barTable.getPrimaryKeyColumnsSize());
-		assertEquals(0, barTable.getForeignKeysSize());
-		assertEquals("ID", barTable.getPrimaryKeyColumn().getName());
-		assertFalse(barTable.isPossibleJoinTable());
-		assertEquals("BLOB", barTable.getColumnForIdentifier("chunk").getDataTypeName());
-		assertEquals("byte[]", barTable.getColumnForIdentifier("chunk").getJavaTypeDeclaration());
-		assertTrue(barTable.getColumnForIdentifier("chunk").isLOB());
-		assertSame(barTable, barFK.getReferencedTable());
-
-		// FOO_BAZ
-		Table foo_bazTable = schema.getTableForIdentifier("foo_baz");
-		assertEquals(2, foo_bazTable.getColumnsSize());
-		assertEquals(0, foo_bazTable.getPrimaryKeyColumnsSize());
-		assertEquals(2, foo_bazTable.getForeignKeysSize());
-		assertTrue(foo_bazTable.isPossibleJoinTable());
-		assertTrue(foo_bazTable.joinTableNameIsDefault());
-		assertTrue(foo_bazTable.getColumnForIdentifier("foo_id").isPartOfForeignKey());
-
-		this.dropTable("foo_baz");
-		this.dropTable("baz");
-		this.dropTable("foo");
-		this.dropTable("bar");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	private static final String CR = System.getProperty("line.separator");  //$NON-NLS-1$
-
-	private String buildBarDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE bar (").append(CR);
-		sb.append("    id NUMBER(10) PRIMARY KEY,").append(CR);
-		sb.append("    chunk BLOB").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildFooDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE foo (").append(CR);
-		sb.append("    id NUMBER(10) PRIMARY KEY,").append(CR);
-		sb.append("    name VARCHAR2(20),").append(CR);
-		sb.append("    bar_id REFERENCES bar(id)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildBazDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE baz (").append(CR);
-		sb.append("    id NUMBER(10) PRIMARY KEY,").append(CR);
-		sb.append("    name VARCHAR2(20)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildFooBazDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE foo_baz (").append(CR);
-		sb.append("    foo_id NUMBER(10) REFERENCES foo(id),").append(CR);
-		sb.append("    baz_id NUMBER(10) REFERENCES baz(id)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	public void testTableLookup() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropTable("test1");
-		this.dropTable("TEST2");
-		this.dropTable("\"test3\"");
-
-		this.executeUpdate("CREATE TABLE test1 (id NUMBER(10), name VARCHAR2(20))");
-		this.executeUpdate("CREATE TABLE TEST2 (id NUMBER(10), name VARCHAR2(20))");
-		this.executeUpdate("CREATE TABLE \"test3\" (id NUMBER(10), name VARCHAR2(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Schema schema = this.getDefaultSchema();
-
-		Table test1Table = schema.getTableForIdentifier("test1");
-		assertNotNull(test1Table);
-		test1Table = schema.getTableForIdentifier("TEST1");
-		assertNotNull(test1Table);
-
-		Table test2Table = schema.getTableForIdentifier("test2");
-		assertNotNull(test2Table);
-		test2Table = schema.getTableForIdentifier("TEST2");
-		assertNotNull(test2Table);
-
-		Table test3Table = schema.getTableForIdentifier("\"test3\"");
-		assertNotNull(test3Table);
-		test3Table = schema.getTableForIdentifier("test3");
-		assertNull(test3Table);
-
-		this.dropTable("test1");
-		this.dropTable("TEST2");
-		this.dropTable("\"test3\"");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testColumnLookup() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropTable("test");
-
-		// lowercase
-		this.executeUpdate("CREATE TABLE test (id NUMBER(10), name VARCHAR2(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Table table = this.getDefaultSchema().getTableForIdentifier("test");
-		assertNotNull(table.getColumnForIdentifier("id"));
-		assertNotNull(table.getColumnForIdentifier("name"));
-
-		this.dropTable("test");
-
-		// uppercase
-		this.executeUpdate("CREATE TABLE test (ID NUMBER(10), NAME VARCHAR2(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDefaultSchema().getTableForIdentifier("test");
-		assertNotNull(table.getColumnForIdentifier("ID"));
-		assertNotNull(table.getColumnForIdentifier("NAME"));
-
-		this.dropTable("test");
-
-		// mixed case
-		this.executeUpdate("CREATE TABLE test (Id NUMBER(10), Name VARCHAR2(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDefaultSchema().getTableForIdentifier("test");
-		assertNotNull(table.getColumnForIdentifier("Id"));
-		assertNotNull(table.getColumnForIdentifier("Name"));
-
-		this.dropTable("test");
-
-		// delimited
-		this.executeUpdate("CREATE TABLE test (\"Id\" NUMBER(10), \"Name\" VARCHAR2(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDefaultSchema().getTableForIdentifier("test");
-		assertNotNull(table.getColumnForIdentifier("\"Id\""));
-		assertNotNull(table.getColumnForIdentifier("\"Name\""));
-
-		this.dropTable("test");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testCrossSchemaReference() throws Exception {
-		if ( ! this.connectionProfile.getUserName().toUpperCase().equals("SYS")) {
-			System.out.println("skipped test: " + this.getClass() + '.' + this.getName());
-			return;  // SYS does not have a schema
-		}
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.executeUpdateIgnoreErrors("DROP USER XREF_TEST2 CASCADE");
-		this.executeUpdateIgnoreErrors("DROP USER XREF_TEST1 CASCADE");
-
-		this.executeUpdate("CREATE USER XREF_TEST1 IDENTIFIED BY foo");
-		this.executeUpdate("ALTER USER XREF_TEST1 QUOTA UNLIMITED ON USERS");
-		this.executeUpdate("CREATE TABLE XREF_TEST1.ORG (ID NUMBER(10) PRIMARY KEY, NAME VARCHAR2(20))");
-
-		this.executeUpdate("CREATE USER XREF_TEST2 IDENTIFIED BY foo");
-		this.executeUpdate("ALTER USER XREF_TEST2 QUOTA UNLIMITED ON USERS");
-		this.executeUpdate("GRANT ALL ON XREF_TEST1.ORG TO XREF_TEST2");
-		this.executeUpdate("CREATE TABLE XREF_TEST2.EMP (ID NUMBER(10) PRIMARY KEY, NAME VARCHAR2(20), " +
-				"ORG_ID NUMBER(10) REFERENCES XREF_TEST1.ORG(ID))");
-
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-		Schema schema1 = this.getDatabase().getSchemaNamed("XREF_TEST1");
-		assertNotNull(schema1);
-		Table orgTable = schema1.getTableNamed("ORG");
-		assertNotNull(orgTable);
-
-		Schema schema2 = this.getDatabase().getSchemaNamed("XREF_TEST2");
-		assertNotNull(schema2);
-		Table empTable = schema2.getTableNamed("EMP");
-		assertNotNull(empTable);
-		assertEquals(1, empTable.getForeignKeysSize());
-		ForeignKey fk = empTable.getForeignKeys().iterator().next();
-		Table refTable = fk.getReferencedTable();
-		assertNotNull(refTable);
-		assertEquals("ORG", refTable.getName());
-		assertEquals(1, fk.getColumnPairsSize());
-		ForeignKey.ColumnPair cp = fk.getColumnPairs().iterator().next();
-		Column baseColumn = cp.getBaseColumn();
-		assertEquals("ORG_ID", baseColumn.getName());
-		Column refColumn = cp.getReferencedColumn();
-		assertEquals("ID", refColumn.getName());
-
-		this.executeUpdate("DROP USER XREF_TEST2 CASCADE");
-		this.executeUpdate("DROP USER XREF_TEST1 CASCADE");
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	private void dropTable(String tableName) throws Exception {
-		this.executeUpdateIgnoreErrors("DROP TABLE " + tableName + " CASCADE CONSTRAINTS");
-	}
-
-// need Oracle enablement plug-in
-//	public void testSequence() throws Exception {
-//		this.connectionProfile.connect();
-//		TestConnectionListener listener = new TestConnectionListener();
-//		this.connectionProfile.addConnectionListener(listener);
-//
-//		this.dropSequence("FOO_SEQ");
-//
-//		this.executeUpdate("CREATE SEQUENCE FOO_SEQ");
-//		((ICatalogObject) this.getDTPDatabase()).refresh();
-//
-//		Sequence sequence = this.getDatabase().getDefaultSchema().getSequenceForIdentifier("FOO");
-//		assertNotNull(sequence);
-//		assertEquals("FOO_SEQ", sequence.getName());
-//
-//		this.dropSequence("FOO_SEQ");
-//
-//		this.connectionProfile.removeConnectionListener(listener);
-//		this.connectionProfile.disconnect();
-//	}
-//
-//	private void dropSequence(String sequenceName) throws Exception {
-//		this.executeUpdateIgnoreErrors("DROP SEQUENCE " + sequenceName);
-//	}
-//
-	protected void dumpUserObjects() throws SQLException {
-		this.dump("select * from user_objects");
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Oracle10gXETests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Oracle10gXETests.java
deleted file mode 100644
index 7f309f8..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Oracle10gXETests.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-
-/**
- *  Oracle 10g Thin Driver Test
- */
-@SuppressWarnings("nls")
-public class Oracle10gXETests extends DTPPlatformTests {
-
-	public Oracle10gXETests( String name) {
-		super( name);
-	}
-
-	@Override
-	protected String getPlatformPropertiesFileName() {
-		return "oracle10gXE.properties";
-	}
-
-	@Override
-	protected String getDriverName() {
-		return "Oracle 10g Thin Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionID() {
-		return "DriverDefn.Oracle Thin Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionType() {
-		return "org.eclipse.datatools.enablement.oracle.10.driverTemplate";
-	}
-
-	@Override
-	protected String getDatabaseVendor() {
-		return "Oracle";
-	}
-
-	@Override
-	protected String getDatabaseVersion() {
-		return "10";
-	}
-
-	@Override
-	protected String getDriverClass() {
-		return "oracle.jdbc.OracleDriver";
-	}
-
-	@Override
-	protected String getProfileName() {
-		return "Oracle10g_XE";
-	}
-
-	@Override
-	protected String getProfileDescription() {
-		return "Oracle10g XE Release 2 (10.2) JDBC Profile [Test]";
-	}
-
-	@Override
-	protected boolean supportsCatalogs() {
-		return false;
-	}
-
-	@Override
-	protected boolean executeOfflineTests() {
-		// working offline is pretty ugly
-		return false;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Oracle9iTests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Oracle9iTests.java
deleted file mode 100644
index 9d1c474..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Oracle9iTests.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-
-/**
- *  Oracle 9i Thin Driver Test
- */
-@SuppressWarnings("nls")
-public class Oracle9iTests extends DTPPlatformTests {
-
-	public Oracle9iTests( String name) {
-		super( name);
-	}
-
-	@Override
-	protected String getPlatformPropertiesFileName() {
-		return "oracle9i.properties";
-	}
-
-	@Override
-	protected String getDriverName() {
-		return "Oracle 9i Thin Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionID() {
-		return "DriverDefn.Oracle Thin Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionType() {
-		return "org.eclipse.datatools.enablement.oracle.9.driverTemplate";
-	}
-
-	@Override
-	protected String getDatabaseVendor() {
-		return "Oracle";
-	}
-
-	@Override
-	protected String getDatabaseVersion() {
-		return "9";
-	}
-
-	@Override
-	protected String getDriverClass() {
-		return "oracle.jdbc.OracleDriver";
-	}
-
-	@Override
-	protected String getProfileName() {
-		return "Oracle9i";
-	}
-
-	@Override
-	protected String getProfileDescription() {
-		return "Oracle9i JDBC Profile [Test]";
-	}
-
-	@Override
-	protected boolean supportsCatalogs() {
-		return false;
-	}
-
-	@Override
-	protected boolean executeOfflineTests() {
-		// working offline is pretty ugly
-		return false;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/PostgreSQLTests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/PostgreSQLTests.java
deleted file mode 100644
index 4b54bbf..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/PostgreSQLTests.java
+++ /dev/null
@@ -1,486 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.ForeignKey;
-import org.eclipse.jpt.db.Schema;
-import org.eclipse.jpt.db.Table;
-
-@SuppressWarnings("nls")
-public class PostgreSQLTests extends DTPPlatformTests {
-
-	public PostgreSQLTests( String name) {
-		super( name);
-	}
-
-	@Override
-	protected String getPlatformPropertiesFileName() {
-		return "postgresql.properties";
-	}
-
-	@Override
-	protected String getDriverName() {
-		return "PostgreSQL JDBC Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionID() {
-		return "DriverDefn.PostgreSQL JDBC Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionType() {
-		return "org.eclipse.datatools.enablement.postgresql.postgresqlDriverTemplate";
-	}
-
-	@Override
-	protected String getDatabaseVendor() {
-		return "postgres";
-	}
-
-	@Override
-	protected String getDatabaseVersion() {
-		return "8.x";
-	}
-
-	@Override
-	protected String getDriverClass() {
-		return "org.postgresql.Driver";
-	}
-
-	@Override
-	protected String getDefaultJDBCURL() {
-		// using this URL will result in the DTP database containing a single
-		// catalog named "" - which, unfortunately, resembles the pseudo-catalog
-		// generated by DTP for databases that do not return any catalogs via
-		// JDBC metadata calls...
-		return "jdbc:postgresql";
-	}
-
-	@Override
-	protected String getProfileName() {
-		return "PostgreSQL";
-	}
-
-	@Override
-	protected String getProfileDescription() {
-		return "PostgreSQL 8.2 JDBC Profile [Test]";
-	}
-
-	@Override
-	protected boolean supportsCatalogs() {
-		return true;
-	}
-
-	@Override
-	protected boolean executeOfflineTests() {
-		// DTP does not support PostgreSQL off-line - see 226704/241558
-		return false;
-	}
-
-	public void testSchema() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropSchema("TEST1");
-		this.dropSchema("TEST2");
-
-		this.executeUpdate("CREATE SCHEMA TEST1");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Schema schema1 = this.getDefaultCatalog().getSchemaForIdentifier("TEST1");
-		assertNotNull(schema1);
-
-		this.executeUpdate("CREATE SCHEMA TEST2");
-		Schema schema2 = this.getDefaultCatalog().getSchemaForIdentifier("TEST2");
-		assertNull(schema2);  // should be null until refresh
-
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-		assertSame(this.getDatabase(), listener.changedDatabase);
-
-		schema2 = this.getDefaultCatalog().getSchemaForIdentifier("TEST2");
-		assertNotNull(schema2);
-		assertNotSame(schema1, this.getDefaultCatalog().getSchemaForIdentifier("TEST1"));  // we should have a new schema after the refresh
-
-		this.dropSchema("TEST2");
-		this.dropSchema("TEST1");
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testSchemaLookup() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropSchema("LOOKUP_TEST");
-		this.dropSchema("\"lookup_TEST\"");
-
-		this.executeUpdate("CREATE SCHEMA LOOKUP_TEST");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		assertNull(this.getDefaultCatalog().getSchemaNamed("LOOKUP_TEST"));
-		assertNotNull(this.getDefaultCatalog().getSchemaForIdentifier("LOOKUP_TEST"));
-
-		assertNotNull(this.getDefaultCatalog().getSchemaNamed("lookup_test"));
-		assertNotNull(this.getDefaultCatalog().getSchemaForIdentifier("lookup_test"));
-
-		assertNull(this.getDefaultCatalog().getSchemaNamed("lookup_TEST"));
-		assertNotNull(this.getDefaultCatalog().getSchemaForIdentifier("lookup_TEST"));
-
-		assertNotNull(this.getDefaultCatalog().getSchemaForIdentifier("\"lookup_test\""));
-		assertNull(this.getDefaultCatalog().getSchemaForIdentifier("\"lookup_TEST\""));
-		assertNull(this.getDefaultCatalog().getSchemaForIdentifier("\"LOOKUP_TEST\""));
-
-		this.dropSchema("LOOKUP_TEST");
-
-		this.executeUpdate("CREATE SCHEMA \"lookup_TEST\"");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		assertNull(this.getDefaultCatalog().getSchemaNamed("LOOKUP_TEST"));
-		assertNull(this.getDefaultCatalog().getSchemaForIdentifier("LOOKUP_TEST"));
-
-		assertNull(this.getDefaultCatalog().getSchemaNamed("lookup_test"));
-		assertNull(this.getDefaultCatalog().getSchemaForIdentifier("lookup_test"));
-
-		assertNotNull(this.getDefaultCatalog().getSchemaNamed("lookup_TEST"));
-		assertNull(this.getDefaultCatalog().getSchemaForIdentifier("lookup_TEST"));
-
-		assertNull(this.getDefaultCatalog().getSchemaForIdentifier("\"LOOKUP_TEST\""));
-		assertNotNull(this.getDefaultCatalog().getSchemaForIdentifier("\"lookup_TEST\""));
-
-		this.dropSchema("\"lookup_TEST\"");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testSchemaIdentifier() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropSchema("LOOKUP_TEST");
-		this.dropSchema("\"lookup_TEST\"");
-
-		this.executeUpdate("CREATE SCHEMA lookup_test");  // this gets folded to lowercase
-		this.executeUpdate("CREATE SCHEMA \"lookup_TEST\"");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Schema schema = this.getDefaultCatalog().getSchemaForIdentifier("LOOKUP_TEST");
-		assertEquals("lookup_test", schema.getIdentifier());
-		assertEquals("lookup_test", schema.getIdentifier("LookupTest"));
-		assertNull(schema.getIdentifier("Lookup_Test"));
-
-		schema = this.getDefaultCatalog().getSchemaNamed("lookup_test");
-		assertEquals("lookup_test", schema.getIdentifier());
-
-		schema = this.getDefaultCatalog().getSchemaForIdentifier("\"lookup_TEST\"");
-		assertEquals("\"lookup_TEST\"", schema.getIdentifier());
-		assertEquals("\"lookup_TEST\"", schema.getIdentifier("lookup_TEST"));
-
-		this.dropSchema("\"lookup_TEST\"");
-		this.dropSchema("LOOKUP_TEST");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testTable() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropTable("TABLE_TEST", "FOO_BAZ");
-		this.dropTable("TABLE_TEST", "BAZ");
-		this.dropTable("TABLE_TEST", "FOO");
-		this.dropTable("TABLE_TEST", "BAR");
-		this.dropSchema("TABLE_TEST");
-
-		this.executeUpdate("CREATE SCHEMA TABLE_TEST");
-		this.executeUpdate("SET search_path TO TABLE_TEST");
-
-		this.executeUpdate(this.buildBarDDL());
-		this.executeUpdate(this.buildFooDDL());
-		this.executeUpdate(this.buildBazDDL());
-		this.executeUpdate(this.buildFooBazDDL());
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Schema schema = this.getDefaultCatalog().getSchemaForIdentifier("TABLE_TEST");
-
-		// FOO
-		Table fooTable = schema.getTableForIdentifier("FOO");
-		assertEquals(3, fooTable.getColumnsSize());
-		assertEquals(1, fooTable.getPrimaryKeyColumnsSize());
-		assertEquals(1, fooTable.getForeignKeysSize());
-
-		Column pkColumn = fooTable.getPrimaryKeyColumn();
-		assertEquals("id", pkColumn.getName());
-		Column idColumn = fooTable.getColumnForIdentifier("ID");
-		assertSame(pkColumn, idColumn);
-		assertEquals("INT4", idColumn.getDataTypeName());
-		assertSame(fooTable, idColumn.getTable());
-		assertTrue(idColumn.isPartOfPrimaryKey());
-		assertFalse(idColumn.isPartOfForeignKey());
-		assertEquals("java.lang.Integer", idColumn.getJavaTypeDeclaration());
-
-		Column nameColumn = fooTable.getColumnForIdentifier("NAME");
-		assertEquals("VARCHAR", nameColumn.getDataTypeName());
-		assertEquals("java.lang.String", nameColumn.getJavaTypeDeclaration());
-		assertFalse(nameColumn.isPartOfPrimaryKey());
-
-		Column barColumn = fooTable.getColumnForIdentifier("BAR_ID");
-		assertEquals("INT4", barColumn.getDataTypeName());
-		assertTrue(barColumn.isPartOfForeignKey());
-		assertFalse(barColumn.isPartOfPrimaryKey());
-
-		ForeignKey barFK = fooTable.getForeignKeys().iterator().next();  // there should only be 1 foreign key
-		assertEquals(1, barFK.getColumnPairsSize());
-		assertEquals("bar", barFK.getAttributeName());
-		assertNull(barFK.getJoinColumnAnnotationIdentifier("bar"));
-		assertEquals("bar_id", barFK.getJoinColumnAnnotationIdentifier("primaryBar"));
-		assertSame(fooTable, barFK.getBaseTable());
-
-		assertFalse(fooTable.isPossibleJoinTable());
-		assertSame(schema, fooTable.getSchema());
-
-		// BAR
-		Table barTable = schema.getTableForIdentifier("BAR");
-		assertEquals(2, barTable.getColumnsSize());
-		assertEquals(1, barTable.getPrimaryKeyColumnsSize());
-		assertEquals(0, barTable.getForeignKeysSize());
-		assertEquals("id", barTable.getPrimaryKeyColumn().getName());
-		assertFalse(barTable.isPossibleJoinTable());
-		assertEquals("BYTEA", barTable.getColumnForIdentifier("CHUNK").getDataTypeName());
-		assertEquals("byte[]", barTable.getColumnForIdentifier("CHUNK").getJavaTypeDeclaration());
-		// assertTrue(barTable.getColumnForIdentifier("CHUNK").dataTypeIsLOB());
-		assertSame(barTable, barFK.getReferencedTable());
-
-		// FOO_BAZ
-		Table foo_bazTable = schema.getTableForIdentifier("FOO_BAZ");
-		assertEquals(2, foo_bazTable.getColumnsSize());
-		assertEquals(0, foo_bazTable.getPrimaryKeyColumnsSize());
-		assertEquals(2, foo_bazTable.getForeignKeysSize());
-		assertTrue(foo_bazTable.isPossibleJoinTable());
-		assertTrue(foo_bazTable.joinTableNameIsDefault());
-		assertTrue(foo_bazTable.getColumnForIdentifier("FOO_ID").isPartOfForeignKey());
-
-		this.dropTable("TABLE_TEST", "FOO_BAZ");
-		this.dropTable("TABLE_TEST", "BAZ");
-		this.dropTable("TABLE_TEST", "FOO");
-		this.dropTable("TABLE_TEST", "BAR");
-		this.dropSchema("TABLE_TEST");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	private static final String CR = System.getProperty("line.separator");  //$NON-NLS-1$
-
-	private String buildBarDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE BAR (").append(CR);
-		sb.append("    ID integer PRIMARY KEY,").append(CR);
-		sb.append("    CHUNK bytea").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildFooDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE FOO (").append(CR);
-		sb.append("    ID integer PRIMARY KEY,").append(CR);
-		sb.append("    NAME varchar(20),").append(CR);
-		sb.append("    BAR_ID integer REFERENCES BAR(ID)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildBazDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE BAZ (").append(CR);
-		sb.append("    ID integer PRIMARY KEY,").append(CR);
-		sb.append("    NAME varchar(20)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildFooBazDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("CREATE TABLE FOO_BAZ (").append(CR);
-		sb.append("    FOO_ID int REFERENCES FOO(ID),").append(CR);
-		sb.append("    BAZ_ID int REFERENCES BAZ(ID)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	public void testColumnLookup() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropTable("TABLE_TEST", "test");
-		this.dropSchema("TABLE_TEST");
-
-		this.executeUpdate("CREATE SCHEMA TABLE_TEST");
-		this.executeUpdate("SET search_path TO TABLE_TEST");
-
-		// lowercase
-		this.executeUpdate("CREATE TABLE test (id int, name varchar(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Table table = this.getDefaultCatalog().getSchemaForIdentifier("TABLE_TEST").getTableForIdentifier("test");
-		assertNotNull(table.getColumnForIdentifier("id"));
-		assertNotNull(table.getColumnForIdentifier("name"));
-
-		this.dropTable("TABLE_TEST", "test");
-
-		// uppercase
-		this.executeUpdate("CREATE TABLE test (ID int, NAME varchar(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDefaultCatalog().getSchemaForIdentifier("TABLE_TEST").getTableForIdentifier("test");
-		assertNotNull(table.getColumnForIdentifier("ID"));
-		assertNotNull(table.getColumnForIdentifier("NAME"));
-
-		this.dropTable("TABLE_TEST", "test");
-
-		// mixed case
-		this.executeUpdate("CREATE TABLE test (Id int, Name varchar(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDefaultCatalog().getSchemaForIdentifier("TABLE_TEST").getTableForIdentifier("test");
-		assertNotNull(table.getColumnForIdentifier("Id"));
-		assertNotNull(table.getColumnForIdentifier("Name"));
-
-		this.dropTable("TABLE_TEST", "test");
-
-		// delimited
-		this.executeUpdate("CREATE TABLE test (\"Id\" int, \"Name\" varchar(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDefaultCatalog().getSchemaForIdentifier("TABLE_TEST").getTableForIdentifier("test");
-		assertNotNull(table.getColumnForIdentifier("\"Id\""));
-		assertNotNull(table.getColumnForIdentifier("\"Name\""));
-
-		this.dropTable("TABLE_TEST", "test");
-		this.dropSchema("TABLE_TEST");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testCrossSchemaReference() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.dropTable("XREF_TEST2", "EMP");
-		this.dropSchema("XREF_TEST2");
-		this.dropTable("XREF_TEST1", "ORG");
-		this.dropSchema("XREF_TEST1");
-
-		this.executeUpdate("CREATE SCHEMA XREF_TEST1");
-		this.executeUpdate("SET search_path TO XREF_TEST1");
-		this.executeUpdate("CREATE TABLE ORG (ID integer PRIMARY KEY, NAME varchar(20))");
-
-		this.executeUpdate("CREATE SCHEMA XREF_TEST2");
-		this.executeUpdate("SET search_path TO XREF_TEST2");
-		this.executeUpdate("CREATE TABLE EMP (ID integer PRIMARY KEY, NAME varchar(20), " +
-				"ORG_ID integer REFERENCES XREF_TEST1.ORG(ID))");
-
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-		Schema schema1 = this.getDefaultCatalog().getSchemaNamed("xref_test1");
-		assertNotNull(schema1);
-		Table orgTable = schema1.getTableNamed("org");
-		assertNotNull(orgTable);
-
-		Schema schema2 = this.getDefaultCatalog().getSchemaNamed("xref_test2");
-		assertNotNull(schema2);
-		Table empTable = schema2.getTableNamed("emp");
-		assertNotNull(empTable);
-		assertEquals(1, empTable.getForeignKeysSize());
-		ForeignKey fk = empTable.getForeignKeys().iterator().next();
-		Table refTable = fk.getReferencedTable();
-		assertNotNull(refTable);
-		assertEquals("org", refTable.getName());
-		assertEquals(1, fk.getColumnPairsSize());
-		ForeignKey.ColumnPair cp = fk.getColumnPairs().iterator().next();
-		Column baseColumn = cp.getBaseColumn();
-		assertEquals("org_id", baseColumn.getName());
-		Column refColumn = cp.getReferencedColumn();
-		assertEquals("id", refColumn.getName());
-
-		this.dropTable("XREF_TEST2", "EMP");
-		this.dropSchema("XREF_TEST2");
-		this.dropTable("XREF_TEST1", "ORG");
-		this.dropSchema("XREF_TEST1");
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	private void dropTable(String schemaName, String tableName) throws Exception {
-		Schema schema= this.getDefaultCatalog().getSchemaForIdentifier(schemaName);
-		if (schema != null) {
-			if (schema.getTableForIdentifier(tableName) != null) {
-				this.executeUpdate("DROP TABLE " + schemaName + '.' + tableName);
-			}
-		}
-	}
-
-	private void dropSchema(String name) throws Exception {
-		if (this.getDefaultCatalog().getSchemaForIdentifier(name) != null) {
-			this.executeUpdate("DROP SCHEMA " + name + " CASCADE");
-		}
-	}
-
-// see 241578/241557
-//	public void testSequence() throws Exception {
-//		this.connectionProfile.connect();
-//		TestConnectionListener listener = new TestConnectionListener();
-//		this.connectionProfile.addConnectionListener(listener);
-//
-//		this.dropSequence("SEQUENCE_TEST", "FOO");
-//		this.dropSchema("SEQUENCE_TEST");
-//
-//		this.executeUpdate("CREATE SCHEMA SEQUENCE_TEST");
-//		this.executeUpdate("SET search_path TO SEQUENCE_TEST");
-//
-//		this.executeUpdate(this.buildBarDDL());
-//		this.executeUpdate("CREATE SEQUENCE FOO START 1");
-////		List<Object[]> list = this.execute("SELECT nextval('foo')");
-////		System.out.println(list);
-//		((ICatalogObject) this.getDTPDatabase()).refresh();
-//
-//		Schema schema = this.getDefaultCatalog().getSchemaNamed("SEQUENCE_TEST");
-//		Sequence sequence = schema.getSequenceNamed("FOO");
-//		assertNotNull(sequence);
-//		assertEquals("foo_seq", sequence.getName());
-//
-//		this.dropSequence("SEQUENCE_TEST", "FOO");
-//		this.dropSchema("SEQUENCE_TEST");
-//
-//		this.connectionProfile.removeConnectionListener(listener);
-//		this.connectionProfile.disconnect();
-//	}
-//
-//	private void dropSequence(String schemaName, String sequenceName) throws Exception {
-//		Schema schema= this.getDefaultCatalog().getSchemaNamed(schemaName);
-//		if (schema != null) {
-//			if (schema.getSequenceNamed(sequenceName) != null) {
-//				this.executeUpdate("DROP SEQUENCE " + schemaName + '.' + sequenceName);
-//			}
-//		}
-//	}
-//
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/SQLServerTests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/SQLServerTests.java
deleted file mode 100644
index cedde5d..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/SQLServerTests.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-
-/**
- *  SQL Server 2005 Driver Test
- */
-@SuppressWarnings("nls")
-public class SQLServerTests extends DTPPlatformTests {
-
-	public SQLServerTests( String name) {
-		super( name);
-	}
-
-	@Override
-	protected String getPlatformPropertiesFileName() {
-		return "sqlserver.properties";
-	}
-
-	@Override
-	protected String getDriverName() {
-		return "Microsoft SQL Server 2005 JDBC Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionID() {
-		return "DriverDefn.Microsoft SQL Server 2005 JDBC Driver";
-	}
-
-	@Override
-	protected String getDriverDefinitionType() {
-		return "org.eclipse.datatools.enablement.msft.sqlserver.2005.driverTemplate";
-	}
-
-	@Override
-	protected String getDatabaseVendor() {
-		return "SQLServer";
-	}
-
-	@Override
-	protected String getDatabaseVersion() {
-		return "2005";
-	}
-
-	@Override
-	protected String getDriverClass() {
-		return "com.microsoft.sqlserver.jdbc.SQLServerDriver";
-	}
-
-	@Override
-	protected String getProfileName() {
-		return "SQLServer_2005";
-	}
-
-	@Override
-	protected String getProfileDescription() {
-		return "Microsoft SQL Server 2005 JDBC Profile [Test]";
-	}
-
-	@Override
-	protected String getProviderID() {
-		return "org.eclipse.datatools.connectivity.db.generic.connectionProfile";
-	}
-
-	@Override
-	protected boolean supportsCatalogs() {
-		return true;
-	}
-
-	@Override
-	protected boolean executeOfflineTests() {
-		return true;  // haven't actually tried this yet...
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/SybaseTests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/SybaseTests.java
deleted file mode 100644
index 41cea99..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/SybaseTests.java
+++ /dev/null
@@ -1,443 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.jpt.db.Catalog;
-import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.ForeignKey;
-import org.eclipse.jpt.db.Schema;
-import org.eclipse.jpt.db.Table;
-
-@SuppressWarnings("nls")
-public class SybaseTests extends DTPPlatformTests {
-
-	public SybaseTests( String name) {
-		super( name);
-	}
-
-	@Override
-	protected String getPlatformPropertiesFileName() {
-		return "sybase.properties";
-	}
-
-	@Override
-	protected String getDriverName() {
-		return "Sybase JDBC Driver for Sybase ASE 15.x";
-	}
-
-	@Override
-	protected String getDriverDefinitionID() {
-		return "DriverDefn.Sybase JDBC Driver for Sybase ASE 15.x";
-	}
-
-	@Override
-	protected String getDriverDefinitionType() {
-		return "org.eclipse.datatools.connectivity.db.sybase.ase.genericDriverTemplate_15";
-	}
-
-	@Override
-	protected String getDatabaseVendor() {
-		return "Sybase_ASE";
-	}
-
-	@Override
-	protected String getDatabaseVersion() {
-		return "15.x";
-	}
-
-	@Override
-	protected String getDriverClass() {
-		return "com.sybase.jdbc3.jdbc.SybDriver";
-	}
-
-	@Override
-	protected String getProfileName() {
-		return "Sybase_15";
-	}
-
-	@Override
-	protected String getProfileDescription() {
-		return "Sybase ASE 15 jConnect JDBC Profile [Test]";
-	}
-
-	@Override
-	protected boolean supportsCatalogs() {
-		return true;
-	}
-
-	@Override
-	protected boolean executeOfflineTests() {
-		// working offline is pretty ugly
-		return false;
-	}
-
-	/**
-	 * Sybase "databases" become DTP "catalogs"
-	 */
-	public void testCatalog() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.getJDBCConnection().setCatalog("master");
-		this.executeUpdateIgnoreErrors("drop database test1");
-		this.executeUpdateIgnoreErrors("drop database test2");
-
-		this.executeUpdate("create database test1");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Catalog catalog1 = this.getDatabase().getCatalogNamed("test1");
-		assertNotNull(catalog1);
-		Schema schema1 = catalog1.getSchemaNamed("dbo");
-		assertNotNull(schema1);
-		assertSame(schema1, catalog1.getDefaultSchema());
-
-		this.executeUpdate("create database test2");
-		Catalog catalog2 = this.getDatabase().getCatalogNamed("test2");
-		assertNull(catalog2);  // should be null until refresh
-
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-		assertSame(this.getDatabase(), listener.changedDatabase);
-
-		catalog2 = this.getDatabase().getCatalogNamed("test2");
-		assertNotNull(catalog2);
-		Schema schema2 = catalog2.getDefaultSchema();
-		assertNotNull(schema2);
-
-		assertNotSame(catalog1, this.getDatabase().getCatalogNamed("test1"));  // we should have a new catalog after the refresh
-		assertNotSame(schema1, this.getDatabase().getCatalogNamed("test1").getDefaultSchema());  // we should have a new schema after the refresh
-
-		this.executeUpdate("drop database test2");
-		this.executeUpdate("drop database test1");
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testTable() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.getJDBCConnection().setCatalog("master");
-		this.executeUpdateIgnoreErrors("drop database table_test");
-		this.executeUpdate("create database table_test");
-		this.getJDBCConnection().setCatalog("table_test");
-
-		this.executeUpdate(this.buildBarDDL());
-		this.executeUpdate(this.buildFooDDL());
-		this.executeUpdate(this.buildBazDDL());
-		this.executeUpdate(this.buildFooBazDDL());
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Schema schema = this.getDatabase().getCatalogNamed("table_test").getDefaultSchema();
-
-		// foo
-		Table fooTable = schema.getTableNamed("foo");
-		assertEquals(3, fooTable.getColumnsSize());
-		assertEquals(1, fooTable.getPrimaryKeyColumnsSize());
-		assertEquals(1, fooTable.getForeignKeysSize());
-
-		Column pkColumn = fooTable.getPrimaryKeyColumn();
-		assertEquals("id", pkColumn.getName());
-		Column idColumn = fooTable.getColumnNamed("id");
-		assertSame(fooTable, idColumn.getTable());
-		assertSame(pkColumn, idColumn);
-		assertTrue(idColumn.isPartOfPrimaryKey());
-		assertFalse(idColumn.isPartOfForeignKey());
-		assertTrue(idColumn.isPartOfUniqueConstraint());
-		assertFalse(idColumn.isNullable());
-
-		assertEquals("INT", idColumn.getDataTypeName());
-		assertTrue(idColumn.isNumeric());
-		assertEquals(0, idColumn.getPrecision());
-		assertEquals(0, idColumn.getScale());
-		assertEquals(-1, idColumn.getLength());
-		assertFalse(idColumn.isLOB());
-		assertEquals("int", idColumn.getJavaTypeDeclaration());
-
-		Column nameColumn = fooTable.getColumnNamed("name");
-		assertFalse(nameColumn.isPartOfPrimaryKey());
-		assertFalse(nameColumn.isPartOfForeignKey());
-		assertTrue(nameColumn.isPartOfUniqueConstraint());
-		assertFalse(nameColumn.isNullable());  // implied "NOT NULL" ?
-
-		assertEquals("VARCHAR", nameColumn.getDataTypeName());
-		assertFalse(nameColumn.isNumeric());
-		assertEquals(-1, nameColumn.getPrecision());
-		assertEquals(-1, nameColumn.getScale());
-		assertEquals(20, nameColumn.getLength());
-		assertFalse(nameColumn.isLOB());
-		assertEquals("java.lang.String", nameColumn.getJavaTypeDeclaration());
-
-		Column barColumn = fooTable.getColumnNamed("bar_id");
-		assertEquals("INT", barColumn.getDataTypeName());
-		assertTrue(barColumn.isPartOfForeignKey());
-		assertFalse(barColumn.isPartOfPrimaryKey());
-
-		ForeignKey barFK = fooTable.getForeignKeys().iterator().next();  // there should only be 1 foreign key
-		assertEquals(1, barFK.getColumnPairsSize());
-		assertEquals("bar", barFK.getAttributeName());
-		assertNull(barFK.getJoinColumnAnnotationIdentifier("bar"));
-		assertEquals("bar_id", barFK.getJoinColumnAnnotationIdentifier("primaryBar"));
-		assertSame(fooTable, barFK.getBaseTable());
-
-		assertFalse(fooTable.isPossibleJoinTable());
-		assertSame(schema, fooTable.getSchema());
-
-		// BAR
-		Table barTable = schema.getTableNamed("bar");
-		assertEquals(2, barTable.getColumnsSize());
-		assertEquals(1, barTable.getPrimaryKeyColumnsSize());
-		assertEquals(0, barTable.getForeignKeysSize());
-		assertEquals("id", barTable.getPrimaryKeyColumn().getName());
-		assertFalse(barTable.isPossibleJoinTable());
-		Column chunkColumn = barTable.getColumnNamed("chunk");
-		assertEquals("IMAGE", chunkColumn.getDataTypeName());
-		assertFalse(chunkColumn.isNumeric());
-		assertTrue(chunkColumn.isLOB());
-		assertEquals("byte[]", chunkColumn.getJavaTypeDeclaration());
-		assertSame(barTable, barFK.getReferencedTable());
-
-		// BAZ
-		Table bazTable = schema.getTableNamed("baz");
-		assertEquals(4, bazTable.getColumnsSize());
-		assertEquals(1, bazTable.getPrimaryKeyColumnsSize());
-		assertEquals(0, bazTable.getForeignKeysSize());
-
-		Column nicknameColumn = bazTable.getColumnNamed("nickname");
-		assertTrue(nicknameColumn.isNullable());
-
-		Column songColumn = bazTable.getColumnNamed("song");
-		assertFalse(songColumn.isNullable());
-
-		Column salaryColumn = bazTable.getColumnNamed("salary");
-		assertFalse(salaryColumn.isPartOfUniqueConstraint());
-		assertEquals("DECIMAL", salaryColumn.getDataTypeName());
-		assertTrue(salaryColumn.isNumeric());
-		assertEquals(10, salaryColumn.getPrecision());
-		assertEquals(2, salaryColumn.getScale());
-		assertEquals(-1, salaryColumn.getLength());
-		assertFalse(salaryColumn.isLOB());
-
-		// FOO_BAZ
-		Table foo_bazTable = schema.getTableNamed("foo_baz");
-		assertEquals(2, foo_bazTable.getColumnsSize());
-		assertEquals(0, foo_bazTable.getPrimaryKeyColumnsSize());
-		assertEquals(2, foo_bazTable.getForeignKeysSize());
-		assertTrue(foo_bazTable.isPossibleJoinTable());
-		assertTrue(foo_bazTable.joinTableNameIsDefault());
-		assertTrue(foo_bazTable.getColumnNamed("foo_id").isPartOfForeignKey());
-
-		this.executeUpdate("drop table foo_baz");
-		this.executeUpdate("drop table baz");
-		this.executeUpdate("drop table foo");
-		this.executeUpdate("drop table bar");
-
-		this.getJDBCConnection().setCatalog("master");
-		this.executeUpdate("drop database table_test");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	private static final String CR = System.getProperty("line.separator");  //$NON-NLS-1$
-
-	private String buildBarDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("create table bar (").append(CR);
-		sb.append("    id integer primary key,").append(CR);
-		sb.append("    chunk image").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildFooDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("create table foo (").append(CR);
-		sb.append("    id integer primary key,").append(CR);
-		sb.append("    name varchar(20) unique,").append(CR);
-		sb.append("    bar_id integer references bar(id)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildBazDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("create table baz (").append(CR);
-		sb.append("    id integer primary key,").append(CR);
-		sb.append("    nickname varchar(20) null,").append(CR);
-		sb.append("    song varchar(20) not null,").append(CR);
-		sb.append("    salary decimal(10, 2)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	private String buildFooBazDDL() {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append("create table foo_baz (").append(CR);
-		sb.append("    foo_id integer references foo(id),").append(CR);
-		sb.append("    baz_id integer references baz(id)").append(CR);
-		sb.append(")").append(CR);
-		return sb.toString();
-	}
-
-	public void testTableLookup() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.getJDBCConnection().setCatalog("master");
-		this.executeUpdateIgnoreErrors("drop database table_lookup_test");
-		this.executeUpdate("create database table_lookup_test");
-		this.getJDBCConnection().setCatalog("table_lookup_test");
-
-		this.executeUpdate("create table test1 (id integer, name varchar(20))");
-		this.executeUpdate("create table TEST2 (id integer, name varchar(20))");
-		this.executeUpdate("create table [Test3] (id integer, name varchar(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Schema schema = this.getDatabase().getCatalogNamed("table_lookup_test").getDefaultSchema();
-
-		assertNotNull(schema.getTableNamed("test1"));
-		assertNotNull(schema.getTableForIdentifier("test1"));
-
-		assertNotNull(schema.getTableNamed("TEST2"));
-		assertNotNull(schema.getTableForIdentifier("TEST2"));
-
-		assertNotNull(schema.getTableForIdentifier("[Test3]"));
-
-		this.executeUpdate("drop table [Test3]");
-		this.executeUpdate("drop table TEST2");
-		this.executeUpdate("drop table test1");
-
-		this.getJDBCConnection().setCatalog("master");
-		this.executeUpdate("drop database table_lookup_test");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testColumnLookup() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.getJDBCConnection().setCatalog("master");
-		this.executeUpdateIgnoreErrors("drop database column_lookup_test");
-		this.executeUpdate("create database column_lookup_test");
-		this.getJDBCConnection().setCatalog("column_lookup_test");
-
-		// lowercase
-		this.executeUpdate("create table test (id integer, name varchar(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		Table table = this.getDatabase().getCatalogNamed("column_lookup_test").getDefaultSchema().getTableNamed("test");
-		assertNotNull(table.getColumnNamed("id"));
-		assertNotNull(table.getColumnNamed("name"));
-
-		this.executeUpdate("drop table test");
-
-		// uppercase
-		this.executeUpdate("create table test (ID integer, NAME varchar(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDatabase().getCatalogNamed("column_lookup_test").getDefaultSchema().getTableNamed("test");
-		assertNotNull(table.getColumnForIdentifier("ID"));
-		assertNotNull(table.getColumnForIdentifier("NAME"));
-
-		this.executeUpdate("drop table test");
-
-		// mixed case
-		this.executeUpdate("create table test (Id integer, Name varchar(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDatabase().getCatalogNamed("column_lookup_test").getDefaultSchema().getTableNamed("test");
-		assertNotNull(table.getColumnForIdentifier("Id"));
-		assertNotNull(table.getColumnForIdentifier("Name"));
-
-		this.executeUpdate("drop table test");
-
-		// delimited
-		this.executeUpdate("create table test ([Id] integer, [Name] varchar(20))");
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-
-		table = this.getDatabase().getCatalogNamed("column_lookup_test").getDefaultSchema().getTableNamed("test");
-		assertNotNull(table.getColumnForIdentifier("[Id]"));
-		assertNotNull(table.getColumnForIdentifier("[Name]"));
-
-		this.executeUpdate("drop table test");
-
-		this.getJDBCConnection().setCatalog("master");
-		this.executeUpdate("drop database column_lookup_test");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-	public void testCrossSchemaReference() throws Exception {
-		this.connectionProfile.connect();
-		TestConnectionListener listener = new TestConnectionListener();
-		this.connectionProfile.addConnectionListener(listener);
-
-		this.getJDBCConnection().setCatalog("master");
-		this.executeUpdateIgnoreErrors("drop database xref_test2");
-		this.executeUpdateIgnoreErrors("drop database xref_test1");
-
-		this.getJDBCConnection().setCatalog("master");
-		this.executeUpdate("create database xref_test1");
-		this.getJDBCConnection().setCatalog("xref_test1");
-		this.executeUpdate("create table org (id integer primary key, name varchar(20))");
-
-		this.getJDBCConnection().setCatalog("master");
-		this.executeUpdate("create database xref_test2");
-		this.getJDBCConnection().setCatalog("xref_test2");
-		this.executeUpdate("create table emp (id integer primary key, name varchar(20), " +
-				"org_id integer references xref_test1..org(id))");
-
-		((ICatalogObject) this.getDTPDatabase()).refresh();
-		Catalog catalog1 = this.getDatabase().getCatalogNamed("xref_test1");
-		assertNotNull(catalog1);
-		Schema schema1 = catalog1.getSchemaNamed("dbo");
-		assertNotNull(schema1);
-		Table orgTable = schema1.getTableNamed("org");
-		assertNotNull(orgTable);
-
-		Catalog catalog2 = this.getDatabase().getCatalogNamed("xref_test2");
-		assertNotNull(catalog2);
-		Schema schema2 = catalog2.getSchemaNamed("dbo");
-		assertNotNull(schema2);
-		Table empTable = schema2.getTableNamed("emp");
-		assertNotNull(empTable);
-		assertEquals(1, empTable.getForeignKeysSize());
-		ForeignKey fk = empTable.getForeignKeys().iterator().next();
-		Table refTable = fk.getReferencedTable();
-		assertNotNull(refTable);
-		assertEquals("org", refTable.getName());
-		assertEquals(1, fk.getColumnPairsSize());
-		ForeignKey.ColumnPair cp = fk.getColumnPairs().iterator().next();
-		Column baseColumn = cp.getBaseColumn();
-		assertEquals("org_id", baseColumn.getName());
-		Column refColumn = cp.getReferencedColumn();
-		assertEquals("id", refColumn.getName());
-
-		this.getJDBCConnection().setCatalog("xref_test2");
-		this.executeUpdate("drop table emp");
-		this.getJDBCConnection().setCatalog("xref_test1");
-		this.executeUpdate("drop table org");
-		this.getJDBCConnection().setCatalog("master");
-		this.executeUpdate("drop database xref_test2");
-		this.executeUpdate("drop database xref_test1");
-
-		this.connectionProfile.removeConnectionListener(listener);
-		this.connectionProfile.disconnect();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.gen.tests/.classpath b/jpa/tests/org.eclipse.jpt.gen.tests/.classpath
deleted file mode 100644
index 482a6d9..0000000
--- a/jpa/tests/org.eclipse.jpt.gen.tests/.classpath
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		<accessrules>
-			<accessrule kind="accessible" pattern="org/eclipse/jpt/gen/**"/>
-		</accessrules>
-	</classpathentry>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/tests/org.eclipse.jpt.gen.tests/.project b/jpa/tests/org.eclipse.jpt.gen.tests/.project
deleted file mode 100644
index 2159feb..0000000
--- a/jpa/tests/org.eclipse.jpt.gen.tests/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.gen.tests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/jpa/tests/org.eclipse.jpt.gen.tests/.settings/org.eclipse.core.resources.prefs b/jpa/tests/org.eclipse.jpt.gen.tests/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 2c6dda4..0000000
--- a/jpa/tests/org.eclipse.jpt.gen.tests/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue Jan 15 11:12:14 EST 2008
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/tests/org.eclipse.jpt.gen.tests/.settings/org.eclipse.jdt.core.prefs b/jpa/tests/org.eclipse.jpt.gen.tests/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 8bab913..0000000
--- a/jpa/tests/org.eclipse.jpt.gen.tests/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Mon Jul 07 20:13:24 EDT 2008
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jpa/tests/org.eclipse.jpt.gen.tests/META-INF/MANIFEST.MF b/jpa/tests/org.eclipse.jpt.gen.tests/META-INF/MANIFEST.MF
deleted file mode 100644
index febf670..0000000
--- a/jpa/tests/org.eclipse.jpt.gen.tests/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,14 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.gen.tests
-Bundle-Version: 2.0.0
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.core.runtime;bundle-version="3.4.0",
- org.eclipse.jdt.core;bundle-version="3.4.0",
- org.eclipse.jpt.utility;bundle-version="1.2.0",
- org.eclipse.jpt.db;bundle-version="1.1.1",
- org.eclipse.jpt.gen;bundle-version="1.1.0",
- org.junit;bundle-version="3.8.0"
-Export-Package: org.eclipse.jpt.gen.tests.internal;x-internal:=true
diff --git a/jpa/tests/org.eclipse.jpt.gen.tests/about.html b/jpa/tests/org.eclipse.jpt.gen.tests/about.html
deleted file mode 100644
index be534ba..0000000
--- a/jpa/tests/org.eclipse.jpt.gen.tests/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 02, 2008</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/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</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>
-
-</BODY>
-</HTML>
diff --git a/jpa/tests/org.eclipse.jpt.gen.tests/build.properties b/jpa/tests/org.eclipse.jpt.gen.tests/build.properties
deleted file mode 100644
index e68d4bf..0000000
--- a/jpa/tests/org.eclipse.jpt.gen.tests/build.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-################################################################################
-# Copyright (c) 2008 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-javacSource = 1.5
-javacTarget = 1.5
-bin.includes = .,\
-               META-INF/,\
-               about.html,\
-               test.xml,\
-               plugin.properties
-source.. = src/
-output.. = bin/
diff --git a/jpa/tests/org.eclipse.jpt.gen.tests/plugin.properties b/jpa/tests/org.eclipse.jpt.gen.tests/plugin.properties
deleted file mode 100644
index f81a674..0000000
--- a/jpa/tests/org.eclipse.jpt.gen.tests/plugin.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2007 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-# ====================================================================
-# To code developer:
-#   Do NOT change the properties between this line and the
-#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
-#   Make a new property name, append to the end of the file and change
-#   the code to use the new property.
-# ====================================================================
-
-# ====================================================================
-# %%% END OF TRANSLATED PROPERTIES %%%
-# ====================================================================
-
-pluginName=Java Persistence Tools Entity Generation Tests
-providerName=Eclipse.org
diff --git a/jpa/tests/org.eclipse.jpt.gen.tests/src/org/eclipse/jpt/gen/tests/internal/EntityGenToolsTests.java b/jpa/tests/org.eclipse.jpt.gen.tests/src/org/eclipse/jpt/gen/tests/internal/EntityGenToolsTests.java
deleted file mode 100644
index 944e9f4..0000000
--- a/jpa/tests/org.eclipse.jpt.gen.tests/src/org/eclipse/jpt/gen/tests/internal/EntityGenToolsTests.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.tests.internal;
-
-import java.util.HashSet;
-import org.eclipse.jpt.gen.internal.util.EntityGenTools;
-
-import junit.framework.TestCase;
-
-/**
- * 
- */
-@SuppressWarnings("nls")
-public class EntityGenToolsTests extends TestCase {
-
-	public EntityGenToolsTests(String name) {
-		super(name);
-	}
-
-	public void testConvertToUniqueJavaStyleClassName1() {
-		HashSet<String> names = new HashSet<String>();
-		assertEquals("Foo", EntityGenTools.convertToUniqueJavaStyleClassName("Foo", names));
-		assertEquals("Foo", EntityGenTools.convertToUniqueJavaStyleClassName("foo", names));
-		assertEquals("Foo", EntityGenTools.convertToUniqueJavaStyleClassName("FOO", names));
-		assertEquals("Foo", EntityGenTools.convertToUniqueJavaStyleClassName("FOO_", names));
-		assertEquals("Foo", EntityGenTools.convertToUniqueJavaStyleClassName("_FOO", names));
-		assertEquals("Foo_", EntityGenTools.convertToUniqueJavaStyleClassName("FOO*", names));
-		assertEquals("_oo", EntityGenTools.convertToUniqueJavaStyleClassName("5oo", names));
-	}
-
-	public void testConvertToUniqueJavaStyleClassName2() {
-		HashSet<String> names = new HashSet<String>();
-		names.add("Foo");
-		assertEquals("Foo2", EntityGenTools.convertToUniqueJavaStyleClassName("Foo", names));
-		assertEquals("Foo2", EntityGenTools.convertToUniqueJavaStyleClassName("foo", names));
-		assertEquals("Foo2", EntityGenTools.convertToUniqueJavaStyleClassName("FOO", names));
-		assertEquals("Foo2", EntityGenTools.convertToUniqueJavaStyleClassName("FOO_", names));
-		assertEquals("Foo2", EntityGenTools.convertToUniqueJavaStyleClassName("_FOO", names));
-		assertEquals("Foo_", EntityGenTools.convertToUniqueJavaStyleClassName("FOO*", names));
-		assertEquals("_oo", EntityGenTools.convertToUniqueJavaStyleClassName("5OO", names));
-	}
-
-	public void testConvertToUniqueJavaStyleClassName3() {
-		HashSet<String> names = new HashSet<String>();
-		names.add("foo");
-		assertEquals("Foo2", EntityGenTools.convertToUniqueJavaStyleClassName("Foo", names));
-		assertEquals("Foo2", EntityGenTools.convertToUniqueJavaStyleClassName("foo", names));
-		assertEquals("Foo2", EntityGenTools.convertToUniqueJavaStyleClassName("FOO", names));
-		assertEquals("Foo2", EntityGenTools.convertToUniqueJavaStyleClassName("FOO_", names));
-		assertEquals("Foo2", EntityGenTools.convertToUniqueJavaStyleClassName("_FOO", names));
-		assertEquals("Foo_", EntityGenTools.convertToUniqueJavaStyleClassName("FOO*", names));
-		assertEquals("_oo", EntityGenTools.convertToUniqueJavaStyleClassName("5OO", names));
-	}
-
-	public void testConvertToUniqueJavaStyleClassName4() {
-		HashSet<String> names = new HashSet<String>();
-		assertEquals("FooBar", EntityGenTools.convertToUniqueJavaStyleClassName("FooBar", names));
-		assertEquals("Foo_bar", EntityGenTools.convertToUniqueJavaStyleClassName("foo_bar", names));
-		assertEquals("FooBar", EntityGenTools.convertToUniqueJavaStyleClassName("FOO_BAR", names));
-		assertEquals("FooBar", EntityGenTools.convertToUniqueJavaStyleClassName("_FOO_BAR", names));
-		assertEquals("FooBar", EntityGenTools.convertToUniqueJavaStyleClassName("FOO_BAR_", names));
-		assertEquals("FooBar_", EntityGenTools.convertToUniqueJavaStyleClassName("FOO_BAR_*", names));
-		assertEquals("_fooBar", EntityGenTools.convertToUniqueJavaStyleClassName("4FOO_BAR", names));
-	}
-
-	public void testConvertToUniqueJavaStyleClassName5() {
-		HashSet<String> names = new HashSet<String>();
-		names.add("FooBar");
-		assertEquals("FooBar2", EntityGenTools.convertToUniqueJavaStyleClassName("FooBar", names));
-		assertEquals("Foo_bar", EntityGenTools.convertToUniqueJavaStyleClassName("foo_bar", names));
-		assertEquals("FooBar2", EntityGenTools.convertToUniqueJavaStyleClassName("FOO_BAR", names));
-		assertEquals("FooBar2", EntityGenTools.convertToUniqueJavaStyleClassName("_FOO_BAR", names));
-		assertEquals("FooBar2", EntityGenTools.convertToUniqueJavaStyleClassName("FOO_BAR_", names));
-		assertEquals("FooBar_", EntityGenTools.convertToUniqueJavaStyleClassName("FOO_BAR_*", names));
-		assertEquals("_fooBar", EntityGenTools.convertToUniqueJavaStyleClassName("4FOO_BAR", names));
-	}
-
-	public void testConvertToUniqueJavaStyleAttributeName1() {
-		HashSet<String> names = new HashSet<String>();
-		assertEquals("foo", EntityGenTools.convertToUniqueJavaStyleAttributeName("Foo", names));
-		assertEquals("foo", EntityGenTools.convertToUniqueJavaStyleAttributeName("foo", names));
-		assertEquals("foo", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO", names));
-		assertEquals("foo", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO_", names));
-		assertEquals("foo", EntityGenTools.convertToUniqueJavaStyleAttributeName("_FOO", names));
-		assertEquals("foo_", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO*", names));
-		assertEquals("_oo", EntityGenTools.convertToUniqueJavaStyleAttributeName("5oo", names));
-	}
-
-	public void testConvertToUniqueJavaStyleAttributeName2() {
-		HashSet<String> names = new HashSet<String>();
-		names.add("Foo");
-		assertEquals("foo2", EntityGenTools.convertToUniqueJavaStyleAttributeName("Foo", names));
-		assertEquals("foo2", EntityGenTools.convertToUniqueJavaStyleAttributeName("foo", names));
-		assertEquals("foo2", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO", names));
-		assertEquals("foo2", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO_", names));
-		assertEquals("foo2", EntityGenTools.convertToUniqueJavaStyleAttributeName("_FOO", names));
-		assertEquals("foo_", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO*", names));
-		assertEquals("_oo", EntityGenTools.convertToUniqueJavaStyleAttributeName("5OO", names));
-	}
-
-	public void testConvertToUniqueJavaStyleAttributeName3() {
-		HashSet<String> names = new HashSet<String>();
-		names.add("foo");
-		assertEquals("foo2", EntityGenTools.convertToUniqueJavaStyleAttributeName("Foo", names));
-		assertEquals("foo2", EntityGenTools.convertToUniqueJavaStyleAttributeName("foo", names));
-		assertEquals("foo2", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO", names));
-		assertEquals("foo2", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO_", names));
-		assertEquals("foo2", EntityGenTools.convertToUniqueJavaStyleAttributeName("_FOO", names));
-		assertEquals("foo_", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO*", names));
-		assertEquals("_oo", EntityGenTools.convertToUniqueJavaStyleAttributeName("5OO", names));
-	}
-
-	public void testConvertToUniqueJavaStyleAttributeName4() {
-		HashSet<String> names = new HashSet<String>();
-		assertEquals("fooBar", EntityGenTools.convertToUniqueJavaStyleAttributeName("FooBar", names));
-		assertEquals("foo_bar", EntityGenTools.convertToUniqueJavaStyleAttributeName("foo_bar", names));
-		assertEquals("fooBar", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO_BAR", names));
-		assertEquals("fooBar", EntityGenTools.convertToUniqueJavaStyleAttributeName("_FOO_BAR", names));
-		assertEquals("fooBar", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO_BAR_", names));
-		assertEquals("fooBar_", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO_BAR_*", names));
-		assertEquals("_fooBar", EntityGenTools.convertToUniqueJavaStyleAttributeName("4FOO_BAR", names));
-	}
-
-	public void testConvertToUniqueJavaStyleAttributeName5() {
-		HashSet<String> names = new HashSet<String>();
-		names.add("FooBar");
-		assertEquals("fooBar2", EntityGenTools.convertToUniqueJavaStyleAttributeName("FooBar", names));
-		assertEquals("foo_bar", EntityGenTools.convertToUniqueJavaStyleAttributeName("foo_bar", names));
-		assertEquals("fooBar2", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO_BAR", names));
-		assertEquals("fooBar2", EntityGenTools.convertToUniqueJavaStyleAttributeName("_FOO_BAR", names));
-		assertEquals("fooBar2", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO_BAR_", names));
-		assertEquals("fooBar_", EntityGenTools.convertToUniqueJavaStyleAttributeName("FOO_BAR_*", names));
-		assertEquals("_fooBar", EntityGenTools.convertToUniqueJavaStyleAttributeName("4FOO_BAR", names));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.gen.tests/src/org/eclipse/jpt/gen/tests/internal/JptGenTests.java b/jpa/tests/org.eclipse.jpt.gen.tests/src/org/eclipse/jpt/gen/tests/internal/JptGenTests.java
deleted file mode 100644
index 1e79d7d..0000000
--- a/jpa/tests/org.eclipse.jpt.gen.tests/src/org/eclipse/jpt/gen/tests/internal/JptGenTests.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.gen.tests.internal;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.jpt.gen.tests.internal.EntityGenToolsTests;
-
-/**
- * 
- */
-public class JptGenTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite("JPT Entity Generation Tests"); //$NON-NLS-1$
-		suite.addTestSuite(EntityGenToolsTests.class);
-		return suite;
-	}
-
-	private JptGenTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.gen.tests/test.xml b/jpa/tests/org.eclipse.jpt.gen.tests/test.xml
deleted file mode 100644
index 2b842d9..0000000
--- a/jpa/tests/org.eclipse.jpt.gen.tests/test.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<!--
-  Copyright (c) 2008, 2010 Oracle. 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:
-    Oracle - initial API and implementation
- -->
-<project name="testsuite" default="run" basedir=".">
-	<!-- The property ${eclipse-home} should be passed into this script -->
-	<!-- Set a meaningful default value for when it is not. -->
-	<echo message="basedir ${basedir}" />
-	<echo message="eclipse place ${eclipse-home}" />
-	<!-- sets the properties plugin-name -->
-	<property name="plugin-name" value="org.eclipse.jpt.gen.tests"/>
-
-	<!-- This target holds all initialization code that needs to be done for -->
-	<!-- all tests that are to be run. Initialization for individual tests -->
-	<!-- should be done within the body of the suite target. -->
-	<target name="init">
-		<tstamp/>
-		<delete>
-			<fileset dir="${eclipse-home}" includes="org*.xml"/>
-		</delete>
-	</target>
-
-	<!-- This target defines the tests that need to be run. -->
-	<target name="suite">
-		<ant target="gen-test" antfile="${library-file}" dir="${eclipse-home}">
-			<property name="plugin-name" value="${plugin-name}"/>
-			<property name="classname" value="org.eclipse.jpt.gen.tests.internal.JptGenTests" />
-			<property name="plugin-path" value="${eclipse-home}/plugins/${plugin-name}"/>
-			<property name="extraVMargs" value=""/>
-		</ant>
-	</target>
-
-	<!-- This target holds code to cleanup the testing environment after -->
-	<!-- after all of the tests have been run. You can use this target to -->
-	<!-- delete temporary files that have been created. -->
-	<target name="cleanup">
-	</target>
-
-	<!-- This target runs the test suite. Any actions that need to happen -->
-	<!-- after all the tests have been run should go here. -->
-	<target name="run" depends="init, suite, cleanup">
-	</target>
-</project>
\ No newline at end of file
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/.classpath b/jpa/tests/org.eclipse.jpt.ui.tests/.classpath
deleted file mode 100644
index 382639e..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/.classpath
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		<accessrules>
-			<accessrule kind="accessible" pattern="org/eclipse/jpt/ui/**"/>
-			<accessrule kind="accessible" pattern="org/eclipse/jpt/core/**"/>
-			<accessrule kind="accessible" pattern="org/eclipse/jpt/utility/**"/>
-		</accessrules>
-	</classpathentry>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/.project b/jpa/tests/org.eclipse.jpt.ui.tests/.project
deleted file mode 100644
index 0240774..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.ui.tests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/.settings/org.eclipse.core.resources.prefs b/jpa/tests/org.eclipse.jpt.ui.tests/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index d364a0f..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Mon Apr 07 14:27:16 EDT 2008
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/.settings/org.eclipse.jdt.core.prefs b/jpa/tests/org.eclipse.jpt.ui.tests/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index d909c10..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun May 27 14:55:01 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/META-INF/MANIFEST.MF b/jpa/tests/org.eclipse.jpt.ui.tests/META-INF/MANIFEST.MF
deleted file mode 100644
index 8a2119e..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,26 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.ui.tests
-Bundle-Version: 1.0.1
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: 
- org.junit;bundle-version="4.3.1",
- org.eclipse.core.resources,
- org.eclipse.core.runtime,
- org.eclipse.jface,
- org.eclipse.jpt.core.tests,
- org.eclipse.jpt.core.tests.extension.resource,
- org.eclipse.jpt.utility,
- org.eclipse.jpt.core,
- org.eclipse.jpt.ui,
- org.eclipse.ui.navigator;bundle-version="3.4.0",
- org.eclipse.ui.forms;bundle-version="3.3.100",
- org.eclipse.ui.workbench;bundle-version="3.4.0"
-Export-Package: org.eclipse.jpt.ui.tests;x-internal:=true,
- org.eclipse.jpt.ui.tests.internal.jface;x-internal:=true,
- org.eclipse.jpt.ui.tests.internal.platform;x-internal:=true,
- org.eclipse.jpt.ui.tests.internal.swt;x-internal:=true,
- org.eclipse.jpt.ui.tests.internal.util;x-internal:=true,
- org.eclipse.jpt.ui.tests.internal.utility.swt;x-internal:=true
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/build.properties b/jpa/tests/org.eclipse.jpt.ui.tests/build.properties
deleted file mode 100644
index 50f0aa3..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/build.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-################################################################################
-# Copyright (c) 2007, 2010 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/plugin.properties b/jpa/tests/org.eclipse.jpt.ui.tests/plugin.properties
deleted file mode 100644
index cd93615..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/plugin.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2007 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-# ====================================================================
-# To code developer:
-#   Do NOT change the properties between this line and the
-#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
-#   Make a new property name, append to the end of the file and change
-#   the code to use the new property.
-# ====================================================================
-
-# ====================================================================
-# %%% END OF TRANSLATED PROPERTIES %%%
-# ====================================================================
-
-pluginName=Java Persistence API UI Tests
-providerName=Eclipse.org
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/JptUiTests.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/JptUiTests.java
deleted file mode 100644
index 310abb7..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/JptUiTests.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.jpt.ui.tests.internal.platform.JptUiPlatformTests;
-import org.eclipse.jpt.ui.tests.internal.swt.JptUiSWTTests;
-import org.eclipse.jpt.ui.tests.internal.util.JptUiUtilTests;
-
-/**
- * Runs all JPT UI Tests
- */
-public class JptUiTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUiTests.class.getPackage().getName());
-		suite.addTest(JptUiPlatformTests.suite());
-		suite.addTest(JptUiSWTTests.suite());
-		suite.addTest(JptUiUtilTests.suite());
-		return suite;
-	}
-
-	private JptUiTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/jface/DelegatingLabelProviderUiTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/jface/DelegatingLabelProviderUiTest.java
deleted file mode 100644
index 47e8fc2..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/jface/DelegatingLabelProviderUiTest.java
+++ /dev/null
@@ -1,602 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.jface;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ArrayContentProvider;
-import org.eclipse.jface.viewers.BaseLabelProvider;
-import org.eclipse.jface.viewers.ComboViewer;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.window.ApplicationWindow;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.ui.internal.jface.AbstractItemLabelProvider;
-import org.eclipse.jpt.ui.internal.jface.AbstractTreeItemContentProvider;
-import org.eclipse.jpt.ui.internal.jface.DelegatingTreeContentAndLabelProvider;
-import org.eclipse.jpt.ui.jface.DelegatingContentAndLabelProvider;
-import org.eclipse.jpt.ui.jface.ItemLabelProvider;
-import org.eclipse.jpt.ui.jface.ItemLabelProviderFactory;
-import org.eclipse.jpt.ui.jface.TreeItemContentProvider;
-import org.eclipse.jpt.ui.jface.TreeItemContentProviderFactory;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.NullCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.StaticCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.StaticPropertyValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.PaletteData;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-
-public class DelegatingLabelProviderUiTest extends ApplicationWindow
-{
-	private TreeViewer tree;
-	
-	private WritablePropertyValueModel<Vehicle> selectedVehicle;
-	
-	
-	public static void main(String[] args) {
-		Window window = new DelegatingLabelProviderUiTest(args);
-		window.setBlockOnOpen(true);
-		window.open();
-		Display.getCurrent().dispose();
-		System.exit(0);
-	}
-	
-	
-	private DelegatingLabelProviderUiTest(String[] args) {
-		super(null);
-		this.selectedVehicle = new SimplePropertyValueModel<Vehicle>();
-	}
-	
-	
-	@Override
-	protected Control createContents(Composite parent) {
-		((Shell) parent).setText(this.getClass().getSimpleName());
-		parent.setSize(400, 400);
-		parent.setLayout(new GridLayout());
-		Composite mainPanel = new Composite(parent, SWT.NONE);
-		mainPanel.setLayoutData(new GridData(GridData.FILL_BOTH));
-		mainPanel.setLayout(new GridLayout());
-		buildTreePanel(mainPanel);
-		buildControlPanel(mainPanel);
-		return mainPanel;
-	}
-	
-	private void buildTreePanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		panel.setLayoutData(new GridData(GridData.FILL_BOTH));
-		panel.setLayout(new GridLayout());
-		
-		Label label = new Label(panel, SWT.NONE);
-		label.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false));
-		label.setText("My Vehicles");
-		
-		tree = new TreeViewer(panel, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
-		tree.getTree().setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
-		DelegatingContentAndLabelProvider contentAndLabelProvider = 
-			new DelegatingTreeContentAndLabelProvider(
-				new VehicleContentProviderFactory(),
-				new VehicleLabelProviderFactory());
-		tree.setContentProvider(contentAndLabelProvider);
-		tree.setLabelProvider(contentAndLabelProvider);
-		tree.setInput(new Root());
-		tree.addSelectionChangedListener(buildTreeSelectionChangedListener());
-	}
-	
-	private ISelectionChangedListener buildTreeSelectionChangedListener() {
-		return new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				selectedVehicle.setValue((Vehicle) ((IStructuredSelection) event.getSelection()).getFirstElement());
-			}
-		};
-	}
-	
-	private void buildControlPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		panel.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
-		panel.setLayout(new GridLayout());
-		buildUpperControlPanel(panel);
-		buildLowerControlPanel(panel);
-	}
-	
-	private void buildUpperControlPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		panel.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
-		panel.setLayout(new GridLayout(2, true));
-		buildVehicleCombo(panel);
-		buildColorCombo(panel);
-	}
-	
-	private void buildVehicleCombo(Composite parent) {
-		final ComboViewer combo = new ComboViewer(parent, SWT.READ_ONLY);
-		combo.getCombo().setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
-		combo.setContentProvider(new ArrayContentProvider());
-		combo.setLabelProvider(new VehicleTypeLabelProvider());
-		combo.setInput(
-			new VehicleType[] {
-				VehicleType.BICYCLE, VehicleType.CAR, 
-				VehicleType.TRUCK, VehicleType.BOAT
-			});
-		combo.getCombo().setEnabled(false);
-		combo.addSelectionChangedListener(
-			new ISelectionChangedListener() {
-				public void selectionChanged(SelectionChangedEvent event) {
-					selectedVehicle().setVehicleType((VehicleType) ((StructuredSelection) event.getSelection()).getFirstElement()); 
-				}
-			});
-		selectedVehicle.addPropertyChangeListener(
-			PropertyValueModel.VALUE, 
-			new PropertyChangeListener() {
-				public void propertyChanged(PropertyChangeEvent event) {
-					Vehicle vehicle = selectedVehicle();
-					combo.getCombo().setEnabled(vehicle != null);
-					combo.setSelection(new StructuredSelection((vehicle == null) ? null : vehicle.vehicleType()));
-				}
-			});
-	}
-	
-	private void buildColorCombo(Composite parent) {
-		final ComboViewer combo = new ComboViewer(parent, SWT.READ_ONLY);
-		combo.getCombo().setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
-		combo.setContentProvider(new ArrayContentProvider());
-		combo.setLabelProvider(new ColorLabelProvider());
-		combo.setInput(new Color[] {Color.RED, Color.BLUE, Color.YELLOW, Color.GREEN});
-		combo.addSelectionChangedListener(
-			new ISelectionChangedListener() {
-				public void selectionChanged(SelectionChangedEvent event) {
-					selectedVehicle().setColor((Color) ((StructuredSelection) event.getSelection()).getFirstElement()); 
-				}
-			});
-		selectedVehicle.addPropertyChangeListener(
-			PropertyValueModel.VALUE, 
-			new PropertyChangeListener() {
-				public void propertyChanged(PropertyChangeEvent event) {
-					Vehicle vehicle = selectedVehicle();
-					combo.getCombo().setEnabled(vehicle != null);
-					combo.setSelection(new StructuredSelection((vehicle == null) ? null : vehicle.color()));
-				}
-			});
-	}
-	
-	private void buildLowerControlPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		panel.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
-		panel.setLayout(new GridLayout(3, false));
-		buildEffectsLabel(panel);
-		buildGreyedCheckBox(panel);
-		buildTranslucentCheckBox(panel);
-		buildActionPanel(panel);
-	}
-	
-	private void buildEffectsLabel(Composite parent) {
-		Label label = new Label(parent, SWT.LEFT);
-		label.setText("Color effects: ");
-		label.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 3, 1));
-	}
-	
-	private void buildGreyedCheckBox(Composite parent) {
-		final Button button = new Button(parent, SWT.CHECK);
-		button.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false));
-		button.setText("greyed");
-		button.setEnabled(false);
-		button.addSelectionListener(
-			new SelectionAdapter() {
-				@Override
-				public void widgetSelected(SelectionEvent e) {
-					selectedVehicle().setGreyed(button.getSelection());
-				}
-			});
-		selectedVehicle.addPropertyChangeListener(
-			PropertyValueModel.VALUE, 
-			new PropertyChangeListener() {
-				public void propertyChanged(PropertyChangeEvent event) {
-					Vehicle vehicle = selectedVehicle();
-					button.setEnabled(vehicle != null);
-					button.setSelection(vehicle != null && vehicle.isGreyed());
-				}
-			});
-	}
-	
-	private void buildTranslucentCheckBox(Composite parent) {
-		final Button button = new Button(parent, SWT.CHECK);
-		button.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, true, false));
-		button.setText("translucent");
-		button.setEnabled(false);
-		button.addSelectionListener(
-			new SelectionAdapter() {
-				@Override
-				public void widgetSelected(SelectionEvent e) {
-					selectedVehicle().setTranslucent(button.getSelection());
-				}
-			});
-		selectedVehicle.addPropertyChangeListener(
-			PropertyValueModel.VALUE, 
-			new PropertyChangeListener() {
-				public void propertyChanged(PropertyChangeEvent event) {
-					Vehicle vehicle = selectedVehicle();
-					button.setEnabled(vehicle != null);
-					button.setSelection(vehicle != null && vehicle.isTranslucent());
-				}
-			});
-	}
-	
-	private void buildActionPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		panel.setLayoutData(new GridData(GridData.END, GridData.FILL, false, false));
-		panel.setLayout(new GridLayout());
-		buildRefreshTreeACI().fill(panel);
-	}
-	
-	private ActionContributionItem buildRefreshTreeACI() {
-		Action action = new Action("Refresh tree", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				refreshTree();
-			}
-		};
-		action.setToolTipText("Refresh the tree's labels");
-		return new ActionContributionItem(action);
-	}
-	
-	void refreshTree() {
-		tree.refresh();
-	}
-	
-	private Vehicle selectedVehicle() {
-		return selectedVehicle.getValue();
-	}
-	
-	
-	private static class VehicleTypeLabelProvider extends BaseLabelProvider
-		implements ILabelProvider
-	{
-		public Image getImage(Object element) {
-			return null;
-		}
-		
-		public String getText(Object element) {
-			return ((VehicleType) element).description();
-		}
-	}
-	
-	
-	private static class ColorLabelProvider extends BaseLabelProvider
-		implements ILabelProvider
-	{
-		public Image getImage(Object element) {
-			return null;
-		}
-		
-		public String getText(Object element) {
-			return ((Color) element).description();
-		}
-	}
-	
-	
-	private static class VehicleContentProviderFactory
-		implements TreeItemContentProviderFactory
-	{
-		public TreeItemContentProvider buildItemContentProvider(Object item, DelegatingContentAndLabelProvider contentAndLabelProvider) {
-			if (item instanceof Root) {
-				return new RootContentProvider(
-					(Root) item, (DelegatingTreeContentAndLabelProvider) contentAndLabelProvider);
-			}
-			return new VehicleContentProvider(
-				(Vehicle) item, (DelegatingTreeContentAndLabelProvider) contentAndLabelProvider);
-		}
-	}
-	
-	
-	private static class RootContentProvider extends AbstractTreeItemContentProvider<Vehicle>
-	{
-		public RootContentProvider(Root item, DelegatingTreeContentAndLabelProvider contentAndLabelProvider) {
-			super(item, contentAndLabelProvider);
-		}
-		
-		@Override
-		public Root getModel() {
-			return (Root) super.getModel();
-		}
-		
-		@Override
-		public Object getParent() {
-			return null;
-		}
-		
-		@Override
-		protected CollectionValueModel<Vehicle> buildChildrenModel() {
-			return new StaticCollectionValueModel<Vehicle>(this.getModel().vehicles());
-		}
-	}
-	
-	@SuppressWarnings("unchecked")
-	private static class VehicleContentProvider extends AbstractTreeItemContentProvider
-	{
-		public VehicleContentProvider(Vehicle item, DelegatingTreeContentAndLabelProvider contentAndLabelProvider) {
-			super(item, contentAndLabelProvider);
-		}
-		
-		@Override
-		public Vehicle getModel() {
-			return (Vehicle) super.getModel();
-		}
-		
-		@Override
-		public Object getParent() {
-			return getModel().parent();
-		}
-		
-		@Override
-		protected CollectionValueModel buildChildrenModel() {
-			return new NullCollectionValueModel();
-		}
-	}
-	
-	
-	private static class VehicleLabelProviderFactory
-		implements ItemLabelProviderFactory
-	{
-		public ItemLabelProvider buildItemLabelProvider(Object element, DelegatingContentAndLabelProvider labelProvider) {
-			return new VehicleLabelProvider((Vehicle) element, labelProvider);
-		}
-	}
-	
-	
-	private static class VehicleLabelProvider extends AbstractItemLabelProvider
-	{
-		public VehicleLabelProvider(Vehicle vehicle, DelegatingContentAndLabelProvider labelProvider) {
-			super(vehicle, labelProvider);
-		}
-		
-		@Override
-		protected PropertyValueModel<Image> buildImageModel() {
-			return new PropertyAspectAdapter<Vehicle, Image>(
-					new StaticPropertyValueModel<Vehicle>((Vehicle) model()), 
-					Vehicle.COLOR_PROPERTY, Vehicle.GREYED_PROPERTY, Vehicle.TRANSLUCENT_PROPERTY) {
-				@Override
-				protected Image buildValue_() {
-					return subject.image();
-				}
-			};
-		}
-		
-		@Override
-		protected PropertyValueModel<String> buildTextModel() {
-			return new PropertyAspectAdapter<Vehicle, String>(
-					new StaticPropertyValueModel<Vehicle>((Vehicle) model()), 
-					Vehicle.VEHICLE_TYPE_PROPERTY, Vehicle.COLOR_PROPERTY) {
-				@Override
-				protected String buildValue_() {
-					return subject.color().description() + ' ' + subject.vehicleType().description();
-				}
-			};
-		}
-		
-		@Override
-		protected PropertyValueModel<String> buildDescriptionModel() {
-			return buildTextModel();
-		}
-	}
-	
-	
-	private static abstract class TreeNode extends AbstractModel
-	{
-		private TreeNode parent;
-		
-		
-		public TreeNode(TreeNode parent) {
-			this.parent = parent;
-		}
-		
-		
-		public TreeNode parent() {
-			return parent;
-		}
-	}
-	
-	
-	private static class Root extends TreeNode
-	{
-		protected final Vehicle[] vehicles;
-		
-		
-		public Root() {
-			super(null);
-			vehicles = new Vehicle[] {
-				new Vehicle(this, VehicleType.BICYCLE, Color.BLUE),
-				new Vehicle(this, VehicleType.CAR, Color.YELLOW),
-				new Vehicle(this, VehicleType.TRUCK, Color.RED),
-				new Vehicle(this, VehicleType.BOAT, Color.GREEN)};
-		}
-		
-		public Vehicle[] vehicles() {
-			return vehicles;
-		}
-	}
-	
-	
-	private static class Vehicle extends TreeNode
-	{
-		private VehicleType vehicleType;
-		public final static String VEHICLE_TYPE_PROPERTY = "vehicleType";
-		
-		private Color color;
-		public final static String COLOR_PROPERTY = "color";
-		
-		private boolean greyed = false;
-		public final static String GREYED_PROPERTY = "greyed";
-		
-		private boolean translucent = false;
-		public final static String TRANSLUCENT_PROPERTY = "translucent";
-		
-		private Image image;
-		
-			
-		public Vehicle(TreeNode parent, VehicleType vehicleType, Color color) {
-			super(parent);
-			this.vehicleType = vehicleType;
-			this.color = color;
-		}
-		
-		public VehicleType vehicleType() {
-			return vehicleType;
-		}
-		
-		public void setVehicleType(VehicleType newVehicleType) {
-			VehicleType oldVehicleType = vehicleType;
-			vehicleType = newVehicleType;
-			firePropertyChanged(VEHICLE_TYPE_PROPERTY, oldVehicleType, newVehicleType);
-		}
-		
-		public Color color() {
-			return color;
-		}
-		
-		public void setColor(Color newColor) {
-			Color oldColor = color;
-			color = newColor;
-			firePropertyChanged(COLOR_PROPERTY, oldColor, newColor);
-		}
-		
-		public boolean isGreyed() {
-			return greyed;
-		}
-		
-		public void setGreyed(boolean newGreyed) {
-			boolean oldGreyed = greyed;
-			greyed = newGreyed;
-			firePropertyChanged(GREYED_PROPERTY, oldGreyed, newGreyed);
-		}
-		
-		public boolean isTranslucent() {
-			return translucent;
-		}
-		
-		public void setTranslucent(boolean newTranslucent) {
-			boolean oldTranslucent = translucent;
-			translucent = newTranslucent;
-			firePropertyChanged(TRANSLUCENT_PROPERTY, oldTranslucent, newTranslucent);
-		}
-		
-		public Image image() {
-			if (image != null) {
-				image.dispose();
-			}
-			
-			return ImageFactory.image(color(), greyed, translucent);
-		}
-	}
-	
-	
-	private static enum VehicleType
-	{
-		BICYCLE("bicycle"),
-		CAR("car"),
-		TRUCK("truck"),
-		BOAT("boat");
-		
-		private final String description;
-		
-		private VehicleType(String description) {
-			this.description = description;
-		}
-		
-		public String description() {
-			return description;
-		}
-		
-		@Override
-		public String toString() {
-			return description();
-		}
-	}
-	
-	
-	private static enum Color
-	{
-		RED("red", new RGB(255, 0, 0)),
-		BLUE("blue", new RGB(0, 0, 255)),
-		YELLOW("yellow", new RGB(255, 255, 0)),
-		GREEN("green", new RGB(0, 255, 0));
-		
-		private final String description;
-		
-		private final RGB rgb;
-		
-		private Color(String description, RGB rgb) {
-			this.description = description;
-			this.rgb = rgb;
-		}
-		
-		public String description() {
-			return description;
-		}
-		
-		public RGB rgb() {
-			return rgb;
-		}
-		
-		@Override
-		public String toString() {
-			return description();
-		}
-	}
-	
-	
-	private static class ImageFactory
-	{
-		private static RGB rgb(Color color, boolean greyed, boolean translucent) {
-			RGB rgb = (greyed) ? new RGB(127, 127, 127) : color.rgb();
-			if (translucent) {
-				rgb = new RGB(translucify(rgb.red), translucify(rgb.green), translucify(rgb.blue));
-			}
-			return rgb;
-		}
-		
-		private static int translucify(int color) {
-			return 255 - (int) ((255 - color) * 0.3);
-		}
-		
-		public static Image image(Color color, boolean greyed, boolean translucent) {
-			PaletteData pd = new PaletteData(new RGB[] {rgb(color, greyed, translucent)});
-			ImageData id = new ImageData(20, 20, 1, pd);
-			for (int x = 0; x < 20; x ++) {
-				for (int y = 0; y < 20; y ++) {
-					id.setPixel(x, y, 0);
-				}
-			}
-			return new Image(Display.getCurrent(), id);
-		}
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/jface/DelegatingTreeContentProviderUiTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/jface/DelegatingTreeContentProviderUiTest.java
deleted file mode 100644
index 96460f5..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/jface/DelegatingTreeContentProviderUiTest.java
+++ /dev/null
@@ -1,566 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.jface;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.BaseLabelProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.window.ApplicationWindow;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.ui.internal.jface.AbstractTreeItemContentProvider;
-import org.eclipse.jpt.ui.internal.jface.DelegatingTreeContentAndLabelProvider;
-import org.eclipse.jpt.ui.jface.DelegatingContentAndLabelProvider;
-import org.eclipse.jpt.ui.jface.TreeItemContentProvider;
-import org.eclipse.jpt.ui.jface.TreeItemContentProviderFactory;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyListIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.CompositeCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.ListCollectionValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.StaticCollectionValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-@SuppressWarnings("nls")
-public class DelegatingTreeContentProviderUiTest extends ApplicationWindow
-{
-	private final Root root;
-
-	private WritablePropertyValueModel<TreeNode> selectedNode;
-
-	private TreeViewer controlTree;
-
-	private TreeViewer viewTree;
-
-	private Text nodeNameText;
-
-
-	public static void main(String[] args) {
-		Window window = new DelegatingTreeContentProviderUiTest(args);
-		window.setBlockOnOpen(true);
-		window.open();
-		Display.getCurrent().dispose();
-		System.exit(0);
-	}
-
-	private DelegatingTreeContentProviderUiTest(String[] args) {
-		super(null);
-		this.root = new Root();
-		this.root.addChild("Parent_1");
-		this.selectedNode = new SimplePropertyValueModel<TreeNode>(this.root);
-	}
-
-	@Override
-	protected Control createContents(Composite parent) {
-		((Shell) parent).setText(this.getClass().getSimpleName());
-		parent.setSize(800, 400);
-		parent.setLayout(new GridLayout());
-		Composite mainPanel = new Composite(parent, SWT.NONE);
-		mainPanel.setLayoutData(new GridData(GridData.FILL_BOTH));
-		mainPanel.setLayout(new GridLayout());
-		buildTreePanel(mainPanel);
-		buildControlPanel(mainPanel);
-		return mainPanel;
-	}
-
-	private void buildTreePanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		panel.setLayoutData(new GridData(GridData.FILL_BOTH));
-		panel.setLayout(new GridLayout(2, true));
-		buildControlTreePanel(panel);
-		buildViewTreePanel(panel);
-	}
-
-	private void buildControlTreePanel(Composite parent) {
-		controlTree = buildTreePanel(
-				parent, "Control tree",
-				new DelegatingTreeContentAndLabelProvider(new ControlTreeItemContentProviderFactory()),
-				new LabelProvider());
-		controlTree.addSelectionChangedListener(buildTreeSelectionChangedListener());
-		selectedNode.addPropertyChangeListener(
-				PropertyValueModel.VALUE,
-				new PropertyChangeListener() {
-					public void propertyChanged(PropertyChangeEvent event) {
-						controlTree.setSelection(new StructuredSelection(event.getNewValue()));
-					}
-				}
-			);
-	}
-
-	private void buildViewTreePanel(Composite parent) {
-		viewTree = buildTreePanel(
-				parent, "View tree",
-				new DelegatingTreeContentAndLabelProvider(new ViewTreeItemContentProviderFactory()),
-				new LabelProvider());
-	}
-
-	private TreeViewer buildTreePanel(Composite parent, String labelText, ITreeContentProvider contentProvider, ILabelProvider labelProvider) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		panel.setLayoutData(new GridData(GridData.FILL_BOTH));
-		panel.setLayout(new GridLayout());
-
-		Label label = new Label(panel, SWT.LEFT);
-		label.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false));
-		label.setText(labelText);
-
-		final TreeViewer tree = new TreeViewer(panel, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
-		tree.getTree().setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
-		tree.setContentProvider(contentProvider);
-		tree.setLabelProvider(labelProvider);
-		tree.setInput(root);
-
-		return tree;
-	}
-
-	private ISelectionChangedListener buildTreeSelectionChangedListener() {
-		return new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				TreeNode selection = (TreeNode) ((IStructuredSelection) event.getSelection()).getFirstElement();
-				selectedNode.setValue((selection == null) ? root : selection);
-			}
-		};
-	}
-
-	private void buildControlPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		panel.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
-		panel.setLayout(new GridLayout(6, false));
-		buildNodeNameText(panel);
-		buildAddChildACI().fill(panel);
-		buildAddNestedChildACI().fill(panel);
-		buildRemoveACI().fill(panel);
-		buildClearModelACI().fill(panel);
-		buildRestoreModelACI().fill(panel);
-	}
-
-	private void buildNodeNameText(Composite parent) {
-		nodeNameText = new Text(parent, SWT.SINGLE | SWT.BORDER);
-		nodeNameText.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
-	}
-
-	private ActionContributionItem buildAddChildACI() {
-		final Action action = new Action("Add child", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				addChild();
-			}
-		};
-		action.setToolTipText("Add a child with the given name");
-		selectedNode.addPropertyChangeListener(
-				PropertyValueModel.VALUE,
-				new PropertyChangeListener() {
-					public void propertyChanged(PropertyChangeEvent event) {
-						action.setEnabled(((TreeNode) event.getNewValue()).canHaveChildren());
-					}
-				}
-			);
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildAddNestedChildACI() {
-		final Action action = new Action("Add nested child", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				addNestedChild();
-			}
-		};
-		action.setToolTipText("Add a nested child with the given name");
-		action.setEnabled(false);
-		selectedNode.addPropertyChangeListener(
-				PropertyValueModel.VALUE,
-				new PropertyChangeListener() {
-					public void propertyChanged(PropertyChangeEvent event) {
-						action.setEnabled(((TreeNode) event.getNewValue()).canHaveNestedChildren());
-					}
-				}
-			);
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildRemoveACI() {
-		final Action action = new Action("Remove", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				remove();
-			}
-		};
-		action.setToolTipText("Remove the selected node");
-		action.setEnabled(false);
-		selectedNode.addPropertyChangeListener(
-				PropertyValueModel.VALUE,
-				new PropertyChangeListener() {
-					public void propertyChanged(PropertyChangeEvent event) {
-						action.setEnabled(event.getNewValue() != root);
-					}
-				}
-			);
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildClearModelACI() {
-		Action action = new Action("Clear model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				clearModel();
-			}
-		};
-		action.setToolTipText("Clear the model");
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildRestoreModelACI() {
-		Action action = new Action("Restore model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				restoreModel();
-			}
-		};
-		action.setToolTipText("Restore the model");
-		return new ActionContributionItem(action);
-	}
-
-	void addChild() {
-		String nodeName = nodeNameText.getText();
-		if (nodeName.length() != 0) {
-			selectedNode.getValue().addChild(nodeName);
-		}
-	}
-
-	void addNestedChild() {
-		String nodeName = nodeNameText.getText();
-		if (nodeName.length() != 0) {
-			selectedNode.getValue().addNestedChild(nodeName);
-		}
-	}
-
-	void remove() {
-		TreeNode node = selectedNode.getValue();
-		node.parent().removeChild(node);
-	}
-
-	void clearModel() {
-		controlTree.setInput(null);
-		viewTree.setInput(null);
-	}
-
-	void restoreModel() {
-		controlTree.setInput(root);
-		viewTree.setInput(root);
-	}
-
-
-	static abstract class AbstractTreeItemContentProviderFactory
-		implements TreeItemContentProviderFactory
-	{
-		public TreeItemContentProvider buildItemContentProvider(
-			Object item, DelegatingContentAndLabelProvider contentAndLabelProvider) {
-			return new GenericTreeItemContentProvider(
-				(TreeNode) item, (DelegatingTreeContentAndLabelProvider) contentAndLabelProvider);
-		}
-	}
-
-
-	static class ControlTreeItemContentProviderFactory extends AbstractTreeItemContentProviderFactory
-	{
-
-	}
-
-
-	static class ViewTreeItemContentProviderFactory
-		extends AbstractTreeItemContentProviderFactory
-	{
-		@Override
-		public TreeItemContentProvider buildItemContentProvider(
-				Object item, DelegatingContentAndLabelProvider contentAndLabelProvider) {
-			if (item instanceof Parent) {
-				return new ViewTreeParentItemContentProvider(
-						(Parent) item, (DelegatingTreeContentAndLabelProvider) contentAndLabelProvider);
-			}
-			return super.buildItemContentProvider(item, contentAndLabelProvider);
-		}
-	}
-
-
-	static class GenericTreeItemContentProvider extends AbstractTreeItemContentProvider<TreeNode>
-	{
-		public GenericTreeItemContentProvider(
-				TreeNode treeNode, DelegatingTreeContentAndLabelProvider treeContentAndLabelProvider) {
-			super(treeNode, treeContentAndLabelProvider);
-		}
-
-		protected TreeNode treeNode() {
-			return (TreeNode) getModel();
-		}
-
-		@Override
-		public TreeNode getParent() {
-			return treeNode().parent();
-		}
-
-		@Override
-		protected CollectionValueModel<TreeNode> buildChildrenModel() {
-			return new ListCollectionValueModelAdapter<TreeNode>(
-			new ListAspectAdapter<TreeNode, TreeNode>(TreeNode.CHILDREN_LIST, treeNode()) {
-				@Override
-				protected ListIterator<TreeNode> listIterator_() {
-					return treeNode().children();
-				}
-			});
-		}
-	}
-
-	static class ViewTreeParentItemContentProvider extends GenericTreeItemContentProvider
-	{
-		public ViewTreeParentItemContentProvider(
-				TreeNode treeNode, DelegatingTreeContentAndLabelProvider treeContentAndLabelProvider) {
-			super(treeNode, treeContentAndLabelProvider);
-		}
-
-		@Override
-		public TreeNode getParent() {
-			TreeNode parent = super.getParent();
-			if (parent instanceof Nest) {
-				parent = parent.parent();
-			}
-			return parent;
-		}
-
-		@Override
-		protected CollectionValueModel<TreeNode> buildChildrenModel() {
-				return new CompositeCollectionValueModel<TreeNode, TreeNode>(super.buildChildrenModel()) {
-						@Override
-						protected CollectionValueModel<TreeNode> transform(TreeNode value) {
-							if (value instanceof Nest) {
-								final Nest nest = (Nest) value;
-								return new ListCollectionValueModelAdapter<TreeNode>(
-										new ListAspectAdapter<TreeNode, TreeNode>(TreeNode.CHILDREN_LIST, nest) {
-											@Override
-											protected ListIterator<TreeNode> listIterator_() {
-												return nest.children();
-											}
-										}
-									);
-							}
-							return new StaticCollectionValueModel<TreeNode>(CollectionTools.collection(value));
-						}
-					};
-		}
-	}
-
-
-	static class LabelProvider extends BaseLabelProvider
-		implements ILabelProvider
-	{
-		public Image getImage(Object element) {
-			return null;
-		}
-
-		public String getText(Object element) {
-			return ((TreeNode) element).getName();
-		}
-	}
-
-
-	static abstract class TreeNode extends AbstractModel
-	{
-		private TreeNode parent;
-
-		protected final List<TreeNode> children;
-		public final static String CHILDREN_LIST = "children";
-
-		protected String name;
-		public final static String NAME_PROPERTY = "name";
-
-
-		public TreeNode(TreeNode parent, String name) {
-			this.parent = parent;
-			this.children = new ArrayList<TreeNode>();
-			this.name = name;
-		}
-
-		public TreeNode parent() {
-			return parent;
-		}
-
-		public ListIterator<TreeNode> children() {
-			return new ReadOnlyListIterator<TreeNode>(children);
-		}
-
-		protected void addChild(TreeNode child) {
-			addItemToList(child, children, CHILDREN_LIST);
-		}
-
-		public void removeChild(TreeNode child) {
-			removeItemFromList(child, children, CHILDREN_LIST);
-		}
-
-		public void removeChild(int index) {
-			removeItemFromList(index, children, CHILDREN_LIST);
-		}
-
-		public String getName() {
-			return name;
-		}
-
-		public void setName(String newName) {
-			String oldName = name;
-			name = newName;
-			firePropertyChanged(NAME_PROPERTY, oldName, newName);
-		}
-
-		public boolean canHaveChildren() {
-			return false;
-		}
-
-		public void addChild(String name) {
-			throw new UnsupportedOperationException();
-		}
-
-		public boolean canHaveNestedChildren() {
-			return false;
-		}
-
-		public void addNestedChild(String name) {
-			throw new UnsupportedOperationException();
-		}
-
-		@Override
-		public void toString(StringBuilder sb) {
-			sb.append(getName());
-		}
-	}
-
-
-	static class Root extends TreeNode
-	{
-		public Root() {
-			super(null, null);
-		}
-
-		@Override
-		public boolean canHaveChildren() {
-			return true;
-		}
-
-		@Override
-		public void addChild(String name) {
-			addChild(new Parent(this, name));
-		}
-	}
-
-
-	static class Parent extends TreeNode
-	{
-		public Parent(TreeNode parent, String name) {
-			super(parent, name);
-		}
-
-		@Override
-		public boolean canHaveChildren() {
-			return true;
-		}
-
-		@Override
-		public void addChild(String name) {
-			addChild(new Child(this, name));
-		}
-
-		@Override
-		public boolean canHaveNestedChildren() {
-			return true;
-		}
-
-		@Override
-		public void addNestedChild(String name) {
-			TreeNode nest = new Nest(this);
-			addChild(nest);
-			nest.addChild(name);
-		}
-
-		public Iterator<Child> nestlessChildren() {
-			return new FilteringIterator<Child>(
-					new TransformationIterator<TreeNode, Child>(children()) {
-						@Override
-						protected Child transform(TreeNode next) {
-							if (next instanceof Nest) {
-								return ((Nest) next).child();
-							}
-							return (Child) next;
-						}
-					}) {
-				@Override
-				protected boolean accept(Child c) {
-					return c != null;
-				}
-			};
-		}
-	}
-
-
-	static class Nest extends TreeNode
-	{
-		public Nest(TreeNode parent) {
-			super(parent, "nest");
-		}
-
-		@Override
-		public boolean canHaveChildren() {
-			return children.size() == 0;
-		}
-
-		@Override
-		public void addChild(String name) {
-			addChild(new Child(this, name));
-		}
-
-		/* can only have one child */
-		public Child child() {
-			return (children.isEmpty()) ? null : (Child) children.get(0);
-		}
-	}
-
-
-	static class Child extends TreeNode
-	{
-		public Child(TreeNode parent, String name) {
-			super(parent, name);
-		}
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/platform/JpaPlatformUiExtensionTests.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/platform/JpaPlatformUiExtensionTests.java
deleted file mode 100644
index 91d7edc..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/platform/JpaPlatformUiExtensionTests.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2010  Oracle. 
- *  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: 
- *  	Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.platform;
-
-import junit.framework.TestCase;
-import org.eclipse.jpt.core.JpaProject;
-import org.eclipse.jpt.core.internal.JpaPlatformRegistry;
-import org.eclipse.jpt.core.tests.extension.resource.ExtensionTestPlugin;
-import org.eclipse.jpt.core.tests.extension.resource.TestJpaPlatformProvider;
-import org.eclipse.jpt.core.tests.internal.projects.TestJpaProject;
-
-@SuppressWarnings("nls")
-public class JpaPlatformUiExtensionTests extends TestCase
-{
-	protected TestJpaProject testProject;
-
-	protected static final String PROJECT_NAME = "ExtensionTestProject";
-	protected static final String PACKAGE_NAME = "extension.test";
-
-	public static final String TEST_PLUGIN_CLASS = ExtensionTestPlugin.class.getName();
-	public static final String TEST_PLUGIN_ID = ExtensionTestPlugin.PLUGIN_ID;
-
-	public static final String TEST_PLATFORM_ID = TestJpaPlatformProvider.ID;
-	public static final String TEST_PLATFORM_CLASS = TestJpaPlatformProvider.class.getName();
-	public static final String TEST_PLATFORM_LABEL = "Test Jpa Platform";
-
-	public static final String TEST_UI_PLATFORM_ID = TEST_PLATFORM_ID;
-
-	public JpaPlatformUiExtensionTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.testProject = this.buildJpaProject(PROJECT_NAME, false);  // false = no auto-build
-	}
-
-	protected TestJpaProject buildJpaProject(String projectName, boolean autoBuild) throws Exception {
-		return new TestJpaProject(projectName, autoBuild);  // false = no auto-build
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		this.testProject.getProject().delete(true, true, null);
-		this.testProject = null;
-		super.tearDown();
-	}
-
-	protected JpaProject jpaProject() {
-		return this.testProject.getJpaProject();
-	}
-
-	public void testJpaPlatform() {
-		assertNotNull(JpaPlatformRegistry.instance().getJpaPlatform(this.testProject.getProject()));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/platform/JptUiPlatformTests.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/platform/JptUiPlatformTests.java
deleted file mode 100644
index 50bcc99..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/platform/JptUiPlatformTests.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.platform;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class JptUiPlatformTests
-{
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUiPlatformTests.class.getPackage().getName());
-		suite.addTestSuite(JpaPlatformUiExtensionTests.class);
-		return suite;
-	}
-
-	private JptUiPlatformTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/AbstractComboModelAdapterTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/AbstractComboModelAdapterTest.java
deleted file mode 100644
index d6d12ea..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/AbstractComboModelAdapterTest.java
+++ /dev/null
@@ -1,773 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.swt;
-
-import static org.junit.Assert.*;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import org.eclipse.jpt.ui.internal.swt.AbstractComboModelAdapter;
-import org.eclipse.jpt.ui.internal.swt.AbstractComboModelAdapter.SelectionChangeEvent;
-import org.eclipse.jpt.ui.internal.swt.AbstractComboModelAdapter.SelectionChangeListener;
-import org.eclipse.jpt.utility.internal.StringConverter;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.swing.SimpleDisplayable;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public abstract class AbstractComboModelAdapterTest {
-
-	private Model model;
-	private WritablePropertyValueModel<SimpleDisplayable> selectedItemHolder;
-	private Shell shell;
-	private WritablePropertyValueModel<Model> subjectHolder;
-
-	protected abstract AbstractComboModelAdapter<SimpleDisplayable> buildEditableComboModelAdapter();
-
-	protected final ListValueModel<SimpleDisplayable> buildEmptyListHolder() {
-		return new SimpleListValueModel<SimpleDisplayable>();
-	}
-
-	private List<SimpleDisplayable> buildList() {
-		List<SimpleDisplayable> list = new ArrayList<SimpleDisplayable>();
-		populateCollection(list);
-		return list;
-	}
-
-	protected final ListValueModel<SimpleDisplayable> buildListHolder() {
-		return new ListAspectAdapter<Model, SimpleDisplayable>(subjectHolder, Model.ITEMS_LIST) {
-			@Override
-			protected ListIterator<SimpleDisplayable> listIterator_() {
-				return subject.items();
-			}
-
-			@Override
-			protected int size_() {
-				return subject.itemsSize();
-			}
-		};
-	}
-
-	protected abstract AbstractComboModelAdapter<SimpleDisplayable> buildReadOnlyComboModelAdapter();
-
-	private SimpleDisplayable buildSelectedItem() {
-		return new SimpleDisplayable("baz");
-	}
-
-	private WritablePropertyValueModel<SimpleDisplayable> buildSelectedItemHolder() {
-		return new PropertyAspectAdapter<Model, SimpleDisplayable>(subjectHolder, Model.ITEM_PROPERTY) {
-			@Override
-			protected SimpleDisplayable buildValue_() {
-				return subject.getItem();
-			}
-
-			@Override
-			protected void setValue_(SimpleDisplayable value) {
-				subject.setItem(value);
-			}
-		};
-	}
-
-	protected final StringConverter<SimpleDisplayable> buildStringConverter() {
-		return new StringConverter<SimpleDisplayable>() {
-			public String convertToString(SimpleDisplayable value) {
-				return (value == null) ? "" : value.displayString();
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Model> buildSubjectHolder() {
-		return new SimplePropertyValueModel<Model>();
-	}
-
-	public abstract String comboSelectedItem();
-
-	protected abstract boolean emptyComboCanHaveSelectedValue();
-
-	protected abstract String itemAt(int index);
-
-	protected abstract int itemCounts();
-
-	private void populateCollection(Collection<SimpleDisplayable> c) {
-		c.add(new SimpleDisplayable("foo"));
-		c.add(new SimpleDisplayable("bar"));
-		c.add(new SimpleDisplayable("baz"));
-		c.add(new SimpleDisplayable("joo"));
-		c.add(new SimpleDisplayable("jar"));
-		c.add(new SimpleDisplayable("jaz"));
-	}
-
-	protected final WritablePropertyValueModel<SimpleDisplayable> selectedItemHolder() {
-		return selectedItemHolder;
-	}
-
-	@Before
-	public void setUp() throws Exception {
-
-		shell              = new Shell(Display.getCurrent());
-		model              = new Model();
-		subjectHolder      = buildSubjectHolder();
-		selectedItemHolder = buildSelectedItemHolder();
-	}
-
-	protected final Shell shell() {
-		return shell;
-	}
-
-	protected final WritablePropertyValueModel<Model> subjectHolder() {
-		return subjectHolder;
-	}
-
-	@After
-	public void tearDown() throws Exception {
-
-		if (!shell.isDisposed()) {
-			shell.dispose();
-		}
-
-		shell              = null;
-		subjectHolder      = null;
-		selectedItemHolder = null;
-	}
-
-	private void testItems() {
-
-		assertEquals(
-			"The count of items is not in sync with the model",
-			model.itemsSize(),
-			itemCounts()
-		);
-
-		for (int index = 0; index < model.itemsSize(); index++) {
-			assertEquals(
-				"The item at index " + index + " is not the same between the model and the combo",
-				model.itemAt(index).displayString(),
-				itemAt(index)
-			);
-		}
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_AddedAfter_ReadOnly() throws Exception {
-
-		buildReadOnlyComboModelAdapter();
-		testRemoveItems_AddedAfter();
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_AddedAfter_RemoveItems_Editable() throws Exception {
-
-		buildEditableComboModelAdapter();
-		testRemoveItems_AddedAfter();
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_AddedBefore_RemoveItems_Editable() throws Exception {
-
-		subjectHolder.setValue(model);
-		model.addItems(buildList());
-
-		buildEditableComboModelAdapter();
-		testSelectedItem(null);
-		testItems();
-
-		ArrayList<SimpleDisplayable> items = new ArrayList<SimpleDisplayable>();
-		items.add(model.itemAt(0));
-		items.add(model.itemAt(3));
-		model.removeItems(items.iterator());
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_AddedBefore_RemoveItems_ReadOnly() throws Exception {
-
-		subjectHolder.setValue(model);
-		model.addItems(buildList());
-
-		buildReadOnlyComboModelAdapter();
-		testSelectedItem(null);
-		testItems();
-
-		ArrayList<SimpleDisplayable> items = new ArrayList<SimpleDisplayable>();
-		items.add(model.itemAt(0));
-		items.add(model.itemAt(3));
-		model.removeItems(items.iterator());
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_NullSelectedItem_ItemsAfterAfter_Editable() throws Exception {
-
-		buildEditableComboModelAdapter();
-
-		subjectHolder.setValue(model);
-		model.addItems(buildList());
-
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_NullSelectedItem_ItemsAfterAfter_ReadOnly() throws Exception {
-
-		buildReadOnlyComboModelAdapter();
-
-		subjectHolder.setValue(model);
-		model.addItems(buildList());
-
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_NullSelectedItem_ItemsAfterBefore_Editable() throws Exception {
-
-		buildEditableComboModelAdapter();
-
-		model.addItems(buildList());
-		subjectHolder.setValue(model);
-
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_NullSelectedItem_ItemsAfterBefore_ReadOnly() throws Exception {
-
-		buildReadOnlyComboModelAdapter();
-
-		model.addItems(buildList());
-		subjectHolder.setValue(model);
-
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_NullSelectedItem_ItemsBefore_Editable() throws Exception {
-
-		model.addItems(buildList());
-		buildEditableComboModelAdapter();
-
-		subjectHolder.setValue(model);
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_NullSelectedItem_ItemsBefore_ReadOnly() throws Exception {
-
-		model.addItems(buildList());
-		buildReadOnlyComboModelAdapter();
-
-		subjectHolder.setValue(model);
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_NullSelectedItem_NoItems_Editable() throws Exception {
-
-		buildEditableComboModelAdapter();
-
-		subjectHolder.setValue(model);
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_NullSelectedItem_NoItems_ReadOnly() throws Exception {
-
-		buildReadOnlyComboModelAdapter();
-
-		subjectHolder.setValue(model);
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectAfter_SelectedItemChanged_ReadOnly() throws Exception {
-
-		subjectHolder.setValue(model);
-		model.addItems(buildList());
-
-		SimpleDisplayable selectedItem = model.itemAt(0);
-
-		AbstractComboModelAdapter<SimpleDisplayable> adapter = buildEditableComboModelAdapter();
-		SelectionListener selectionListener = new SelectionListener();
-		adapter.addSelectionChangeListener(selectionListener);
-
-		assertFalse("The selected item wasn't supposed to be modified", model.isSetItemCalled());
-		testSelectedItem(null);
-
-		testSelectedItemChanged(selectedItem, selectionListener);
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_NonNullSelectedItemAfter_Editable() throws Exception {
-
-		SimpleDisplayable selectedItem = buildSelectedItem();
-		subjectHolder.setValue(model);
-
-		buildEditableComboModelAdapter();
-		assertFalse("The selected item wasn't supposed to be modified", model.isSetItemCalled());
-
-		model.setItem(selectedItem);
-		assertTrue("The selected item was supposed to be modified", model.isSetItemCalled());
-		assertSame("The selected item wasn't set properly", selectedItem, model.getItem());
-
-		testSelectedItem(selectedItem);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_NonNullSelectedItemAfter_Items_Editable() throws Exception {
-
-		SimpleDisplayable selectedItem = buildSelectedItem();
-		subjectHolder.setValue(model);
-
-		buildEditableComboModelAdapter();
-		assertFalse("The selected item wasn't supposed to be modified", model.isSetItemCalled());
-
-		model.setItem(selectedItem);
-		assertTrue("The selected item was supposed to be modified", model.isSetItemCalled());
-		assertSame("The selected item wasn't set properly", selectedItem, model.getItem());
-
-		testSelectedItem(selectedItem);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_NonNullSelectedItemAfter_Items_ReadOnly() throws Exception {
-
-		List<SimpleDisplayable> list = buildList();
-		SimpleDisplayable selectedItem = list.get(0);
-		subjectHolder.setValue(model);
-
-		buildReadOnlyComboModelAdapter();
-		assertFalse("The selected item wasn't supposed to be modified", model.isSetItemCalled());
-
-		model.setItem(selectedItem);
-		assertTrue("The selected item was supposed to be modified", model.isSetItemCalled());
-		assertSame("The selected item wasn't set properly", selectedItem, model.getItem());
-
-		testSelectedItem(selectedItem);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_NonNullSelectedItemAfter_ReadOnly() throws Exception {
-
-		List<SimpleDisplayable> list = buildList();
-		SimpleDisplayable selectedItem = list.get(0);
-		subjectHolder.setValue(model);
-
-		buildReadOnlyComboModelAdapter();
-		assertFalse("The selected item wasn't supposed to be modified", model.isSetItemCalled());
-
-		model.setItem(selectedItem);
-		assertTrue("The selected item was supposed to be modified", model.isSetItemCalled());
-		assertSame("The selected item wasn't set properly", selectedItem, model.getItem());
-
-		testSelectedItem(selectedItem);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_NonNullSelectedItemBefore_Editable() throws Exception {
-
-		model.addItems(buildList());
-		SimpleDisplayable selectedItem = model.itemAt(0);
-		subjectHolder.setValue(model);
-
-		model.setItem(selectedItem);
-		assertTrue("The selected item was supposed to be modified", model.isSetItemCalled());
-		assertSame("The selected item wasn't set properly", selectedItem, model.getItem());
-
-		model.clearItemCalledFlag();
-		buildEditableComboModelAdapter();
-		assertFalse("The selected item wasn't supposed to be modified", model.isSetItemCalled());
-
-		testSelectedItem(selectedItem);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_NonNullSelectedItemBefore_Items_Editable() throws Exception {
-
-		model.addItems(buildList());
-		SimpleDisplayable selectedItem = model.itemAt(0);
-		subjectHolder.setValue(model);
-
-		model.setItem(selectedItem);
-		assertTrue("The selected item was supposed to be modified", model.isSetItemCalled());
-		assertSame("The selected item wasn't set properly", selectedItem, model.getItem());
-
-		model.clearItemCalledFlag();
-		buildEditableComboModelAdapter();
-		assertFalse("The selected item wasn't supposed to be modified", model.isSetItemCalled());
-
-		testSelectedItem(selectedItem);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_NonNullSelectedItemBefore_Items_ReadOnly() throws Exception {
-
-		List<SimpleDisplayable> list = buildList();
-		SimpleDisplayable selectedItem = list.get(0);
-		subjectHolder.setValue(model);
-
-		model.setItem(selectedItem);
-		assertTrue("The selected item was supposed to be modified", model.isSetItemCalled());
-		assertSame("The selected item wasn't set properly", selectedItem, model.getItem());
-
-		model.clearItemCalledFlag();
-		buildReadOnlyComboModelAdapter();
-		assertFalse("The selected item wasn't supposed to be modified", model.isSetItemCalled());
-
-		testSelectedItem(selectedItem);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_NonNullSelectedItemBefore_ReadOnly() throws Exception {
-
-		List<SimpleDisplayable> list = buildList();
-		SimpleDisplayable selectedItem = list.get(0);
-		subjectHolder.setValue(model);
-
-		model.setItem(selectedItem);
-		assertTrue("The selected item was supposed to be modified", model.isSetItemCalled());
-		assertSame("The selected item wasn't set properly", selectedItem, model.getItem());
-
-		model.clearItemCalledFlag();
-		buildReadOnlyComboModelAdapter();
-		assertFalse("The selected item wasn't supposed to be modified", model.isSetItemCalled());
-
-		testSelectedItem(selectedItem);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_NullSelectedItem_Items_Editable() throws Exception {
-
-		subjectHolder.setValue(model);
-
-		buildEditableComboModelAdapter();
-
-		assertFalse("The item wasn't supposed to be modified", model.isSetItemCalled());
-		assertNull("The selected item is supposed to remain null", model.getItem());
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_NullSelectedItem_Items_ReadOnly() throws Exception {
-
-		subjectHolder.setValue(model);
-
-		buildEditableComboModelAdapter();
-
-		assertFalse("The item wasn't supposed to be modified", model.isSetItemCalled());
-		assertNull("The selected item is supposed to remain null", model.getItem());
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_NullSelectedItem_NoItems_Editable() throws Exception {
-
-		subjectHolder.setValue(model);
-
-		buildEditableComboModelAdapter();
-
-		assertFalse("The item wasn't supposed to be modified", model.isSetItemCalled());
-		assertNull("The selected item is supposed to remain null", model.getItem());
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_NullSelectedItem_NoItems_ReadOnly() throws Exception {
-
-		subjectHolder.setValue(model);
-
-		buildEditableComboModelAdapter();
-
-		assertFalse("The item wasn't supposed to be modified", model.isSetItemCalled());
-		assertNull("The selected item is supposed to remain null", model.getItem());
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNonNullSubjectBefore_SelectedItemChanged_Editable() throws Exception {
-
-		model.addItems(buildList());
-
-		SimpleDisplayable selectedItem = model.itemAt(3);
-		subjectHolder.setValue(model);
-
-		AbstractComboModelAdapter<SimpleDisplayable> adapter = buildEditableComboModelAdapter();
-		SelectionListener selectionListener = new SelectionListener();
-		adapter.addSelectionChangeListener(selectionListener);
-
-		assertFalse("The selected item wasn't supposed to be modified", model.isSetItemCalled());
-		testSelectedItem(null);
-
-		testSelectedItemChanged(selectedItem, selectionListener);
-	}
-
-	private void testNullSubject() throws Exception {
-
-		assertNull("The selected item should be null", selectedItemHolder.getValue());
-
-		selectedItemHolder.setValue(buildSelectedItem());
-		assertFalse("The item wasn't supposed to be modified", model.isSetItemCalled());
-
-		// Null because the subject holder doesn't have the subject set
-		testSelectedItem(null);
-		testItems();
-	}
-
-	@Test
-	public void testNullSubject_NullSelectedItem_Items_Editable() throws Exception {
-		buildEditableComboModelAdapter();
-		testNullSubject();
-		testItems();
-		testSelectedItem(null);
-	}
-
-	@Test
-	public void testNullSubject_NullSelectedItem_Items_ReadOnly() throws Exception {
-		buildReadOnlyComboModelAdapter();
-		testNullSubject();
-		testItems();
-		testSelectedItem(null);
-	}
-
-	@Test
-	public void testNullSubject_NullSelectedItem_NoItems_Editable() throws Exception {
-		buildEditableComboModelAdapter();
-		testNullSubject();
-		testItems();
-		testSelectedItem(null);
-	}
-
-	@Test
-	public void testNullSubject_NullSelectedItem_NoItems_ReadOnly() throws Exception {
-		buildReadOnlyComboModelAdapter();
-		testNullSubject();
-		testItems();
-		testSelectedItem(null);
-	}
-
-	private void testRemoveItems_AddedAfter() {
-
-		subjectHolder.setValue(model);
-		model.addItems(buildList());
-
-		testSelectedItem(null);
-		testItems();
-		testSelectedItem(null);
-
-		ArrayList<SimpleDisplayable> items = new ArrayList<SimpleDisplayable>();
-		items.add(model.itemAt(0));
-		items.add(model.itemAt(3));
-		model.removeItems(items.iterator());
-
-		testItems();
-		testSelectedItem(null);
-	}
-
-	private void testSelectedItem(SimpleDisplayable selectedItem) {
-
-		if (selectedItem == null) {
-
-			assertNull(
-				"The selected item is supposed to be null",
-				model.getItem()
-			);
-
-			assertEquals(
-				"The combo's selected item should be null",
-				"",
-				comboSelectedItem()
-			);
-		}
-		else if (!emptyComboCanHaveSelectedValue()) {
-
-			assertEquals(
-				"The selected item wasn't set correctly",
-				selectedItem,
-				model.getItem()
-			);
-
-			assertEquals(
-				"The combo's selected item should be null",
-				"",
-				comboSelectedItem()
-			);
-		}
-		else {
-
-			assertEquals(
-				"The selected item wasn't set correctly",
-				selectedItem,
-				model.getItem()
-			);
-
-			assertEquals(
-				"The selected item wasn't set correctly",
-				selectedItem.displayString(),
-				comboSelectedItem()
-			);
-		}
-	}
-
-	private void testSelectedItemChanged(SimpleDisplayable selectedItem,
-	                                     SelectionListener selectionListener) {
-
-		// Test 1
-		model.setItem(selectedItem);
-		assertTrue("The selected item was supposed to be modified", model.isSetItemCalled());
-		assertSame("The selected item wasn't set properly", selectedItem, model.getItem());
-		assertTrue("The SelectionListener was supposed to be notified", selectionListener.isListenerNotified());
-		assertSame("The SelectionListener was supposed to be notified", selectedItem, selectionListener.getItem());
-		testSelectedItem(selectedItem);
-
-		// Test 2
-		selectedItem = model.itemAt(1);
-		model.clearItemCalledFlag();
-		selectionListener.clearInfo();
-
-		model.setItem(selectedItem);
-		assertTrue("The selected item was supposed to be modified", model.isSetItemCalled());
-		assertSame("The selected item wasn't set properly", selectedItem, model.getItem());
-		assertTrue("The SelectionListener was supposed to be notified", selectionListener.isListenerNotified());
-		assertSame("The SelectionListener was supposed to be notified", selectedItem, selectionListener.getItem());
-		testSelectedItem(selectedItem);
-
-		// Test 3
-		selectedItem = null;
-		model.clearItemCalledFlag();
-		selectionListener.clearInfo();
-
-		model.setItem(selectedItem);
-		assertTrue("The selected item was supposed to be modified", model.isSetItemCalled());
-		assertNull("The selected item wasn't set properly", model.getItem());
-		assertTrue("The SelectionListener was supposed to be notified", selectionListener.isListenerNotified());
-		assertSame("The SelectionListener was supposed to be notified", selectedItem, selectionListener.getItem());
-		testSelectedItem(selectedItem);
-
-		// Test 3
-		selectedItem = model.itemAt(2);
-		model.clearItemCalledFlag();
-		selectionListener.clearInfo();
-
-		model.setItem(selectedItem);
-		assertTrue("The selected item was supposed to be modified", model.isSetItemCalled());
-		assertSame("The selected item wasn't set properly", selectedItem, model.getItem());
-		assertTrue("The SelectionListener was supposed to be notified", selectionListener.isListenerNotified());
-		assertSame("The SelectionListener was supposed to be notified", selectedItem, selectionListener.getItem());
-		testSelectedItem(selectedItem);
-	}
-
-	private static class Model extends AbstractModel {
-
-		private SimpleDisplayable item;
-		private List<SimpleDisplayable> items = new ArrayList<SimpleDisplayable>();
-		private boolean setItemCalled;
-
-		static final String ITEM_PROPERTY = "item";
-		static final String ITEMS_LIST = "items";
-
-		void addItems(Iterator<SimpleDisplayable> items) {
-			addItemsToList(items, this.items, ITEMS_LIST);
-		}
-
-		void addItems(List<SimpleDisplayable> items) {
-			addItemsToList(items, this.items, ITEMS_LIST);
-		}
-
-		void clearItemCalledFlag() {
-			setItemCalled = false;
-		}
-
-		SimpleDisplayable getItem() {
-			return item;
-		}
-
-		boolean isSetItemCalled() {
-			return setItemCalled;
-		}
-
-		SimpleDisplayable itemAt(int index) {
-			return this.items.get(index);
-		}
-
-		ListIterator<SimpleDisplayable> items() {
-			return items.listIterator();
-		}
-
-		int itemsSize() {
-			return items.size();
-		}
-
-		void removeItems(Iterator<SimpleDisplayable> items) {
-			removeItemsFromList(items, this.items, ITEMS_LIST);
-		}
-
-		void setItem(SimpleDisplayable item) {
-			setItemCalled = true;
-
-			SimpleDisplayable oldItem = this.item;
-			this.item = item;
-			firePropertyChanged(ITEM_PROPERTY, oldItem, item);
-		}
-	}
-
-	private class SelectionListener implements SelectionChangeListener<SimpleDisplayable> {
-
-		private SimpleDisplayable item;
-		private boolean listenerNotified;
-
-		void clearInfo() {
-			this.listenerNotified = false;
-			this.item = null;
-		}
-
-		SimpleDisplayable getItem() {
-			return item;
-		}
-
-		public boolean isListenerNotified() {
-			return listenerNotified;
-		}
-
-		public void selectionChanged(SelectionChangeEvent<SimpleDisplayable> e) {
-			listenerNotified = true;
-			item = e.selectedItem();
-		}
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/ComboModelAdapterTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/ComboModelAdapterTest.java
deleted file mode 100644
index 0fb152a..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/ComboModelAdapterTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.swt;
-
-import org.eclipse.jpt.ui.internal.swt.AbstractComboModelAdapter;
-import org.eclipse.jpt.ui.internal.swt.ComboModelAdapter;
-import org.eclipse.jpt.utility.internal.swing.SimpleDisplayable;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Combo;
-import org.junit.After;
-
-public class ComboModelAdapterTest extends AbstractComboModelAdapterTest {
-
-	private Combo combo;
-	private boolean editable;
-
-	@Override
-	protected AbstractComboModelAdapter<SimpleDisplayable> buildEditableComboModelAdapter() {
-
-		combo = new Combo(shell(), SWT.NULL);
-		editable = true;
-
-		return ComboModelAdapter.adapt(
-			buildListHolder(),
-			selectedItemHolder(),
-			combo,
-			buildStringConverter()
-		);
-	}
-
-	@Override
-	protected AbstractComboModelAdapter<SimpleDisplayable> buildReadOnlyComboModelAdapter() {
-
-		combo = new Combo(shell(), SWT.READ_ONLY);
-		editable = false;
-
-		return ComboModelAdapter.adapt(
-			buildListHolder(),
-			selectedItemHolder(),
-			combo,
-			buildStringConverter()
-		);
-	}
-
-	@Override
-	public String comboSelectedItem() {
-		return combo.getText();
-	}
-
-	@Override
-	protected boolean emptyComboCanHaveSelectedValue() {
-		return editable;
-	}
-
-	@Override
-	protected String itemAt(int index) {
-		return this.combo.getItem(index);
-	}
-
-	@Override
-	protected int itemCounts() {
-		return combo.getItemCount();
-	}
-
-	@After
-	@Override
-	public void tearDown() throws Exception {
-		super.tearDown();
-		combo = null;
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/JptUiSWTTests.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/JptUiSWTTests.java
deleted file mode 100644
index 79dc602..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/JptUiSWTTests.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.swt;
-
-import junit.framework.JUnit4TestAdapter;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
-
-@SuiteClasses
-({
-	ComboModelAdapterTest.class,
-	SpinnerModelAdapterTest.class,
-	TableModelAdapterTest.class
-})
-@RunWith(Suite.class)
-public final class JptUiSWTTests {
-
-	private JptUiSWTTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite();
-		suite.addTest(new JUnit4TestAdapter(JptUiSWTTests.class));
-		return suite;
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/SpinnerModelAdapterTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/SpinnerModelAdapterTest.java
deleted file mode 100644
index cf1629f..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/SpinnerModelAdapterTest.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.swt;
-
-import static org.junit.Assert.*;
-import org.eclipse.jpt.ui.internal.swt.SpinnerModelAdapter;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public class SpinnerModelAdapterTest {
-
-	private Model model;
-	private Shell shell;
-	private WritablePropertyValueModel<Model> subjectHolder;
-
-	private WritablePropertyValueModel<Model> buildSubjectHolder() {
-		return new SimplePropertyValueModel<Model>();
-	}
-
-	private WritablePropertyValueModel<Integer> buildValueHolder() {
-		return new PropertyAspectAdapter<Model, Integer>(subjectHolder, Model.VALUE_PROPERTY) {
-			@Override
-			protected Integer buildValue_() {
-				return subject.getValue();
-			}
-
-			@Override
-			protected void setValue_(Integer value) {
-				subject.setValue(value);
-			}
-		};
-	}
-
-	@Before
-	public void setUp() throws Exception {
-
-		shell              = new Shell(Display.getCurrent());
-		model              = new Model();
-		subjectHolder      = buildSubjectHolder();
-	}
-
-	@After
-	public void tearDown() throws Exception {
-
-		if (!shell.isDisposed()) {
-			shell.dispose();
-		}
-
-		shell         = null;
-		subjectHolder = null;
-	}
-
-	@Test
-	public void testDisposed() {
-
-		int value = 2;
-		model.setValue(value);
-		model.clearSetValueCalledFlag();
-		subjectHolder.setValue(model);
-
-		Spinner spinner = new Spinner(shell, SWT.NULL);
-		WritablePropertyValueModel<Integer> numberHolder = buildValueHolder();
-		int defaultValue = 1;
-
-		SpinnerModelAdapter.adapt(
-			numberHolder,
-			spinner,
-			defaultValue
-		);
-
-		assertEquals(
-			"The spinner's value should be coming from the model",
-			value,
-			spinner.getSelection()
-		);
-
-		assertEquals(
-			"The number holder's value should be the model's value",
-			model.getValue(),
-			numberHolder.getValue()
-		);
-
-		assertFalse(
-			"The model should not have received the value during initialization",
-			model.isSetValueCalled()
-		);
-
-		// Change the value in the model
-		spinner.dispose();
-
-		value = 4;
-		model.setValue(value);
-
-		assertEquals(
-			"The model's value was somehow changed",
-			Integer.valueOf(value),
-			model.getValue()
-		);
-	}
-
-	@Test
-	public void testInitialization_1() {
-
-		Spinner spinner = new Spinner(shell, SWT.NULL);
-		WritablePropertyValueModel<Integer> numberHolder = new SimplePropertyValueModel<Integer>();
-		int defaultValue = 1;
-
-		SpinnerModelAdapter.adapt(
-			numberHolder,
-			spinner,
-			defaultValue
-		);
-
-		assertEquals(
-			"The spinner's value should be the default value",
-			defaultValue,
-			spinner.getSelection()
-		);
-
-		assertNull(
-			"The number holder's value should be null",
-			numberHolder.getValue()
-		);
-	}
-
-	@Test
-	public void testInitialization_2() {
-
-		Spinner spinner = new Spinner(shell, SWT.NULL);
-		WritablePropertyValueModel<Integer> numberHolder = buildValueHolder();
-		int defaultValue = 1;
-
-		SpinnerModelAdapter.adapt(
-			numberHolder,
-			spinner,
-			defaultValue
-		);
-
-		assertEquals(
-			"The spinner's value should be the default value",
-			defaultValue,
-			spinner.getSelection()
-		);
-
-		assertNull(
-			"The number holder's value should be null",
-			numberHolder.getValue()
-		);
-	}
-
-	@Test
-	public void testInitialization_3() {
-
-		subjectHolder.setValue(model);
-
-		Spinner spinner = new Spinner(shell, SWT.NULL);
-		WritablePropertyValueModel<Integer> numberHolder = buildValueHolder();
-		int defaultValue = 1;
-
-		SpinnerModelAdapter.adapt(
-			numberHolder,
-			spinner,
-			defaultValue
-		);
-
-		assertEquals(
-			"The spinner's value should be the default value",
-			defaultValue,
-			spinner.getSelection()
-		);
-
-		assertNull(
-			"The number holder's value should be null",
-			numberHolder.getValue()
-		);
-
-		assertFalse(
-			"The model should not have received the value during initialization",
-			model.isSetValueCalled()
-		);
-	}
-
-	@Test
-	public void testInitialization_4() {
-
-		int value = 2;
-		model.setValue(value);
-		model.clearSetValueCalledFlag();
-		subjectHolder.setValue(model);
-
-		Spinner spinner = new Spinner(shell, SWT.NULL);
-		WritablePropertyValueModel<Integer> numberHolder = buildValueHolder();
-		int defaultValue = 1;
-
-		SpinnerModelAdapter.adapt(
-			numberHolder,
-			spinner,
-			defaultValue
-		);
-
-		assertEquals(
-			"The spinner's value should be the value coming from the model",
-			value,
-			spinner.getSelection()
-		);
-
-		assertEquals(
-			"The number holder's value should be " + value,
-			Integer.valueOf(value),
-			numberHolder.getValue()
-		);
-
-		assertFalse(
-			"The model should not have received the value during initialization",
-			model.isSetValueCalled()
-		);
-	}
-
-	@Test
-	public void testValueChanged() {
-
-		int value = 2;
-		model.setValue(value);
-		model.clearSetValueCalledFlag();
-		subjectHolder.setValue(model);
-
-		Spinner spinner = new Spinner(shell, SWT.NULL);
-		WritablePropertyValueModel<Integer> numberHolder = buildValueHolder();
-		int defaultValue = 1;
-
-		SpinnerModelAdapter.adapt(
-			numberHolder,
-			spinner,
-			defaultValue
-		);
-
-		assertEquals(
-			"The spinner's value should be coming from the model",
-			value,
-			spinner.getSelection()
-		);
-
-		assertEquals(
-			"The number holder's value should be the model's value",
-			model.getValue(),
-			numberHolder.getValue()
-		);
-
-		assertFalse(
-			"The model should not have received the value during initialization",
-			model.isSetValueCalled()
-		);
-
-		// Change the value in the model
-		value = 4;
-		model.setValue(value);
-
-		assertEquals(
-			"The spinner's value should be coming from the model",
-			value,
-			spinner.getSelection()
-		);
-
-		assertEquals(
-			"The model's value was somehow changed",
-			Integer.valueOf(value),
-			model.getValue()
-		);
-
-		// Change the value from the spinner
-		value = 6;
-		spinner.setSelection(value);
-
-		assertEquals(
-			"The spinner's value should be the new value set",
-			value,
-			spinner.getSelection()
-		);
-
-		assertEquals(
-			"The model's value was supposed to be updated",
-			Integer.valueOf(value),
-			model.getValue()
-		);
-
-		// Disconnect from model
-		subjectHolder.setValue(null);
-
-		assertEquals(
-			"The spinner's value should be the default value",
-			defaultValue,
-			spinner.getSelection()
-		);
-	}
-
-	private static class Model extends AbstractModel {
-
-		private boolean setValueCalled;
-		private Integer value;
-
-		static final String VALUE_PROPERTY = "value";
-
-		void clearSetValueCalledFlag() {
-			setValueCalled = false;
-		}
-
-		Integer getValue() {
-			return value;
-		}
-
-		boolean isSetValueCalled() {
-			return setValueCalled;
-		}
-
-		void setValue(Integer value) {
-			setValueCalled = true;
-
-			Integer oldValue = this.value;
-			this.value = value;
-			firePropertyChanged(VALUE_PROPERTY, oldValue, value);
-		}
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/TableModelAdapterTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/TableModelAdapterTest.java
deleted file mode 100644
index 057b8b4..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/TableModelAdapterTest.java
+++ /dev/null
@@ -1,1203 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.swt;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.ListIterator;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jpt.ui.internal.swt.ColumnAdapter;
-import org.eclipse.jpt.ui.internal.swt.TableModelAdapter;
-import org.eclipse.jpt.ui.internal.swt.TableModelAdapter.SelectionChangeEvent;
-import org.eclipse.jpt.ui.internal.swt.TableModelAdapter.SelectionChangeListener;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyCollectionValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public class TableModelAdapterTest {
-
-	private Shell shell;
-	private WritablePropertyValueModel<Manager> subjectHolder;
-
-	private ColumnAdapter<Employee> buildColumnAdapter() {
-		return new TableColumnAdapter();
-	}
-
-	private WritablePropertyValueModel<Employee> buildEmployeeHolder() {
-		return new SimplePropertyValueModel<Employee>();
-	}
-
-	private SimpleCollectionValueModel<Employee> buildEmployeeHolders() {
-		return new SimpleCollectionValueModel<Employee>();
-	}
-
-	private ListValueModel<Employee> buildEmployeeListHolder() {
-		return new ListAspectAdapter<Manager, Employee>(subjectHolder, Manager.EMPLOYEES_LIST) {
-			@Override
-			protected ListIterator<Employee> listIterator_() {
-				return subject.employees();
-			}
-
-			@Override
-			protected int size_() {
-				return subject.employeesSize();
-			}
-		};
-	}
-
-	private ITableLabelProvider buildLabelProvider() {
-		return new TableLabelProvider();
-	}
-
-	private SelectionChangeListener<Employee> buildSelectionChangeListener(final Collection<Employee> employees) {
-		return new SelectionChangeListener<Employee>() {
-			public void selectionChanged(SelectionChangeEvent<Employee> e) {
-				employees.clear();
-				CollectionTools.addAll(employees, e.selection());
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Manager> buildSubjectHolder() {
-		return new SimplePropertyValueModel<Manager>();
-	}
-
-	@Before
-	public void setUp() throws Exception {
-
-		shell         = new Shell(Display.getCurrent());
-		subjectHolder = buildSubjectHolder();
-	}
-
-	@After
-	public void tearDown() throws Exception {
-
-		if (!shell.isDisposed()) {
-			shell.dispose();
-		}
-
-		shell         = null;
-		subjectHolder = null;
-	}
-
-	@Test
-	public void testChanged() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		ListValueModel<Employee> listHolder = buildEmployeeListHolder();
-		WritablePropertyValueModel<Employee> selectedItemHolder = buildEmployeeHolder();
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		new TableModel(
-			listHolder,
-			selectedItemHolder,
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		// Create Employees
-		String expectedName1    = "Dali_1";
-		String expectedManager1 = "WTP_1";
-		String expectedTitle1   = "plug-in_1";
-
-		String expectedName2    = "Dali_2";
-		String expectedManager2 = "WTP_2";
-		String expectedTitle2   = "plug-in_2";
-
-		String expectedName3    = "Dali_3";
-		String expectedManager3 = "WTP_3";
-		String expectedTitle3   = "plug-in_3";
-
-		Employee employee1 = new Employee(expectedName1, expectedTitle1, expectedManager1);
-		Employee employee2 = new Employee(expectedName2, expectedTitle2, expectedManager2);
-		Employee employee3 = new Employee(expectedName3, expectedTitle3, expectedManager3);
-
-		manager.addEmployee(employee1);
-		manager.addEmployee(employee2);
-		manager.addEmployee(employee3);
-
-		// Make sure the Table was populated
-		Assert.assertEquals("The number of TableItems should be 3", 3, table.getItemCount());
-
-		// Change the list of Employees
-		ArrayList<Employee> employees = new ArrayList<Employee>(3);
-		employees.add(employee3);
-		employees.add(employee2);
-		employees.add(employee1);
-		manager.changeEmployees(employees);
-
-		Assert.assertEquals("The number of TableItems should be 3", 3, table.getItemCount());
-
-		testTableItemProperties(table, 0, expectedName3, expectedManager3, expectedTitle3);
-		testTableItemProperties(table, 1, expectedName2, expectedManager2, expectedTitle2);
-		testTableItemProperties(table, 2, expectedName1, expectedManager1, expectedTitle1);
-	}
-
-	@Test
-	public void testCleared() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		ListValueModel<Employee> listHolder = buildEmployeeListHolder();
-		WritablePropertyValueModel<Employee> selectedItemHolder = buildEmployeeHolder();
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		new TableModel(
-			listHolder,
-			selectedItemHolder,
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		// Create Employees
-		String expectedName1    = "Dali_1";
-		String expectedManager1 = "WTP_1";
-		String expectedTitle1   = "plug-in_1";
-
-		String expectedName2    = "Dali_2";
-		String expectedManager2 = "WTP_2";
-		String expectedTitle2   = "plug-in_2";
-
-		String expectedName3    = "Dali_3";
-		String expectedManager3 = "WTP_3";
-		String expectedTitle3   = "plug-in_3";
-
-		Employee employee1 = new Employee(expectedName1, expectedTitle1, expectedManager1);
-		Employee employee2 = new Employee(expectedName2, expectedTitle2, expectedManager2);
-		Employee employee3 = new Employee(expectedName3, expectedTitle3, expectedManager3);
-
-		manager.addEmployee(employee1);
-		manager.addEmployee(employee2);
-		manager.addEmployee(employee3);
-
-		// Make sure the Table was populated
-		Assert.assertEquals("The number of TableItems should be 3", 3, table.getItemCount());
-
-		// Test removing them all
-		manager.removeAllEmployees();
-
-		Assert.assertEquals("The list holder should have been cleared", 0, listHolder.size());
-		Assert.assertEquals("The Table should have been cleared", 0, table.getItemCount());
-	}
-
-	@Test
-	public void testItemAdded() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		ListValueModel<Employee> listHolder = buildEmployeeListHolder();
-		WritablePropertyValueModel<Employee> selectedItemHolder = buildEmployeeHolder();
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		TableModel tableModel = new TableModel(
-			listHolder,
-			selectedItemHolder,
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		// Create a new Employee
-		String expectedName    = "Dali";
-		String expectedManager = "WTP";
-		String expectedTitle   = "plug-in";
-
-		Employee employee = manager.addEmployee(expectedName, expectedTitle, expectedManager);
-		Assert.assertNotNull("The new Employee was not created", employee);
-
-		// Retrieve the TableItem representing the new Employee
-		int index = tableModel.indexOf(employee);
-		Assert.assertEquals("The new Employee was not added to the table model", 0, index);
-		Assert.assertEquals("The number of TableItem should be 1", 1, table.getItemCount());
-
-		testTableItemProperties(table, index, expectedName, expectedManager, expectedTitle);
-	}
-
-	@Test
-	public void testItemMoved() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		ListValueModel<Employee> listHolder = buildEmployeeListHolder();
-		WritablePropertyValueModel<Employee> selectedItemHolder = buildEmployeeHolder();
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		TableModel tableModel = new TableModel(
-			listHolder,
-			selectedItemHolder,
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		// Create Employees
-		String expectedName1    = "Dali_1";
-		String expectedManager1 = "WTP_1";
-		String expectedTitle1   = "plug-in_1";
-
-		String expectedName2    = "Dali_2";
-		String expectedManager2 = "WTP_2";
-		String expectedTitle2   = "plug-in_2";
-
-		String expectedName3    = "Dali_3";
-		String expectedManager3 = "WTP_3";
-		String expectedTitle3   = "plug-in_3";
-
-		Employee employee1 = new Employee(expectedName1, expectedTitle1, expectedManager1);
-		Employee employee2 = new Employee(expectedName2, expectedTitle2, expectedManager2);
-		Employee employee3 = new Employee(expectedName3, expectedTitle3, expectedManager3);
-
-		manager.addEmployee(employee1);
-		manager.addEmployee(employee2);
-		manager.addEmployee(employee3);
-
-		// Make sure the Employees were added to the Table
-		Assert.assertEquals("The number of TableItem should be 3", 3, table.getItemCount());
-
-		// Move an Employee up the list
-		manager.moveEmployeeUp(employee2);
-
-		int index1 = tableModel.indexOf(employee1);
-		Assert.assertEquals("The Employee 1 was not moved in the table model", 1, index1);
-
-		int index2 = tableModel.indexOf(employee2);
-		Assert.assertEquals("The Employee 2 was not moved in the table model", 0, index2);
-
-		int index3 = tableModel.indexOf(employee3);
-		Assert.assertEquals("The Employee 3 should not have been moved in the table model", 2, index3);
-
-		testTableItemProperties(table, index1, expectedName1, expectedManager1, expectedTitle1);
-		testTableItemProperties(table, index2, expectedName2, expectedManager2, expectedTitle2);
-		testTableItemProperties(table, index3, expectedName3, expectedManager3, expectedTitle3);
-
-		// Move an Employee down the list
-		manager.moveEmployeeDown(employee1);
-
-		index1 = tableModel.indexOf(employee1);
-		Assert.assertEquals("The Employee 1 should not have been moved in the table model", 2, index1);
-
-		index2 = tableModel.indexOf(employee2);
-		Assert.assertEquals("The Employee 2 was not moved in the table model", 0, index2);
-
-		index3 = tableModel.indexOf(employee3);
-		Assert.assertEquals("The Employee 3 was not moved in the table model", 1, index3);
-
-		testTableItemProperties(table, index1, expectedName1, expectedManager1, expectedTitle1);
-		testTableItemProperties(table, index2, expectedName2, expectedManager2, expectedTitle2);
-		testTableItemProperties(table, index3, expectedName3, expectedManager3, expectedTitle3);
-	}
-
-	@Test
-	public void testItemRemoved() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		ListValueModel<Employee> listHolder = buildEmployeeListHolder();
-		WritablePropertyValueModel<Employee> selectedItemHolder = buildEmployeeHolder();
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		TableModel tableModel = new TableModel(
-			listHolder,
-			selectedItemHolder,
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		// Create a new Employee
-		String expectedName    = "Dali";
-		String expectedManager = "WTP";
-		String expectedTitle   = "plug-in";
-
-		Employee employee = manager.addEmployee(expectedName, expectedTitle, expectedManager);
-		Assert.assertNotNull("The new Employee was not created", employee);
-		Assert.assertEquals("The number of TableItem should be 1", 1, table.getItemCount());
-
-		// Make sure it was added to the model
-		int index = tableModel.indexOf(employee);
-		Assert.assertEquals("The new Employee was not added to the table model", 0, index);
-		testTableItemProperties(table, index, expectedName, expectedManager, expectedTitle);
-
-		// Retrieve the TableItem representing the new Employee
-		TableItem tableItem = table.getItem(index);
-		Assert.assertNotNull("No TableItem was found for the new Employee", tableItem);
-
-		// Now test the item being removed
-		manager.removeEmployee(employee);
-		index = tableModel.indexOf(employee);
-		Assert.assertEquals("The Employee was not removed from the table model", -1, index);
-		Assert.assertEquals("The number of TableItem should be 0", 0, table.getItemCount());
-	}
-
-	@Test
-	public void testItemReplaced() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		ListValueModel<Employee> listHolder = buildEmployeeListHolder();
-		WritablePropertyValueModel<Employee> selectedItemHolder = buildEmployeeHolder();
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		TableModel tableModel = new TableModel(
-			listHolder,
-			selectedItemHolder,
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		// Create a new Employee
-		String expectedName1    = "Dali_1";
-		String expectedManager1 = "WTP_1";
-		String expectedTitle1   = "plug-in_1";
-
-		Employee employee1 = manager.addEmployee(expectedName1, expectedTitle1, expectedManager1);
-		Assert.assertNotNull("The new Employee was not created", employee1);
-
-		// Make sure it was added to the model
-		int index1 = tableModel.indexOf(employee1);
-		Assert.assertEquals("The new Employee was not added to the table model", 0, index1);
-		Assert.assertEquals("The number of TableItem should be 1", 1, table.getItemCount());
-
-		// Retrieve the TableItem representing the new Employee
-		TableItem tableItem = table.getItem(index1);
-		Assert.assertNotNull("No TableItem was found for the new Employee", tableItem);
-
-		testTableItemProperties(table, index1, expectedName1, expectedManager1, expectedTitle1);
-
-		// Replace the Employee
-		String expectedName2    = "Dali_2";
-		String expectedManager2 = "WTP_2";
-		String expectedTitle2   = "plug-in_2";
-
-		Employee employee2 = new Employee(expectedName2, expectedTitle2, expectedManager2);
-		manager.replace(employee1, employee2);
-
-		int index2 = tableModel.indexOf(employee2);
-		Assert.assertSame("The Employee that got replaced should be at index " + index1, index1, index2);
-		Assert.assertEquals("The number of TableItem should be 1", 1, table.getItemCount());
-
-		testTableItemProperties(table, index2, expectedName2, expectedManager2, expectedTitle2);
-	}
-
-	@Test
-	public void testItemsAdded() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		ListValueModel<Employee> listHolder = buildEmployeeListHolder();
-		WritablePropertyValueModel<Employee> selectedItemHolder = buildEmployeeHolder();
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		TableModel tableModel = new TableModel(
-			listHolder,
-			selectedItemHolder,
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		// Create Employees
-		String expectedName1    = "Dali_1";
-		String expectedManager1 = "WTP_1";
-		String expectedTitle1   = "plug-in_1";
-
-		String expectedName2    = "Dali_2";
-		String expectedManager2 = "WTP_2";
-		String expectedTitle2   = "plug-in_2";
-
-		String expectedName3    = "Dali_3";
-		String expectedManager3 = "WTP_3";
-		String expectedTitle3   = "plug-in_3";
-
-		Employee employee1 = new Employee(expectedName1, expectedTitle1, expectedManager1);
-		Employee employee2 = new Employee(expectedName2, expectedTitle2, expectedManager2);
-		Employee employee3 = new Employee(expectedName3, expectedTitle3, expectedManager3);
-
-		manager.addEmployee(employee1);
-		manager.addEmployee(employee2);
-		manager.addEmployee(employee3);
-
-		// Retrieve the TableItems representing the employees
-		Assert.assertEquals("The number of TableItem should be 3", 3, table.getItemCount());
-
-		int index = tableModel.indexOf(employee1);
-		Assert.assertEquals("The Employee 1 was not added to the table model", 0, index);
-
-		index = tableModel.indexOf(employee2);
-		Assert.assertEquals("The Employee 2 was not added to the table model", 1, index);
-
-		index = tableModel.indexOf(employee3);
-		Assert.assertEquals("The Employee 3 was not added to the table model", 2, index);
-
-		// Make sure the TableItem was correctly populated
-		testTableItemProperties(table, 0, expectedName1, expectedManager1, expectedTitle1);
-		testTableItemProperties(table, 1, expectedName2, expectedManager2, expectedTitle2);
-		testTableItemProperties(table, 2, expectedName3, expectedManager3, expectedTitle3);
-	}
-
-	@Test
-	public void testItemsMoved() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		ListValueModel<Employee> listHolder = buildEmployeeListHolder();
-		WritablePropertyValueModel<Employee> selectedItemHolder = buildEmployeeHolder();
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		TableModel tableModel = new TableModel(
-			listHolder,
-			selectedItemHolder,
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		// Create Employees
-		String expectedName1    = "Dali_1";
-		String expectedManager1 = "WTP_1";
-		String expectedTitle1   = "plug-in_1";
-
-		String expectedName2    = "Dali_2";
-		String expectedManager2 = "WTP_2";
-		String expectedTitle2   = "plug-in_2";
-
-		String expectedName3    = "Dali_3";
-		String expectedManager3 = "WTP_3";
-		String expectedTitle3   = "plug-in_3";
-
-		String expectedName4    = "Dali_4";
-		String expectedManager4 = "WTP_4";
-		String expectedTitle4   = "plug-in_4";
-
-		String expectedName5    = "Dali_5";
-		String expectedManager5 = "WTP_5";
-		String expectedTitle5   = "plug-in_5";
-
-		String expectedName6    = "Dali_6";
-		String expectedManager6 = "WTP_6";
-		String expectedTitle6   = "plug-in_6";
-
-		Employee employee1 = new Employee(expectedName1, expectedTitle1, expectedManager1);
-		Employee employee2 = new Employee(expectedName2, expectedTitle2, expectedManager2);
-		Employee employee3 = new Employee(expectedName3, expectedTitle3, expectedManager3);
-		Employee employee4 = new Employee(expectedName4, expectedTitle4, expectedManager4);
-		Employee employee5 = new Employee(expectedName5, expectedTitle5, expectedManager5);
-		Employee employee6 = new Employee(expectedName6, expectedTitle6, expectedManager6);
-
-		manager.addEmployee(employee1);
-		manager.addEmployee(employee2);
-		manager.addEmployee(employee3);
-		manager.addEmployee(employee4);
-		manager.addEmployee(employee5);
-		manager.addEmployee(employee6);
-
-		// Make sure the Employees were added to the Table
-		Assert.assertEquals("The number of TableItem should be 6", 6, table.getItemCount());
-
-		// Move an Employee up the list
-		ArrayList<Employee> employees = new ArrayList<Employee>(3);
-		employees.add(employee3);
-		employees.add(employee4);
-		employees.add(employee5);
-		manager.moveEmployees(employees, 0);
-
-		int index1 = tableModel.indexOf(employee1);
-		int index2 = tableModel.indexOf(employee2);
-		int index3 = tableModel.indexOf(employee3);
-		int index4 = tableModel.indexOf(employee4);
-		int index5 = tableModel.indexOf(employee5);
-		int index6 = tableModel.indexOf(employee6);
-
-		Assert.assertEquals("The Employee 1 is not at the right index", 3, index1);
-		Assert.assertEquals("The Employee 2 is not at the right index", 4, index2);
-		Assert.assertEquals("The Employee 3 is not at the right index", 0, index3);
-		Assert.assertEquals("The Employee 4 is not at the right index", 1, index4);
-		Assert.assertEquals("The Employee 5 is not at the right index", 2, index5);
-		Assert.assertEquals("The Employee 6 is not at the right index", 5, index6);
-
-		testTableItemProperties(table, index1, expectedName1, expectedManager1, expectedTitle1);
-		testTableItemProperties(table, index2, expectedName2, expectedManager2, expectedTitle2);
-		testTableItemProperties(table, index3, expectedName3, expectedManager3, expectedTitle3);
-		testTableItemProperties(table, index4, expectedName4, expectedManager4, expectedTitle4);
-		testTableItemProperties(table, index5, expectedName5, expectedManager5, expectedTitle5);
-		testTableItemProperties(table, index6, expectedName6, expectedManager6, expectedTitle6);
-
-		// Move an Employee down the list
-		employees = new ArrayList<Employee>(2);
-		employees.add(employee1);
-		employees.add(employee2);
-		manager.moveEmployees(employees, 4);
-
-		index1 = tableModel.indexOf(employee1);
-		index2 = tableModel.indexOf(employee2);
-		index3 = tableModel.indexOf(employee3);
-		index4 = tableModel.indexOf(employee4);
-		index5 = tableModel.indexOf(employee5);
-		index6 = tableModel.indexOf(employee6);
-
-		Assert.assertEquals("The Employee 1 is not at the right index", 4, index1);
-		Assert.assertEquals("The Employee 2 is not at the right index", 5, index2);
-		Assert.assertEquals("The Employee 3 is not at the right index", 0, index3);
-		Assert.assertEquals("The Employee 4 is not at the right index", 1, index4);
-		Assert.assertEquals("The Employee 5 is not at the right index", 2, index5);
-		Assert.assertEquals("The Employee 6 is not at the right index", 3, index6);
-
-		testTableItemProperties(table, index1, expectedName1, expectedManager1, expectedTitle1);
-		testTableItemProperties(table, index2, expectedName2, expectedManager2, expectedTitle2);
-		testTableItemProperties(table, index3, expectedName3, expectedManager3, expectedTitle3);
-		testTableItemProperties(table, index4, expectedName4, expectedManager4, expectedTitle4);
-		testTableItemProperties(table, index5, expectedName5, expectedManager5, expectedTitle5);
-		testTableItemProperties(table, index6, expectedName6, expectedManager6, expectedTitle6);
-	}
-
-	@Test
-	public void testItemsRemoved() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		ListValueModel<Employee> listHolder = buildEmployeeListHolder();
-		WritablePropertyValueModel<Employee> selectedItemHolder = buildEmployeeHolder();
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		TableModel tableModel = new TableModel(
-			listHolder,
-			selectedItemHolder,
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		// Create Employees
-		String expectedName1    = "Dali_1";
-		String expectedManager1 = "WTP_1";
-		String expectedTitle1   = "plug-in_1";
-
-		String expectedName2    = "Dali_2";
-		String expectedManager2 = "WTP_2";
-		String expectedTitle2   = "plug-in_2";
-
-		String expectedName3    = "Dali_3";
-		String expectedManager3 = "WTP_3";
-		String expectedTitle3   = "plug-in_3";
-
-		Employee employee1 = new Employee(expectedName1, expectedTitle1, expectedManager1);
-		Employee employee2 = new Employee(expectedName2, expectedTitle2, expectedManager2);
-		Employee employee3 = new Employee(expectedName3, expectedTitle3, expectedManager3);
-
-		manager.addEmployee(employee1);
-		manager.addEmployee(employee2);
-		manager.addEmployee(employee3);
-
-		// Retrieve the TableItems representing the employees
-		Assert.assertEquals("The number of TableItem should be 3", 3, table.getItemCount());
-
-		int index = tableModel.indexOf(employee1);
-		Assert.assertEquals("The Employee 1 was not added to the table model", 0, index);
-
-		index = tableModel.indexOf(employee2);
-		Assert.assertEquals("The Employee 2 was not added to the table model", 1, index);
-
-		index = tableModel.indexOf(employee3);
-		Assert.assertEquals("The Employee 3 was not added to the table model", 2, index);
-
-		// Remove 2 items
-		ArrayList<Employee> employees = new ArrayList<Employee>(2);
-		employees.add(employee1);
-		employees.add(employee3);
-		manager.removeEmployees(employees);
-
-		Assert.assertEquals("The number of TableItem should be 1", 1, table.getItemCount());
-	}
-
-	@Test
-	public void testPropertyChanged() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		ListValueModel<Employee> listHolder = buildEmployeeListHolder();
-		WritablePropertyValueModel<Employee> selectedItemHolder = buildEmployeeHolder();
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		TableModel tableModel = new TableModel(
-			listHolder,
-			selectedItemHolder,
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		// Create a new Employee
-		String expectedName    = "Dali";
-		String expectedManager = "WTP";
-		String expectedTitle   = "plug-in";
-
-		Employee employee = manager.addEmployee(expectedName, expectedTitle, expectedManager);
-		Assert.assertNotNull("The new Employee was not created", employee);
-
-		// Make sure it was added to the model
-		int index = tableModel.indexOf(employee);
-		Assert.assertEquals("The new Employee was not added to the table model", 0, index);
-		Assert.assertEquals("The number of TableItem should be 1", 1, table.getItemCount());
-
-		// Retrieve the TableItem representing the new Employee
-		TableItem tableItem = table.getItem(index);
-		Assert.assertNotNull("No TableItem was found for the new Employee", tableItem);
-
-		// Name property
-		String actualName = tableItem.getText(TableColumnAdapter.NAME_COLUMN);
-		Assert.assertEquals("TableItem[NAME_COLUMN] was not set correctly", expectedName, actualName);
-
-		expectedName = "Jpt";
-		employee.setName(expectedName);
-
-		actualName = tableItem.getText(TableColumnAdapter.NAME_COLUMN);
-		Assert.assertEquals("TableItem[NAME_COLUMN] was not set correctly", expectedName, actualName);
-
-		// Manager property
-		String actualManager = tableItem.getText(TableColumnAdapter.MANAGER_COLUMN);
-		Assert.assertEquals("TableItem[MANAGER_COLUMN] was not set correctly", expectedManager, actualManager);
-
-		expectedManager = "boss";
-		employee.setManager(expectedManager);
-
-		actualManager = tableItem.getText(TableColumnAdapter.MANAGER_COLUMN);
-		Assert.assertEquals("TableItem[MANAGER_COLUMN] was not set correctly", expectedManager, actualManager);
-
-		// Title property
-		String actualTitle = tableItem.getText(TableColumnAdapter.TITLE_COLUMN);
-		Assert.assertEquals("TableItem[TITLE_COLUMN] was not set correctly", expectedTitle, actualTitle);
-
-		expectedTitle = "EclipseLink";
-		employee.setTitle(expectedTitle);
-
-		actualTitle = tableItem.getText(TableColumnAdapter.TITLE_COLUMN);
-		Assert.assertEquals("TableItem[TITLE_COLUMN] was not set correctly", expectedTitle, actualTitle);
-	}
-
-	@Test
-	public void testSelectedItemsAddedRemoved() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		ListValueModel<Employee> listHolder = buildEmployeeListHolder();
-		SimpleCollectionValueModel<Employee> selectedItemsHolder = buildEmployeeHolders();
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		TableModel tableModel = new TableModel(
-			listHolder,
-			selectedItemsHolder,
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		// Create Employees
-		String expectedName1    = "Dali_1";
-		String expectedManager1 = "WTP_1";
-		String expectedTitle1   = "plug-in_1";
-
-		String expectedName2    = "Dali_2";
-		String expectedManager2 = "WTP_2";
-		String expectedTitle2   = "plug-in_2";
-
-		String expectedName3    = "Dali_3";
-		String expectedManager3 = "WTP_3";
-		String expectedTitle3   = "plug-in_3";
-
-		Employee employee1 = new Employee(expectedName1, expectedTitle1, expectedManager1);
-		Employee employee2 = new Employee(expectedName2, expectedTitle2, expectedManager2);
-		Employee employee3 = new Employee(expectedName3, expectedTitle3, expectedManager3);
-
-		manager.addEmployee(employee1);
-		manager.addEmployee(employee2);
-		manager.addEmployee(employee3);
-
-		// Test adding selected items
-		ArrayList<Employee> employees = new ArrayList<Employee>(2);
-		employees.add(employee1);
-		employees.add(employee3);
-		selectedItemsHolder.addAll(employees);
-
-		Collection<Employee> actualEmployees = tableModel.selectedItems();
-		Assert.assertNotNull("The collection of selected items can't be null", actualEmployees);
-		Assert.assertEquals("The count of selected items should be 2", 2, actualEmployees.size());
-
-		actualEmployees.remove(employee1);
-		actualEmployees.remove(employee3);
-
-		Assert.assertTrue("The selected items was not retrieved correctly", actualEmployees.isEmpty());
-
-		// Test removing selected items
-		selectedItemsHolder.remove(employee1);
-
-		actualEmployees = tableModel.selectedItems();
-		Assert.assertNotNull("The collection of selected items can't be null", actualEmployees);
-		Assert.assertEquals("The count of selected items should be 1", 1, actualEmployees.size());
-
-		actualEmployees.remove(employee3);
-
-		Assert.assertTrue("The selected items was not retrieved correctly", actualEmployees.isEmpty());
-	}
-
-	@Test
-	public void testSelectedItemsCleared() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		ListValueModel<Employee> listHolder = buildEmployeeListHolder();
-		SimpleCollectionValueModel<Employee> selectedItemsHolder = buildEmployeeHolders();
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		TableModel tableModel = new TableModel(
-			listHolder,
-			selectedItemsHolder,
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		// Create Employees
-		String expectedName1    = "Dali_1";
-		String expectedManager1 = "WTP_1";
-		String expectedTitle1   = "plug-in_1";
-
-		String expectedName2    = "Dali_2";
-		String expectedManager2 = "WTP_2";
-		String expectedTitle2   = "plug-in_2";
-
-		String expectedName3    = "Dali_3";
-		String expectedManager3 = "WTP_3";
-		String expectedTitle3   = "plug-in_3";
-
-		Employee employee1 = new Employee(expectedName1, expectedTitle1, expectedManager1);
-		Employee employee2 = new Employee(expectedName2, expectedTitle2, expectedManager2);
-		Employee employee3 = new Employee(expectedName3, expectedTitle3, expectedManager3);
-
-		manager.addEmployee(employee1);
-		manager.addEmployee(employee2);
-		manager.addEmployee(employee3);
-
-		// Test adding selected items
-		ArrayList<Employee> employees = new ArrayList<Employee>(2);
-		employees.add(employee1);
-		employees.add(employee3);
-		selectedItemsHolder.addAll(employees);
-
-		Collection<Employee> actualEmployees = tableModel.selectedItems();
-		Assert.assertNotNull("The collection of selected items can't be null", actualEmployees);
-		Assert.assertEquals("The count of selected items should be 2", 2, actualEmployees.size());
-
-		actualEmployees.remove(employee1);
-		actualEmployees.remove(employee3);
-		Assert.assertTrue("The selected items was not retrieved correctly", actualEmployees.isEmpty());
-
-		// Test removing selected items
-		selectedItemsHolder.clear();
-
-		actualEmployees = tableModel.selectedItems();
-		Assert.assertNotNull("The collection of selected items can't be null", actualEmployees);
-		Assert.assertEquals("The count of selected items should be ", 0, actualEmployees.size());
-	}
-
-	@Test
-	public void testSelectionChangeListener() {
-
-		Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
-
-		Manager manager = new Manager();
-		subjectHolder.setValue(manager);
-
-		TableModel tableModel = new TableModel(
-			buildEmployeeListHolder(),
-			buildEmployeeHolder(),
-			table,
-			buildColumnAdapter(),
-			buildLabelProvider()
-		);
-
-		Collection<Employee> employees = new ArrayList<Employee>();
-		tableModel.addSelectionChangeListener(buildSelectionChangeListener(employees));
-
-		// Create Employees
-		String expectedName1    = "Dali_1";
-		String expectedManager1 = "WTP_1";
-		String expectedTitle1   = "plug-in_1";
-
-		String expectedName2    = "Dali_2";
-		String expectedManager2 = "WTP_2";
-		String expectedTitle2   = "plug-in_2";
-
-		String expectedName3    = "Dali_3";
-		String expectedManager3 = "WTP_3";
-		String expectedTitle3   = "plug-in_3";
-
-		Employee employee1 = new Employee(expectedName1, expectedTitle1, expectedManager1);
-		Employee employee2 = new Employee(expectedName2, expectedTitle2, expectedManager2);
-		Employee employee3 = new Employee(expectedName3, expectedTitle3, expectedManager3);
-
-		manager.addEmployee(employee1);
-		manager.addEmployee(employee2);
-		manager.addEmployee(employee3);
-
-		// Test adding selected items
-		table.setSelection(new int[] { 0, 2 });
-
-		// It seems a manual selection doesn't send any selection event
-		tableModel.tableSelectionChanged(null);
-
-		Assert.assertNotNull("The collection of selected items can't be null", employees);
-		Assert.assertEquals("The count of selected items should be 2", 2, employees.size());
-
-		employees.remove(employee1);
-		employees.remove(employee3);
-		Assert.assertTrue("The selected items was not retrieved correctly", employees.isEmpty());
-
-		// Test adding selected items
-		employees.add(employee1);
-		employees.add(employee3);
-		table.deselectAll();
-
-		// It seems a manual selection doesn't send any selection event
-		tableModel.tableSelectionChanged(null);
-
-		Assert.assertNotNull("The collection of selected items can't be null", employees);
-		Assert.assertEquals("The count of selected items should be 0", 0, employees.size());
-	}
-
-	private void testTableItemProperties(Table table,
-	                                     int index,
-	                                     String expectedName,
-	                                     String expectedManager,
-	                                     String expectedTitle)
-	{
-		TableItem tableItem = table.getItem(index);
-		Assert.assertNotNull("No TableItem was found for the Employee", tableItem);
-
-		String actualName = tableItem.getText(TableColumnAdapter.NAME_COLUMN);
-		Assert.assertEquals("TableItem[NAME_COLUMN] was not set correctly", expectedName, actualName);
-
-		String actualTitle = tableItem.getText(TableColumnAdapter.TITLE_COLUMN);
-		Assert.assertEquals("TableItem[TITLE_COLUMN] was not set correctly", expectedTitle, actualTitle);
-
-		String actualManager = tableItem.getText(TableColumnAdapter.MANAGER_COLUMN);
-		Assert.assertEquals("TableItem[MANAGER_COLUMN] was not set correctly", expectedManager, actualManager);
-	}
-
-	private class Employee extends AbstractModel {
-
-		private String manager;
-		private String name;
-		private String title;
-
-		static final String MANAGER_PROPERTY = "manager";
-		static final String NAME_PROPERTY = "name";
-		static final String TITLE_PROPERTY = "title";
-
-		Employee(String name, String title, String manager) {
-			super();
-
-			this.name    = name;
-			this.title   = title;
-			this.manager = manager;
-		}
-
-		String getManager() {
-			return manager;
-		}
-
-		String getName() {
-			return name;
-		}
-
-		String getTitle() {
-			return title;
-		}
-
-		void setManager(String manager) {
-			String oldManager = this.manager;
-			this.manager = manager;
-			firePropertyChanged(MANAGER_PROPERTY, oldManager, manager);
-		}
-
-		void setName(String name) {
-			String oldName = this.name;
-			this.name = name;
-			firePropertyChanged(NAME_PROPERTY, oldName, name);
-		}
-
-		void setTitle(String title) {
-			String oldTitle = this.title;
-			this.title = title;
-			firePropertyChanged(TITLE_PROPERTY, oldTitle, title);
-		}
-	}
-
-	private class Manager extends AbstractModel {
-
-		private List<Employee> employees;
-
-		static final String EMPLOYEES_LIST = "employees";
-
-		Manager() {
-			super();
-			employees = new ArrayList<Employee>();
-		}
-
-		Employee addEmployee(Employee employee) {
-			addItemToList(employee, employees, EMPLOYEES_LIST);
-			return employee;
-		}
-
-		Employee addEmployee(String name, String title, String manager) {
-			Employee employee = new Employee(name, title, manager);
-			return addEmployee(employee);
-		}
-
-		void changeEmployees(List<Employee> employees) {
-			this.employees.clear();
-			this.employees.addAll(employees);
-			fireListChanged(EMPLOYEES_LIST, employees);
-		}
-
-		ListIterator<Employee> employees() {
-			return new CloneListIterator<Employee>(employees);
-		}
-
-		int employeesSize() {
-			return employees.size();
-		}
-
-		void moveEmployeeDown(Employee employee) {
-			int index = employees.indexOf(employee);
-			moveItemInList(index + 1, index, employees, EMPLOYEES_LIST);
-		}
-
-		void moveEmployees(Collection<Employee> employees, int targetIndex) {
-
-			int sourceIndex = Integer.MAX_VALUE;
-
-			for (Employee employee : employees) {
-				sourceIndex = Math.min(sourceIndex, this.employees.indexOf(employee));
-			}
-
-			moveItemsInList(
-				targetIndex,
-				sourceIndex,
-				employees.size(),
-				this.employees,
-				EMPLOYEES_LIST
-			);
-		}
-
-		void moveEmployeeUp(Employee employee) {
-			int index = employees.indexOf(employee);
-			moveItemInList(index - 1, index, employees, EMPLOYEES_LIST);
-		}
-
-		void removeAllEmployees() {
-			clearList(employees, EMPLOYEES_LIST);
-		}
-
-		void removeEmployee(Employee employee) {
-			removeItemFromList(employee, employees, EMPLOYEES_LIST);
-		}
-
-		void removeEmployees(Collection<Employee> employees) {
-			removeItemsFromList(employees.iterator(), this.employees, EMPLOYEES_LIST);
-		}
-
-		void replace(Employee oldEmployee, Employee newEmployee) {
-			replaceItemInList(oldEmployee, newEmployee, employees, EMPLOYEES_LIST);
-		}
-	}
-
-	private class TableColumnAdapter implements ColumnAdapter<Employee> {
-
-		static final int COLUMN_COUNT = 3;
-		static final int MANAGER_COLUMN = 2;
-		static final int NAME_COLUMN = 0;
-		static final int TITLE_COLUMN = 1;
-
-		private WritablePropertyValueModel<String> buildManagerHolder(Employee subject) {
-			return new PropertyAspectAdapter<Employee, String>(Employee.MANAGER_PROPERTY, subject) {
-				@Override
-				protected String buildValue_() {
-					return subject.getManager();
-				}
-
-				@Override
-				protected void setValue_(String value) {
-					subject.setManager(value);
-				}
-			};
-		}
-
-		private WritablePropertyValueModel<String> buildNameHolder(Employee subject) {
-			return new PropertyAspectAdapter<Employee, String>(Employee.NAME_PROPERTY, subject) {
-				@Override
-				protected String buildValue_() {
-					return subject.getName();
-				}
-
-				@Override
-				protected void setValue_(String value) {
-					subject.setName(value);
-				}
-			};
-		}
-
-		private WritablePropertyValueModel<String> buildTitleHolder(Employee subject) {
-			return new PropertyAspectAdapter<Employee, String>(Employee.TITLE_PROPERTY, subject) {
-				@Override
-				protected String buildValue_() {
-					return subject.getTitle();
-				}
-
-				@Override
-				protected void setValue_(String value) {
-					subject.setTitle(value);
-				}
-			};
-		}
-
-		public WritablePropertyValueModel<?>[] cellModels(Employee subject) {
-			WritablePropertyValueModel<?>[] holders = new WritablePropertyValueModel<?>[3];
-			holders[NAME_COLUMN] = buildNameHolder(subject);
-			holders[TITLE_COLUMN] = buildTitleHolder(subject);
-			holders[MANAGER_COLUMN] = buildManagerHolder(subject);
-			return holders;
-		}
-
-		public int columnCount() {
-			return COLUMN_COUNT;
-		}
-
-		public String columnName(int columnIndex) {
-			return String.valueOf(columnIndex);
-		}
-	}
-
-	private class TableLabelProvider extends LabelProvider
-	                                 implements ITableLabelProvider {
-
-
-		public Image getColumnImage(Object element, int columnIndex) {
-			return null;
-		}
-
-		public String getColumnText(Object element, int columnIndex) {
-			Employee employee = (Employee) element;
-
-			if (columnIndex == TableColumnAdapter.NAME_COLUMN) {
-				return employee.getName();
-			}
-
-			if (columnIndex == TableColumnAdapter.TITLE_COLUMN) {
-				return employee.getTitle();
-			}
-
-			return employee.getManager();
-		}
-	}
-
-	private class TableModel extends TableModelAdapter<Employee> {
-
-		TableModel(ListValueModel<Employee> listHolder,
-		           CollectionValueModel<Employee> selectedItemsHolder,
-		           Table table,
-		           ColumnAdapter<Employee> columnAdapter,
-		           ITableLabelProvider labelProvider) {
-
-			super(listHolder,
-			      selectedItemsHolder,
-			      table,
-			      columnAdapter,
-			      labelProvider);
-		}
-
-		TableModel(ListValueModel<Employee> listHolder,
-		           WritablePropertyValueModel<Employee> selectedItemHolder,
-		           Table table,
-		           ColumnAdapter<Employee> columnAdapter,
-		           ITableLabelProvider labelProvider) {
-
-			super(listHolder,
-					new PropertyCollectionValueModelAdapter<Employee>(selectedItemHolder),
-			      table,
-			      columnAdapter,
-			      labelProvider);
-		}
-
-		@Override
-		protected int indexOf(Employee item) {
-			return super.indexOf(item);
-		}
-
-		@Override
-		protected Collection<Employee> selectedItems() {
-			return super.selectedItems();
-		}
-
-		@Override
-		protected void tableSelectionChanged(SelectionEvent event) {
-			super.tableSelectionChanged(event);
-		}
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/TriStateCheckBoxModelAdapterUITest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/TriStateCheckBoxModelAdapterUITest.java
deleted file mode 100644
index 3993af3..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/swt/TriStateCheckBoxModelAdapterUITest.java
+++ /dev/null
@@ -1,319 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.swt;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.window.ApplicationWindow;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.ui.internal.swt.TriStateCheckBoxModelAdapter;
-import org.eclipse.jpt.ui.internal.widgets.DefaultWidgetFactory;
-import org.eclipse.jpt.ui.internal.widgets.TriStateCheckBox;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * Play around with a set of tri-state check boxes.
- */
-public class TriStateCheckBoxModelAdapterUITest
-	extends ApplicationWindow
-{
-	private final TestModel testModel;
-	private final WritablePropertyValueModel<TestModel> testModelHolder;
-	private final WritablePropertyValueModel<Boolean> flag1Holder;
-	private final WritablePropertyValueModel<Boolean> flag2Holder;
-	private final WritablePropertyValueModel<Boolean> notFlag2Holder;
-
-	public static void main(String[] args) throws Exception {
-		Window window = new TriStateCheckBoxModelAdapterUITest(args);
-		window.setBlockOnOpen(true);
-		window.open();
-		Display.getCurrent().dispose();
-		System.exit(0);
-	}
-
-	private TriStateCheckBoxModelAdapterUITest(String[] args) {
-		super(null);
-		this.testModel = new TestModel(Boolean.TRUE, Boolean.FALSE);
-		this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel);
-		this.flag1Holder = this.buildFlag1Holder(this.testModelHolder);
-		this.flag2Holder = this.buildFlag2Holder(this.testModelHolder);
-		this.notFlag2Holder = this.buildNotFlag2Holder(this.testModelHolder);
-	}
-
-	private WritablePropertyValueModel<Boolean> buildFlag1Holder(PropertyValueModel<TestModel> subjectHolder) {
-		return new PropertyAspectAdapter<TestModel, Boolean>(subjectHolder, TestModel.FLAG1_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.isFlag1();
-			}
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setFlag1(value);
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Boolean> buildFlag2Holder(PropertyValueModel<TestModel> subjectHolder) {
-		return new PropertyAspectAdapter<TestModel, Boolean>(subjectHolder, TestModel.FLAG2_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.isFlag2();
-			}
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setFlag2(value);
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Boolean> buildNotFlag2Holder(PropertyValueModel<TestModel> subjectHolder) {
-		return new PropertyAspectAdapter<TestModel, Boolean>(subjectHolder, TestModel.NOT_FLAG2_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return this.subject.isNotFlag2();
-			}
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setNotFlag2(value);
-			}
-		};
-	}
-
-	@Override
-	protected Control createContents(Composite parent) {
-		((Shell) parent).setText(this.getClass().getSimpleName());
-		parent.setSize(400, 100);
-		Composite mainPanel = new Composite(parent, SWT.NONE);
-		mainPanel.setLayout(new FormLayout());
-		Control checkBoxPanel = this.buildCheckBoxPanel(mainPanel);
-		this.buildControlPanel(mainPanel, checkBoxPanel);
-		return mainPanel;
-	}
-
-	private Control buildCheckBoxPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100, -35);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildFlag1CheckBox(panel);
-		this.buildFlag2CheckBox(panel);
-		this.buildNotFlag2CheckBox(panel);
-		this.buildUnattachedCheckBox(panel);
-
-		return panel;
-	}
-
-	private void buildFlag1CheckBox(Composite parent) {
-		TriStateCheckBox checkBox = new TriStateCheckBox(parent, "flag 1", DefaultWidgetFactory.instance());
-		TriStateCheckBoxModelAdapter.adapt(this.flag1Holder, checkBox);
-	}
-
-	private void buildFlag2CheckBox(Composite parent) {
-		TriStateCheckBox checkBox = new TriStateCheckBox(parent, "flag 2", DefaultWidgetFactory.instance());
-		TriStateCheckBoxModelAdapter.adapt(this.flag2Holder, checkBox);
-	}
-
-	private void buildNotFlag2CheckBox(Composite parent) {
-		TriStateCheckBox checkBox = new TriStateCheckBox(parent, "next flag 2", DefaultWidgetFactory.instance());
-		TriStateCheckBoxModelAdapter.adapt(this.notFlag2Holder, checkBox);
-	}
-
-	private void buildUnattachedCheckBox(Composite parent) {
-		TriStateCheckBox checkBox = new TriStateCheckBox(parent, "unattached", DefaultWidgetFactory.instance());
-		checkBox.addSelectionListener(this.buildUnattachedSelectionListener());
-	}
-
-	private SelectionListener buildUnattachedSelectionListener() {
-		return new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				System.out.println("unattached default selected: " + e);
-			}
-			public void widgetSelected(SelectionEvent e) {
-				System.out.println("unattached selected: " + e);
-			}
-		};
-	}
-
-	private void buildControlPanel(Composite parent, Control checkBoxPanel) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(checkBoxPanel);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildFlipFlag1Button(panel);
-		this.buildClearModelButton(panel);
-		this.buildRestoreModelButton(panel);
-		this.buildPrintModelButton(panel);
-	}
-
-	private void buildFlipFlag1Button(Composite parent) {
-		this.buildFlipFlag1ACI().fill(parent);
-	}
-
-	private ActionContributionItem buildFlipFlag1ACI() {
-		Action action = new Action("next flag 1", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				TriStateCheckBoxModelAdapterUITest.this.nextFlag1();
-			}
-		};
-		action.setToolTipText("next flag 1");
-		return new ActionContributionItem(action);
-	}
-
-	void nextFlag1() {
-		this.testModel.nextFlag1();
-	}
-
-	private void buildClearModelButton(Composite parent) {
-		this.buildClearModelACI().fill(parent);
-	}
-
-	private ActionContributionItem buildClearModelACI() {
-		Action action = new Action("clear model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				TriStateCheckBoxModelAdapterUITest.this.clearModel();
-			}
-		};
-		action.setToolTipText("clear model");
-		return new ActionContributionItem(action);
-	}
-
-	void clearModel() {
-		this.testModelHolder.setValue(null);
-	}
-
-	private void buildRestoreModelButton(Composite parent) {
-		this.buildRestoreModelACI().fill(parent);
-	}
-
-	private ActionContributionItem buildRestoreModelACI() {
-		Action action = new Action("restore model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				TriStateCheckBoxModelAdapterUITest.this.restoreModel();
-			}
-		};
-		action.setToolTipText("restore model");
-		return new ActionContributionItem(action);
-	}
-
-	void restoreModel() {
-		this.testModelHolder.setValue(this.testModel);
-	}
-
-	private void buildPrintModelButton(Composite parent) {
-		this.buildPrintModelACI().fill(parent);
-	}
-
-	private ActionContributionItem buildPrintModelACI() {
-		Action action = new Action("print model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				TriStateCheckBoxModelAdapterUITest.this.printModel();
-			}
-		};
-		action.setToolTipText("print model");
-		return new ActionContributionItem(action);
-	}
-
-	void printModel() {
-		System.out.println("flag 1: " + this.testModel.isFlag1());
-		System.out.println("flag 2: " + this.testModel.isFlag2());
-		System.out.println("not flag 2: " + this.testModel.isNotFlag2());
-		System.out.println("***");
-	}
-
-
-	private class TestModel extends AbstractModel {
-		private Boolean flag1;
-			public static final String FLAG1_PROPERTY = "flag1";
-		private Boolean flag2;
-			public static final String FLAG2_PROPERTY = "flag2";
-		private Boolean notFlag2;
-			public static final String NOT_FLAG2_PROPERTY = "notFlag2";
-	
-		public TestModel(Boolean flag1, Boolean flag2) {
-			this.flag1 = flag1;
-			this.flag2 = flag2;
-			this.notFlag2 = this.next(flag2);
-		}
-		private Boolean next(Boolean b) {
-			return (b == null) ? Boolean.TRUE : b.booleanValue() ? Boolean.FALSE : null;
-		}
-		public Boolean isFlag1() {
-			return this.flag1;
-		}
-		public void setFlag1(Boolean flag1) {
-			Boolean old = this.flag1;
-			this.flag1 = flag1;
-			this.firePropertyChanged(FLAG1_PROPERTY, old, flag1);
-		}
-		public void nextFlag1() {
-			this.setFlag1(this.next(this.flag1));
-		}
-		public Boolean isFlag2() {
-			return this.flag2;
-		}
-		public void setFlag2(Boolean flag2) {
-			Boolean old = this.flag2;
-			this.flag2 = flag2;
-			this.firePropertyChanged(FLAG2_PROPERTY, old, flag2);
-
-			old = this.notFlag2;
-			this.notFlag2 = this.next(flag2);
-			this.firePropertyChanged(NOT_FLAG2_PROPERTY, old, this.notFlag2);
-		}
-		public void nextFlag2() {
-			this.setFlag2(this.next(this.flag2));
-		}
-		public Boolean isNotFlag2() {
-			return this.notFlag2;
-		}
-		public void setNotFlag2(Boolean notFlag2) {
-			this.setFlag2(this.next(flag2));
-		}
-		public void nextNotFlag2() {
-			this.setNotFlag2(this.next(this.notFlag2));
-		}
-		@Override
-		public String toString() {
-			return "TestModel(" + this.isFlag1() + " - " + this.isFlag2() + ")";
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/ControlAlignerTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/ControlAlignerTest.java
deleted file mode 100644
index a031783..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/ControlAlignerTest.java
+++ /dev/null
@@ -1,800 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.util;
-
-import static org.junit.Assert.*;
-import org.eclipse.jface.dialogs.TitleAreaDialog;
-import org.eclipse.jpt.ui.internal.util.ControlAligner;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Layout;
-import org.eclipse.swt.widgets.Shell;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public final class ControlAlignerTest {
-
-	private ControlAligner controlAligner;
-	private Composite parent;
-	private Shell shell;
-
-	private Layout buildSpacerLayout() {
-		return new Layout() {
-			@Override
-			protected Point computeSize(Composite composite,
-			                            int widthHint,
-			                            int heightHint,
-			                            boolean flushCache) {
-
-				return new Point(widthHint, heightHint);
-			}
-
-			@Override
-			protected void layout(Composite composite, boolean flushCache) {
-				GridData data = (GridData) composite.getLayoutData();
-				composite.setBounds(0, 0, data.widthHint, data.heightHint);
-			}
-		};
-	}
-
-	@Before
-	public void setUp() {
-
-		controlAligner = new ControlAligner();
-
-		shell  = new Shell(Display.getCurrent());
-		shell.setLayout(new GridLayout(1, false));
-
-		parent = new Composite(shell, SWT.NONE);
-		parent.setLayout(new GridLayout(1, false));
-		parent.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
-	}
-
-	@After
-	public void tearDown() {
-
-		if (controlAligner != null) {
-			controlAligner.dispose();
-			controlAligner = null;
-		}
-
-		if (shell != null) {
-			shell.dispose();
-			shell = null;
-		}
-	}
-
-	@Test
-	public void testAddControl1() throws Exception {
-
-		Composite pane = new Composite(parent, SWT.NULL);
-		pane.setLayout(new GridLayout(3, false));
-		pane.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-		Label label = new Label(pane, SWT.NULL);
-		updateGridData(label);
-
-		controlAligner.add(label);
-
-		assertEquals(
-			"The maximum width should be 0,",
-			0,
-			controlAligner.getMaximumWidth()
-		);
-
-		label.setText("This is a ControlAligner");
-//		parent.layout(true, true);
-
-		Point size = label.getSize();
-
-		assertEquals(
-			"The width should be " + size.x + ",",
-			size.x,
-			controlAligner.getMaximumWidth()
-		);
-	}
-
-	@Test
-	public void testAddControl2() throws Exception {
-
-		Composite pane = new Composite(parent, SWT.NULL);
-		pane.setLayout(new GridLayout(3, false));
-		pane.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-		Button button = new Button(pane, SWT.NULL);
-		button.setText("This is a ControlAligner");
-		updateGridData(button);
-
-		controlAligner.add(button);
-		parent.layout(true, true);
-
-		Point size = button.getSize();
-
-		assertEquals(
-			"The width should be " + size.x + ",",
-			size.x,
-			controlAligner.getMaximumWidth()
-		);
-	}
-
-	@Test
-	public void testAddControl3() throws Exception {
-
-		Composite pane = new Composite(parent, SWT.NULL);
-		pane.setLayout(new GridLayout(3, false));
-		pane.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-		Label label = new Label(pane, SWT.NULL);
-		label.setText("This is very long text");
-		updateGridData(label);
-
-		Button button = new Button(pane, SWT.NULL);
-		button.setText("Short text");
-		updateGridData(button);
-
-//		parent.layout(true, true);
-
-		controlAligner.add(label);
-		controlAligner.add(button);
-
-		Point labelSize  = label.getSize();
-		Point buttonSize = button.getSize();
-		int max = Math.max(labelSize.x, buttonSize.x);
-
-		assertEquals(
-			"The width should be " + max + ",",
-			max,
-			controlAligner.getMaximumWidth()
-		);
-	}
-
-	@Test
-	public void testAddControlAligner1() throws Exception {
-
-		Label label1 = new Label(parent, SWT.NULL);
-		Label label2 = new Label(parent, SWT.NULL);
-
-		updateGridData(label1);
-		updateGridData(label2);
-
-		controlAligner.add(label1);
-
-		ControlAligner controlAligner2 = new ControlAligner();
-		controlAligner.add(controlAligner2);
-		controlAligner2.add(label2);
-
-		label1.setText("This is a ControlAligner");
-		label2.setText("This is a very long ControlAligner");
-//		parent.layout(true, true);
-
-		Point size1 = label1.getSize();
-		Point size2 = label2.getSize();
-		int width = Math.max(size1.x, size2.x);
-
-		assertEquals(
-			"The width should be " + width + ",",
-			width,
-			controlAligner.getMaximumWidth()
-		);
-
-		assertEquals(
-			"The width should be " + width + ",",
-			width,
-			controlAligner2.getMaximumWidth()
-		);
-	}
-
-	@Test
-	public void testAddControlAligner2() throws Exception {
-
-		Label label1 = new Label(parent, SWT.NULL);
-		Label label2 = new Label(parent, SWT.NULL);
-
-		updateGridData(label1);
-		updateGridData(label2);
-
-		controlAligner.add(label1);
-
-		ControlAligner controlAligner2 = new ControlAligner();
-		controlAligner2.add(label2);
-
-		label1.setText("This is a ControlAligner");
-		label2.setText("This is a very long ControlAligner");
-
-		controlAligner.add(controlAligner2);
-//		parent.layout(true, true);
-
-		Point size1 = label1.getSize();
-		Point size2 = label2.getSize();
-		int width = Math.max(size1.x, size2.x);
-
-		assertEquals(
-			"The width should be " + width + ",",
-			width,
-			controlAligner.getMaximumWidth()
-		);
-
-		assertEquals(
-			"The width should be " + width + ",",
-			width,
-			controlAligner2.getMaximumWidth()
-		);
-	}
-
-	@Test(expected=IllegalArgumentException.class)
-	public void testAddControlAlignerToItself() throws Exception {
-		controlAligner.add(controlAligner);
-		fail("A ControlAligner can't be added to itself");
-	}
-
-	@Test
-	public void testDialog_AddControl1() throws Exception {
-
-		final int[] maximumWidth = new int[1];
-		final int[] size = new int[1];
-
-		TitleAreaDialog dialog = new TitleAreaDialog(SWTUtil.getShell()) {
-
-			private Label label;
-
-			@Override
-			protected Control createDialogArea(Composite parent) {
-
-				Composite pane = new Composite(parent, SWT.NULL);
-				pane.setLayout(new GridLayout(3, false));
-				pane.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-				label = new Label(pane, SWT.LEFT);
-				label.setText("This is a ControlAligner");
-				updateGridData(label);
-
-				controlAligner.add(label);
-
-				return parent;
-			}
-
-			@Override
-			protected void initializeBounds() {
-				super.initializeBounds();
-				size[0] = label.getSize().x;
-				maximumWidth[0] = controlAligner.getMaximumWidth();
-			}
-		};
-
-		dialog.create();
-		dialog.close();
-
-		assertEquals(
-			"The width should be " + size[0] + ",",
-			size[0],
-			maximumWidth[0]
-		);
-	}
-
-	@Test
-	public void testDialog_AddControl2() throws Exception {
-
-		final int[] maximumWidth = new int[1];
-		final int[] sizes = new int[2];
-
-		TitleAreaDialog dialog = new TitleAreaDialog(SWTUtil.getShell()) {
-
-			private Button button;
-			private Label label;
-
-			@Override
-			protected Control createDialogArea(Composite parent) {
-
-				Composite pane = new Composite(parent, SWT.NULL);
-				pane.setLayout(new GridLayout(3, false));
-				pane.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-				label = new Label(pane, SWT.NULL);
-				label.setText("This is a ControlAligner");
-				updateGridData(label);
-
-				controlAligner.add(label);
-
-				button = new Button(pane, SWT.NULL);
-				button.setText("Short text");
-				updateGridData(button);
-
-				controlAligner.add(button);
-
-				return parent;
-			}
-
-			@Override
-			protected void initializeBounds() {
-				super.initializeBounds();
-				sizes[0] = label.getSize().x;
-				sizes[1] = button.getSize().x;
-				maximumWidth[0] = controlAligner.getMaximumWidth();
-			}
-		};
-
-		dialog.create();
-		dialog.close();
-
-		int labelSize  = sizes[0];
-		int buttonSize = sizes[1];
-		int max = Math.max(labelSize, buttonSize);
-
-		assertEquals(
-			"The width should be " + max + ",",
-			max,
-			maximumWidth[0]
-		);
-	}
-
-	@Test
-	public void testDispose() throws Exception {
-
-		Composite pane = new Composite(parent, SWT.NULL);
-		pane.setLayout(new GridLayout(3, false));
-		pane.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-		Label label = new Label(pane, SWT.NULL);
-		label.setText("This is very long text");
-		updateGridData(label);
-
-		Button button = new Button(pane, SWT.NULL);
-		button.setText("Short text");
-		updateGridData(button);
-
-		controlAligner.add(label);
-		controlAligner.add(button);
-
-		Point labelSize  = label.getSize();
-		Point buttonSize = button.getSize();
-		int max = Math.max(labelSize.x, buttonSize.x);
-
-		assertEquals(
-			"The width should be " + max + ",",
-			max,
-			controlAligner.getMaximumWidth()
-		);
-
-		label.dispose();
-
-		Point newButtonSize = button.getSize();
-
-		assertNotSame(
-			"The old max and new max should not be the same",
-			max,
-			newButtonSize.x
-		);
-
-		assertEquals(
-			"The ControlAligner doesn't have the right maximum width",
-			newButtonSize.x,
-			controlAligner.getMaximumWidth()
-		);
-	}
-
-	@Test
-	public void testHierarchyOfControlAligners() throws Exception {
-
-		// Aligner1
-		//  ^
-		//  |-Aligner2
-		//     ^
-		//     |-Aligner3
-		ControlAligner controlAligner2 = new ControlAligner();
-		controlAligner.add(controlAligner2);
-
-		ControlAligner controlAligner3 = new ControlAligner();
-		controlAligner2.add(controlAligner3);
-
-		// Test 1
-		Label label1 = new Label(parent, SWT.NULL);
-		label1.setText("This is a label widget");
-		parent.layout(true, true);
-
-		int labelWidth1 = label1.getSize().x;
-		controlAligner3.add(label1);
-
-		assertEquals(controlAligner3.getMaximumWidth(), labelWidth1);
-		assertEquals(controlAligner2.getMaximumWidth(), labelWidth1);
-		assertEquals(controlAligner.getMaximumWidth(), labelWidth1);
-
-		// Test 2
-		Label label2 = new Label(parent, SWT.NULL);
-		label2.setText("ShortLabel");
-		controlAligner2.add(label2);
-		parent.layout(true);
-
-		int newLabelWidth1 = label1.getSize().x;
-		int newLabelWidth2 = label2.getSize().x;
-
-		assertEquals(controlAligner3.getMaximumWidth(), controlAligner2.getMaximumWidth());
-		assertEquals(controlAligner2.getMaximumWidth(), controlAligner.getMaximumWidth());
-		assertEquals(newLabelWidth1, newLabelWidth2);
-		assertEquals(newLabelWidth1, controlAligner.getMaximumWidth());
-
-		// Test 3
-		Label label3 = new Label(parent, SWT.NULL);
-		label3.setText("A very long label that takes a lot of horizontal space");
-//		parent.layout(true);
-		controlAligner.add(label3);
-
-		newLabelWidth1 = label1.getSize().x;
-		newLabelWidth2 = label2.getSize().x;
-		int newLabelWidth3 = label3.getSize().x;
-
-		assertEquals(controlAligner3.getMaximumWidth(), controlAligner2.getMaximumWidth());
-		assertEquals(controlAligner2.getMaximumWidth(), controlAligner.getMaximumWidth());
-		assertEquals(newLabelWidth1, newLabelWidth2);
-		assertEquals(newLabelWidth2, newLabelWidth3);
-		assertEquals(newLabelWidth1, controlAligner.getMaximumWidth());
-
-		// Make sure all the locked are removed
-		assertEquals(ReflectionTools.getFieldValue_(controlAligner, "locked"), Boolean.FALSE);
-		assertEquals(ReflectionTools.getFieldValue_(controlAligner2, "locked"), Boolean.FALSE);
-		assertEquals(ReflectionTools.getFieldValue_(controlAligner3, "locked"), Boolean.FALSE);
-
-		// Change the text of label2
-		label2.setText("mm");
-//		parent.layout(true);
-
-		newLabelWidth1 = label1.getSize().x;
-		newLabelWidth2 = label2.getSize().x;
-		newLabelWidth3 = label3.getSize().x;
-
-		assertEquals(controlAligner3.getMaximumWidth(), controlAligner2.getMaximumWidth());
-		assertEquals(controlAligner2.getMaximumWidth(), controlAligner.getMaximumWidth());
-		assertEquals(newLabelWidth1, newLabelWidth2);
-		assertEquals(newLabelWidth2, newLabelWidth3);
-		assertEquals(newLabelWidth1, controlAligner.getMaximumWidth());
-
-		assertEquals(ReflectionTools.getFieldValue_(controlAligner, "locked"), Boolean.FALSE);
-		assertEquals(ReflectionTools.getFieldValue_(controlAligner2, "locked"), Boolean.FALSE);
-		assertEquals(ReflectionTools.getFieldValue_(controlAligner3, "locked"), Boolean.FALSE);
-
-		// Change the text of label1
-		label1.setText("a");
-//		parent.layout(true);
-
-		Composite parent1 = new Composite(SWTUtil.getShell(), SWT.NULL);
-		parent1.setLayout(new GridLayout());
-
-		Label tempLabel = new Label(parent1, SWT.NULL);
-		tempLabel.setText("a");
-//		parent1.layout(true);
-
-		int realWidth = tempLabel.getSize().x;
-
-		newLabelWidth1 = label1.getSize().x;
-		newLabelWidth2 = label2.getSize().x;
-		newLabelWidth3 = label3.getSize().x;
-
-		assertEquals(controlAligner3.getMaximumWidth(), controlAligner2.getMaximumWidth());
-		assertEquals(controlAligner2.getMaximumWidth(), controlAligner.getMaximumWidth());
-		assertEquals(newLabelWidth1, newLabelWidth2);
-		assertEquals(newLabelWidth2, newLabelWidth3);
-		assertEquals(newLabelWidth1, controlAligner.getMaximumWidth());
-		assertFalse(newLabelWidth1 == realWidth);
-
-		assertEquals(ReflectionTools.getFieldValue_(controlAligner, "locked"), Boolean.FALSE);
-		assertEquals(ReflectionTools.getFieldValue_(controlAligner2, "locked"), Boolean.FALSE);
-		assertEquals(ReflectionTools.getFieldValue_(controlAligner3, "locked"), Boolean.FALSE);
-
-		// Change the text of label1
-		label1.setText("Yes another big long long text so that all the labels will have to take the size of this label to make sure ControlAligner works correctly");
-//		parent.layout(true);
-
-		// Weird: It seems no notification is sent, fire one manually
-		Event event  = new Event();
-		event.widget = label1;
-		event.type   = SWT.Resize;
-		label1.notifyListeners(SWT.Resize, event);
-
-		Composite parent2 = new Composite(SWTUtil.getShell(), SWT.NULL);
-		parent2.setLayout(new GridLayout());
-
-		tempLabel = new Label(parent2, SWT.NULL);
-		tempLabel.setText(label1.getText());
-		parent2.layout(true);
-
-		realWidth = tempLabel.getSize().x;
-
-		newLabelWidth1 = label1.getSize().x;
-		newLabelWidth2 = label2.getSize().x;
-		newLabelWidth3 = label3.getSize().x;
-
-		assertEquals(controlAligner3.getMaximumWidth(), controlAligner2.getMaximumWidth());
-		assertEquals(controlAligner2.getMaximumWidth(), controlAligner.getMaximumWidth());
-		assertEquals(newLabelWidth1, newLabelWidth2);
-		assertEquals(newLabelWidth2, newLabelWidth3);
-		assertEquals(controlAligner.getMaximumWidth(), newLabelWidth1);
-		assertEquals(realWidth, newLabelWidth1);
-
-		assertEquals(ReflectionTools.getFieldValue_(controlAligner, "locked"), Boolean.FALSE);
-		assertEquals(ReflectionTools.getFieldValue_(controlAligner2, "locked"), Boolean.FALSE);
-		assertEquals(ReflectionTools.getFieldValue_(controlAligner3, "locked"), Boolean.FALSE);
-	}
-
-	@Test
-	public void testRemoveControl1() throws Exception {
-
-		Composite pane = new Composite(parent, SWT.NULL);
-		pane.setLayout(new GridLayout(3, false));
-		pane.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-		Button button = new Button(pane, SWT.NULL);
-		button.setText("This is a ControlAligner");
-		updateGridData(button);
-
-		controlAligner.add(button);
-		parent.layout(true, true);
-
-		Point size = button.getSize();
-
-		assertEquals(
-			"The width should be " + size.x + ",",
-			size.x,
-			controlAligner.getMaximumWidth()
-		);
-
-		controlAligner.remove(button);
-
-		assertEquals(
-			"The width should be 0, ",
-			0,
-			controlAligner.getMaximumWidth()
-		);
-	}
-
-	@Test
-	public void testRemoveControl2() throws Exception {
-
-		Composite pane = new Composite(parent, SWT.NULL);
-		pane.setLayout(new GridLayout(3, false));
-		pane.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-		Label label = new Label(pane, SWT.NULL);
-		label.setText("This is very long text");
-		updateGridData(label);
-
-		Button button = new Button(pane, SWT.NULL);
-		button.setText("Short text");
-		updateGridData(button);
-//		parent.layout(true, true);
-
-		controlAligner.add(label);
-		controlAligner.add(button);
-
-		Point labelSize  = label.getSize();
-		Point buttonSize = button.getSize();
-		int max = Math.max(labelSize.x, buttonSize.x);
-
-		assertEquals(
-			"The width should be " + max + ",",
-			max,
-			controlAligner.getMaximumWidth()
-		);
-
-		controlAligner.remove(label);
-
-		Point newButtonSize = button.getSize();
-
-		assertNotSame(
-			"The old max and new max should not be the same",
-			max,
-			newButtonSize.x
-		);
-
-		assertEquals(
-			"The ControlAligner doesn't have the right maximum width",
-			newButtonSize.x,
-			controlAligner.getMaximumWidth()
-		);
-	}
-
-	@Test
-	public void testRemoveControl4() throws Exception {
-
-		Composite pane = new Composite(parent, SWT.NULL);
-		pane.setLayout(new GridLayout(3, false));
-		pane.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-		// Widget 1
-		Label label = new Label(pane, SWT.NULL);
-		label.setText("This is very long text");
-		updateGridData(label);
-		controlAligner.add(label);
-
-		// Widget 2
-		Composite spacer = new Composite(pane, SWT.NULL);
-		spacer.setLayout(buildSpacerLayout());
-		updateGridData(spacer);
-		controlAligner.add(spacer);
-
-		// Widget 3
-		Button button = new Button(pane, SWT.NULL);
-		button.setText("Short text");
-		updateGridData(button);
-		controlAligner.add(button);
-
-//		parent.layout(true, true);
-
-		// Make sure the 3 widgets have the same width
-		Point labelSize  = label.getSize();
-		Point spacerSize = spacer.getSize();
-		Point buttonSize = button.getSize();
-		int max = Math.max(labelSize.x, buttonSize.x);
-		max = Math.max(max, spacerSize.x);
-
-		assertEquals(
-			"The width should be " + max + ",",
-			max,
-			controlAligner.getMaximumWidth()
-		);
-
-		assertEquals(
-			"The spacer's width should be " + max + ",",
-			max,
-			spacerSize.x
-		);
-
-		// Remove the label (the widest widget) and make sure the width was
-		// correctly calculated
-		controlAligner.remove(label);
-
-		spacerSize = spacer.getSize();
-		buttonSize = button.getSize();
-		int max2 = Math.max(spacerSize.x, buttonSize.x);
-
-		assertNotSame(
-			"The old max and new max should not be the same",
-			max,
-			max2
-		);
-
-		assertEquals(
-			"The ControlAligner doesn't have the right maximum width",
-			max2,
-			controlAligner.getMaximumWidth()
-		);
-
-		assertEquals(
-			"The spacer's width should have been adjusted",
-			max2,
-			spacerSize.x
-		);
-	}
-
-	@Test
-	public void testRemoveControlAligner1() throws Exception {
-
-		Label label1 = new Label(parent, SWT.NULL);
-		Label label2 = new Label(parent, SWT.NULL);
-
-		updateGridData(label1);
-		updateGridData(label2);
-
-		controlAligner.add(label1);
-
-		ControlAligner controlAligner2 = new ControlAligner();
-		controlAligner.add(controlAligner2);
-		controlAligner2.add(label2);
-
-		label1.setText("This is a ControlAligner");
-		label2.setText("This is a very long ControlAligner");
-//		parent.layout(true, true);
-
-		Point size1 = label1.getSize();
-		Point size2 = label2.getSize();
-		int width = Math.max(size1.x, size2.x);
-
-		// Test 1
-		assertEquals(
-			"The width should be " + width + ",",
-			width,
-			controlAligner.getMaximumWidth()
-		);
-
-		assertEquals(
-			"The width should be " + width + ",",
-			width,
-			controlAligner2.getMaximumWidth()
-		);
-
-		// Test 2
-		controlAligner.remove(label1);
-
-		width = label2.getSize().x;
-
-		assertEquals(
-			"The width should be " + width + ",",
-			width,
-			controlAligner.getMaximumWidth()
-		);
-
-		assertEquals(
-			"The width should be " + width + ",",
-			width,
-			controlAligner2.getMaximumWidth()
-		);
-	}
-
-	@Test
-	public void testRemoveControlAligner2() throws Exception {
-
-		Label label1 = new Label(parent, SWT.NULL);
-		Label label2 = new Label(parent, SWT.NULL);
-
-		updateGridData(label1);
-		updateGridData(label2);
-
-		controlAligner.add(label1);
-
-		ControlAligner controlAligner2 = new ControlAligner();
-		controlAligner.add(controlAligner2);
-		controlAligner2.add(label2);
-
-		label1.setText("This is a ControlAligner");
-		label2.setText("This is a very long ControlAligner");
-//		parent.layout(true, true);
-
-		Point size1 = label1.getSize();
-		Point size2 = label2.getSize();
-		int width = Math.max(size1.x, size2.x);
-
-		// Test 1
-		assertEquals(
-			"The width should be " + width + ",",
-			width,
-			controlAligner.getMaximumWidth()
-		);
-
-		assertEquals(
-			"The width should be " + width + ",",
-			width,
-			controlAligner2.getMaximumWidth()
-		);
-
-		// Test 2
-		controlAligner2.remove(label2);
-
-		width = label1.getSize().x;
-
-		assertEquals(
-			"The width should be " + width + ",",
-			width,
-			controlAligner.getMaximumWidth()
-		);
-
-		assertEquals(
-			"The width should be " + width + ",",
-			width,
-			controlAligner2.getMaximumWidth()
-		);
-	}
-
-	private void updateGridData(Control control) {
-		GridData data = new GridData();
-		data.horizontalAlignment       = GridData.FILL;
-		data.grabExcessHorizontalSpace = false;
-		control.setLayoutData(data);
-	}
-}
\ No newline at end of file
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/ControlEnablerTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/ControlEnablerTest.java
deleted file mode 100644
index 88cb7f2..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/ControlEnablerTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.util;
-
-import static org.junit.Assert.*;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.utility.swt.SWTTools;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public final class ControlEnablerTest {
-	private Composite parent;
-
-	@Before
-	public void setUp() {
-		parent = new Composite(SWTUtil.getShell(), SWT.NONE);
-		parent.setLayout(new GridLayout());
-	}
-
-	@After
-	public void tearDown() {
-		if (parent != null) {
-			parent.dispose();
-		}
-	}
-
-	@Test
-	public void testSwitchState() {
-
-		SimplePropertyValueModel<Boolean> booleanHolder =
-			new SimplePropertyValueModel<Boolean>(true);
-
-		Combo combo = new Combo(parent, SWT.BORDER);
-
-		SWTTools.controlEnabledState(booleanHolder, combo);
-
-		assertTrue(
-			"The Combo should be enabled",
-			combo.isEnabled()
-		);
-
-		// Change state (null)
-		booleanHolder.setValue(null);
-
-		assertFalse(
-			"The Combo should not be enabled",
-			combo.isEnabled()
-		);
-
-		// Change state (true)
-		booleanHolder.setValue(true);
-
-		assertTrue(
-			"The Combo should be enabled",
-			combo.isEnabled()
-		);
-
-		// Change state (false)
-		booleanHolder.setValue(false);
-
-		assertFalse(
-			"The Combo should not be enabled",
-			combo.isEnabled()
-		);
-
-		// Dispose
-		combo.dispose();
-		booleanHolder.setValue(true);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/ControlSwitcherTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/ControlSwitcherTest.java
deleted file mode 100644
index c124f60..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/ControlSwitcherTest.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.util;
-
-import static org.junit.Assert.*;
-import org.eclipse.jpt.ui.internal.util.ControlSwitcher;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.part.PageBook;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public final class ControlSwitcherTest {
-
-	private PageBook pageBook;
-	private Composite pane1;
-	private Composite pane2;
-	private Composite parent;
-
-	private Composite buildPane1() {
-
-		if (pane1 == null) {
-
-			pane1 = new Composite(pageBook, SWT.NULL);
-			pane1.setLayout(new GridLayout(2, false));
-
-			Label label = new Label(pane1, SWT.NULL);
-			label.setText("&Test2:");
-
-			Text text = new Text(pane1, SWT.BORDER);
-			text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-			Combo combo = new Combo(pane1, SWT.BORDER);
-
-			GridData data = new GridData(GridData.FILL_HORIZONTAL);
-			data.horizontalSpan = 2;
-			combo.setLayoutData(data);
-		}
-
-		return pane1;
-	}
-
-	private Composite buildPane2() {
-
-		if (pane2 == null) {
-
-			pane2 = new Composite(pageBook, SWT.NULL);
-			pane2.setLayout(new GridLayout(2, false));
-
-			Label label = new Label(pane2, SWT.NULL);
-			label.setText("&Test1:");
-
-			Text text = new Text(pane2, SWT.BORDER);
-			text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		}
-
-		return pane2;
-	}
-
-	private Transformer<Boolean, Control> buildTransformer() {
-		return new Transformer<Boolean, Control>() {
-			public Control transform(Boolean value) {
-				return (value == null) ? null : (value ? pane1 : pane2);
-			}
-		};
-	}
-
-	@Before
-	public void setUp() {
-		parent = new Composite(SWTUtil.getShell(), SWT.NONE);
-		parent.setLayout(new GridLayout());
-
-		pageBook = new PageBook(parent, SWT.NULL);
-		pageBook.setLayoutData(new GridData());
-	}
-
-	@After
-	public void tearDown() {
-
-		if (parent != null) {
-
-			parent.dispose();
-
-			parent   = null;
-			pageBook = null;
-		}
-	}
-
-	@Test
-	public void testSwitch() {
-
-		SimplePropertyValueModel<Boolean> switchHolder = new SimplePropertyValueModel<Boolean>();
-		Transformer<Boolean, Control> transformer = buildTransformer();
-
-		pane1 = buildPane1();
-		pane1.setVisible(false);
-
-		pane2 = buildPane2();
-		pane2.setVisible(false);
-
-		new ControlSwitcher(
-			switchHolder,
-			transformer,
-			pageBook
-		);
-
-		// Test 1
-		switchHolder.setValue(true);
-		Control control = (Control) ReflectionTools.getFieldValue(pageBook, "currentPage");
-
-		assertNotNull(
-			"The page book's page shouldn't be null",
-			control
-		);
-
-		assertSame(
-			"The current pane should be pane1",
-			pane1,
-			control
-		);
-
-		Point pane1Size = pane1.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		Point pageBookSize = pageBook.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-
-		assertEquals(
-			"The width of the PageBook should be the same as the width of pane1",
-			pane1Size.x,
-			pageBookSize.x
-		);
-
-		assertEquals(
-			"The height of the PageBook should be the same as the height of pane1",
-			pane1Size.y,
-			pageBookSize.y
-		);
-
-		// Test 2
-		switchHolder.setValue(false);
-		control = (Control) ReflectionTools.getFieldValue(pageBook, "currentPage");
-
-		assertNotNull(
-			"The page book's page shouldn't be null",
-			control
-		);
-
-		assertSame(
-			"The current pane should be pane2",
-			pane2,
-			control
-		);
-
-		Point pane2Size = pane2.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		pageBookSize = pageBook.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-
-		assertEquals(
-			"The width of the PageBook should be the same as the width of pane2",
-			pane2Size.x,
-			pageBookSize.x
-		);
-
-		assertEquals(
-			"The height of the PageBook should be the same as the height of pane2",
-			pane2Size.y,
-			pageBookSize.y
-		);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/ControlVisibilityEnablerTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/ControlVisibilityEnablerTest.java
deleted file mode 100644
index 3a702d5..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/ControlVisibilityEnablerTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.util;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.utility.swt.SWTTools;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public final class ControlVisibilityEnablerTest {
-	private Composite parent;
-
-	@Before
-	public void setUp() {
-		parent = new Composite(SWTUtil.getShell(), SWT.NONE);
-		parent.setLayout(new GridLayout());
-	}
-
-	@After
-	public void tearDown() {
-		if (parent != null) {
-			parent.dispose();
-		}
-	}
-
-	@Test
-	public void testSwitchState() {
-
-		SimplePropertyValueModel<Boolean> booleanHolder =
-			new SimplePropertyValueModel<Boolean>(true);
-
-		Combo combo = new Combo(parent, SWT.BORDER);
-
-		SWTTools.controlVisibleState(booleanHolder, combo);
-
-		assertTrue(
-			"The Combo should be visible",
-			combo.isVisible()
-		);
-
-		// Change state (null)
-		booleanHolder.setValue(null);
-
-		assertFalse(
-			"The Combo should not be visible",
-			combo.isVisible()
-		);
-
-		// Change state (true)
-		booleanHolder.setValue(true);
-
-		assertTrue(
-			"The Combo should be visible",
-			combo.isVisible()
-		);
-
-		// Change state (false)
-		booleanHolder.setValue(false);
-
-		assertFalse(
-			"The Combo should not be visible",
-			combo.isVisible()
-		);
-
-		// Dispose
-		combo.dispose();
-		booleanHolder.setValue(true);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/JptUiUtilTests.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/JptUiUtilTests.java
deleted file mode 100644
index 81cfb08..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/JptUiUtilTests.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.util;
-
-import junit.framework.JUnit4TestAdapter;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
-
-@SuiteClasses
-({
-	ControlAlignerTest.class,
-	ControlSwitcherTest.class,
-	ControlEnablerTest.class,
-	ControlVisibilityEnablerTest.class,
-	LabeledButtonTest.class,
-	LabeledLabelTest.class,
-	LabeledControlUpdaterTest.class,
-	PaneEnablerTest.class,
-	PaneVisibilityEnablerTest.class,
-})
-@RunWith(Suite.class)
-public final class JptUiUtilTests {
-
-	private JptUiUtilTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite();
-		suite.addTest(new JUnit4TestAdapter(JptUiUtilTests.class));
-		return suite;
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/LabeledButtonTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/LabeledButtonTest.java
deleted file mode 100644
index dde3031..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/LabeledButtonTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.util;
-
-import static org.junit.Assert.assertEquals;
-import org.eclipse.core.runtime.AssertionFailedException;
-import org.eclipse.jpt.ui.internal.util.LabeledButton;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public final class LabeledButtonTest {
-
-	private Composite parent;
-
-	@Before
-	public void setUp() {
-		parent = new Composite(SWTUtil.getShell(), SWT.NONE);
-		parent.setLayout(new GridLayout());
-	}
-
-	@After
-	public void tearDown() {
-		if (parent != null) {
-			parent.dispose();
-			parent = null;
-		}
-	}
-
-	@Test
-	public void testLabeledButton1() {
-		Button button = new Button(parent, SWT.NULL);
-		new LabeledButton(button);
-	}
-
-	@Test(expected=AssertionFailedException.class)
-	public void testLabeledButton2() {
-		new LabeledButton(null);
-	}
-
-	@Test
-	public void testSetImage() {
-
-		Image expected = new Image(parent.getDisplay(), 16, 16);
-
-		try {
-			Button button = new Button(parent, SWT.NULL);
-			LabeledButton labeledButton = new LabeledButton(button);
-
-			labeledButton.setImage(expected);
-
-			assertEquals(
-				"The Button didn't receive the Image",
-				expected,
-				button.getImage()
-			);
-		}
-		finally {
-			expected.dispose();
-		}
-	}
-
-	@Test
-	public void testSetImageDispose() {
-
-		Image expected = new Image(parent.getDisplay(), 16, 16);
-
-		try {
-			Button button = new Button(parent, SWT.NULL);
-			LabeledButton labeledButton = new LabeledButton(button);
-
-			button.dispose();
-
-			// This should not fail but simply do nothing
-			labeledButton.setImage(expected);
-		}
-		finally {
-			expected.dispose();
-		}
-	}
-
-	@Test
-	public void testSetText() {
-		Button button = new Button(parent, SWT.NULL);
-		LabeledButton labeledButton = new LabeledButton(button);
-
-		String expected = "This is a test";
-		labeledButton.setText(expected);
-
-		assertEquals(
-			"The Button didn't receive the text",
-			expected,
-			button.getText()
-		);
-	}
-
-	@Test
-	public void testSetTextDispose() {
-		Button button = new Button(parent, SWT.NULL);
-		LabeledButton labeledButton = new LabeledButton(button);
-
-		button.dispose();
-
-		// This should not fail but simply do nothing
-		String expected = "This is a test";
-		labeledButton.setText(expected);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/LabeledControlUpdaterTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/LabeledControlUpdaterTest.java
deleted file mode 100644
index bd2ce50..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/LabeledControlUpdaterTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.util;
-
-import static org.junit.Assert.assertEquals;
-import org.eclipse.jpt.ui.internal.util.LabeledControlUpdater;
-import org.eclipse.jpt.ui.internal.util.LabeledLabel;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public final class LabeledControlUpdaterTest {
-
-	private Composite parent;
-
-	@Before
-	public void setUp() {
-		parent = new Composite(SWTUtil.getShell(), SWT.NONE);
-		parent.setLayout(new GridLayout());
-	}
-
-	@After
-	public void tearDown() {
-		if (parent != null) {
-			parent.dispose();
-			parent = null;
-		}
-	}
-
-	@Test
-	public void testSetImage() {
-
-		Image expected = new Image(parent.getDisplay(), 16, 16);
-
-		try {
-			Label label = new Label(parent, SWT.NULL);
-			LabeledLabel labeledLabel = new LabeledLabel(label);
-
-			WritablePropertyValueModel<Image> imageHolder = new SimplePropertyValueModel<Image>();
-			new LabeledControlUpdater(labeledLabel, null, imageHolder);
-
-			labeledLabel.setImage(expected);
-
-			assertEquals(
-				"The Label didn't receive the Image",
-				expected,
-				label.getImage()
-			);
-		}
-		finally {
-			expected.dispose();
-		}
-	}
-
-	@Test
-	public void testSetImageDispose() {
-
-		Image expected = new Image(parent.getDisplay(), 16, 16);
-
-		try {
-			Label label = new Label(parent, SWT.NULL);
-			LabeledLabel labeledLabel = new LabeledLabel(label);
-
-			WritablePropertyValueModel<Image> imageHolder = new SimplePropertyValueModel<Image>();
-			new LabeledControlUpdater(labeledLabel, null, imageHolder);
-
-			label.dispose();
-			labeledLabel.setImage(expected);
-		}
-		finally {
-			expected.dispose();
-		}
-	}
-
-	@Test
-	public void testSetText() {
-
-		Label label = new Label(parent, SWT.NULL);
-		LabeledLabel labeledLabel = new LabeledLabel(label);
-
-		WritablePropertyValueModel<String> textHolder = new SimplePropertyValueModel<String>();
-		new LabeledControlUpdater(labeledLabel, textHolder);
-
-		String expected = "This is a test";
-		textHolder.setValue(expected);
-
-		assertEquals(
-			"The Label didn't receive the text",
-			expected,
-			label.getText()
-		);
-	}
-
-	@Test
-	public void testSetTextDispose() {
-
-		Label label = new Label(parent, SWT.NULL);
-		LabeledLabel labeledLabel = new LabeledLabel(label);
-
-		WritablePropertyValueModel<String> textHolder = new SimplePropertyValueModel<String>();
-		new LabeledControlUpdater(labeledLabel, textHolder);
-
-		label.dispose();
-
-		String expected = "This is a test";
-		textHolder.setValue(expected);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/LabeledLabelTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/LabeledLabelTest.java
deleted file mode 100644
index f962284..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/LabeledLabelTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.util;
-
-import static org.junit.Assert.assertEquals;
-import org.eclipse.core.runtime.AssertionFailedException;
-import org.eclipse.jpt.ui.internal.util.LabeledLabel;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public final class LabeledLabelTest {
-
-	private Composite parent;
-
-	@Before
-	public void setUp() {
-		parent = new Composite(SWTUtil.getShell(), SWT.NONE);
-		parent.setLayout(new GridLayout());
-	}
-
-	@After
-	public void tearDown() {
-		if (parent != null) {
-			parent.dispose();
-			parent = null;
-		}
-	}
-
-	@Test
-	public void testLabeledButton1() {
-		Label label = new Label(parent, SWT.NULL);
-		new LabeledLabel(label);
-	}
-
-	@Test(expected=AssertionFailedException.class)
-	public void testLabeledButton2() {
-		new LabeledLabel(null);
-	}
-
-	@Test
-	public void testSetImage() {
-
-		Image expected = new Image(parent.getDisplay(), 16, 16);
-
-		try {
-			Label label = new Label(parent, SWT.NULL);
-			LabeledLabel labeledLabel = new LabeledLabel(label);
-
-			labeledLabel.setImage(expected);
-
-			assertEquals(
-				"The Label didn't receive the Image",
-				expected,
-				label.getImage()
-			);
-		}
-		finally {
-			expected.dispose();
-		}
-	}
-
-	@Test
-	public void testSetImageDispose() {
-
-		Image expected = new Image(parent.getDisplay(), 16, 16);
-
-		try {
-			Label label = new Label(parent, SWT.NULL);
-			LabeledLabel labeledLabel = new LabeledLabel(label);
-
-			label.dispose();
-
-			// This should not fail but simply do nothing
-			labeledLabel.setImage(expected);
-		}
-		finally {
-			expected.dispose();
-		}
-	}
-
-	@Test
-	public void testSetText() {
-		Label label = new Label(parent, SWT.NULL);
-		LabeledLabel labeledLabel = new LabeledLabel(label);
-
-		String expected = "This is a test";
-		labeledLabel.setText(expected);
-
-		assertEquals(
-			"The Label didn't receive the text",
-			expected,
-			label.getText()
-		);
-	}
-
-	@Test
-	public void testSetTextDispose() {
-		Label label = new Label(parent, SWT.NULL);
-		LabeledLabel labeledLabel = new LabeledLabel(label);
-
-		label.dispose();
-
-		// This should not fail but simply do nothing
-		String expected = "This is a test";
-		labeledLabel.setText(expected);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/PaneEnablerTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/PaneEnablerTest.java
deleted file mode 100644
index 5563e25..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/PaneEnablerTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.util;
-
-import static org.junit.Assert.*;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.widgets.DialogPane;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.node.Node;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public final class PaneEnablerTest {
-	private Composite parent;
-
-	@Before
-	public void setUp() {
-		parent = new Composite(SWTUtil.getShell(), SWT.NONE);
-		parent.setLayout(new GridLayout());
-	}
-
-	@After
-	public void tearDown() {
-		if (parent != null) {
-			parent.dispose();
-		}
-	}
-
-	@Test
-	public void testSwitchState() {
-
-		SimplePropertyValueModel<Boolean> booleanHolder =
-			new SimplePropertyValueModel<Boolean>(true);
-
-		DialogPane<Node> pane = new DialogPane<Node>(
-			new SimplePropertyValueModel<Node>(),
-			parent)
-		{
-			@Override
-			protected void initializeLayout(Composite container) {
-			}
-		};
-
-		new PaneEnabler(booleanHolder, pane);
-
-		assertTrue(
-			"The pane should be enabled",
-			pane.getControl().isEnabled()
-		);
-
-		// Change state (null)
-		booleanHolder.setValue(null);
-
-		assertFalse(
-			"The pane should not be enabled",
-			pane.getControl().isEnabled()
-		);
-
-		// Change state (true)
-		booleanHolder.setValue(true);
-
-		assertTrue(
-			"The pane should be enabled",
-			pane.getControl().isEnabled()
-		);
-
-		// Change state (false)
-		booleanHolder.setValue(false);
-
-		assertFalse(
-			"The pane should not be enabled",
-			pane.getControl().isEnabled()
-		);
-
-		// Dispose
-		pane.dispose();
-		booleanHolder.setValue(true);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/PaneVisibilityEnablerTest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/PaneVisibilityEnablerTest.java
deleted file mode 100644
index 361b4c2..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/util/PaneVisibilityEnablerTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.util;
-
-import static org.junit.Assert.*;
-import org.eclipse.jpt.ui.internal.util.PaneVisibilityEnabler;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.widgets.DialogPane;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.node.Node;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public final class PaneVisibilityEnablerTest {
-	private Composite parent;
-
-	@Before
-	public void setUp() {
-		parent = new Composite(SWTUtil.getShell(), SWT.NONE);
-		parent.setLayout(new GridLayout());
-	}
-
-	@After
-	public void tearDown() {
-		if (parent != null) {
-			parent.dispose();
-		}
-	}
-
-	@Test
-	public void testSwitchState() {
-
-		SimplePropertyValueModel<Boolean> booleanHolder =
-			new SimplePropertyValueModel<Boolean>(true);
-
-		DialogPane<Node> pane = new DialogPane<Node>(
-			new SimplePropertyValueModel<Node>(),
-			parent)
-		{
-			@Override
-			protected void initializeLayout(Composite container) {
-			}
-		};
-
-		new PaneVisibilityEnabler(booleanHolder, pane);
-
-		assertTrue(
-			"The pane should be visible",
-			pane.getControl().isVisible()
-		);
-
-		// Change state (null)
-		booleanHolder.setValue(null);
-
-		assertFalse(
-			"The pane should not be visible",
-			pane.getControl().isVisible()
-		);
-
-		// Change state (true)
-		booleanHolder.setValue(true);
-
-		assertTrue(
-			"The pane should be visible",
-			pane.getControl().isVisible()
-		);
-
-		// Change state (false)
-		booleanHolder.setValue(false);
-
-		assertFalse(
-			"The pane should not be visible",
-			pane.getControl().isVisible()
-		);
-
-		// Dispose
-		pane.dispose();
-		booleanHolder.setValue(true);
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/BooleanStateControllerUITest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/BooleanStateControllerUITest.java
deleted file mode 100644
index 9219810..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/BooleanStateControllerUITest.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.utility.swt;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.window.ApplicationWindow;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.ui.internal.utility.swt.SWTTools;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * Play around with boolean state controllers ('enabled' and 'visible').
- * <p>
- * Note the behavior of composites:<ul>
- * <li>When a composite is disabled, its children are disabled but <em>not</em>
- *     grayed out.
- * <li>When a composite is made invisible, its children are also made
- *     invisible.
- * </ul>
- */
-@SuppressWarnings("nls")
-public class BooleanStateControllerUITest
-	extends ApplicationWindow
-{
-	private final WritablePropertyValueModel<Boolean> enabledHolder;
-	private final WritablePropertyValueModel<Boolean> visibleHolder;
-	private final SimpleListValueModel<String> listHolder;
-	private final WritablePropertyValueModel<String> listSelectionHolder;
-
-	public static void main(String[] args) throws Exception {
-		Window window = new BooleanStateControllerUITest(args);
-		window.setBlockOnOpen(true);
-		window.open();
-		Display.getCurrent().dispose();
-		System.exit(0);
-	}
-
-	private BooleanStateControllerUITest(@SuppressWarnings("unused") String[] args) {
-		super(null);
-		this.enabledHolder = new SimplePropertyValueModel<Boolean>(Boolean.TRUE);
-		this.visibleHolder = new SimplePropertyValueModel<Boolean>(Boolean.TRUE);
-		this.listHolder = this.buildListHolder();
-		this.listSelectionHolder = new SimplePropertyValueModel<String>(null);
-	}
-
-	private SimpleListValueModel<String> buildListHolder() {
-		SimpleListValueModel<String> result = new SimpleListValueModel<String>();
-		result.add("zero");
-		result.add("one");
-		result.add("two");
-		result.add("three");
-		result.add("four");
-		result.add("five");
-		result.add("six");
-		result.add("seven");
-		return result;
-	}
-
-	@Override
-	protected Control createContents(Composite parent) {
-		((Shell) parent).setText(this.getClass().getSimpleName());
-		parent.setSize(500, 150);
-		Composite mainPanel = new Composite(parent, SWT.NONE);
-		mainPanel.setLayout(new FormLayout());
-		Control widgetPanel = this.buildWidgetPanels(mainPanel);
-		this.buildControlPanel(mainPanel, widgetPanel);
-		return mainPanel;
-	}
-
-	private Control buildWidgetPanels(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100, -35);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout(SWT.VERTICAL));
-
-		this.buildWidgetPanel1(panel);
-		this.buildWidgetPanel2(panel);
-
-		return panel;
-	}
-
-	private void buildWidgetPanel1(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		panel.setLayout(new FillLayout(SWT.HORIZONTAL));
-
-		Button enabledComboBoxCheckBox = this.buildEnabledComboBoxCheckBox(panel);
-		SWTTools.bind(this.enabledHolder, enabledComboBoxCheckBox);
-
-		Button visibleComboBoxCheckBox = this.buildVisibleComboBoxCheckBox(panel);
-		SWTTools.bind(this.visibleHolder, visibleComboBoxCheckBox);
-
-		Label comboBoxLabel = this.buildComboBoxLabel(panel);
-		Combo comboBox = this.buildComboBox(panel);
-		SWTTools.bind(this.listHolder, this.listSelectionHolder, comboBox);
-		SWTTools.controlEnabledState(this.enabledHolder, comboBoxLabel, comboBox);
-		SWTTools.controlVisibleState(this.visibleHolder, comboBoxLabel, comboBox);
-	}
-
-	private Button buildEnabledComboBoxCheckBox(Composite parent) {
-		return this.buildCheckBox(parent, "enabled");
-	}
-
-	private Button buildVisibleComboBoxCheckBox(Composite parent) {
-		return this.buildCheckBox(parent, "visible");
-	}
-
-	private Button buildCheckBox(Composite parent, String text) {
-		Button checkBox = new Button(parent, SWT.CHECK);
-		checkBox.setText(text);
-		return checkBox;
-	}
-
-	private Label buildComboBoxLabel(Composite parent) {
-		Label label = new Label(parent, SWT.LEFT);
-		label.setText("list:");
-		return label;
-	}
-
-	private Combo buildComboBox(Composite parent) {
-		return new Combo(parent, SWT.READ_ONLY);
-	}
-
-	private void buildWidgetPanel2(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		panel.setLayout(new FillLayout(SWT.HORIZONTAL));
-
-		Button checkBox1 = this.buildCheckBox(panel, "one");
-		this.buildCheckBox(panel, "two");
-		this.buildCheckBox(panel, "three");
-		this.buildCheckBox(panel, "four");
-
-		SWTTools.controlEnabledState(this.enabledHolder, panel, checkBox1);
-		SWTTools.controlVisibleState(this.visibleHolder, panel);
-	}
-
-	private void buildControlPanel(Composite parent, Control widgetPanel) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(widgetPanel);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildClearEnabledModelButton(panel);
-		this.buildClearVisibleModelButton(panel);
-		this.buildNullSelectionModelButton(panel);
-		this.buildNextButton(panel);
-	}
-
-	private void buildClearEnabledModelButton(Composite parent) {
-		this.buildClearEnabledModelACI().fill(parent);
-	}
-
-	private ActionContributionItem buildClearEnabledModelACI() {
-		Action action = new Action("clear enabled model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				BooleanStateControllerUITest.this.clearEnabledModel();
-			}
-		};
-		action.setToolTipText("clear enabled model");
-		return new ActionContributionItem(action);
-	}
-
-	void clearEnabledModel() {
-		this.enabledHolder.setValue(null);
-	}
-
-	private void buildClearVisibleModelButton(Composite parent) {
-		this.buildClearVisibleModelACI().fill(parent);
-	}
-
-	private ActionContributionItem buildClearVisibleModelACI() {
-		Action action = new Action("clear visible model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				BooleanStateControllerUITest.this.clearVisibleModel();
-			}
-		};
-		action.setToolTipText("clear visible model");
-		return new ActionContributionItem(action);
-	}
-
-	void clearVisibleModel() {
-		this.visibleHolder.setValue(null);
-	}
-
-	private void buildNullSelectionModelButton(Composite parent) {
-		this.buildNullSelectionModelACI().fill(parent);
-	}
-
-	private ActionContributionItem buildNullSelectionModelACI() {
-		Action action = new Action("null selection model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				BooleanStateControllerUITest.this.setSelectionModelNull();
-			}
-		};
-		action.setToolTipText("null selection model");
-		return new ActionContributionItem(action);
-	}
-
-	void setSelectionModelNull() {
-		this.listSelectionHolder.setValue(null);
-	}
-
-	private void buildNextButton(Composite parent) {
-		this.buildNextACI().fill(parent);
-	}
-
-	private ActionContributionItem buildNextACI() {
-		Action action = new Action("next", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				BooleanStateControllerUITest.this.next();
-			}
-		};
-		action.setToolTipText("next");
-		return new ActionContributionItem(action);
-	}
-
-	void next() {
-		this.listSelectionHolder.setValue(this.getNextListSelection());
-	}
-
-	private String getNextListSelection() {
-		return this.listHolder.get(this.getNextListSelectionIndex());
-	}
-
-	private int getNextListSelectionIndex() {
-		int index = this.getListSelectionIndex();
-		if (index == -1) {
-			return 0;
-		}
-		index++;
-		return (index == this.listHolder.size()) ? 0 : index;
-	}
-
-	private int getListSelectionIndex() {
-		return this.listHolder.indexOf(this.getListSelection());
-	}
-
-	private String getListSelection() {
-		return this.listSelectionHolder.getValue();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/CheckBoxModelBindingUITest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/CheckBoxModelBindingUITest.java
deleted file mode 100644
index e6f232c..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/CheckBoxModelBindingUITest.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.utility.swt;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.window.ApplicationWindow;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.ui.internal.utility.swt.SWTTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * Play around with a set of check boxes.
- */
-@SuppressWarnings("nls")
-public class CheckBoxModelBindingUITest
-	extends ApplicationWindow
-{
-	private final TestModel testModel;
-	private final WritablePropertyValueModel<TestModel> testModelHolder;
-	private final WritablePropertyValueModel<Boolean> flag1Holder;
-	private final WritablePropertyValueModel<Boolean> flag2Holder;
-	private final WritablePropertyValueModel<Boolean> notFlag2Holder;
-
-	public static void main(String[] args) throws Exception {
-		Window window = new CheckBoxModelBindingUITest(args);
-		window.setBlockOnOpen(true);
-		window.open();
-		Display.getCurrent().dispose();
-		System.exit(0);
-	}
-
-	private CheckBoxModelBindingUITest(@SuppressWarnings("unused") String[] args) {
-		super(null);
-		this.testModel = new TestModel(true, true);
-		this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel);
-		this.flag1Holder = this.buildFlag1Holder(this.testModelHolder);
-		this.flag2Holder = this.buildFlag2Holder(this.testModelHolder);
-		this.notFlag2Holder = this.buildNotFlag2Holder(this.testModelHolder);
-	}
-
-	private WritablePropertyValueModel<Boolean> buildFlag1Holder(PropertyValueModel<TestModel> subjectHolder) {
-		return new PropertyAspectAdapter<TestModel, Boolean>(subjectHolder, TestModel.FLAG1_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.isFlag1());
-			}
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setFlag1(value.booleanValue());
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Boolean> buildFlag2Holder(PropertyValueModel<TestModel> subjectHolder) {
-		return new PropertyAspectAdapter<TestModel, Boolean>(subjectHolder, TestModel.FLAG2_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.isFlag2());
-			}
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setFlag2(value.booleanValue());
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Boolean> buildNotFlag2Holder(PropertyValueModel<TestModel> subjectHolder) {
-		return new PropertyAspectAdapter<TestModel, Boolean>(subjectHolder, TestModel.NOT_FLAG2_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.isNotFlag2());
-			}
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setNotFlag2(value.booleanValue());
-			}
-		};
-	}
-
-	@Override
-	protected Control createContents(Composite parent) {
-		((Shell) parent).setText(this.getClass().getSimpleName());
-		parent.setSize(400, 100);
-		Composite mainPanel = new Composite(parent, SWT.NONE);
-		mainPanel.setLayout(new FormLayout());
-		Control checkBoxPanel = this.buildCheckBoxPanel(mainPanel);
-		this.buildControlPanel(mainPanel, checkBoxPanel);
-		return mainPanel;
-	}
-
-	private Control buildCheckBoxPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100, -35);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildFlag1CheckBox(panel);
-		this.buildFlag2CheckBox(panel);
-		this.buildNotFlag2CheckBox(panel);
-		this.buildUnattachedCheckBox(panel);
-
-		return panel;
-	}
-
-	private void buildFlag1CheckBox(Composite parent) {
-		Button checkBox = new Button(parent, SWT.CHECK);
-		checkBox.setText("flag 1");
-		SWTTools.bind(this.flag1Holder, checkBox);
-	}
-
-	private void buildFlag2CheckBox(Composite parent) {
-		Button checkBox = new Button(parent, SWT.CHECK);
-		checkBox.setText("flag 2");
-		SWTTools.bind(this.flag2Holder, checkBox);
-	}
-
-	private void buildNotFlag2CheckBox(Composite parent) {
-		Button checkBox = new Button(parent, SWT.CHECK);
-		checkBox.setText("not flag 2");
-		SWTTools.bind(this.notFlag2Holder, checkBox);
-	}
-
-	private void buildUnattachedCheckBox(Composite parent) {
-		Button checkBox = new Button(parent, SWT.CHECK);
-		checkBox.setText("unattached");
-		checkBox.addSelectionListener(this.buildUnattachedSelectionListener());
-	}
-
-	private SelectionListener buildUnattachedSelectionListener() {
-		return new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				System.out.println("unattached default selected: " + e);
-			}
-			public void widgetSelected(SelectionEvent e) {
-				System.out.println("unattached selected: " + e);
-			}
-		};
-	}
-
-	private void buildControlPanel(Composite parent, Control checkBoxPanel) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(checkBoxPanel);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildFlipFlag1Button(panel);
-		this.buildNotFlag2ToggleButton(panel);
-		this.buildClearModelButton(panel);
-		this.buildRestoreModelButton(panel);
-		this.buildPrintModelButton(panel);
-	}
-
-	private void buildFlipFlag1Button(Composite parent) {
-		this.buildFlipFlag1ACI().fill(parent);
-	}
-
-	private ActionContributionItem buildFlipFlag1ACI() {
-		Action action = new Action("flip flag 1", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				CheckBoxModelBindingUITest.this.flipFlag1();
-			}
-		};
-		action.setToolTipText("flip flag 1");
-		return new ActionContributionItem(action);
-	}
-
-	void flipFlag1() {
-		this.testModel.setFlag1( ! this.testModel.isFlag1());
-	}
-
-	private void buildNotFlag2ToggleButton(Composite parent) {
-		Button checkBox = new Button(parent, SWT.TOGGLE);
-		checkBox.setText("not flag 2");
-		SWTTools.bind(this.notFlag2Holder, checkBox);
-	}
-
-	private void buildClearModelButton(Composite parent) {
-		this.buildClearModelACI().fill(parent);
-	}
-
-	private ActionContributionItem buildClearModelACI() {
-		Action action = new Action("clear model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				CheckBoxModelBindingUITest.this.clearModel();
-			}
-		};
-		action.setToolTipText("clear model");
-		return new ActionContributionItem(action);
-	}
-
-	void clearModel() {
-		this.testModelHolder.setValue(null);
-	}
-
-	private void buildRestoreModelButton(Composite parent) {
-		this.buildRestoreModelACI().fill(parent);
-	}
-
-	private ActionContributionItem buildRestoreModelACI() {
-		Action action = new Action("restore model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				CheckBoxModelBindingUITest.this.restoreModel();
-			}
-		};
-		action.setToolTipText("restore model");
-		return new ActionContributionItem(action);
-	}
-
-	void restoreModel() {
-		this.testModelHolder.setValue(this.testModel);
-	}
-
-	private void buildPrintModelButton(Composite parent) {
-		this.buildPrintModelACI().fill(parent);
-	}
-
-	private ActionContributionItem buildPrintModelACI() {
-		Action action = new Action("print model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				CheckBoxModelBindingUITest.this.printModel();
-			}
-		};
-		action.setToolTipText("print model");
-		return new ActionContributionItem(action);
-	}
-
-	void printModel() {
-		System.out.println("flag 1: " + this.testModel.isFlag1());
-		System.out.println("flag 2: " + this.testModel.isFlag2());
-		System.out.println("not flag 2: " + this.testModel.isNotFlag2());
-		System.out.println("***");
-	}
-
-
-	public static class TestModel extends AbstractModel {
-		private boolean flag1;
-			public static final String FLAG1_PROPERTY = "flag1";
-		private boolean flag2;
-			public static final String FLAG2_PROPERTY = "flag2";
-		private boolean notFlag2;
-			public static final String NOT_FLAG2_PROPERTY = "notFlag2";
-	
-		public TestModel(boolean flag1, boolean flag2) {
-			this.flag1 = flag1;
-			this.flag2 = flag2;
-			this.notFlag2 = ! flag2;
-		}
-		public boolean isFlag1() {
-			return this.flag1;
-		}
-		public void setFlag1(boolean flag1) {
-			boolean old = this.flag1;
-			this.flag1 = flag1;
-			this.firePropertyChanged(FLAG1_PROPERTY, old, flag1);
-		}
-		public boolean isFlag2() {
-			return this.flag2;
-		}
-		public void setFlag2(boolean flag2) {
-			boolean old = this.flag2;
-			this.flag2 = flag2;
-			this.firePropertyChanged(FLAG2_PROPERTY, old, flag2);
-	
-			old = this.notFlag2;
-			this.notFlag2 = ! flag2;
-			this.firePropertyChanged(NOT_FLAG2_PROPERTY, old, this.notFlag2);
-		}
-		public boolean isNotFlag2() {
-			return this.notFlag2;
-		}
-		public void setNotFlag2(boolean notFlag2) {
-			this.setFlag2( ! notFlag2);
-		}
-		@Override
-		public String toString() {
-			return "TestModel(" + this.isFlag1() + " - " + this.isFlag2() + ")";
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/DropDownListBoxModelBindingUITest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/DropDownListBoxModelBindingUITest.java
deleted file mode 100644
index 65499c2..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/DropDownListBoxModelBindingUITest.java
+++ /dev/null
@@ -1,665 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.utility.swt;
-
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.window.ApplicationWindow;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.ui.internal.utility.swt.SWTTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelWrapper;
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-/**
- * Play around with a set of read-only combo-boxes.
- */
-@SuppressWarnings("nls")
-public class DropDownListBoxModelBindingUITest
-	extends ApplicationWindow
-{
-	final TaskList taskList;
-	private final WritablePropertyValueModel<TaskList> taskListHolder;
-	private Text taskTextField;
-
-	public static void main(String[] args) throws Exception {
-		Window window = new DropDownListBoxModelBindingUITest(args);
-		window.setBlockOnOpen(true);
-		window.open();
-		Display.getCurrent().dispose();
-		System.exit(0);
-	}
-
-	private DropDownListBoxModelBindingUITest(@SuppressWarnings("unused") String[] args) {
-		super(null);
-		this.taskList = new TaskList();
-		this.taskListHolder = new SimplePropertyValueModel<TaskList>(this.taskList);
-		this.taskList.addTask("swim");
-		this.taskList.addTask("bike");
-		this.taskList.addTask("run");
-		Task rest = this.taskList.addTask("rest");
-		this.taskList.addTask("repeat");
-		this.taskList.setPriorityTask(rest);
-	}
-
-	@Override
-	protected Control createContents(Composite parent) {
-		((Shell) parent).setText(this.getClass().getSimpleName());
-		parent.setSize(800, 300);
-		Composite mainPanel = new Composite(parent, SWT.NONE);
-		mainPanel.setLayout(new FormLayout());
-		Control taskListPanel = this.buildTaskListPanel(mainPanel);
-		this.buildControlPanel(mainPanel, taskListPanel);
-		return mainPanel;
-	}
-
-	private Control buildTaskListPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100, -30);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FormLayout());
-		this.buildTaskListPanel_(panel);  // false = native (Combo)
-
-		return panel;
-	}
-
-	private Control buildTaskListPanel_(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(50);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FormLayout());
-		this.buildPrimitiveTaskListPanel(panel);
-		this.buildObjectTaskListPanel(panel);
-
-		return panel;
-	}
-
-	private void buildPrimitiveTaskListPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(50);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildUnsortedPrimitiveListPanel(panel);
-		this.buildStandardSortedPrimitiveListPanel(panel);
-		this.buildCustomSortedPrimitiveListPanel(panel);
-	}
-
-	private void buildObjectTaskListPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(50);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildUnsortedObjectListPanel(panel);
-		this.buildStandardSortedObjectListPanel(panel);
-		this.buildCustomSortedObjectListPanel(panel);
-	}
-
-	private void buildUnsortedPrimitiveListPanel(Composite parent) {
-		String label = "primitive unsorted";
-		this.buildComboBoxPanel(parent, label, this.buildUnsortedPrimitiveListModel(), this.buildPriorityTaskNameAdapter());
-	}
-
-	private void buildStandardSortedPrimitiveListPanel(Composite parent) {
-		String label = "primitive sorted";
-		this.buildComboBoxPanel(parent, label, this.buildStandardSortedPrimitiveListModel(), this.buildPriorityTaskNameAdapter());
-	}
-
-	private void buildCustomSortedPrimitiveListPanel(Composite parent) {
-		String label = "primitive reverse sorted";
-		this.buildComboBoxPanel(parent, label, this.buildCustomSortedPrimitiveListModel(), this.buildPriorityTaskNameAdapter());
-	}
-
-	private void buildUnsortedObjectListPanel(Composite parent) {
-		String label = "object unsorted";
-		this.buildComboBoxPanel(parent, label, this.buildUnsortedObjectListModel(), this.buildPriorityTaskAdapter());
-	}
-
-	private void buildStandardSortedObjectListPanel(Composite parent) {
-		String label = "object sorted";
-		this.buildComboBoxPanel(parent, label, this.buildStandardSortedObjectListModel(), this.buildPriorityTaskAdapter());
-	}
-
-	private void buildCustomSortedObjectListPanel(Composite parent) {
-		String label = "object reverse sorted";
-		this.buildComboBoxPanel(parent, label, this.buildCustomSortedObjectListModel(), this.buildPriorityTaskAdapter());
-	}
-
-	private ListValueModel<String> buildUnsortedPrimitiveListModel() {
-		return this.buildPrimitiveTaskListAdapter();
-	}
-
-	private ListValueModel<String> buildStandardSortedPrimitiveListModel() {
-		return new SortedListValueModelWrapper<String>(this.buildPrimitiveTaskListAdapter());
-	}
-
-	private ListValueModel<String> buildCustomSortedPrimitiveListModel() {
-		return new SortedListValueModelWrapper<String>(this.buildPrimitiveTaskListAdapter(), this.buildCustomStringComparator());
-	}
-
-	private ListValueModel<Task> buildUnsortedObjectListModel() {
-		return this.buildObjectTaskListAdapter();
-	}
-
-	private ListValueModel<Task> buildStandardSortedObjectListModel() {
-		return new SortedListValueModelWrapper<Task>(this.buildObjectTaskListAdapter());
-	}
-
-	private ListValueModel<Task> buildCustomSortedObjectListModel() {
-		return new SortedListValueModelWrapper<Task>(this.buildObjectTaskListAdapter(), this.buildCustomTaskComparator());
-	}
-
-	private <E> void buildComboBoxPanel(Composite parent, String label, ListValueModel<E> model, WritablePropertyValueModel<E> selectedItemModel) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		panel.setLayout(new FormLayout());
-
-		Label comboBoxLabel = new Label(panel, SWT.LEFT | SWT.VERTICAL);
-		comboBoxLabel.setText(label);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0, 3);
-			fd.bottom = new FormAttachment(0, 20);
-			fd.left = new FormAttachment(0, 5);
-			fd.right = new FormAttachment(100);
-		comboBoxLabel.setLayoutData(fd);
-
-		Combo comboBox = this.buildComboBox(panel);
-		fd = new FormData();
-			fd.top = new FormAttachment(comboBoxLabel);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		comboBox.setLayoutData(fd);
-		SWTTools.bind(model, selectedItemModel, comboBox);  // use #toString()
-	}
-
-	private Combo buildComboBox(Composite parent) {
-		return new Combo(parent, SWT.READ_ONLY);
-	}
-
-	private Comparator<String> buildCustomStringComparator() {
-		return new Comparator<String>() {
-			public int compare(String s1, String s2) {
-				return s2.compareTo(s1);
-			}
-		};
-	}
-
-	private Comparator<Task> buildCustomTaskComparator() {
-		return new Comparator<Task>() {
-			public int compare(Task to1, Task to2) {
-				return to2.compareTo(to1);
-			}
-		};
-	}
-
-	private ListValueModel<String> buildPrimitiveTaskListAdapter() {
-		return new ListAspectAdapter<TaskList, String>(this.taskListHolder, TaskList.TASK_NAMES_LIST) {
-			@Override
-			protected ListIterator<String> listIterator_() {
-				return this.subject.taskNames();
-			}
-		};
-	}
-
-	private ListValueModel<Task> buildObjectTaskListAdapter() {
-		return new ListAspectAdapter<TaskList, Task>(this.taskListHolder, TaskList.TASKS_LIST) {
-			@Override
-			protected ListIterator<Task> listIterator_() {
-				return this.subject.tasks();
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Task> buildPriorityTaskAdapter() {
-		return new PriorityTaskAdapter(this.taskListHolder);
-	}
-
-	static class PriorityTaskAdapter
-		extends PropertyAspectAdapter<TaskList, Task>
-	{
-		PriorityTaskAdapter(WritablePropertyValueModel<TaskList> taskListHolder) {
-			super(taskListHolder, TaskList.PRIORITY_TASK_PROPERTY);
-		}
-		@Override
-		protected Task buildValue_() {
-			return this.subject.getPriorityTask();
-		}
-		@Override
-		protected void setValue_(Task value) {
-			this.subject.setPriorityTask(value);
-		}
-	}
-
-	private WritablePropertyValueModel<String> buildPriorityTaskNameAdapter() {
-		return new PriorityTaskNameAdapter(this.taskListHolder);
-	}
-
-	static class PriorityTaskNameAdapter
-		extends PropertyAspectAdapter<TaskList, String>
-	{
-		PriorityTaskNameAdapter(WritablePropertyValueModel<TaskList> taskListHolder) {
-			super(taskListHolder, TaskList.PRIORITY_TASK_NAME_PROPERTY);
-		}
-		@Override
-		protected String buildValue_() {
-			return this.subject.getPriorityTaskName();
-		}
-		@Override
-		protected void setValue_(String value) {
-			// ignore
-		}
-	}
-
-	private void buildControlPanel(Composite parent, Control taskListPanel) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(taskListPanel);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FormLayout());
-		Control misc = this.buildMiscTaskPanel(panel);
-		this.buildAddRemoveTaskPanel(panel, misc);
-	}
-
-	// is there a better way to associate an ACI with form data?
-	private Control buildMiscTaskPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(100, -400);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildClearListACI().fill(panel);
-		this.buildClearModelACI().fill(panel);
-		this.buildRestoreModelACI().fill(panel);
-		this.buildChangePriorityTaskACI().fill(panel);
-		this.buildClearPriorityTaskACI().fill(panel);
-		return panel;
-	}
-
-	private ActionContributionItem buildClearListACI() {
-		Action action = new Action("clear list", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				DropDownListBoxModelBindingUITest.this.clearTasks();
-			}
-		};
-		action.setToolTipText("clear all the tasks");
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildClearModelACI() {
-		Action action = new Action("clear model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				DropDownListBoxModelBindingUITest.this.clearModel();
-			}
-		};
-		action.setToolTipText("clear the task list model");
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildRestoreModelACI() {
-		Action action = new Action("restore model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				DropDownListBoxModelBindingUITest.this.restoreModel();
-			}
-		};
-		action.setToolTipText("restore the task list model");
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildChangePriorityTaskACI() {
-		Action action = new Action("change priority", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				DropDownListBoxModelBindingUITest.this.changePriorityTask();
-			}
-		};
-		action.setToolTipText("change the priority task");
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildClearPriorityTaskACI() {
-		Action action = new Action("clear priority", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				DropDownListBoxModelBindingUITest.this.clearPriorityTask();
-			}
-		};
-		action.setToolTipText("clear the priority task");
-		return new ActionContributionItem(action);
-	}
-
-	private void buildAddRemoveTaskPanel(Composite parent, Control clearButton) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(clearButton);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FormLayout());
-		Control addButton = this.buildAddButton(panel);
-		Control removeButton = this.buildRemoveButton(panel);
-		this.buildTaskTextField(panel, addButton, removeButton);
-	}
-
-	// is there a better way to associate an ACI with form data?
-	private Control buildAddButton(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(0, 50);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildAddACI().fill(panel);
-		return panel;
-	}
-
-	private ActionContributionItem buildAddACI() {
-		Action action = new Action("add", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				DropDownListBoxModelBindingUITest.this.addTask();
-			}
-		};
-		action.setToolTipText("add a task with the name in the entry field");
-		return new ActionContributionItem(action);
-	}
-
-	// is there a better way to associate an ACI with form data?
-	private Control buildRemoveButton(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(100, -50);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildRemoveACI().fill(panel);
-		return panel;
-	}
-
-	private ActionContributionItem buildRemoveACI() {
-		Action action = new Action("remove", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				DropDownListBoxModelBindingUITest.this.removeTask();
-			}
-		};
-		action.setToolTipText("remove the task with the name in the entry field");
-		return new ActionContributionItem(action);
-	}
-
-	private void buildTaskTextField(Composite parent, Control addButton, Control removeButton) {
-		this.taskTextField = new Text(parent, SWT.SINGLE | SWT.BORDER);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(addButton);
-			fd.right = new FormAttachment(removeButton);
-		this.taskTextField.setLayoutData(fd);
-	}
-
-	private String taskTextFieldText() {
-		return this.taskTextField.getText();
-	}
-
-	void addTask() {
-		String taskText = this.taskTextFieldText();
-		if (taskText.length() != 0) {
-			this.taskList.addTask(taskText);
-		}
-	}
-
-	void removeTask() {
-		String task = this.taskTextFieldText();
-		if (task.length() != 0) {
-			this.taskList.removeTask(task);
-		}
-	}
-
-	void clearTasks() {
-		this.taskList.clearTasks();
-	}
-
-	void clearModel() {
-		this.taskListHolder.setValue(null);
-	}
-
-	void restoreModel() {
-		this.taskListHolder.setValue(this.taskList);
-	}
-
-	void changePriorityTask() {
-		boolean found = false;
-		for (Task task : this.taskList.getTasks()) {
-			if (this.taskList.getPriorityTask() == task) {
-				found = true;
-			} else {
-				if (found) {
-					this.taskList.setPriorityTask(task);
-					return;
-				}
-			}
-		}
-		Iterator<Task> tasks = this.taskList.tasks();
-		if (tasks.hasNext()) {
-			this.taskList.setPriorityTask(tasks.next());
-		}
-	}
-
-	void clearPriorityTask() {
-		this.taskList.setPriorityTask(null);
-	}
-
-
-	// ********** TaskList **********
-
-	// note absence of validation...
-	public static class TaskList extends AbstractModel {
-		private final List<String> taskNames = new ArrayList<String>();
-			public static final String TASK_NAMES_LIST = "taskNames";
-		private final List<Task> tasks = new ArrayList<Task>();
-			public static final String TASKS_LIST = "tasks";
-		private String priorityTaskName = null;
-			public static final String PRIORITY_TASK_NAME_PROPERTY = "priorityTaskName";
-		private Task priorityTask = null;
-			public static final String PRIORITY_TASK_PROPERTY = "priorityTask";
-		public TaskList() {
-			super();
-		}
-		public ListIterator<String> taskNames() {
-			return this.taskNames.listIterator();
-		}
-		public Iterable<Task> getTasks() {
-			return this.tasks;
-		}
-		public ListIterator<Task> tasks() {
-			return this.tasks.listIterator();
-		}
-		public String getPriorityTaskName() {
-			return this.priorityTaskName;
-		}
-		public Task getPriorityTask() {
-			return this.priorityTask;
-		}
-		public Task addTask(String taskName) {
-			this.addItemToList(taskName, this.taskNames, TASK_NAMES_LIST);
-			Task task = new Task(taskName);
-			this.addItemToList(task, this.tasks, TASKS_LIST);
-			return task;
-		}		
-		public void removeTask(String taskName) {
-			int index = this.taskNames.indexOf(taskName);
-			if (index != -1) {
-				Task task = this.tasks.get(index);
-				if (task == this.priorityTask) {
-					this.setPriorityTask(null);
-				}
-				// assume the indexes match...
-				this.removeItemFromList(index, this.taskNames, TASK_NAMES_LIST);
-				this.removeItemFromList(index, this.tasks, TASKS_LIST);
-			}
-		}
-		public void clearTasks() {
-			this.setPriorityTask(null);
-			this.clearList(this.taskNames, TASK_NAMES_LIST);
-			this.clearList(this.tasks, TASKS_LIST);
-		}
-		private void setPriorityTaskName(String priorityTaskName) {
-			String old = this.priorityTaskName;
-			this.priorityTaskName = priorityTaskName;
-			this.firePropertyChanged(PRIORITY_TASK_NAME_PROPERTY, old, priorityTaskName);
-		}
-		public void setPriorityTask(Task priorityTask) {
-			Task old = this.priorityTask;
-			this.priorityTask = priorityTask;
-			this.firePropertyChanged(PRIORITY_TASK_PROPERTY, old, priorityTask);
-			this.setPriorityTaskName((priorityTask == null) ? null : priorityTask.getName());
-		}
-	}
-
-
-	// ********** Task **********
-
-	public static class Task extends AbstractModel implements Displayable {
-		private String name;
-		private int instanceCount;
-		private static int INSTANCE_COUNT = 1;
-		public Task(String name) {
-			this.name = name;
-			this.instanceCount = INSTANCE_COUNT++;
-		}
-		public String displayString() {
-			return this.name + ": " + this.instanceCount;
-		}
-		public int compareTo(Displayable o) {
-			return DEFAULT_COMPARATOR.compare(this, o);
-		}
-		public String getName() {
-			return this.name;
-		}
-		public void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(DISPLAY_STRING_PROPERTY, old, name);
-		}
-		@Override
-		public String toString() {
-			return this.displayString();
-		}
-	}
-
-	public interface Displayable extends Model, Comparable<Displayable> {
-	
-		String displayString();
-			String DISPLAY_STRING_PROPERTY = "displayString";
-	
-	
-		// ********** helper implementations **********
-	
-		Collator DEFAULT_COLLATOR = Collator.getInstance();
-	
-		Comparator<Displayable> DEFAULT_COMPARATOR =
-			new Comparator<Displayable>() {
-				public int compare(Displayable d1, Displayable d2) {
-					// disallow duplicates based on object identity
-					if (d1 == d2) {
-						return 0;
-					}
-	
-					// first compare display strings using the default collator
-					int result = DEFAULT_COLLATOR.compare(d1.displayString(), d2.displayString());
-					if (result != 0) {
-						return result;
-					}
-	
-					// then compare using object-id
-					result = System.identityHashCode(d1) - System.identityHashCode(d2);
-					if (result != 0) {
-						return result;
-					}
-	
-					// It's unlikely that we get to this point; but, just in case, we will return -1.
-					// Unfortunately, this introduces some mild unpredictability to the sort order
-					// (unless the objects are always passed into this method in the same order).
-					return -1;		// if all else fails, indicate that o1 < o2
-				}
-				@Override
-				public String toString() {
-					return "Displayable.DEFAULT_COMPARATOR";
-				}
-			};
-	
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/ListBoxModelBindingUITest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/ListBoxModelBindingUITest.java
deleted file mode 100644
index ff19beb..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/ListBoxModelBindingUITest.java
+++ /dev/null
@@ -1,627 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.utility.swt;
-
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.window.ApplicationWindow;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.ui.internal.utility.swt.SWTTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.CollectionAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelWrapper;
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.WritableCollectionValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-/**
- * Play around with a set of list boxes.
- */
-@SuppressWarnings("nls")
-public class ListBoxModelBindingUITest
-	extends ApplicationWindow
-{
-	final TaskList taskList;
-	private final WritablePropertyValueModel<TaskList> taskListHolder;
-	private Text taskTextField;
-
-	public static void main(String[] args) throws Exception {
-		Window window = new ListBoxModelBindingUITest(args);
-		window.setBlockOnOpen(true);
-		window.open();
-		Display.getCurrent().dispose();
-		System.exit(0);
-	}
-
-	private ListBoxModelBindingUITest(@SuppressWarnings("unused") String[] args) {
-		super(null);
-		this.taskList = new TaskList();
-		this.taskListHolder = new SimplePropertyValueModel<TaskList>(this.taskList);
-		this.taskList.addTask("swim");
-		this.taskList.addTask("bike");
-		this.taskList.addTask("run");
-		Task rest = this.taskList.addTask("rest");
-		this.taskList.addPriorityTask(rest);
-		Task repeat = this.taskList.addTask("repeat");
-		this.taskList.addPriorityTask(repeat);
-	}
-
-	@Override
-	protected Control createContents(Composite parent) {
-		((Shell) parent).setText(this.getClass().getSimpleName());
-		parent.setSize(800, 400);
-		Composite mainPanel = new Composite(parent, SWT.NONE);
-		mainPanel.setLayout(new FormLayout());
-		Control taskListPanel = this.buildTaskListPanel(mainPanel);
-		this.buildControlPanel(mainPanel, taskListPanel);
-		return mainPanel;
-	}
-
-	private Control buildTaskListPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100, -30);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FormLayout());
-		this.buildPrimitiveTaskListPanel(panel);
-		this.buildObjectTaskListPanel(panel);
-
-		return panel;
-	}
-
-	private void buildPrimitiveTaskListPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(50);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildUnsortedPrimitiveListPanel(panel);
-		this.buildStandardSortedPrimitiveListPanel(panel);
-		this.buildCustomSortedPrimitiveListPanel(panel);
-	}
-
-	private void buildObjectTaskListPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(50);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildUnsortedObjectListPanel(panel);
-		this.buildStandardSortedObjectListPanel(panel);
-		this.buildCustomSortedObjectListPanel(panel);
-	}
-
-	private void buildUnsortedPrimitiveListPanel(Composite parent) {
-		this.buildListPanel(parent, "primitive unsorted", this.buildUnsortedPrimitiveListModel(), new SimpleCollectionValueModel<String>());
-	}
-
-	private void buildStandardSortedPrimitiveListPanel(Composite parent) {
-		this.buildListPanel(parent, "primitive sorted", this.buildStandardSortedPrimitiveListModel(), new SimpleCollectionValueModel<String>());
-	}
-
-	private void buildCustomSortedPrimitiveListPanel(Composite parent) {
-		this.buildListPanel(parent, "primitive reverse sorted", this.buildCustomSortedPrimitiveListModel(), new SimpleCollectionValueModel<String>());
-	}
-
-	private void buildUnsortedObjectListPanel(Composite parent) {
-		this.buildListPanel(parent, "object unsorted", this.buildUnsortedObjectListModel(), this.buildPriorityTaskListAdapter());
-	}
-
-	private void buildStandardSortedObjectListPanel(Composite parent) {
-		this.buildListPanel(parent, "object sorted", this.buildStandardSortedObjectListModel(), this.buildPriorityTaskListAdapter());
-	}
-
-	private void buildCustomSortedObjectListPanel(Composite parent) {
-		this.buildListPanel(parent, "object reverse sorted", this.buildCustomSortedObjectListModel(), this.buildPriorityTaskListAdapter());
-	}
-
-	private ListValueModel<String> buildUnsortedPrimitiveListModel() {
-		return this.buildPrimitiveTaskListAdapter();
-	}
-
-	private ListValueModel<String> buildStandardSortedPrimitiveListModel() {
-		return new SortedListValueModelWrapper<String>(this.buildPrimitiveTaskListAdapter());
-	}
-
-	private ListValueModel<String> buildCustomSortedPrimitiveListModel() {
-		return new SortedListValueModelWrapper<String>(this.buildPrimitiveTaskListAdapter(), this.buildCustomStringComparator());
-	}
-
-	private ListValueModel<Task> buildUnsortedObjectListModel() {
-		return this.buildObjectTaskListAdapter();
-	}
-
-	private ListValueModel<Task> buildStandardSortedObjectListModel() {
-		return new SortedListValueModelWrapper<Task>(this.buildObjectTaskListAdapter());
-	}
-
-	private ListValueModel<Task> buildCustomSortedObjectListModel() {
-		return new SortedListValueModelWrapper<Task>(this.buildObjectTaskListAdapter(), this.buildCustomTaskComparator());
-	}
-
-	private <E> org.eclipse.swt.widgets.List buildListPanel(Composite parent, String label, ListValueModel<E> model, WritableCollectionValueModel<E> selectedItemsModel) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		panel.setLayout(new FormLayout());
-
-		Label listLabel = new Label(panel, SWT.LEFT | SWT.VERTICAL);
-		listLabel.setText(label);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0, 3);
-			fd.bottom = new FormAttachment(0, 20);
-			fd.left = new FormAttachment(0, 5);
-			fd.right = new FormAttachment(100);
-		listLabel.setLayoutData(fd);
-
-		org.eclipse.swt.widgets.List listBox = new org.eclipse.swt.widgets.List(panel, SWT.MULTI | SWT.BORDER);
-		fd = new FormData();
-			fd.top = new FormAttachment(listLabel);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		listBox.setLayoutData(fd);
-		SWTTools.bind(model, selectedItemsModel, listBox);  // use #toString()
-		return listBox;
-	}
-
-	private Comparator<String> buildCustomStringComparator() {
-		return new Comparator<String>() {
-			public int compare(String s1, String s2) {
-				return s2.compareTo(s1);
-			}
-		};
-	}
-
-	private Comparator<Task> buildCustomTaskComparator() {
-		return new Comparator<Task>() {
-			public int compare(Task to1, Task to2) {
-				return to2.compareTo(to1);
-			}
-		};
-	}
-
-	private ListValueModel<String> buildPrimitiveTaskListAdapter() {
-		return new ListAspectAdapter<TaskList, String>(this.taskListHolder, TaskList.TASK_NAMES_LIST) {
-			@Override
-			protected ListIterator<String> listIterator_() {
-				return this.subject.taskNames();
-			}
-		};
-	}
-
-	private ListValueModel<Task> buildObjectTaskListAdapter() {
-		return new ListAspectAdapter<TaskList, Task>(this.taskListHolder, TaskList.TASKS_LIST) {
-			@Override
-			protected ListIterator<Task> listIterator_() {
-				return this.subject.tasks();
-			}
-		};
-	}
-
-	private WritableCollectionValueModel<Task> buildPriorityTaskListAdapter() {
-		return new PriorityTaskListAdapter(this.taskListHolder);
-	}
-
-	static class PriorityTaskListAdapter
-		extends CollectionAspectAdapter<TaskList, Task>
-		implements WritableCollectionValueModel<Task>
-	{
-		PriorityTaskListAdapter(WritablePropertyValueModel<TaskList> taskListHolder) {
-			super(taskListHolder, TaskList.PRIORITY_TASKS_COLLECTION);
-		}
-		@Override
-		protected Iterator<Task> iterator_() {
-			return this.subject.priorityTasks();
-		}
-		public void setValues(Iterable<Task> values) {
-			this.subject.setPriorityTasks(values);
-		}
-	}
-
-	private void buildControlPanel(Composite parent, Control taskListPanel) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(taskListPanel);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FormLayout());
-		Control misc = this.buildMiscTaskPanel(panel);
-		this.buildAddRemoveTaskPanel(panel, misc);
-	}
-
-	// is there a better way to associate an ACI with form data?
-	private Control buildMiscTaskPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(100, -400);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildClearListACI().fill(panel);
-		this.buildClearModelACI().fill(panel);
-		this.buildRestoreModelACI().fill(panel);
-		this.buildAddPriorityTaskACI().fill(panel);
-		this.buildRemovePriorityTaskACI().fill(panel);
-		this.buildClearPriorityTasksACI().fill(panel);
-		return panel;
-	}
-
-	private ActionContributionItem buildClearListACI() {
-		Action action = new Action("clear list", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				ListBoxModelBindingUITest.this.clearTasks();
-			}
-		};
-		action.setToolTipText("clear all the tasks");
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildClearModelACI() {
-		Action action = new Action("clear model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				ListBoxModelBindingUITest.this.clearModel();
-			}
-		};
-		action.setToolTipText("clear the task list model");
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildRestoreModelACI() {
-		Action action = new Action("restore model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				ListBoxModelBindingUITest.this.restoreModel();
-			}
-		};
-		action.setToolTipText("restore the task list model");
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildAddPriorityTaskACI() {
-		Action action = new Action("add priority", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				ListBoxModelBindingUITest.this.addPriorityTask();
-			}
-		};
-		action.setToolTipText("add a task to the priority tasks");
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildRemovePriorityTaskACI() {
-		Action action = new Action("remove priority", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				ListBoxModelBindingUITest.this.removePriorityTask();
-			}
-		};
-		action.setToolTipText("remove a task from the priority tasks");
-		return new ActionContributionItem(action);
-	}
-
-	private ActionContributionItem buildClearPriorityTasksACI() {
-		Action action = new Action("clear priority", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				ListBoxModelBindingUITest.this.clearPriorityTasks();
-			}
-		};
-		action.setToolTipText("clear the priority tasks");
-		return new ActionContributionItem(action);
-	}
-
-	private void buildAddRemoveTaskPanel(Composite parent, Control clearButton) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(clearButton);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FormLayout());
-		Control addButton = this.buildAddButton(panel);
-		Control removeButton = this.buildRemoveButton(panel);
-		this.buildTaskTextField(panel, addButton, removeButton);
-	}
-
-	// is there a better way to associate an ACI with form data?
-	private Control buildAddButton(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(0, 50);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildAddACI().fill(panel);
-		return panel;
-	}
-
-	private ActionContributionItem buildAddACI() {
-		Action action = new Action("add", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				ListBoxModelBindingUITest.this.addTask();
-			}
-		};
-		action.setToolTipText("add a task with the name in the entry field");
-		return new ActionContributionItem(action);
-	}
-
-	// is there a better way to associate an ACI with form data?
-	private Control buildRemoveButton(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(100, -50);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildRemoveACI().fill(panel);
-		return panel;
-	}
-
-	private ActionContributionItem buildRemoveACI() {
-		Action action = new Action("remove", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				ListBoxModelBindingUITest.this.removeTask();
-			}
-		};
-		action.setToolTipText("remove the task with the name in the entry field");
-		return new ActionContributionItem(action);
-	}
-
-	private void buildTaskTextField(Composite parent, Control addButton, Control removeButton) {
-		this.taskTextField = new Text(parent, SWT.SINGLE | SWT.BORDER);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(addButton);
-			fd.right = new FormAttachment(removeButton);
-		this.taskTextField.setLayoutData(fd);
-	}
-
-	private String taskTextFieldText() {
-		return this.taskTextField.getText();
-	}
-
-	void addTask() {
-		String taskText = this.taskTextFieldText();
-		if (taskText.length() != 0) {
-			this.taskList.addTask(taskText);
-		}
-	}
-
-	void removeTask() {
-		String task = this.taskTextFieldText();
-		if (task.length() != 0) {
-			this.taskList.removeTask(task);
-		}
-	}
-
-	void clearTasks() {
-		this.taskList.clearTasks();
-	}
-
-	void clearModel() {
-		this.taskListHolder.setValue(null);
-	}
-
-	void restoreModel() {
-		this.taskListHolder.setValue(this.taskList);
-	}
-
-	void addPriorityTask() {
-		Iterator<Task> tasks = this.taskList.tasks();
-		while (tasks.hasNext()) {
-			if (this.taskList.addPriorityTask(tasks.next())) {
-				return;
-			}
-		}
-	}
-
-	void removePriorityTask() {
-		Iterator<Task> pTasks = this.taskList.priorityTasks();
-		if (pTasks.hasNext()) {
-			this.taskList.removePriorityTask(pTasks.next());
-		}
-	}
-
-	void clearPriorityTasks() {
-		this.taskList.clearPriorityTasks();
-	}
-
-
-	// ********** TaskList **********
-
-	// note absence of validation...
-	public static class TaskList extends AbstractModel {
-		private final List<String> taskNames = new ArrayList<String>();
-			public static final String TASK_NAMES_LIST = "taskNames";
-		private final List<Task> tasks = new ArrayList<Task>();
-			public static final String TASKS_LIST = "tasks";
-		private final Collection<Task> priorityTasks = new HashSet<Task>();
-			public static final String PRIORITY_TASKS_COLLECTION = "priorityTasks";
-		public TaskList() {
-			super();
-		}
-		public ListIterator<String> taskNames() {
-			return this.taskNames.listIterator();
-		}
-		public ListIterator<Task> tasks() {
-			return this.tasks.listIterator();
-		}
-		public Iterator<Task> priorityTasks() {
-			return this.priorityTasks.iterator();
-		}
-		public Task addTask(String taskName) {
-			this.addItemToList(taskName, this.taskNames, TASK_NAMES_LIST);
-			Task task = new Task(taskName);
-			this.addItemToList(task, this.tasks, TASKS_LIST);
-			return task;
-		}		
-		public void removeTask(String taskName) {
-			int index = this.taskNames.indexOf(taskName);
-			if (index != -1) {
-				this.removeItemFromList(index, this.taskNames, TASK_NAMES_LIST);
-				// assume the indexes match...
-				Task removedTask = this.removeItemFromList(index, this.tasks, TASKS_LIST);
-				this.removeItemFromCollection(removedTask, this.priorityTasks, PRIORITY_TASKS_COLLECTION);
-			}
-		}
-		public void clearTasks() {
-			this.clearCollection(this.priorityTasks, PRIORITY_TASKS_COLLECTION);
-			this.clearList(this.taskNames, TASK_NAMES_LIST);
-			this.clearList(this.tasks, TASKS_LIST);
-		}
-		public boolean addPriorityTask(Task task) {
-			return this.addItemToCollection(task, this.priorityTasks, PRIORITY_TASKS_COLLECTION);
-		}		
-		public void removePriorityTask(Task task) {
-			this.removeItemFromCollection(task, this.priorityTasks, PRIORITY_TASKS_COLLECTION);
-		}
-		public void clearPriorityTasks() {
-			this.clearCollection(this.priorityTasks, PRIORITY_TASKS_COLLECTION);
-		}
-		public void setPriorityTasks(Iterable<Task> tasks) {
-			this.priorityTasks.clear();
-			CollectionTools.addAll(this.priorityTasks, tasks);
-			this.fireCollectionChanged(PRIORITY_TASKS_COLLECTION, this.priorityTasks);
-		}
-	}
-
-
-	// ********** Task **********
-
-	public static class Task extends AbstractModel implements Displayable {
-		private String name;
-		private int instanceCount;
-		private static int INSTANCE_COUNT = 1;
-		public Task(String name) {
-			this.name = name;
-			this.instanceCount = INSTANCE_COUNT++;
-		}
-		public String displayString() {
-			return this.name + ": " + this.instanceCount;
-		}
-		public int compareTo(Displayable o) {
-			return DEFAULT_COMPARATOR.compare(this, o);
-		}
-		public String getName() {
-			return this.name;
-		}
-		public void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(DISPLAY_STRING_PROPERTY, old, name);
-		}
-		@Override
-		public String toString() {
-			return this.displayString();
-		}
-	}
-
-	public interface Displayable extends Model, Comparable<Displayable> {
-	
-		String displayString();
-			String DISPLAY_STRING_PROPERTY = "displayString";
-	
-	
-		// ********** helper implementations **********
-	
-		Collator DEFAULT_COLLATOR = Collator.getInstance();
-	
-		Comparator<Displayable> DEFAULT_COMPARATOR =
-			new Comparator<Displayable>() {
-				public int compare(Displayable d1, Displayable d2) {
-					// disallow duplicates based on object identity
-					if (d1 == d2) {
-						return 0;
-					}
-	
-					// first compare display strings using the default collator
-					int result = DEFAULT_COLLATOR.compare(d1.displayString(), d2.displayString());
-					if (result != 0) {
-						return result;
-					}
-	
-					// then compare using object-id
-					result = System.identityHashCode(d1) - System.identityHashCode(d2);
-					if (result != 0) {
-						return result;
-					}
-	
-					// It's unlikely that we get to this point; but, just in case, we will return -1.
-					// Unfortunately, this introduces some mild unpredictability to the sort order
-					// (unless the objects are always passed into this method in the same order).
-					return -1;		// if all else fails, indicate that o1 < o2
-				}
-				@Override
-				public String toString() {
-					return "Displayable.DEFAULT_COMPARATOR";
-				}
-			};
-	
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/TextFieldModelBindingUITest.java b/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/TextFieldModelBindingUITest.java
deleted file mode 100644
index 4b3cb04..0000000
--- a/jpa/tests/org.eclipse.jpt.ui.tests/src/org/eclipse/jpt/ui/tests/internal/utility/swt/TextFieldModelBindingUITest.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.tests.internal.utility.swt;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.window.ApplicationWindow;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.ui.internal.utility.swt.SWTTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-/**
- * Play around with a set of entry fields.
- */
-@SuppressWarnings("nls")
-public class TextFieldModelBindingUITest
-	extends ApplicationWindow
-{
-	private final TestModel testModel;
-		private static final String DEFAULT_NAME = "Scooby Doo";
-	private final WritablePropertyValueModel<TestModel> testModelHolder;
-	private final WritablePropertyValueModel<String> nameHolder;
-	private final WritablePropertyValueModel<String> allCapsNameHolder;
-
-
-	public static void main(String[] args) throws Exception {
-		Window window = new TextFieldModelBindingUITest();
-		window.setBlockOnOpen(true);
-		window.open();
-		Display.getCurrent().dispose();
-		System.exit(0);
-	}
-
-	private TextFieldModelBindingUITest() {
-		super(null);
-		this.testModel = new TestModel(DEFAULT_NAME);
-		this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel);
-		this.nameHolder = this.buildNameHolder(this.testModelHolder);
-		this.allCapsNameHolder = this.buildAllCapsNameHolder(this.testModelHolder);
-	}
-
-	private WritablePropertyValueModel<String> buildNameHolder(PropertyValueModel<TestModel> vm) {
-		return new PropertyAspectAdapter<TestModel, String>(vm, TestModel.NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.name();
-			}
-			@Override
-			protected void setValue_(String value) {
-				this.subject.setName(value);
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<String> buildAllCapsNameHolder(PropertyValueModel<TestModel> vm) {
-		return new PropertyAspectAdapter<TestModel, String>(vm, TestModel.NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.name().toUpperCase();
-			}
-			@Override
-			protected void setValue_(String value) {
-				// do nothing
-			}
-		};
-	}
-
-	@Override
-	protected Control createContents(Composite parent) {
-		((Shell) parent).setText(this.getClass().getSimpleName());
-		parent.setSize(400, 100);
-		Composite mainPanel = new Composite(parent, SWT.NONE);
-		mainPanel.setLayout(new FormLayout());
-		Control textFieldPanel = this.buildTextFieldPanel(mainPanel);
-		this.buildControlPanel(mainPanel, textFieldPanel);
-		return mainPanel;
-	}
-
-	private Control buildTextFieldPanel(Composite parent) {
-		Composite panel = new Composite(parent, SWT.NONE);
-
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(0);
-			fd.bottom = new FormAttachment(100, -35);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildNameTextField(panel);
-		this.buildReadOnlyNameTextField(panel);
-		this.buildAllCapsNameTextField(panel);
-
-		return panel;
-	}
-
-	private void buildNameTextField(Composite parent) {
-		Text textField = new Text(parent, SWT.SINGLE);
-		SWTTools.bind(this.nameHolder, textField);
-	}
-
-	private void buildReadOnlyNameTextField(Composite parent) {
-		Text textField = new Text(parent, SWT.SINGLE);
-		textField.setEnabled(false);
-		SWTTools.bind(this.nameHolder, textField);
-	}
-
-	private void buildAllCapsNameTextField(Composite parent) {
-		Text textField = new Text(parent, SWT.SINGLE);
-		textField.setEnabled(false);
-		SWTTools.bind(this.allCapsNameHolder, textField);
-	}
-
-	private void buildControlPanel(Composite parent, Control checkBoxPanel) {
-		Composite panel = new Composite(parent, SWT.NONE);
-		FormData fd = new FormData();
-			fd.top = new FormAttachment(checkBoxPanel);
-			fd.bottom = new FormAttachment(100);
-			fd.left = new FormAttachment(0);
-			fd.right = new FormAttachment(100);
-		panel.setLayoutData(fd);
-
-		panel.setLayout(new FillLayout());
-		this.buildResetNameButton(panel);
-		this.buildClearModelButton(panel);
-		this.buildRestoreModelButton(panel);
-		this.buildPrintModelButton(panel);
-	}
-
-	private void buildResetNameButton(Composite parent) {
-		this.buildResetNameACI().fill(parent);
-	}
-
-	private ActionContributionItem buildResetNameACI() {
-		Action action = new Action("reset name", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				TextFieldModelBindingUITest.this.resetName();
-			}
-		};
-		action.setToolTipText("reset name");
-		return new ActionContributionItem(action);
-	}
-
-	void resetName() {
-		this.testModel.setName(DEFAULT_NAME);
-	}
-
-	private void buildClearModelButton(Composite parent) {
-		this.buildClearModelACI().fill(parent);
-	}
-
-	private ActionContributionItem buildClearModelACI() {
-		Action action = new Action("clear model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				TextFieldModelBindingUITest.this.clearModel();
-			}
-		};
-		action.setToolTipText("clear model");
-		return new ActionContributionItem(action);
-	}
-
-	void clearModel() {
-		this.testModelHolder.setValue(null);
-	}
-
-	private void buildRestoreModelButton(Composite parent) {
-		this.buildRestoreModelACI().fill(parent);
-	}
-
-	private ActionContributionItem buildRestoreModelACI() {
-		Action action = new Action("restore model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				TextFieldModelBindingUITest.this.restoreModel();
-			}
-		};
-		action.setToolTipText("restore model");
-		return new ActionContributionItem(action);
-	}
-
-	void restoreModel() {
-		this.testModelHolder.setValue(this.testModel);
-	}
-
-	private void buildPrintModelButton(Composite parent) {
-		this.buildPrintModelACI().fill(parent);
-	}
-
-	private ActionContributionItem buildPrintModelACI() {
-		Action action = new Action("print model", IAction.AS_PUSH_BUTTON) {
-			@Override
-			public void run() {
-				TextFieldModelBindingUITest.this.printModel();
-			}
-		};
-		action.setToolTipText("print model");
-		return new ActionContributionItem(action);
-	}
-
-	void printModel() {
-		System.out.println("name: " + this.testModel.name());
-	}
-
-
-	// ********** model class **********
-
-	class TestModel extends AbstractModel {
-		private String name;
-			public static final String NAME_PROPERTY = "name";
-
-		public TestModel(String name) {
-			this.name = name;
-		}
-		public String name() {
-			return this.name;
-		}
-		public void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(NAME_PROPERTY, old, name);
-		}
-		@Override
-		public String toString() {
-			return "TestModel(" + this.name + ")";
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/.classpath b/jpa/tests/org.eclipse.jpt.utility.tests/.classpath
deleted file mode 100644
index ef8d91c..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/.classpath
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		<accessrules>
-			<accessrule kind="accessible" pattern="org/eclipse/jpt/utility/**"/>
-		</accessrules>
-	</classpathentry>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/.cvsignore b/jpa/tests/org.eclipse.jpt.utility.tests/.cvsignore
deleted file mode 100644
index c4ba612..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-bin
-@dot
-temp.folder
-build.xml
-javaCompiler...args
\ No newline at end of file
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/.project b/jpa/tests/org.eclipse.jpt.utility.tests/.project
deleted file mode 100644
index aa5271e..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.utility.tests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/.settings/org.eclipse.core.resources.prefs b/jpa/tests/org.eclipse.jpt.utility.tests/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index f68f9c2..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue Jan 15 11:12:26 EST 2008
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/.settings/org.eclipse.jdt.core.prefs b/jpa/tests/org.eclipse.jpt.utility.tests/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 84b5c4c..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun May 27 14:55:58 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/META-INF/MANIFEST.MF b/jpa/tests/org.eclipse.jpt.utility.tests/META-INF/MANIFEST.MF
deleted file mode 100644
index 7b45019..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,21 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.utility.tests
-Bundle-Version: 1.5.0.qualifier
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.jpt.utility;bundle-version="[1.2.0,2.0.0)",
- org.junit;bundle-version="3.8.0"
-Export-Package: org.eclipse.jpt.utility.tests.internal;x-internal:=true,
- org.eclipse.jpt.utility.tests.internal.enumerations;x-internal:=true,
- org.eclipse.jpt.utility.tests.internal.iterables;x-internal:=true,
- org.eclipse.jpt.utility.tests.internal.iterators;x-internal:=true,
- org.eclipse.jpt.utility.tests.internal.model;x-internal:=true,
- org.eclipse.jpt.utility.tests.internal.model.listener;x-internal:=true,
- org.eclipse.jpt.utility.tests.internal.model.value;x-internal:=true,
- org.eclipse.jpt.utility.tests.internal.model.value.prefs;x-internal:=true,
- org.eclipse.jpt.utility.tests.internal.model.value.swing;x-internal:=true,
- org.eclipse.jpt.utility.tests.internal.node;x-internal:=true,
- org.eclipse.jpt.utility.tests.internal.synchronizers;x-internal:=true
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/about.html b/jpa/tests/org.eclipse.jpt.utility.tests/about.html
deleted file mode 100644
index be534ba..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 02, 2008</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/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</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>
-
-</BODY>
-</HTML>
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/build.properties b/jpa/tests/org.eclipse.jpt.utility.tests/build.properties
deleted file mode 100644
index ebe9c08..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/build.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2007 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-source.. = src/
-output.. = bin/
-bin.includes = .,\
-               META-INF/,\
-               about.html,\
-               test.xml,\
-               plugin.properties
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/plugin.properties b/jpa/tests/org.eclipse.jpt.utility.tests/plugin.properties
deleted file mode 100644
index bc1a18f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/plugin.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-################################################################################
-# Copyright (c) 2006, 2009 Oracle. 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:
-#     Oracle - initial API and implementation
-################################################################################
-# ====================================================================
-# To code developer:
-#   Do NOT change the properties between this line and the
-#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
-#   Make a new property name, append to the end of the file and change
-#   the code to use the new property.
-# ====================================================================
-
-# ====================================================================
-# %%% END OF TRANSLATED PROPERTIES %%%
-# ====================================================================
-
-pluginName = Dali Java Persistence Tools - Utility Tests
-providerName = Eclipse Web Tools Platform
-
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/resource/ClassTools.java b/jpa/tests/org.eclipse.jpt.utility.tests/resource/ClassTools.java
deleted file mode 100644
index aac17b6..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/resource/ClassTools.java
+++ /dev/null
@@ -1,1680 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package test;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.Collections;
-import java.util.Stack;
-
-/**
- * Convenience methods related to the java.lang.reflect package.
- * These methods provide shortcuts for manipulating objects via
- * reflection; particularly when dealing with fields and/or methods that
- * are not publicly accessible or are inherited.
- * 
- * In most cases, all the exceptions are handled and
- * wrapped in java.lang.RuntimeExceptions; so these methods should
- * be used when you are confident that you will not having any problems
- * using reflection.
- * 
- * There are also a number of methods whose names
- * begin with "attempt". These methods will throw a NoSuchMethodException
- * or NoSuchFieldException when appropriate, allowing you to probe
- * for methods that should be present but might not.
- */
-public final class ClassTools {
-
-	public static final Class<?>[] ZERO_PARAMETER_TYPES = new Class[0];
-	public static final Object[] ZERO_PARAMETERS = new Object[0];
-	private static final String CR = StringTools.CR;
-
-	public static final char NESTED_CLASS_NAME_SEPARATOR = '$';
-
-	public static final char ARRAY_INDICATOR = '[';
-	public static final char TYPE_DECLARATION_ARRAY_OPEN = '[';
-	public static final char TYPE_DECLARATION_ARRAY_CLOSE = ']';
-
-	public static final char REFERENCE_CLASS_CODE = 'L';
-	public static final char REFERENCE_CLASS_NAME_DELIMITER = ';';
-	
-	private static Primitive[] PRIMITIVES;  // pseudo-'final' - lazy-initialized
-	public static final char BYTE_CODE = 'B';
-	public static final char CHAR_CODE = 'C';
-	public static final char DOUBLE_CODE = 'D';
-	public static final char FLOAT_CODE = 'F';
-	public static final char INT_CODE = 'I';
-	public static final char LONG_CODE = 'J';
-	public static final char SHORT_CODE = 'S';
-	public static final char BOOLEAN_CODE = 'Z';
-	public static final char VOID_CODE = 'V';
-	private static int MAX_PRIMITIVE_CLASS_NAME_LENGTH = -1;  // pseudo-'final' - lazy-initialized
-	private static int MAX_PRIMITIVE_WRAPPER_CLASS_NAME_LENGTH = -1;  // pseudo-'final' - lazy-initialized
-
-	public static final String VOID_CLASS_NAME = void.class.getName();
-	public static final String VOID_WRAPPER_CLASS_NAME = java.lang.Void.class.getName();
-
-
-	/**
-	 * Return all the fields for the
-	 * specified class, including inherited fields.
-	 * Class#allFields()
-	 */
-	@Deprecated
-	public static Field[] allFields(Class<?> javaClass) {
-		Stack<Field> stack = new Stack<Field>();
-		for (Class<?> tempClass = javaClass; tempClass != null; tempClass = tempClass.getSuperclass()) {
-			pushDeclaredFields(tempClass, stack);
-		}
-		Collections.reverse(stack);
-		return stack.toArray(new Field[stack.size()]);
-	}
-	
-	/**
-	 * Return all the methods for the
-	 * specified class, including inherited methods.
-	 * Class#allMethods()
-	 */
-	public static Method[] allMethods(Class<?> javaClass) {
-		Stack<Method> stack = new Stack<Method>();
-		for (Class<?> tempClass = javaClass; tempClass != null; tempClass = tempClass.getSuperclass()) {
-			pushDeclaredMethods(tempClass, stack);
-		}
-		Collections.reverse(stack);
-		return stack.toArray(new Method[stack.size()]);
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a new instance of the specified class,
-	 * using the class's default (zero-argument) constructor.
-	 * Throw an exception if the default constructor is not defined.
-	 * Class#newInstance() throws NoSuchMethodException
-	 */
-	@Deprecated
-	public static <T> T attemptNewInstance(Class<T> javaClass) throws NoSuchMethodException {
-		return attemptNewInstance(javaClass, ZERO_PARAMETER_TYPES, ZERO_PARAMETERS);
-	}
-	
-	/**
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter types and parameters.
-	 * Throw an exception if the constructor is not defined.
-	 * Class#newInstance(Class<?>[] parameterTypes, Object[] parameters) throws NoSuchMethodException
-	 */
-	public static <T> T attemptNewInstance(Class<T> javaClass, Class<?>[] parameterTypes, Object[] parameters) throws NoSuchMethodException {
-		try {
-			return constructor(javaClass, parameterTypes).newInstance(parameters);
-		} catch (InstantiationException ie) {
-			throw new RuntimeException(ie + CR + fullyQualifiedConstructorSignature(javaClass, parameterTypes), ie);
-		} catch (IllegalAccessException iae) {
-			throw new RuntimeException(iae + CR + fullyQualifiedConstructorSignature(javaClass, parameterTypes), iae);
-		} catch (InvocationTargetException ite) {
-			throw new RuntimeException(fullyQualifiedConstructorSignature(javaClass, parameterTypes) + CR + ite.getTargetException(), ite);
-		}
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter type and parameter.
-	 * Throw an exception if the constructor is not defined.
-	 * Class#newInstance(Class<?> parameterType, Object parameter) throws NoSuchMethodException
-	 */
-	public static <T> T attemptNewInstance(Class<T> javaClass, Class<?> parameterType, Object parameter) throws NoSuchMethodException {
-		return attemptNewInstance(javaClass, new Class[] {parameterType}, new Object[] {parameter});
-	}
-	
-	/**
-	 * Attempt to get a field value, given the containing object and field name.
-	 * Return its result.
-	 * Useful for accessing private, package, or protected fields.
-	 * Throw an exception if the field is not defined.
-	 * Object#getFieldValue(String fieldName) throws NoSuchFieldException
-	 */
-	public static Object attemptToGetFieldValue(Object object, String fieldName) throws NoSuchFieldException {
-		try {
-			return field(object, fieldName).get(object);
-		} catch (IllegalAccessException iae) {
-			throw new RuntimeException(iae + CR + fullyQualifiedFieldName(object, fieldName), iae);
-		}
-	}
-	
-	/**
-	 * Attempt to get a static field value, given the containing object and field name.
-	 * Return its result.
-	 * Useful for accessing private, package, or protected fields.
-	 * Throw an exception if the field is not defined.
-	 * Class#getStaticFieldValue(String fieldName) throws NoSuchFieldException
-	 */
-	public static Object attemptToGetStaticFieldValue(Class<?> javaClass, String fieldName) throws NoSuchFieldException {
-		try {
-			return field(javaClass, fieldName).get(null);
-		} catch (IllegalAccessException iae) {
-			throw new RuntimeException(iae + CR + fullyQualifiedFieldName(javaClass, fieldName), iae);
-		}
-	}
-	
-	/**
-	 * Convenience method.
-	 * Attempt to execute a zero-argument method,
-	 * given the receiver and method name.
-	 * Return its result.
-	 * Throw an exception if the method is not found.
-	 * Useful for invoking private, package, or protected methods.
-	 * Object#execute(String methodName) throws NoSuchMethodException
-	 */
-	public static Object attemptToExecuteMethod(Object receiver, String methodName) throws NoSuchMethodException {
-		return attemptToExecuteMethod(receiver, methodName, ZERO_PARAMETER_TYPES, ZERO_PARAMETERS);
-	}
-	
-	/**
-	 * Convenience method.
-	 * Attempt to execute a method, given the receiver,
-	 * method name, parameter type, and parameter.
-	 * Return its result.
-	 * Throw an exception if the method is not found.
-	 * Useful for invoking private, package, or protected methods.
-	 * Object#execute(String methodName, Class<?> parameterType, Object parameter) throws NoSuchMethodException
-	 */
-	public static Object attemptToExecuteMethod(Object receiver, String methodName, Class<?> parameterType, Object parameter) throws NoSuchMethodException {
-		return attemptToExecuteMethod(receiver, methodName, new Class[] {parameterType}, new Object[] {parameter});
-	}
-	
-	/**
-	 * Attempt to execute a method, given the receiver,
-	 * method name, parameter types, and parameters.
-	 * Return its result.
-	 * Throw an exception if the method is not found.
-	 * Useful for invoking private, package, or protected methods.
-	 * Object#execute(String methodName, Class<?>[] parameterTypes, Object[] parameters) throws NoSuchMethodException
-	 */
-	public static Object attemptToExecuteMethod(Object receiver, String methodName, Class<?>[] parameterTypes, Object[] parameters) throws NoSuchMethodException {
-		return executeMethod(method(receiver, methodName, parameterTypes), receiver, parameters);
-	}
-	
-	/**
-	 * Attempt to execute a method, given the receiver,
-	 * method name, parameter types, and parameters.
-	 * Return its result.
-	 * Throw an exception if the method is not found.
-	 * If the executed method throws an exception, rethrow that exception.
-	 * Useful for invoking private, package, or protected methods.
-	 * Object#execute(String methodName, Class<?>[] parameterTypes, Object[] parameters) throws NoSuchMethodException
-	 */
-	public static Object attemptToExecuteMethodWithException(Object receiver, String methodName, Class<?>[] parameterTypes, Object[] parameters) 
-		throws Throwable, NoSuchMethodException 
-	{
-		return executeMethodWithException(method(receiver, methodName, parameterTypes), receiver, parameters);
-	}
-	
-	/**
-	 * Convenience method.
-	 * Attempt to execute a zero-argument static method,
-	 * given the class and method name.
-	 * Return its result.
-	 * Throw an exception if the method is not found.
-	 * Useful for invoking private, package, or protected methods.
-	 * Class#executeStaticMethod(String methodName) throws NoSuchMethodException
-	 */
-	public static Object attemptToExecuteStaticMethod(Class<?> javaClass, String methodName) throws NoSuchMethodException {
-		return attemptToExecuteStaticMethod(javaClass, methodName, ZERO_PARAMETER_TYPES, ZERO_PARAMETERS);
-	}
-	
-	/**
-	 * Attempt to execute a static method, given the class,
-	 * method name, parameter types, and parameters.
-	 * Return its result.
-	 * Throw an exception if the method is not found.
-	 * Useful for invoking private, package, or protected methods.
-	 * Class#executeStaticMethod(String methodName, Class<?>[] parameterTypes, Object[] parameters) throws NoSuchMethodException
-	 */
-	public static Object attemptToExecuteStaticMethod(Class<?> javaClass, String methodName, Class<?>[] parameterTypes, Object[] parameters) throws NoSuchMethodException {
-		return executeStaticMethod(staticMethod(javaClass, methodName, parameterTypes), parameters);
-	}
-	
-	/**
-	 * Convenience method.
-	 * Attempt to execute a static method, given the class,
-	 * method name, parameter type, and parameter.
-	 * Return its result.
-	 * Throw an exception if the method is not found.
-	 * Useful for invoking private, package, or protected methods.
-	 * Class#executeStaticMethod(String methodName, Class<?> parameterType, Object parameter) throws NoSuchMethodException
-	 */
-	public static Object attemptToExecuteStaticMethod(Class<?> javaClass, String methodName, Class<?> parameterType, Object parameter) throws NoSuchMethodException {
-		return attemptToExecuteStaticMethod(javaClass, methodName, new Class[] {parameterType}, new Object[] {parameter});
-	}
-	
-	/**
-	 * Attempt to set a field value, given the
-	 * containing object, field name, and new field value.
-	 * Useful for accessing private, package, or protected fields.
-	 * Throw an exception if the field is not defined.
-	 * Object#setFieldValue(String fieldName, Object fieldValue) throws NoSuchFieldException
-	 */
-	public static void attemptToSetFieldValue(Object object, String fieldName, Object fieldValue) throws NoSuchFieldException {
-		try {
-			field(object, fieldName).set(object, fieldValue);
-		} catch (IllegalAccessException iae) {
-			throw new RuntimeException(iae + CR + fullyQualifiedFieldName(object, fieldName), iae);
-		}
-	}
-	
-	/**
-	 * Attempt to set a static field value, given the
-	 * containing class, field name, and new field value.
-	 * Useful for accessing private, package, or protected fields.
-	 * Throw an exception if the field is not defined.
-	 * Class#setStaticFieldValue(String fieldName, Object fieldValue) throws NoSuchFieldException
-	 */
-	public static void attemptToSetStaticFieldValue(Class<?> javaClass, String fieldName, Object fieldValue) throws NoSuchFieldException {
-		try {
-			field(javaClass, fieldName).set(null, fieldValue);
-		} catch (IllegalAccessException iae) {
-			throw new RuntimeException(iae + CR + fullyQualifiedFieldName(javaClass, fieldName), iae);
-		}
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return the default (zero-argument) constructor
-	 * for the specified class.
-	 * Set accessible to true, so we can access
-	 * private/package/protected constructors.
-	 * Class#constructor() throws NoSuchMethodException
-	 */
-	public static <T> Constructor<T> constructor(Class<T> javaClass) throws NoSuchMethodException {
-		return constructor(javaClass, ZERO_PARAMETER_TYPES);
-	}
-	
-	/**
-	 * Return the constructor for the specified class
-	 * and formal parameter types.
-	 * Set accessible to true, so we can access
-	 * private/package/protected constructors.
-	 * Class#constructor(Class<?>[] parameterTypes) throws NoSuchMethodException
-	 */
-	public static <T> Constructor<T> constructor(Class<T> javaClass, Class<?>[] parameterTypes) throws NoSuchMethodException {
-		Constructor<T> constructor = javaClass.getDeclaredConstructor(parameterTypes);
-		constructor.setAccessible(true);
-		return constructor;
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return the constructor for the specified class
-	 * and formal parameter type.
-	 * Set accessible to true, so we can access
-	 * private/package/protected constructors.
-	 * Class#constructor(Class<?> parameterType) throws NoSuchMethodException
-	 */
-	public static <T> Constructor<T> constructor(Class<T> javaClass, Class<?> parameterType) throws NoSuchMethodException {
-		return constructor(javaClass, new Class[] {parameterType});
-	}
-	
-	/**
-	 * Return the declared fields for the specified class.
-	 * Set accessible to true, so we can access
-	 * private/package/protected fields.
-	 * Class#accessibleDeclaredFields()
-	 */
-	public static Field[] declaredFields(Class<?> javaClass) {
-		Field[] fields = javaClass.getDeclaredFields();
-		for (Field field : fields) {
-			field.setAccessible(true);
-		}
-		return fields;
-	}
-	
-	/**
-	 * Return the declared methods for the
-	 * specified class.
-	 * Set accessible to true, so we can access
-	 * private/package/protected methods.
-	 * Class#accessibleDeclaredMethods()
-	 */
-	public static Method[] declaredMethods(Class<?> javaClass) {
-		Method[] methods = javaClass.getDeclaredMethods();
-		for (Method method : methods) {
-			method.setAccessible(true);
-		}
-		return methods;
-	}
-	
-	/**
-	 * Return the default (zero-argument) constructor
-	 * for the specified class.
-	 * Set accessible to true, so we can access
-	 * private/package/protected constructors.
-	 * Class#defaultConstructor()
-	 */
-	public static <T> Constructor<T> defaultConstructor(Class<T> javaClass) throws NoSuchMethodException {
-		return constructor(javaClass);
-	}
-	
-	/**
-	 * Return a field for the specified class and field name.
-	 * If the class does not directly
-	 * define the field, look for it in the class's superclasses.
-	 * Set accessible to true, so we can access
-	 * private/package/protected fields.
-	 */
-	public static Field field(Class<?> javaClass, String fieldName) throws NoSuchFieldException {
-		Field field = null;
-		try {
-			field = javaClass.getDeclaredField(fieldName);
-		} catch (NoSuchFieldException ex) {
-			Class<?> superclass = javaClass.getSuperclass();
-			if (superclass == null) {
-				throw ex;
-			}
-			// recurse
-			return field(superclass, fieldName);
-		}
-		field.setAccessible(true);
-		return field;
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a field for the specified object and field name.
-	 * If the object's class does not directly
-	 * define the field, look for it in the class's superclasses.
-	 * Set accessible to true, so we can access
-	 * private/package/protected fields.
-	 */
-	public static Field field(Object object, String fieldName) throws NoSuchFieldException {
-		return field(object.getClass(), fieldName);
-	}
-	
-	/*
-	 * Return a string representation of the specified constructor.
-	 */
-	private static String fullyQualifiedConstructorSignature(Class<?> javaClass, Class<?>[] parameterTypes) {
-		return fullyQualifiedMethodSignature(javaClass, null, parameterTypes);
-	}
-	
-	/*
-	 * Return a string representation of the specified field.
-	 */
-	private static String fullyQualifiedFieldName(Class<?> javaClass, String fieldName) {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append(javaClass.getName());
-		sb.append('.');
-		sb.append(fieldName);
-		return sb.toString();
-	}
-	
-	/*
-	 * Return a string representation of the specified field.
-	 */
-	private static String fullyQualifiedFieldName(Object object, String fieldName) {
-		return fullyQualifiedFieldName(object.getClass(), fieldName);
-	}
-	
-	/*
-	 * Return a string representation of the specified method.
-	 */
-	private static String fullyQualifiedMethodSignature(Class<?> javaClass, String methodName, Class<?>[] parameterTypes) {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append(javaClass.getName());
-		// this check allows us to use this code for constructors, where the methodName is null
-		if (methodName != null) {
-			sb.append('.');
-			sb.append(methodName);
-		}
-		sb.append('(');
-		int max = parameterTypes.length - 1;
-		if (max != -1) {
-			// stop one short of the end of the array
-			for (int i = 0; i < max; i++) {
-				sb.append(parameterTypes[i].getName());
-				sb.append(", ");
-			}
-			sb.append(parameterTypes[max].getName());
-		}
-		sb.append(')');
-		return sb.toString();
-	}
-	
-	/*
-	 * Return a string representation of the specified method.
-	 */
-	private static String fullyQualifiedMethodSignature(Object receiver, String methodName, Class<?>[] parameterTypes) {
-		return fullyQualifiedMethodSignature(receiver.getClass(), methodName, parameterTypes);
-	}
-	
-	/**
-	 * Get a field value, given the containing object and field name.
-	 * Return its result.
-	 * Useful for accessing private, package, or protected fields.
-	 * Object#getFieldValue(String fieldName)
-	 */
-	public static Object fieldValue(Object object, String fieldName) {
-		try {
-			return attemptToGetFieldValue(object, fieldName);
-		} catch (NoSuchFieldException nsfe) {
-			throw new RuntimeException(nsfe + CR + fullyQualifiedFieldName(object, fieldName), nsfe);
-		}
-	}
-	
-	/**
-	 * Get a static field value, given the containing class and field name.
-	 * Return its result.
-	 * Useful for accessing private, package, or protected fields.
-	 * Class#getStaticFieldValue(String fieldName)
-	 */
-	public static Object staticFieldValue(Class<?> javaClass, String fieldName) {
-		try {
-			return attemptToGetStaticFieldValue(javaClass, fieldName);
-		} catch (NoSuchFieldException nsfe) {
-			throw new RuntimeException(nsfe + CR + fullyQualifiedFieldName(javaClass, fieldName), nsfe);
-		}
-	}
-	
-	/**
-	 * Convenience method.
-	 * Execute a zero-argument method, given the receiver and method name.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * Object#execute(String methodName)
-	 */
-	public static Object executeMethod(Object receiver, String methodName) {
-		return executeMethod(receiver, methodName, ZERO_PARAMETER_TYPES, ZERO_PARAMETERS);
-	}
-	
-	/**
-	 * Execute a method, given the receiver,
-	 * method name, parameter types, and parameters.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * Object#execute(String methodName, Class<?>[] parameterTypes, Object[] parameters)
-	 */
-	public static Object executeMethod(Object receiver, String methodName, Class<?>[] parameterTypes, Object[] parameters) {
-		try {
-			return attemptToExecuteMethod(receiver, methodName, parameterTypes, parameters);
-		} catch (NoSuchMethodException nsme) {
-			throw new RuntimeException(nsme + CR + fullyQualifiedMethodSignature(receiver, methodName, parameterTypes), nsme);
-		}
-	}
-	
-	/**
-	 * Convenience method.
-	 * Execute a one-argument method, given the receiver,
-	 * method name, parameter type, and parameter.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * Object#execute(String methodName, Class<?> parameterType, Object parameter)
-	 */
-	public static Object executeMethod(Object receiver, String methodName, Class<?> parameterType, Object parameter) {
-		return executeMethod(receiver, methodName, new Class[] {parameterType}, new Object[] {parameter});
-	}
-	
-	/**
-	 * Convenience method.
-	 * Execute a zero-argument method, given the receiver and method name.
-	 * Return its result.
-	 * If the method throws an exception, rethrow that exception.
-	 * Useful for invoking private, package, or protected methods.
-	 * Object#execute(String methodName)
-	 */
-	public static Object executeMethodWithException(Object receiver, String methodName) 
-		throws Throwable
-	{
-		return executeMethodWithException(receiver, methodName, ZERO_PARAMETER_TYPES, ZERO_PARAMETERS);
-	}
-	
-	/**
-	 * Convenience method.
-	 * Execute a one-argument method, given the receiver,
-	 * method name, parameter type, and parameter.
-	 * Return its result.
-	 * If the method throws an exception, rethrow that exception.
-	 * Useful for invoking private, package, or protected methods.
-	 * Object#execute(String methodName, Class<?> parameterType, Object parameter)
-	 */
-	public static Object executeMethodWithException(Object receiver, String methodName, Class<?> parameterType, Object parameter) 
-		throws Throwable
-	{
-		return executeMethodWithException(receiver, methodName, new Class[] {parameterType}, new Object[] {parameter});
-	}
-	
-	/**
-	 * Execute a method, given the receiver,
-	 * method name, parameter types, and parameters.
-	 * Return its result.
-	 * If the method throws an exception, rethrow that exception.
-	 * Useful for invoking private, package, or protected methods.
-	 * Object#execute(String methodName, Class<?>[] parameterTypes, Object[] parameters)
-	 */
-	public static Object executeMethodWithException(Object receiver, String methodName, Class<?>[] parameterTypes, Object[] parameters) 
-		throws Throwable
-	{
-		try {
-			return attemptToExecuteMethodWithException(receiver, methodName, parameterTypes, parameters);
-		} catch (NoSuchMethodException nsme) {
-			throw new RuntimeException(nsme + CR + fullyQualifiedMethodSignature(receiver, methodName, parameterTypes), nsme);
-		}
-	}
-	
-	/**
-	 * Execute the specified method with the specified parameters.
-	 * Return its result.
-	 * Convert exceptions to RuntimeExceptions.
-	 */
-	public static Object executeMethod(Method method, Object receiver, Object[] parameters) {
-		try {
-			return method.invoke(receiver, parameters);
-		} catch (IllegalAccessException iae) {
-			throw new RuntimeException(iae + CR + method, iae);
-		} catch (InvocationTargetException ite) {
-			throw new RuntimeException(method + CR + ite.getTargetException(), ite);
-		}
-	}
-	
-	/**
-	 * Execute the specified method with the specified parameters.
-	 * Return its result.
-	 * If the method throws an exception, rethrow that exception.
-	 * Convert all other exceptions to RuntimeExceptions.
-	 */
-	public static Object executeMethodWithException(Method method, Object receiver, Object[] parameters)
-		throws Throwable
-	{
-		try {
-			return method.invoke(receiver, parameters);
-		} catch (IllegalAccessException iae) {
-			throw new RuntimeException(iae + CR + method, iae);
-		} catch (InvocationTargetException ite) {
-			Throwable cause = ite.getCause();
-			if (cause == null) {
-				throw new RuntimeException(method.toString(), ite);
-			}
-			throw cause;
-		}
-	}
-	
-	/**
-	 * Convenience method.
-	 * Execute a zero-argument static method,
-	 * given the class and method name.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * Class#executeStaticMethod(String methodName)
-	 */
-	public static Object executeStaticMethod(Class<?> javaClass, String methodName) {
-		return executeStaticMethod(javaClass, methodName, ZERO_PARAMETER_TYPES, ZERO_PARAMETERS);
-	}
-	
-	/**
-	 * Execute a static method, given the class,
-	 * method name, parameter types, and parameters.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * Class#executeStaticMethod(String methodName, Class<?>[] parameterTypes, Object[] parameters)
-	 */
-	public static Object executeStaticMethod(Class<?> javaClass, String methodName, Class<?>[] parameterTypes, Object[] parameters) {
-		try {
-			return attemptToExecuteStaticMethod(javaClass, methodName, parameterTypes, parameters);
-		} catch (NoSuchMethodException nsme) {
-			throw new RuntimeException(nsme + CR + fullyQualifiedMethodSignature(javaClass, methodName, parameterTypes), nsme);
-		}
-	}
-	
-	/**
-	 * Convenience method.
-	 * Execute a static method, given the class,
-	 * method name, parameter type, and parameter.
-	 * Return its result.
-	 * Useful for invoking private, package, or protected methods.
-	 * Class#executeStaticMethod(String methodName, Class<?> parameterType, Object parameter)
-	 */
-	public static Object executeStaticMethod(Class<?> javaClass, String methodName, Class<?> parameterType, Object parameter) {
-		return executeStaticMethod(javaClass, methodName, new Class[] {parameterType}, new Object[] {parameter});
-	}
-	
-	/**
-	 * Execute the specified static method with the specified parameters.
-	 * Return its result.
-	 * Convert exceptions to RuntimeExceptions.
-	 */
-	public static Object executeStaticMethod(Method method, Object[] parameters) {
-		return executeMethod(method, null, parameters);
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a zero-argument method for the specified class
-	 * and method name. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Set accessible to true, so we can access
-	 * private/package/protected methods.
-	 */
-	public static Method method(Class<?> javaClass, String methodName) throws NoSuchMethodException {
-		return method(javaClass, methodName, ZERO_PARAMETER_TYPES);
-	}
-	
-	/**
-	 * Return a method for the specified class, method name,
-	 * and formal parameter types. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Set accessible to true, so we can access
-	 * private/package/protected methods.
-	 */
-	public static Method method(Class<?> javaClass, String methodName, Class<?>[] parameterTypes) throws NoSuchMethodException {
-		Method method = null;
-		try {
-			method = javaClass.getDeclaredMethod(methodName, parameterTypes);
-		} catch (NoSuchMethodException ex) {
-			Class<?> superclass = javaClass.getSuperclass();
-			if (superclass == null) {
-				throw ex;
-			}
-			// recurse
-			return method(superclass, methodName, parameterTypes);
-		}
-		method.setAccessible(true);
-		return method;
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a method for the specified class, method name,
-	 * and formal parameter type. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Set accessible to true, so we can access
-	 * private/package/protected methods.
-	 */
-	public static Method method(Class<?> javaClass, String methodName, Class<?> parameterType) throws NoSuchMethodException {
-		return method(javaClass, methodName, new Class[] {parameterType});
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a zero-argument method for the specified object
-	 * and method name. If the object's class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Set accessible to true, so we can access
-	 * private/package/protected methods.
-	 */
-	public static Method method(Object object, String methodName) throws NoSuchMethodException {
-		return method(object.getClass(), methodName);
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a method for the specified object, method name,
-	 * and formal parameter types. If the object's class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Set accessible to true, so we can access
-	 * private/package/protected methods.
-	 */
-	public static Method method(Object object, String methodName, Class<?>[] parameterTypes) throws NoSuchMethodException {
-		return method(object.getClass(), methodName, parameterTypes);
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a method for the specified object, method name,
-	 * and formal parameter type. If the object's class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Set accessible to true, so we can access
-	 * private/package/protected methods.
-	 */
-	public static Method method(Object object, String methodName, Class<?> parameterType) throws NoSuchMethodException {
-		return method(object.getClass(), methodName, parameterType);
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return the specified class (without the checked exception).
-	 */
-	public static Class<?> classForName(String className) {
-		try {
-			return Class.forName(className);
-		} catch (ClassNotFoundException ex) {
-			throw new RuntimeException(className, ex);
-		}
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a new instance of the specified class,
-	 * using the class's default (zero-argument) constructor.
-	 * Class#newInstance()
-	 */
-	public static <T> T newInstance(Class<T> javaClass) {
-		return newInstance(javaClass, ZERO_PARAMETER_TYPES, ZERO_PARAMETERS);
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a new instance of the specified class,
-	 * using the class's default (zero-argument) constructor.
-	 * Class#newInstance()
-	 */
-	public static Object newInstance(String className) throws ClassNotFoundException {
-		return newInstance(className, null);
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a new instance of the specified class,
-	 * using the class's default (zero-argument) constructor.
-	 * Class#newInstance()
-	 */
-	public static Object newInstance(String className, ClassLoader classLoader) throws ClassNotFoundException {
-		return newInstance(Class.forName(className, true, classLoader));
-	}
-	
-	/**
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter types and parameters.
-	 * Class#newInstance(Class<?>[] parameterTypes, Object[] parameters)
-	 */
-	public static <T> T newInstance(Class<T> javaClass, Class<?>[] parameterTypes, Object[] parameters) {
-		try {
-			return attemptNewInstance(javaClass, parameterTypes, parameters);
-		} catch (NoSuchMethodException nsme) {
-			throw new RuntimeException(nsme + CR + fullyQualifiedConstructorSignature(javaClass, parameterTypes), nsme);
-		}
-	}
-	
-	/**
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter types and parameters.
-	 * Class#newInstance(Class<?>[] parameterTypes, Object[] parameters)
-	 */
-	public static Object newInstance(String className, Class<?>[] parameterTypes, Object[] parameters) throws ClassNotFoundException {
-		return newInstance(className, parameterTypes, parameters, null);
-	}
-	
-	/**
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter types and parameters.
-	 * Class#newInstance(Class<?>[] parameterTypes, Object[] parameters)
-	 */
-	public static Object newInstance(String className, Class<?>[] parameterTypes, Object[] parameters, ClassLoader classLoader) throws ClassNotFoundException {
-		return newInstance(Class.forName(className, true, classLoader), parameterTypes, parameters);
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter type and parameter.
-	 * Class#newInstance(Class<?> parameterType, Object parameter)
-	 */
-	public static <T> T newInstance(Class<T> javaClass, Class<?> parameterType, Object parameter) {
-		return newInstance(javaClass, new Class[] {parameterType}, new Object[] {parameter});
-	}
-	
-	/**
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter type and parameter.
-	 * Class#newInstance(Class<?> parameterType, Object parameter)
-	 */
-	public static Object newInstance(String className, Class<?> parameterType, Object parameter) throws ClassNotFoundException {
-		return newInstance(className, parameterType, parameter, null);
-	}
-	
-	/**
-	 * Return a new instance of the specified class,
-	 * given the constructor parameter type and parameter.
-	 * Class#newInstance(Class<?> parameterType, Object parameter)
-	 */
-	public static Object newInstance(String className, Class<?> parameterType, Object parameter, ClassLoader classLoader) throws ClassNotFoundException {
-		return newInstance(Class.forName(className, false, classLoader), parameterType, parameter);
-	}
-	
-	/*
-	 * Push the declared fields for the specified class
-	 * onto the top of the stack.
-	 */
-	private static void pushDeclaredFields(Class<?> javaClass, Stack<Field> stack) {
-		Field[] fields = declaredFields(javaClass);
-		for (int i = fields.length; i-- > 0; ) {
-			stack.push(fields[i]);
-		}
-	}
-	
-	/*
-	 * Push the declared methods for the specified class
-	 * onto the top of the stack.
-	 */
-	private static void pushDeclaredMethods(Class<?> javaClass, Stack<Method> stack) {
-		Method[] methods = declaredMethods(javaClass);
-		for (int i = methods.length; i-- > 0; ) {
-			stack.push(methods[i]);
-		}
-	}
-	
-	/**
-	 * Set a field value, given the containing object, field name, and new field value.
-	 * Useful for accessing private, package, or protected fields.
-	 * Object#setFieldValue(String fieldName, Object fieldValue)
-	 */
-	public static void setFieldValue(Object object, String fieldName, Object fieldValue) {
-		try {
-			attemptToSetFieldValue(object, fieldName, fieldValue);
-		} catch (NoSuchFieldException nsfe) {
-			throw new RuntimeException(nsfe + CR + fullyQualifiedFieldName(object, fieldName), nsfe);
-		}
-	}
-	
-	/**
-	 * Set a static field value, given the containing class, field name, and new field value.
-	 * Useful for accessing private, package, or protected fields.
-	 * Class#setStaticFieldValue(String fieldName, Object fieldValue)
-	 */
-	public static void setStaticFieldValue(Class<?> javaClass, String fieldName, Object fieldValue) {
-		try {
-			attemptToSetStaticFieldValue(javaClass, fieldName, fieldValue);
-		} catch (NoSuchFieldException nsfe) {
-			throw new RuntimeException(nsfe + CR + fullyQualifiedFieldName(javaClass, fieldName), nsfe);
-		}
-	}
-	
-	/**
-	 * Return the short name of the object's class.
-	 * Class#getShortName()
-	 */
-	public static String shortClassNameForObject(Object object) {
-		return shortNameFor(object.getClass());
-	}
-	
-	/**
-	 * Return the short name of the class (e.g. "Object").
-	 * Class#getShortName()
-	 */
-	public static String shortNameForClassNamed(String className) {
-		return className.substring(className.lastIndexOf('.') + 1);
-	}
-	
-	/**
-	 * Return the short name of the class (e.g. "Object").
-	 * Class#getShortName()
-	 */
-	public static String shortNameFor(Class<?> javaClass) {
-		return shortNameForClassNamed(javaClass.getName());
-	}
-	
-	/**
-	 * Return the nested name of the object's class.
-	 * Class#getNestedName()
-	 */
-	public static String nestedClassNameForObject(Object object) {
-		return nestedNameFor(object.getClass());
-	}
-	
-	/**
-	 * Return the nested name of the class (e.g. "Entry").
-	 * Class#getNestedName()
-	 */
-	public static String nestedNameForClassNamed(String className) {
-		return className.substring(className.lastIndexOf(NESTED_CLASS_NAME_SEPARATOR) + 1);
-	}
-	
-	/**
-	 * Return the nested name of the class (e.g. "Entry").
-	 * Class#getNestedName()
-	 */
-	public static String nestedNameFor(Class<?> javaClass) {
-		return nestedNameForClassNamed(javaClass.getName());
-	}
-	
-	/**
-	 * Return the "toString()" name of the object's class.
-	 */
-	public static String toStringClassNameForObject(Object object) {
-		return toStringNameFor(object.getClass());
-	}
-	
-	/**
-	 * Return the "toString()" name of the class.
-	 * "Member" classes will return only the final name:
-	 *     "com.foo.bar.TopLevelClass$MemberClass$NestedMemberClass"
-	 *         => "NestedMemberClass"
-	 * "Local" and "anonymous" classes will still return the embedded '$'s:
-	 *     "com.foo.bar.TopLevelClass$1LocalClass"
-	 *         => "TopLevelClass$1LocalClass"
-	 *     "com.foo.bar.TopLevelClass$1"
-	 *         => "TopLevelClass$1"
-	 */
-	public static String toStringNameForClassNamed(String className) {
-		return classNamedIsMember(className) ?
-			className.substring(className.lastIndexOf(NESTED_CLASS_NAME_SEPARATOR) + 1)
-		:
-			className.substring(className.lastIndexOf('.') + 1);
-	}
-	
-	/**
-	 * Return the "toString()" name of the class.
-	 */
-	public static String toStringNameFor(Class<?> javaClass) {
-		return toStringNameForClassNamed(javaClass.getName());
-	}
-	
-	/**
-	 * Return the package name of the class (e.g. "java.lang").
-	 * Class#getPackageName()
-	 */
-	public static String packageNameFor(Class<?> javaClass) {
-		return packageNameForClassNamed(javaClass.getName());
-	}
-	
-	/**
-	 * Return the package name of the class (e.g. "java.lang").
-	 * Class#getPackageName()
-	 */
-	public static String packageNameForClassNamed(String className) {
-		int lastPeriod = className.lastIndexOf('.');
-		if (lastPeriod == -1) {
-			return "";
-		}
-		return className.substring(0, lastPeriod);
-	}
-	
-	/**
-	 * Return the short name of the class,
-	 * followed by its package name (e.g. "Object (java.lang)").
-	 * Class#getShortNameWithPackage()
-	 */
-	public static String shortNameWithPackage(Class<?> javaClass) {
-		StringBuilder sb = new StringBuilder(200);
-		sb.append(shortNameFor(javaClass));
-		if ( ! javaClass.isPrimitive()) {
-			sb.append(" (");
-			sb.append(packageNameFor(javaClass));
-			sb.append(')');
-		}
-		return sb.toString();
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a zero-argument, static method for the specified class
-	 * and method name. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Set accessible to true, so we can access
-	 * private/package/protected methods.
-	 */
-	public static Method staticMethod(Class<?> javaClass, String methodName) throws NoSuchMethodException {
-		return staticMethod(javaClass, methodName, ZERO_PARAMETER_TYPES);
-	}
-	
-	/**
-	 * Return a static method for the specified class, method name,
-	 * and formal parameter types. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Set accessible to true, so we can access
-	 * private/package/protected methods.
-	 */
-	public static Method staticMethod(Class<?> javaClass, String methodName, Class<?>[] parameterTypes) throws NoSuchMethodException {
-		Method method = method(javaClass, methodName, parameterTypes);
-		if (Modifier.isStatic(method.getModifiers())) {
-			return method;
-		}
-		throw new NoSuchMethodException(fullyQualifiedMethodSignature(javaClass, methodName, parameterTypes));
-	}
-	
-	/**
-	 * Convenience method.
-	 * Return a static method for the specified class, method name,
-	 * and formal parameter type. If the class does not directly
-	 * implement the method, look for it in the class's superclasses.
-	 * Set accessible to true, so we can access
-	 * private/package/protected methods.
-	 */
-	public static Method staticMethod(Class<?> javaClass, String methodName, Class<?> parameterTypes) throws NoSuchMethodException {
-		return staticMethod(javaClass, methodName, new Class[] {parameterTypes});
-	}
-
-	/**
-	 * Return whether the specified class can be "declared" in code;
-	 * i.e. it is either a "top-level" class or a "member" class, but it
-	 * is not an "array" class. This method rolls together all the checks
-	 * from the other methods for a bit of a performance tweak.
-	 * Class#isDeclarable()
-	 */
-	public static boolean classNamedIsDeclarable(String className) {
-		if (className.charAt(0) == ARRAY_INDICATOR) {
-			return false;		// it is an "array" class
-		}
-		int index = className.indexOf(NESTED_CLASS_NAME_SEPARATOR);
-		if (index == -1) {
-			return true;		// it is a "top-level" class
-		}
-		do {
-			// the character immediately after each dollar sign cannot be a digit
-			index++;
-			if (Character.isDigit(className.charAt(index))) {
-				return false;
-			}
-			index = className.indexOf(NESTED_CLASS_NAME_SEPARATOR, index);
-		} while (index != -1);
-		return true;
-	}
-	
-	/**
-	 * Return whether the specified class is a "top-level" class,
-	 * as opposed to a "member", "local", or "anonymous" class,
-	 * using the standard jdk naming conventions (i.e. the class
-	 * name does NOT contain a '$': "TopLevelClass").
-	 * Class#isTopLevel()
-	 */
-	public static boolean classNamedIsTopLevel(String className) {
-		if (classNamedIsArray(className)) {
-			return false;
-		}
-		return className.indexOf(NESTED_CLASS_NAME_SEPARATOR) == -1;
-	}
-
-	/**
-	 * Return whether the specified class is a "member" class,
-	 * as opposed to a "top-level", "local", or "anonymous" class,
-	 * using the standard jdk naming conventions (i.e. the class
-	 * name contains at least one '$' and all the names between
-	 * each '$' are legal class names:
-	 * "TopLevelClass$MemberClass$NestedMemberClass").
-	 * Class#isMember()
-	 */
-	public static boolean classNamedIsMember(String className) {
-		if (classNamedIsArray(className)) {
-			return false;
-		}
-		int index = className.indexOf(NESTED_CLASS_NAME_SEPARATOR);
-		if (index == -1) {
-			return false;	// it is a "top-level" class
-		}
-		do {
-			// the character immediately after each dollar sign cannot be a digit
-			index++;
-			if (Character.isDigit(className.charAt(index))) {
-				return false;
-			}
-			index = className.indexOf(NESTED_CLASS_NAME_SEPARATOR, index);
-		} while (index != -1);
-		return true;
-	}
-
-	/**
-	 * Return whether the specified class is a "local" class,
-	 * as opposed to a "top-level", "member", or "anonymous" class,
-	 * using the standard jdk (or Eclipse) naming conventions.
-	 * In the jdk, the class name ends with '$nnnXXX' where the '$' is
-	 * followed by a series of numeric digits which are followed by the
-	 * local class name: "TopLevelClass$1LocalClass".
-	 * In Eclipse, the class name ends with '$nnn$XXX' where the '$' is
-	 * followed by a series of numeric digits which are separated from
-	 * the local class name by another '$': "TopLevelClass$1$LocalClass".
-	 * Class#isLocal()
-	 */
-	public static boolean classNamedIsLocal(String className) {
-		if (classNamedIsArray(className)) {
-			return false;
-		}
-		int dollar = className.indexOf(NESTED_CLASS_NAME_SEPARATOR);
-		if (dollar == -1) {
-			return false;
-		}
-		if ( ! Character.isDigit(className.charAt(dollar + 1))) {
-			return false;
-		}
-		int len = className.length();
-		for (int i = dollar + 2; i < len; i++) {
-			if (Character.isJavaIdentifierStart(className.charAt(i))) {
-				return true;
-			}
-		}
-		// all the characters past the $ are digits (anonymous)
-		return false;
-	}
-
-	/**
-	 * Return whether the specified class is an "anonymous" class,
-	 * as opposed to a "top-level", "member", or "local" class,
-	 * using the standard jdk naming conventions (i.e. the class
-	 * name ends with '$nnn' where all the characters past the
-	 * last '$' are numeric digits: "TopLevelClass$1").
-	 * Class#isAnonymous()
-	 */
-	public static boolean classNamedIsAnonymous(String className) {
-		if (classNamedIsArray(className)) {
-			return false;
-		}
-		int dollar = className.indexOf(NESTED_CLASS_NAME_SEPARATOR);
-		if (dollar == -1) {
-			return false;
-		}
-		int start = dollar + 1;
-		for (int i = className.length(); i-- > start; ) {
-			if ( ! Character.isDigit(className.charAt(i))) {
-				return false;
-			}
-		}
-		// all the characters past the $ are digits
-		return true;
-	}
-
-	/**
-	 * Return the "array depth" of the specified class.
-	 * The depth is the number of dimensions for an array type.
-	 * Non-array types have a depth of zero.
-	 * Class#getArrayDepth()
-	 */
-	public static int arrayDepthFor(Class<?> javaClass) {
-		int depth = 0;
-		while (javaClass.isArray()) {
-			depth++;
-			javaClass = javaClass.getComponentType();
-		}
-		return depth;
-	}
-	
-	/**
-	 * Return the "array depth" of the specified object.
-	 * The depth is the number of dimensions for an array.
-	 * Non-arrays have a depth of zero.
-	 */
-	public static int arrayDepthForObject(Object object) {
-		return arrayDepthFor(object.getClass());
-	}
-	
-	/**
-	 * Return the "array depth" of the specified class.
-	 * The depth is the number of dimensions for an array type.
-	 * Non-array types have a depth of zero.
-	 * @see java.lang.Class#getName()
-	 * Class#getArrayDepth()
-	 */
-	public static int arrayDepthForClassNamed(String className) {
-		int depth = 0;
-		while (className.charAt(depth) == ARRAY_INDICATOR) {
-			depth++;
-		}
-		return depth;
-	}
-
-	/**
-	 * Return whether the specified class is an array type.
-	 * @see java.lang.Class#getName()
-	 */
-	public static boolean classNamedIsArray(String className) {
-		return className.charAt(0) == ARRAY_INDICATOR;
-	}
-
-	/**
-	 * Return the "element type" of the specified class.
-	 * The element type is the base type held by an array type.
-	 * A non-array type simply returns itself.
-	 * Class#getElementType()
-	 */
-	public static Class<?> elementTypeFor(Class<?> javaClass) {
-		while (javaClass.isArray()) {
-			javaClass = javaClass.getComponentType();
-		}
-		return javaClass;
-	}
-
-	/**
-	 * Return the "element type" of the specified object.
-	 * The element type is the base type held by an array.
-	 * A non-array simply returns its class.
-	 */
-	public static Class<?> elementTypeForObject(Object object) {
-		return elementTypeFor(object.getClass());
-	}
-
-	/**
-	 * Return the "element type" of the specified class.
-	 * The element type is the base type held by an array type.
-	 * Non-array types simply return themselves.
-	 * Class#getElementType()
-	 */
-	public static String elementTypeNameFor(Class<?> javaClass) {
-		return elementTypeFor(javaClass).getName();
-	}
-
-	/**
-	 * Return the "element type" of the specified class.
-	 * The element type is the base type held by an array type.
-	 * Non-array types simply return themselves.
-	 * @see java.lang.Class#getName()
-	 * Class#getElementType()
-	 */
-	public static String elementTypeNameForClassNamed(String className) {
-		int depth = arrayDepthForClassNamed(className);
-		if (depth == 0) {
-			// the name is in the form: "java.lang.Object" or "int"
-			return className;
-		}
-		int last = className.length() - 1;
-		if (className.charAt(depth) == REFERENCE_CLASS_CODE) {
-			// the name is in the form: "[[[Ljava.lang.Object;"
-			return className.substring(depth + 1, last);	// drop the trailing ';'
-		}
-		// the name is in the form: "[[[I"
-		return classNameForCode(className.charAt(last));
-	}
-	
-	/**
-	 * Return whether the specified class is a "reference"
-	 * class (i.e. neither 'void' nor one of the primitive variable classes,
-	 * ['boolean', 'int', 'float', etc.]).
-	 * NB: void.class.isPrimitive() == true
-	 */
-	public static boolean classNamedIsReference(String className) {
-		return ! classNamedIsPrimitive(className);
-	}
-
-	/**
-	 * Return whether the specified class is a primitive
-	 * class (i.e. 'void' or one of the primitive variable classes,
-	 * ['boolean', 'int', 'float', etc.]).
-	 * NB: void.class.isPrimitive() == true
-	 */
-	public static boolean classNamedIsPrimitive(String className) {
-		if (classNamedIsArray(className) || (className.length() > maxPrimitiveClassNameLength())) {
-			return false;  // performance tweak
-		}
-		Primitive[] codes = primitives();
-		for (int i = codes.length; i-- > 0; ) {
-			if (codes[i].javaClass.getName().equals(className)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified class is a "variable" primitive
-	 * class (i.e. 'boolean', 'int', 'float', etc., but not 'void').
-	 * NB: void.class.isPrimitive() == true
-	 */
-	public static boolean classNamedIsVariablePrimitive(String className) {
-		return classNamedIsPrimitive(className)
-			&& ( ! className.equals(VOID_CLASS_NAME));
-	}
-
-	/**
-	 * Return whether the specified class is a primitive wrapper
-	 * class (i.e. 'java.lang.Void' or one of the primitive variable wrapper classes,
-	 * ['java.lang.Boolean', 'java.lang.Integer', 'java.lang.Float', etc.]).
-	 * NB: void.class.isPrimitive() == true
-	 */
-	public static boolean classNamedIsPrimitiveWrapperClass(String className) {
-		if (classNamedIsArray(className) || (className.length() > maxPrimitiveWrapperClassNameLength())) {
-			return false;  // performance tweak
-		}
-		Primitive[] codes = primitives();
-		for (int i = codes.length; i-- > 0; ) {
-			if (codes[i].wrapperClass.getName().equals(className)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified class is a "variable" primitive
-	 * class (i.e. 'boolean', 'int', 'float', etc., but not 'void').
-	 * NB: void.class.isPrimitive() == true
-	 */
-	public static boolean classNamedIsVariablePrimitiveWrapperClass(String className) {
-		return classNamedIsPrimitiveWrapperClass(className)
-			&& ( ! className.equals(VOID_WRAPPER_CLASS_NAME));
-	}
-
-	/**
-	 * Return whether the specified class is a primitive wrapper
-	 * class (i.e. 'java.lang.Void' or one of the primitive variable wrapper classes,
-	 * ['java.lang.Boolean', 'java.lang.Integer', 'java.lang.Float', etc.]).
-	 * NB: void.class.isPrimitive() == true
-	 */
-	public static boolean classIsPrimitiveWrapperClass(Class<?> javaClass) {
-		if (javaClass.isArray() || (javaClass.getName().length() > maxPrimitiveWrapperClassNameLength())) {
-			return false;  // performance tweak
-		}
-		Primitive[] codes = primitives();
-		for (int i = codes.length; i-- > 0; ) {
-			if (codes[i].wrapperClass == javaClass) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified class is a "variable" primitive
-	 * class (i.e. 'boolean', 'int', 'float', etc., but not 'void').
-	 * NB: void.class.isPrimitive() == true
-	 */
-	public static boolean classIsVariablePrimitiveWrapperClass(Class<?> javaClass) {
-		return classIsPrimitiveWrapperClass(javaClass)
-			&& (javaClass != java.lang.Void.class);
-	}
-
-	/**
-	 * Return the class name for the specified class code.
-	 * @see java.lang.Class#getName()
-	 */
-	public static String classNameForCode(char classCode) {
-		return classForCode(classCode).getName();
-	}
-	
-	/**
-	 * Return the class name for the specified class code.
-	 * @see java.lang.Class#getName()
-	 */
-	public static String classNameForCode(int classCode) {
-		return classNameForCode((char) classCode);
-	}
-	
-	/**
-	 * Return the class for the specified class code.
-	 * @see java.lang.Class#getName()
-	 */
-	public static Class<?> classForCode(char classCode) {
-		Primitive[] codes = primitives();
-		for (int i = codes.length; i-- > 0; ) {
-			if (codes[i].code == classCode) {
-				return codes[i].javaClass;
-			}
-		}
-		throw new IllegalArgumentException(String.valueOf(classCode));
-	}
-
-	/**
-	 * Return the class for the specified class code.
-	 * @see java.lang.Class#getName()
-	 */
-	public static Class<?> classForCode(int classCode) {
-		return classForCode((char) classCode);
-	}
-	
-	/**
-	 * Return the class code for the specified class.
-	 * @see java.lang.Class#getName()
-	 */
-	public static char codeForClass(Class<?> javaClass) {
-		if (( ! javaClass.isArray()) && (javaClass.getName().length() <= maxPrimitiveClassNameLength())) {
-			Primitive[] codes = primitives();
-			for (int i = codes.length; i-- > 0; ) {
-				if (codes[i].javaClass == javaClass) {
-					return codes[i].code;
-				}
-			}
-		}
-		throw new IllegalArgumentException(javaClass.getName());		
-	}
-	
-	/**
-	 * Return the class code for the specified class.
-	 * @see java.lang.Class#getName()
-	 */
-	public static char codeForClassNamed(String className) {
-		if (( ! classNamedIsArray(className)) && (className.length() <= maxPrimitiveClassNameLength())) {
-			Primitive[] codes = primitives();
-			for (int i = codes.length; i-- > 0; ) {
-				if (codes[i].javaClass.getName().equals(className)) {
-					return codes[i].code;
-				}
-			}
-		}
-		throw new IllegalArgumentException(className);		
-	}
-
-	/**
-	 * Return the class for the specified "type declaration".
-	 */
-	public static Class<?> classForTypeDeclaration(String typeDeclaration) throws ClassNotFoundException {
-		return classForTypeDeclaration(typeDeclaration, ClassTools.class.getClassLoader());
-	}
-	
-	/**
-	 * Return the class for the specified "type declaration",
-	 * using the specified class loader.
-	 */
-	public static Class<?> classForTypeDeclaration(String typeDeclaration, ClassLoader classLoader) throws ClassNotFoundException {
-		TypeDeclaration td = typeDeclaration(typeDeclaration);
-		return classForTypeDeclaration(td.elementTypeName, td.arrayDepth);
-	}
-
-	private static TypeDeclaration typeDeclaration(String typeDeclaration) {
-		typeDeclaration = StringTools.removeAllWhitespace(typeDeclaration);
-		int arrayDepth = arrayDepthForTypeDeclaration_(typeDeclaration);
-		String elementTypeName = typeDeclaration.substring(0, typeDeclaration.length() - (arrayDepth * 2));
-		return new TypeDeclaration(elementTypeName, arrayDepth);
-	}
-
-	/**
-	 * Return the class for the specified "type declaration".
-	 */
-	public static Class<?> classForTypeDeclaration(String elementTypeName, int arrayDepth) throws ClassNotFoundException {
-		return classForTypeDeclaration(elementTypeName, arrayDepth, null);
-	}
-	
-	/**
-	 * Return the class for the specified "type declaration",
-	 * using the specified class loader.
-	 */
-	// see the "Evaluation" of jdk bug 6446627 for a discussion of loading classes
-	public static Class<?> classForTypeDeclaration(String elementTypeName, int arrayDepth, ClassLoader classLoader) throws ClassNotFoundException {
-		// primitives cannot be loaded via Class#forName(),
-		// so check for a primitive class name first
-		Primitive pcc = null;
-		if (elementTypeName.length() <= maxPrimitiveClassNameLength()) {  // performance tweak
-			Primitive[] codes = primitives();
-			for (int i = codes.length; i-- > 0; ) {
-				if (codes[i].javaClass.getName().equals(elementTypeName)) {
-					pcc = codes[i];
-					break;
-				}
-			}
-		}
-
-		// non-array
-		if (arrayDepth == 0) {
-			return (pcc == null) ? Class.forName(elementTypeName, false, classLoader) : pcc.javaClass;
-		}
-
-		// array
-		StringBuilder sb = new StringBuilder(100);
-		for (int i = arrayDepth; i-- > 0; ) {
-			sb.append(ARRAY_INDICATOR);
-		}
-		if (pcc == null) {
-			sb.append(REFERENCE_CLASS_CODE);
-			sb.append(elementTypeName);
-			sb.append(REFERENCE_CLASS_NAME_DELIMITER);
-		} else {
-			sb.append(pcc.code);
-		}
-		return Class.forName(sb.toString(), false, classLoader);
-	}
-	
-	/**
-	 * Return the class name for the specified "type declaration"; e.g.
-	 *     "int[]" -> "[I"
-	 * @see java.lang.Class#getName()
-	 */
-	public static String classNameForTypeDeclaration(String typeDeclaration) {
-		TypeDeclaration td = typeDeclaration(typeDeclaration);
-		return classNameForTypeDeclaration(td.elementTypeName, td.arrayDepth);
-	}
-
-	/**
-	 * Return the array depth for the specified "type declaration"; e.g.
-	 *     "int[]" -> 1
-	 */
-	public static int arrayDepthForTypeDeclaration(String typeDeclaration) {
-		return arrayDepthForTypeDeclaration_(StringTools.removeAllWhitespace(typeDeclaration));
-	}
-
-	/*
-	 * Assume no whitespace in the type declaration.
-	 */
-	private static int arrayDepthForTypeDeclaration_(String typeDeclaration) {
-		int last = typeDeclaration.length() - 1;
-		int depth = 0;
-		int close = last;
-		while (typeDeclaration.charAt(close) == TYPE_DECLARATION_ARRAY_CLOSE) {
-			if (typeDeclaration.charAt(close - 1) == TYPE_DECLARATION_ARRAY_OPEN) {
-				depth++;
-			} else {
-				throw new IllegalArgumentException("invalid type declaration: " + typeDeclaration);
-			}
-			close = last - (depth * 2);
-		}
-		return depth;
-	}
-	
-	/**
-	 * Return the class name for the specified "type declaration".
-	 * @see java.lang.Class#getName()
-	 */
-	public static String classNameForTypeDeclaration(String elementTypeName, int arrayDepth) {
-		// non-array
-		if (arrayDepth == 0) {
-			return elementTypeName;
-		}
-
-		if (elementTypeName.equals(VOID_CLASS_NAME)) {
-			throw new IllegalArgumentException("'" + VOID_CLASS_NAME + "' must have an array depth of zero: " + arrayDepth + '.');
-		}
-		// array
-		StringBuilder sb = new StringBuilder(100);
-		for (int i = arrayDepth; i-- > 0; ) {
-			sb.append(ARRAY_INDICATOR);
-		}
-
-		// look for a primitive first
-		Primitive pcc = null;
-		if (elementTypeName.length() <= maxPrimitiveClassNameLength()) {  // performance tweak
-			Primitive[] codes = primitives();
-			for (int i = codes.length; i-- > 0; ) {
-				if (codes[i].javaClass.getName().equals(elementTypeName)) {
-					pcc = codes[i];
-					break;
-				}
-			}
-		}
-
-		if (pcc == null) {
-			sb.append(REFERENCE_CLASS_CODE);
-			sb.append(elementTypeName);
-			sb.append(REFERENCE_CLASS_NAME_DELIMITER);
-		} else {
-			sb.append(pcc.code);
-		}
-
-		return sb.toString();
-	}
-
-	private static int maxPrimitiveClassNameLength() {
-		if (MAX_PRIMITIVE_CLASS_NAME_LENGTH == -1) {
-			MAX_PRIMITIVE_CLASS_NAME_LENGTH = calculateMaxPrimitiveClassNameLength();
-		}
-		return MAX_PRIMITIVE_CLASS_NAME_LENGTH;
-	}
-
-	private static int calculateMaxPrimitiveClassNameLength() {
-		int max = -1;
-		Primitive[] codes = primitives();
-		for (int i = codes.length; i-- > 0; ) {
-			int len = codes[i].javaClass.getName().length();
-			if (len > max) {
-				max = len;
-			}
-		}
-		return max;
-	}
-
-	private static int maxPrimitiveWrapperClassNameLength() {
-		if (MAX_PRIMITIVE_WRAPPER_CLASS_NAME_LENGTH == -1) {
-			MAX_PRIMITIVE_WRAPPER_CLASS_NAME_LENGTH = calculateMaxPrimitiveWrapperClassNameLength();
-		}
-		return MAX_PRIMITIVE_WRAPPER_CLASS_NAME_LENGTH;
-	}
-
-	private static int calculateMaxPrimitiveWrapperClassNameLength() {
-		int max = -1;
-		Primitive[] codes = primitives();
-		for (int i = codes.length; i-- > 0; ) {
-			int len = codes[i].wrapperClass.getName().length();
-			if (len > max) {
-				max = len;
-			}
-		}
-		return max;
-	}
-
-	private static Primitive[] primitives() {
-		if (PRIMITIVES == null) {
-			PRIMITIVES = buildPrimitives();
-		}
-		return PRIMITIVES;
-	}
-	
-	/**
-	 * NB: void.class.isPrimitive() == true
-	 */
-	private static Primitive[] buildPrimitives() {
-		Primitive[] result = new Primitive[9];
-		result[0] = new Primitive(BYTE_CODE, java.lang.Byte.class);
-		result[1] = new Primitive(CHAR_CODE, java.lang.Character.class);
-		result[2] = new Primitive(DOUBLE_CODE, java.lang.Double.class);
-		result[3] = new Primitive(FLOAT_CODE, java.lang.Float.class);
-		result[4] = new Primitive(INT_CODE, java.lang.Integer.class);
-		result[5] = new Primitive(LONG_CODE, java.lang.Long.class);
-		result[6] = new Primitive(SHORT_CODE, java.lang.Short.class);
-		result[7] = new Primitive(BOOLEAN_CODE, java.lang.Boolean.class);
-		result[8] = new Primitive(VOID_CODE, java.lang.Void.class);
-		return result;
-	}
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private ClassTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-
-	// ********** member classes **********
-
-	private static class Primitive {
-		final char code;
-		final Class<?> javaClass;
-		final Class<?> wrapperClass;
-		private static final String WRAPPER_CLASS_TYPE_FIELD_NAME = "TYPE";
-		// e.g. java.lang.Boolean.TYPE => boolean.class
-		Primitive(char code, Class<?> wrapperClass) {
-			this.code = code;
-			this.wrapperClass = wrapperClass;
-			this.javaClass = (Class<?>) staticFieldValue(wrapperClass, WRAPPER_CLASS_TYPE_FIELD_NAME);
-		}
-	}
-
-	private static class TypeDeclaration {
-		final String elementTypeName;
-		final int arrayDepth;
-		TypeDeclaration(String elementTypeName, int arrayDepth) {
-			this.elementTypeName = elementTypeName;
-			this.arrayDepth = arrayDepth;
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ArrayToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ArrayToolsTests.java
deleted file mode 100644
index eed7eff..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ArrayToolsTests.java
+++ /dev/null
@@ -1,3523 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Vector;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.Range;
-import org.eclipse.jpt.utility.internal.ReverseComparator;
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-
-@SuppressWarnings("nls")
-public class ArrayToolsTests extends TestCase {
-
-	public ArrayToolsTests(String name) {
-		super(name);
-	}
-
-
-	// ********** instantiation **********
-
-	public void testNewArrayObjectArray() {
-		String[] array1 = new String[2];
-		String[] array2 = ArrayTools.newArray(array1);
-		array2[0] = "foo";
-		array2[1] = "bar";
-		assertEquals(String.class, array2.getClass().getComponentType());
-		assertEquals(2, array2.length);
-	}
-
-	public void testNewArrayObjectArrayInt() {
-		String[] array1 = new String[2];
-		String[] array2 = ArrayTools.newArray(array1, 5);
-		array2[0] = "foo";
-		array2[4] = "bar";
-		assertEquals(String.class, array2.getClass().getComponentType());
-		assertEquals(5, array2.length);
-	}
-
-	public void testNewArrayObjectArrayInt_Exception() {
-		String[] array1 = new String[2];
-		Object[] array2 = ArrayTools.newArray(array1, 5);
-		boolean exCaught = false;
-		try {
-			array2[1] = Integer.valueOf(7);
-			fail("bogus array: " + Arrays.toString(array2));
-		} catch (ArrayStoreException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testComponentType() {
-		String[] array = new String[2];
-		Class<? extends String> javaClass = ArrayTools.componentType(array);
-		assertEquals(String.class, javaClass);
-	}
-
-	public void testNewArrayClassInt() {
-		String[] array = ArrayTools.newArray(String.class, 5);
-		array[0] = "foo";
-		array[4] = "bar";
-		assertEquals(String.class, array.getClass().getComponentType());
-		assertEquals(5, array.length);
-	}
-
-	public void testNewArrayClassInt_Exception() {
-		Object[] array = ArrayTools.newArray(String.class, 5);
-		boolean exCaught = false;
-		try {
-			array[1] = Integer.valueOf(7);
-			fail("bogus array: " + Arrays.toString(array));
-		} catch (ArrayStoreException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testNewArrayClassInt_Primitive() {
-		boolean exCaught = false;
-		try {
-			Object[] array = ArrayTools.newArray(int.class, 5);
-			fail("bogus array: " + Arrays.toString(array));
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-
-	// ********** conversion **********
-
-	public void testArrayIterable() {
-		Iterable<String> iterable = this.buildStringList1();
-		Object[] a = ArrayTools.array(iterable);
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testArrayIterableInt() {
-		Iterable<String> iterable = this.buildStringList1();
-		Object[] a = ArrayTools.array(iterable, 3);
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testArrayIterableObjectArray_String() {
-		Iterable<String> iterable = this.buildStringList1();
-		String[] a = ArrayTools.array(iterable, new String[0]);
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testArrayIterableObjectArray_Object() {
-		Iterable<String> iterable = this.buildStringList1();
-		Object[] a = ArrayTools.array(iterable, new Object[0]);
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testArrayIterableIntObjectArray() {
-		Iterable<String> iterable = this.buildStringList1();
-		String[] a = ArrayTools.array(iterable, 3, new String[0]);
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testArrayIterator() {
-		Object[] a = ArrayTools.array(this.buildStringList1().iterator());
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testArrayIterator_Empty() {
-		Object[] a = ArrayTools.array(EmptyIterator.instance());
-		assertEquals(0, a.length);
-	}
-
-	public void testArrayIteratorInt() {
-		Object[] a = ArrayTools.array(this.buildStringList1().iterator(), 3);
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testArrayIteratorInt_Empty() {
-		Object[] a = ArrayTools.array(EmptyIterator.instance(), 3);
-		assertEquals(0, a.length);
-	}
-
-	public void testArrayIteratorObjectArray_String() {
-		String[] a = ArrayTools.array(this.buildStringList1().iterator(), new String[0]);
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testArrayIteratorObjectArray_Empty() {
-		String[] a = ArrayTools.array(EmptyIterator.<String>instance(), new String[0]);
-		assertEquals(0, a.length);
-	}
-
-	public void testArrayIteratorObjectArray_Empty_ClearArray() {
-		String[] a = ArrayTools.array(EmptyIterator.<String>instance(), new String[5]);
-		assertEquals(5, a.length);
-		assertNull(a[0]);
-	}
-
-	public void testArrayIteratorObjectArray_Object() {
-		Object[] a = ArrayTools.array(this.buildStringList1().iterator(), new Object[0]);
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testArrayIteratorIntObjectArray() {
-		String[] a = ArrayTools.array(this.buildStringList1().iterator(), 3, new String[0]);
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testArrayIteratorIntObjectArray_Empty() {
-		String[] a = ArrayTools.array(EmptyIterator.<String>instance(), 3, new String[0]);
-		assertEquals(0, a.length);
-	}
-
-
-	// ********** add **********
-
-	public void testAddObjectArrayObject_Object() {
-		Object[] a = ArrayTools.add(this.buildObjectArray1(), "twenty");
-		assertEquals(4, a.length);
-		assertTrue(ArrayTools.contains(a, "twenty"));
-		assertEquals("twenty", a[a.length-1]);
-	}
-
-	public void testAddObjectArrayObject_String() {
-		String[] a = ArrayTools.add(this.buildStringArray1(), "twenty");
-		assertEquals(4, a.length);
-		assertTrue(ArrayTools.contains(a, "twenty"));
-		assertEquals("twenty", a[a.length-1]);
-	}
-
-	public void testAddObjectArrayObject_EmptyArray() {
-		String[] a = new String[0];
-		a = ArrayTools.add(a, "twenty");
-		assertEquals(1, a.length);
-		assertTrue(ArrayTools.contains(a, "twenty"));
-		assertEquals("twenty", a[0]);
-	}
-
-	public void testAddObjectArrayIntObject_Object() {
-		Object[] a = new Object[] { "a", "b", "c", "d" };
-		a = ArrayTools.add(a, 2, "X");
-		assertEquals(5, a.length);
-		assertTrue(ArrayTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new Object[] { "a", "b", "X", "c", "d" }, a));
-	}
-
-	public void testAddObjectArrayIntObject_String() {
-		String[] a = new String[] { "a", "b", "c", "d" };
-		a = ArrayTools.add(a, 2, "X");
-		assertEquals(5, a.length);
-		assertTrue(ArrayTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new String[] { "a", "b", "X", "c", "d" }, a));
-	}
-
-	public void testAddObjectArrayIntObject_End() {
-		String[] a = new String[] { "a", "b", "c", "d" };
-		a = ArrayTools.add(a, 4, "X");
-		assertEquals(5, a.length);
-		assertTrue(ArrayTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new String[] { "a", "b", "c", "d", "X" }, a));
-	}
-
-	public void testAddObjectArrayIntObject_Zero() {
-		String[] a = new String[] { "a", "b", "c", "d" };
-		a = ArrayTools.add(a, 0, "X");
-		assertEquals(5, a.length);
-		assertTrue(ArrayTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new String[] { "X", "a", "b", "c", "d" }, a));
-	}
-
-	public void testAddObjectArrayIntObject_Exception() {
-		Object[] a = new Object[] { "a", "b", "c", "d" };
-		boolean exCaught = false;
-		try {
-			a = ArrayTools.add(a, 33, "X");
-		} catch (IndexOutOfBoundsException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAddCharArrayChar() {
-		char[] a = ArrayTools.add(this.buildCharArray(), 'd');
-		assertEquals(4, a.length);
-		assertTrue(ArrayTools.contains(a, 'd'));
-	}
-
-	public void testAddCharArrayChar_Empty() {
-		char[] a = new char[0];
-		a = ArrayTools.add(a, 'd');
-		assertEquals(1, a.length);
-		assertTrue(ArrayTools.contains(a, 'd'));
-		assertTrue(Arrays.equals(new char[] { 'd' }, a));
-	}
-
-	public void testAddCharArrayIntChar() {
-		char[] a = new char[] { 'a', 'b', 'c', 'd' };
-		a = ArrayTools.add(a, 2, 'X');
-		assertEquals(5, a.length);
-		assertTrue(ArrayTools.contains(a, 'X'));
-		assertTrue(Arrays.equals(new char[] { 'a', 'b', 'X', 'c', 'd' }, a));
-	}
-
-	public void testAddCharArrayIntChar_Zero() {
-		char[] a = new char[] { 'a', 'b', 'c', 'd' };
-		a = ArrayTools.add(a, 0, 'X');
-		assertEquals(5, a.length);
-		assertTrue(ArrayTools.contains(a, 'X'));
-		assertTrue(Arrays.equals(new char[] { 'X', 'a', 'b', 'c', 'd' }, a));
-	}
-
-	public void testAddCharArrayIntChar_End() {
-		char[] a = new char[] { 'a', 'b', 'c', 'd' };
-		a = ArrayTools.add(a, 4, 'X');
-		assertEquals(5, a.length);
-		assertTrue(ArrayTools.contains(a, 'X'));
-		assertTrue(Arrays.equals(new char[] { 'a', 'b', 'c', 'd', 'X' }, a));
-	}
-
-	public void testAddIntArrayInt() {
-		int[] a = ArrayTools.add(this.buildIntArray(), 30);
-		assertEquals(4, a.length);
-		assertTrue(ArrayTools.contains(a, 30));
-	}
-
-	public void testAddIntArrayInt_Empty() {
-		int[] a = new int[0];
-		a = ArrayTools.add(a, 30);
-		assertEquals(1, a.length);
-		assertTrue(ArrayTools.contains(a, 30));
-		assertTrue(Arrays.equals(new int[] { 30 }, a));
-	}
-
-	public void testAddIntArrayIntInt() {
-		int[] a = new int[] { 1, 2, 3, 4 };
-		a = ArrayTools.add(a, 2, 99);
-		assertEquals(5, a.length);
-		assertTrue(ArrayTools.contains(a, 99));
-		assertTrue(Arrays.equals(new int[] { 1, 2, 99, 3, 4 }, a));
-	}
-
-	public void testAddIntArrayIntInt_Zero() {
-		int[] a = new int[] { 1, 2, 3, 4 };
-		a = ArrayTools.add(a, 0, 99);
-		assertEquals(5, a.length);
-		assertTrue(ArrayTools.contains(a, 99));
-		assertTrue(Arrays.equals(new int[] { 99, 1, 2, 3, 4 }, a));
-	}
-
-	public void testAddIntArrayIntInt_End() {
-		int[] a = new int[] { 1, 2, 3, 4 };
-		a = ArrayTools.add(a, 4, 99);
-		assertEquals(5, a.length);
-		assertTrue(ArrayTools.contains(a, 99));
-		assertTrue(Arrays.equals(new int[] { 1, 2, 3, 4, 99 }, a));
-	}
-
-
-	// ********** add all **********
-
-	public void testAddAllObjectArrayCollection_String() {
-		String[] a = this.buildStringArray1();
-		Collection<String> c = this.buildStringList2();
-		String[] newArray = ArrayTools.addAll(a, c);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, c));
-	}
-
-	public void testAddAllObjectArrayCollection_Object() {
-		Object[] a = this.buildObjectArray1();
-		Collection<String> c = this.buildStringList2();
-		Object[] newArray = ArrayTools.addAll(a, c);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, c));
-	}
-
-	public void testAddAllObjectArrayCollection_EmptyArray() {
-		String[] a = new String[0];
-		Collection<String> c = this.buildStringList2();
-		String[] newArray = ArrayTools.addAll(a, c);
-
-		assertEquals(3, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, c));
-	}
-
-	public void testAddAllObjectArrayCollection_EmptyCollection() {
-		String[] a = this.buildStringArray1();
-		Collection<String> c = new ArrayList<String>();
-		String[] newArray = ArrayTools.addAll(a, c);
-
-		assertEquals(3, newArray.length);
-	}
-
-	public void testAddAllObjectArrayIntCollection_String() {
-		String[] a = this.buildStringArray1();
-		Collection<String> c = this.buildStringList2();
-		String[] newArray = ArrayTools.addAll(a, 1, c);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, c));
-	}
-
-	public void testAddAllObjectArrayIntCollection_String_End() {
-		String[] a = this.buildStringArray1();
-		Collection<String> c = this.buildStringList2();
-		String[] newArray = ArrayTools.addAll(a, 3, c);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, c));
-	}
-
-	public void testAddAllObjectArrayIntCollection_EmptyArray() {
-		String[] a = new String[0];
-		Collection<String> c = this.buildStringList2();
-		String[] newArray = ArrayTools.addAll(a, 0, c);
-
-		assertEquals(3, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, c));
-	}
-
-	public void testAddAllObjectArrayIntCollection_EmptyArray_Exception() {
-		String[] a = new String[0];
-		Collection<String> c = this.buildStringList2();
-		boolean exCaught = false;
-		try {
-			String[] newArray = ArrayTools.addAll(a, 3, c);
-			fail("bogus array: " + Arrays.toString(newArray));
-		} catch (IndexOutOfBoundsException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAddAllObjectArrayIntCollection_EmptyCollection() {
-		String[] a = this.buildStringArray1();
-		Collection<String> c = new ArrayList<String>();
-		String[] newArray = ArrayTools.addAll(a, 1, c);
-
-		assertEquals(3, newArray.length);
-	}
-
-	public void testAddAllObjectArrayIntIterable_String() {
-		String[] a = this.buildStringArray1();
-		Iterable<String> iterable = this.buildStringList2();
-		String[] newArray = ArrayTools.addAll(a, 1, iterable);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, iterable));
-	}
-
-	public void testAddAllObjectArrayIntIterable_EmptyArray() {
-		String[] a = new String[0];
-		Iterable<String> iterable = this.buildStringList2();
-		String[] newArray = ArrayTools.addAll(a, 0, iterable);
-
-		assertEquals(3, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, iterable));
-	}
-
-	public void testAddAllObjectArrayIntIterable_EmptyIterable() {
-		String[] a = this.buildStringArray1();
-		Iterable<String> iterable = new ArrayList<String>();
-		String[] newArray = ArrayTools.addAll(a, 1, iterable);
-
-		assertEquals(3, newArray.length);
-	}
-
-	public void testAddAllObjectArrayIntIterableInt_String() {
-		String[] a = this.buildStringArray1();
-		Iterable<String> iterable = this.buildStringList2();
-		String[] newArray = ArrayTools.addAll(a, 1, iterable, 3);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, iterable));
-	}
-
-	public void testAddAllObjectArrayIntIterableInt_EmptyArray() {
-		String[] a = new String[0];
-		Iterable<String> iterable = this.buildStringList2();
-		String[] newArray = ArrayTools.addAll(a, 0, iterable, 3);
-
-		assertEquals(3, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, iterable));
-	}
-
-	public void testAddAllObjectArrayIntIterableInt_EmptyIterable() {
-		String[] a = this.buildStringArray1();
-		Iterable<String> iterable = new ArrayList<String>();
-		String[] newArray = ArrayTools.addAll(a, 1, iterable, 0);
-
-		assertEquals(3, newArray.length);
-	}
-
-	public void testAddAllObjectArrayIntIterator_String() {
-		String[] a = this.buildStringArray1();
-		Iterator<String> iterator = this.buildStringList2().iterator();
-		String[] newArray = ArrayTools.addAll(a, 1, iterator);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, this.buildStringList2()));
-	}
-
-	public void testAddAllObjectArrayIntIterator_EmptyArray() {
-		String[] a = new String[0];
-		Iterator<String> iterator = this.buildStringList2().iterator();
-		String[] newArray = ArrayTools.addAll(a, 0, iterator);
-
-		assertEquals(3, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, this.buildStringList2()));
-	}
-
-	public void testAddAllObjectArrayIntIterator_EmptyIterable() {
-		String[] a = this.buildStringArray1();
-		Iterator<String> iterator = EmptyIterator.instance();
-		String[] newArray = ArrayTools.addAll(a, 1, iterator);
-
-		assertEquals(3, newArray.length);
-	}
-
-	public void testAddAllObjectArrayIntIteratorInt_String() {
-		String[] a = this.buildStringArray1();
-		Iterator<String> iterator = this.buildStringList2().iterator();
-		String[] newArray = ArrayTools.addAll(a, 1, iterator, 3);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, this.buildStringList2()));
-	}
-
-	public void testAddAllObjectArrayIntIteratorInt_EmptyArray() {
-		String[] a = new String[0];
-		Iterator<String> iterator = this.buildStringList2().iterator();
-		String[] newArray = ArrayTools.addAll(a, 0, iterator, 3);
-
-		assertEquals(3, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, this.buildStringList2()));
-	}
-
-	public void testAddAllObjectArrayIntIteratorInt_EmptyIterator() {
-		String[] a = this.buildStringArray1();
-		Iterator<String> iterator = EmptyIterator.instance();
-		String[] newArray = ArrayTools.addAll(a, 1, iterator, 0);
-
-		assertEquals(3, newArray.length);
-	}
-
-	public void testAddAllObjectArrayIterable() {
-		String[] a = this.buildStringArray1();
-		Iterable<String> iterable = this.buildStringList1();
-		String[] newArray = ArrayTools.addAll(a, iterable);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, this.buildStringList1()));
-	}
-
-	public void testAddAllObjectArrayIterableInt() {
-		String[] a = this.buildStringArray1();
-		Iterable<String> iterable = this.buildStringList1();
-		String[] newArray = ArrayTools.addAll(a, iterable, 33);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, this.buildStringList1()));
-	}
-
-	public void testAddAllObjectArrayIterator_String() {
-		String[] a = this.buildStringArray1();
-		Iterator<String> iterator = this.buildStringList1().iterator();
-		String[] newArray = ArrayTools.addAll(a, iterator);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, this.buildStringList1()));
-	}
-
-	public void testAddAllObjectArrayIterator_Object() {
-		String[] a = this.buildStringArray1();
-		Iterator<Object> iterator = this.buildObjectList1().iterator();
-		Object[] newArray = ArrayTools.addAll(a, iterator);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, this.buildObjectList1()));
-	}
-
-	public void testAddAllObjectArrayIterator_EmptyIterator() {
-		String[] a = this.buildStringArray1();
-		Iterator<String> iterator = EmptyIterator.instance();
-		String[] newArray = ArrayTools.addAll(a, iterator);
-
-		assertEquals(3, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, this.buildStringList1()));
-	}
-
-	public void testAddAllObjectArrayIteratorInt() {
-		String[] a = this.buildStringArray1();
-		Iterator<Object> iterator = this.buildObjectList1().iterator();
-		Object[] newArray = ArrayTools.addAll(a, iterator, 3);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, this.buildObjectList1()));
-	}
-
-	public void testAddAllObjectArrayIteratorInt_EmptyIterator() {
-		String[] a = this.buildStringArray1();
-		Iterator<String> iterator = EmptyIterator.instance();
-		String[] newArray = ArrayTools.addAll(a, iterator, 0);
-
-		assertEquals(3, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, this.buildStringList1()));
-	}
-
-	public void testAddAllObjectArrayObjectArray_Object() {
-		Object[] a1 = this.buildObjectArray1();
-		Object[] a2 = this.buildObjectArray2();
-		Object[] newArray = ArrayTools.addAll(a1, a2);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, a1));
-		assertTrue(ArrayTools.containsAll(newArray, a2));
-	}
-
-	public void testAddAllObjectArrayObjectArray_String() {
-		String[] a1 = this.buildStringArray1();
-		String[] a2 = this.buildStringArray2();
-		String[] newArray = ArrayTools.addAll(a1, a2);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, (Object[]) a1));
-		assertTrue(ArrayTools.containsAll(newArray, (Object[]) a2));
-	}
-
-	public void testAddAllObjectArrayObjectArray_ObjectString() {
-		Object[] a1 = this.buildObjectArray1();
-		String[] a2 = this.buildStringArray2();
-		Object[] newArray = ArrayTools.addAll(a1, (Object[]) a2);
-
-		assertEquals(6, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, a1));
-		assertTrue(ArrayTools.containsAll(newArray, (Object[]) a2));
-	}
-
-	public void testAddAllObjectArrayObjectArray_EmptyArray1() {
-		Object[] a1 = new Object[0];
-		Object[] a2 = this.buildObjectArray2();
-		Object[] newArray = ArrayTools.addAll(a1, a2);
-
-		assertEquals(3, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, a2));
-	}
-
-	public void testAddAllObjectArrayObjectArray_EmptyArray2() {
-		Object[] a1 = this.buildObjectArray1();
-		Object[] a2 = new Object[0];
-		Object[] newArray = ArrayTools.addAll(a1, a2);
-
-		assertEquals(3, newArray.length);
-		assertTrue(ArrayTools.containsAll(newArray, a1));
-	}
-
-	public void testAddAllObjectArrayIntObjectArray_Object() {
-		Object[] a = new Object[] { "a", "b", "c", "d" };
-		a = ArrayTools.addAll(a, 2, new Object[] { "X", "X", "X" });
-		assertEquals(7, a.length);
-		assertTrue(ArrayTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new Object[] { "a", "b", "X", "X", "X", "c", "d" }, a));
-	}
-
-	public void testAddAllObjectArrayIntObjectArray_String() {
-		String[] a = new String[] { "a", "b", "c", "d" };
-		a = ArrayTools.addAll(a, 2, new String[] { "X", "X", "X" });
-		assertEquals(7, a.length);
-		assertTrue(ArrayTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new String[] { "a", "b", "X", "X", "X", "c", "d" }, a));
-	}
-
-	public void testAddAllObjectArrayIntObjectArray_ObjectString() {
-		Object[] a = new Object[] { "a", "b", "c", "d" };
-		a = ArrayTools.addAll(a, 2, (Object[]) new String[] { "X", "X", "X" });
-		assertEquals(7, a.length);
-		assertTrue(ArrayTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new Object[] { "a", "b", "X", "X", "X", "c", "d" }, a));
-	}
-
-	public void testAddAllObjectArrayIntObjectArray_End() {
-		Object[] a = new Object[] { "a", "b", "c", "d" };
-		a = ArrayTools.addAll(a, 4, (Object[]) new String[] { "X", "X", "X" });
-		assertEquals(7, a.length);
-		assertTrue(ArrayTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new Object[] { "a", "b", "c", "d", "X", "X", "X" }, a));
-	}
-
-	public void testAddAllObjectArrayIntObjectArray_Zero() {
-		Object[] a = new Object[0];
-		a = ArrayTools.addAll(a, 0, (Object[]) new String[] { "X", "X", "X" });
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new Object[] { "X", "X", "X" }, a));
-	}
-
-	public void testAddAllObjectArrayIntObjectArray_EmptyArray2() {
-		Object[] a = new Object[] { "a", "b", "c", "d" };
-		a = ArrayTools.addAll(a, 4, (Object[]) new String[0]);
-		assertEquals(4, a.length);
-		assertTrue(Arrays.equals(new Object[] { "a", "b", "c", "d" }, a));
-	}
-
-	public void testAddAllObjectArrayIntObjectArray_EmptyArray1() {
-		Object[] a = new String[0];
-		a = ArrayTools.addAll(a, 0, new Object[] { "a", "b", "c", "d" });
-		assertEquals(4, a.length);
-		assertTrue(Arrays.equals(new Object[] { "a", "b", "c", "d" }, a));
-	}
-
-	public void testAddAllCharArrayCharArray() {
-		char[] a = ArrayTools.addAll(this.buildCharArray(), new char[] { 'd', 'e' });
-		assertEquals(5, a.length);
-		assertTrue(ArrayTools.contains(a, 'd'));
-		assertTrue(ArrayTools.contains(a, 'e'));
-	}
-
-	public void testAddAllCharArrayCharArray_EmptyArray2() {
-		char[] a = ArrayTools.addAll(this.buildCharArray(), new char[0]);
-		assertEquals(3, a.length);
-	}
-
-	public void testAddAllCharArrayCharArrayEmptyArray1() {
-		char[] a = ArrayTools.addAll(new char[0], new char[] { 'd', 'e' });
-		assertEquals(2, a.length);
-		assertTrue(ArrayTools.contains(a, 'd'));
-		assertTrue(ArrayTools.contains(a, 'e'));
-	}
-
-	public void testAddAllCharArrayIntCharArray() {
-		char[] a = new char[] { 'a', 'b', 'c', 'd' };
-		a = ArrayTools.addAll(a, 2, new char[] { 'X', 'X', 'X' });
-		assertEquals(7, a.length);
-		assertTrue(ArrayTools.contains(a, 'X'));
-		assertTrue(Arrays.equals(new char[] { 'a', 'b', 'X', 'X', 'X', 'c', 'd' }, a));
-	}
-
-	public void testAddAllCharArrayIntCharArray_End() {
-		char[] a = new char[] { 'a', 'b', 'c', 'd' };
-		a = ArrayTools.addAll(a, 4, new char[] { 'X', 'X', 'X' });
-		assertEquals(7, a.length);
-		assertTrue(ArrayTools.contains(a, 'X'));
-		assertTrue(Arrays.equals(new char[] { 'a', 'b', 'c', 'd', 'X', 'X', 'X' }, a));
-	}
-
-	public void testAddAllCharArrayIntCharArray_EmptyArray1() {
-		char[] a = new char[0];
-		a = ArrayTools.addAll(a, 0, new char[] { 'X', 'X', 'X' });
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.contains(a, 'X'));
-		assertTrue(Arrays.equals(new char[] { 'X', 'X', 'X' }, a));
-	}
-
-	public void testAddAllCharArrayIntCharArray_EmptyArray2() {
-		char[] a = new char[] { 'a', 'b', 'c', 'd' };
-		a = ArrayTools.addAll(a, 2, new char[0]);
-		assertEquals(4, a.length);
-		assertTrue(Arrays.equals(new char[] { 'a', 'b', 'c', 'd' }, a));
-	}
-
-	public void testAddAllIntArrayIntArray() {
-		int[] a = ArrayTools.addAll(this.buildIntArray(), new int[] { 30, 40 });
-		assertEquals(5, a.length);
-		assertTrue(ArrayTools.contains(a, 30));
-		assertTrue(ArrayTools.contains(a, 40));
-	}
-
-	public void testAddAllIntArrayIntArray_EmptyArray2() {
-		int[] a = ArrayTools.addAll(this.buildIntArray(), new int[0]);
-		assertEquals(3, a.length);
-	}
-
-	public void testAddAllIntArrayIntArray_EmptyArray1() {
-		int[] a = ArrayTools.addAll(new int[0], new int[] { 30, 40 });
-		assertEquals(2, a.length);
-		assertTrue(ArrayTools.contains(a, 30));
-		assertTrue(ArrayTools.contains(a, 40));
-	}
-
-	public void testAddAllIntArrayIntIntArray() {
-		int[] a = new int[] { 1, 2, 3, 4 };
-		a = ArrayTools.addAll(a, 2, new int[] { 99, 99, 99 });
-		assertEquals(7, a.length);
-		assertTrue(ArrayTools.contains(a, 99));
-		assertTrue(Arrays.equals(new int[] { 1, 2, 99, 99, 99, 3, 4 }, a));
-	}
-
-	public void testAddAllIntArrayIntIntArray_End() {
-		int[] a = new int[] { 1, 2, 3, 4 };
-		a = ArrayTools.addAll(a, 4, new int[] { 99, 99, 99 });
-		assertEquals(7, a.length);
-		assertTrue(ArrayTools.contains(a, 99));
-		assertTrue(Arrays.equals(new int[] { 1, 2, 3, 4, 99, 99, 99 }, a));
-	}
-
-	public void testAddAllIntArrayIntIntArray_EmptyArray2() {
-		int[] a = new int[] { 1, 2, 3, 4 };
-		a = ArrayTools.addAll(a, 2, new int[0]);
-		assertEquals(4, a.length);
-		assertTrue(Arrays.equals(new int[] { 1, 2, 3, 4 }, a));
-	}
-
-	public void testAddAllIntArrayIntIntArray_EmptyArray1() {
-		int[] a = new int[0];
-		a = ArrayTools.addAll(a, 0, new int[] { 99, 99, 99 });
-		assertEquals(3, a.length);
-		assertTrue(ArrayTools.contains(a, 99));
-		assertTrue(Arrays.equals(new int[] { 99, 99, 99 }, a));
-	}
-
-
-	// ********** clear **********
-
-	public void testClearObjectArray() {
-		String[] a = this.buildStringArray1();
-		assertEquals(3, a.length);
-		a = ArrayTools.clear(a);
-		assertEquals(0, a.length);
-	}
-
-	public void testClearObjectArray_Empty() {
-		String[] a = new String[0];
-		assertEquals(0, a.length);
-		a = ArrayTools.clear(a);
-		assertEquals(0, a.length);
-	}
-
-
-	// ********** concatenate **********
-
-	public void testConcatenateObjectArrayArray() {
-		String[] aArray = new String[] { "a", "b", "c", "d" };
-		String[] eArray = new String[] { "e", "f", "g", "h" };
-		String[] iArray = new String[] { "i", "j", "k", "l" };
-
-		String[] expected = new String[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l" };
-		String[] actual = ArrayTools.concatenate(aArray, eArray, iArray);
-		assertTrue(Arrays.equals(expected, actual));
-	}
-
-	public void testConcatenateObjectArrayArray_Empty() {
-		String[] aArray = new String[] {  };
-		String[] eArray = new String[0];
-		String[] iArray = new String[0];
-
-		String[] expected = new String[0];
-		String[] actual = ArrayTools.concatenate(aArray, eArray, iArray);
-		assertEquals(0, actual.length);
-		assertTrue(Arrays.equals(expected, actual));
-	}
-
-	public void testConcatenateCharArrayArray() {
-		char[] aArray = new char[] { 'a', 'b', 'c', 'd' };
-		char[] eArray = new char[] { 'e', 'f', 'g', 'h' };
-		char[] iArray = new char[] { 'i', 'j', 'k', 'l' };
-
-		char[] expected = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l' };
-		char[] actual = ArrayTools.concatenate(aArray, eArray, iArray);
-		assertTrue(Arrays.equals(expected, actual));
-	}
-
-	public void testConcatenateCharArrayArray_Empty() {
-		char[] aArray = new char[] {  };
-		char[] eArray = new char[0];
-		char[] iArray = new char[0];
-
-		char[] expected = new char[0];
-		char[] actual = ArrayTools.concatenate(aArray, eArray, iArray);
-		assertEquals(0, actual.length);
-		assertTrue(Arrays.equals(expected, actual));
-	}
-
-	public void testConcatenateIntArrayArray() {
-		int[] aArray = new int[] { 'a', 'b', 'c', 'd' };
-		int[] eArray = new int[] { 'e', 'f', 'g', 'h' };
-		int[] iArray = new int[] { 'i', 'j', 'k', 'l' };
-
-		int[] expected = new int[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l' };
-		int[] actual = ArrayTools.concatenate(aArray, eArray, iArray);
-		assertTrue(Arrays.equals(expected, actual));
-	}
-
-	public void testConcatenateIntArrayArray_Empty() {
-		int[] aArray = new int[] {  };
-		int[] eArray = new int[0];
-		int[] iArray = new int[0];
-
-		int[] expected = new int[0];
-		int[] actual = ArrayTools.concatenate(aArray, eArray, iArray);
-		assertEquals(0, actual.length);
-		assertTrue(Arrays.equals(expected, actual));
-	}
-
-
-	// ********** contains **********
-
-	public void testContainsObjectArrayObject() {
-		Object[] a = this.buildObjectArray1();
-		assertTrue(ArrayTools.contains(a, "one"));
-		assertFalse(ArrayTools.contains(a, null));
-		Object[] a2 = ArrayTools.add(a, null);
-		assertTrue(ArrayTools.contains(a2, null));
-	}
-
-	public void testContainsObjectArrayObject_EmptyArray() {
-		Object[] a = new Object[0];
-		assertFalse(ArrayTools.contains(a, "one"));
-		assertFalse(ArrayTools.contains(a, null));
-	}
-
-	public void testContainsCharArrayChar() {
-		char[] a = this.buildCharArray();
-		assertTrue(ArrayTools.contains(a, 'a'));
-		assertFalse(ArrayTools.contains(a, 'z'));
-		char[] a2 = ArrayTools.add(a, 'z');
-		assertTrue(ArrayTools.contains(a2, 'z'));
-	}
-
-	public void testContainsCharArrayObject_EmptyArray() {
-		char[] a = new char[0];
-		assertFalse(ArrayTools.contains(a, 'a'));
-	}
-
-	public void testContainsIntArrayInt() {
-		int[] a = this.buildIntArray();
-		assertTrue(ArrayTools.contains(a, 10));
-		assertFalse(ArrayTools.contains(a, 55));
-		int[] a2 = ArrayTools.add(a, 55);
-		assertTrue(ArrayTools.contains(a2, 55));
-	}
-
-	public void testContainsIntArrayObject_EmptyArray() {
-		int[] a = new int[0];
-		assertFalse(ArrayTools.contains(a, 'a'));
-	}
-
-
-	// ********** contains all **********
-
-	public void testContainsAllObjectArrayCollection() {
-		assertTrue(ArrayTools.containsAll(this.buildObjectArray1(), this.buildStringList1()));
-		assertFalse(ArrayTools.containsAll(this.buildObjectArray1(), this.buildStringList2()));
-	}
-
-	public void testContainsAllObjectArrayIterable() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertTrue(ArrayTools.containsAll(this.buildObjectArray1(), iterable));
-		iterable = this.buildStringList2();
-		assertFalse(ArrayTools.containsAll(this.buildObjectArray1(), iterable));
-	}
-
-	public void testContainsAllObjectArrayIterator() {
-		assertTrue(ArrayTools.containsAll(this.buildObjectArray1(), this.buildStringList1().iterator()));
-		assertFalse(ArrayTools.containsAll(this.buildObjectArray1(), this.buildStringList2().iterator()));
-	}
-
-	public void testContainsAllObjectArrayIterator_Empty() {
-		assertTrue(ArrayTools.containsAll(this.buildObjectArray1(), EmptyIterator.instance()));
-	}
-
-	public void testContainsAllObjectArrayObjectArray() {
-		assertTrue(ArrayTools.containsAll(this.buildObjectArray1(), this.buildObjectArray1()));
-		assertFalse(ArrayTools.containsAll(this.buildObjectArray1(), this.buildObjectArray2()));
-	}
-
-	public void testContainsAllCharArrayCharArray() {
-		assertTrue(ArrayTools.containsAll(this.buildCharArray(), this.buildCharArray()));
-		assertFalse(ArrayTools.containsAll(this.buildCharArray(), new char[] { 'x', 'y' }));
-	}
-
-	public void testContainsAllIntArrayIntArray() {
-		assertTrue(ArrayTools.containsAll(this.buildIntArray(), this.buildIntArray()));
-		assertFalse(ArrayTools.containsAll(this.buildIntArray(), new int[] { 444, 888 }));
-	}
-
-
-	// ********** diff **********
-
-	public void testDiffEnd() {
-		String a = "a";
-		String b = "b";
-		String c = "c";
-		String d = "d";
-		String e = "e";
-		String a_ = new String("a");
-		String b_ = new String("b");
-		String c_ = new String("c");
-		String d_ = new String("d");
-		String e_ = new String("e");
-		assertTrue((a != a_) && a.equals(a_));
-		assertTrue((b != b_) && b.equals(b_));
-		assertTrue((c != c_) && c.equals(c_));
-		assertTrue((d != d_) && d.equals(d_));
-		assertTrue((e != e_) && e.equals(e_));
-		String[] array1;
-		String[] array2;
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(-1, ArrayTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a };
-		array2 = new String[] { a_ };
-		assertEquals(-1, ArrayTools.diffEnd(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(4, ArrayTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, d_, e_ };
-		assertEquals(4, ArrayTools.diffEnd(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(4, ArrayTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[0];
-		assertEquals(4, ArrayTools.diffEnd(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[0];
-		assertEquals(-1, ArrayTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, a_, d_, e_ };
-		assertEquals(2, ArrayTools.diffEnd(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, c_, d_, e_ };
-		assertEquals(0, ArrayTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(3, ArrayTools.diffEnd(array1, array2));
-
-		String c__ = new String(c);
-		assertTrue((c != c__) && c.equals(c_));
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c__, d_, e_ };
-		assertEquals(-1, ArrayTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(2, ArrayTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, null, d_, e_ };
-		assertEquals(-1, ArrayTools.diffEnd(array1, array2));
-	}
-
-	public void testDiffRange() {
-		String a = "a";
-		String b = "b";
-		String c = "c";
-		String d = "d";
-		String e = "e";
-		String a_ = a;
-		String b_ = b;
-		String c_ = c;
-		String d_ = d;
-		String e_ = e;
-		assertTrue((a == a_) && a.equals(a_));
-		assertTrue((b == b_) && b.equals(b_));
-		assertTrue((c == c_) && c.equals(c_));
-		assertTrue((d == d_) && d.equals(d_));
-		assertTrue((e == e_) && e.equals(e_));
-		String[] array1;
-		String[] array2;
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(5, -1), ArrayTools.diffRange(array1, array2));
-
-		array1 = new String[] { a };
-		array2 = new String[] { a_ };
-		assertEquals(new Range(1, -1), ArrayTools.diffRange(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(0, 4), ArrayTools.diffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, d_, e_ };
-		assertEquals(new Range(0, 4), ArrayTools.diffRange(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(0, 4), ArrayTools.diffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[0];
-		assertEquals(new Range(0, 4), ArrayTools.diffRange(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[0];
-		assertEquals(new Range(0, -1), ArrayTools.diffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, a_, d_, e_ };
-		assertEquals(new Range(0, 2), ArrayTools.diffRange(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, c_, d_, e_ };
-		assertEquals(new Range(0, 0), ArrayTools.diffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(new Range(3, 3), ArrayTools.diffRange(array1, array2));
-
-		String c__ = new String(c);
-		assertTrue((c != c__) && c.equals(c_));
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c__, d_, e_ };
-		assertEquals(new Range(5, -1), ArrayTools.diffRange(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(2, 2), ArrayTools.diffRange(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, null, d_, e_ };
-		assertEquals(new Range(5, -1), ArrayTools.diffRange(array1, array2));
-	}
-
-	public void testDiffStart() {
-		String a = "a";
-		String b = "b";
-		String c = "c";
-		String d = "d";
-		String e = "e";
-		String a_ = new String("a");
-		String b_ = new String("b");
-		String c_ = new String("c");
-		String d_ = new String("d");
-		String e_ = new String("e");
-		assertTrue((a != a_) && a.equals(a_));
-		assertTrue((b != b_) && b.equals(b_));
-		assertTrue((c != c_) && c.equals(c_));
-		assertTrue((d != d_) && d.equals(d_));
-		assertTrue((e != e_) && e.equals(e_));
-		String[] array1;
-		String[] array2;
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(5, ArrayTools.diffStart(array1, array2));
-
-		array1 = new String[] { a };
-		array2 = new String[] { a_ };
-		assertEquals(1, ArrayTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(4, ArrayTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(4, ArrayTools.diffStart(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(0, ArrayTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[0];
-		assertEquals(0, ArrayTools.diffStart(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[0];
-		assertEquals(0, ArrayTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, e_, c_, d_ };
-		assertEquals(2, ArrayTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(3, ArrayTools.diffStart(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, c_, d_, e_ };
-		assertEquals(0, ArrayTools.diffStart(array1, array2));
-
-		String c__ = new String(c);
-		assertTrue((c != c__) && c.equals(c__));
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c__, d_, e_ };
-		assertEquals(5, ArrayTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(2, ArrayTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, null, d_, e_ };
-		assertEquals(5, ArrayTools.diffStart(array1, array2));
-	}
-
-
-	// ********** identity diff **********
-
-	public void testIdentityDiffEnd() {
-		String a = "a";
-		String b = "b";
-		String c = "c";
-		String d = "d";
-		String e = "e";
-		String a_ = a;
-		String b_ = b;
-		String c_ = c;
-		String d_ = d;
-		String e_ = e;
-		assertTrue((a == a_) && a.equals(a_));
-		assertTrue((b == b_) && b.equals(b_));
-		assertTrue((c == c_) && c.equals(c_));
-		assertTrue((d == d_) && d.equals(d_));
-		assertTrue((e == e_) && e.equals(e_));
-		String[] array1;
-		String[] array2;
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(-1, ArrayTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a };
-		array2 = new String[] { a_ };
-		assertEquals(-1, ArrayTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(4, ArrayTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, d_, e_ };
-		assertEquals(4, ArrayTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(4, ArrayTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[0];
-		assertEquals(4, ArrayTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[0];
-		assertEquals(-1, ArrayTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, a_, d_, e_ };
-		assertEquals(2, ArrayTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, c_, d_, e_ };
-		assertEquals(0, ArrayTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(3, ArrayTools.identityDiffEnd(array1, array2));
-
-		String c__ = new String(c);
-		assertTrue((c != c__) && c.equals(c_));
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c__, d_, e_ };
-		assertEquals(2, ArrayTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(2, ArrayTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, null, d_, e_ };
-		assertEquals(-1, ArrayTools.identityDiffEnd(array1, array2));
-	}
-
-	public void testIdentityDiffRange() {
-		String a = "a";
-		String b = "b";
-		String c = "c";
-		String d = "d";
-		String e = "e";
-		String a_ = a;
-		String b_ = b;
-		String c_ = c;
-		String d_ = d;
-		String e_ = e;
-		assertTrue((a == a_) && a.equals(a_));
-		assertTrue((b == b_) && b.equals(b_));
-		assertTrue((c == c_) && c.equals(c_));
-		assertTrue((d == d_) && d.equals(d_));
-		assertTrue((e == e_) && e.equals(e_));
-		String[] array1;
-		String[] array2;
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(5, -1), ArrayTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a };
-		array2 = new String[] { a_ };
-		assertEquals(new Range(1, -1), ArrayTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(0, 4), ArrayTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, d_, e_ };
-		assertEquals(new Range(0, 4), ArrayTools.identityDiffRange(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(0, 4), ArrayTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[0];
-		assertEquals(new Range(0, 4), ArrayTools.identityDiffRange(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[0];
-		assertEquals(new Range(0, -1), ArrayTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, a_, d_, e_ };
-		assertEquals(new Range(0, 2), ArrayTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, c_, d_, e_ };
-		assertEquals(new Range(0, 0), ArrayTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(new Range(3, 3), ArrayTools.identityDiffRange(array1, array2));
-
-		String c__ = new String(c);
-		assertTrue((c != c__) && c.equals(c_));
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c__, d_, e_ };
-		assertEquals(new Range(2, 2), ArrayTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(2, 2), ArrayTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, null, d_, e_ };
-		assertEquals(new Range(5, -1), ArrayTools.identityDiffRange(array1, array2));
-	}
-
-	public void testIdentityDiffStart() {
-		String a = "a";
-		String b = "b";
-		String c = "c";
-		String d = "d";
-		String e = "e";
-		String a_ = a;
-		String b_ = b;
-		String c_ = c;
-		String d_ = d;
-		String e_ = e;
-		assertTrue((a == a_) && a.equals(a_));
-		assertTrue((b == b_) && b.equals(b_));
-		assertTrue((c == c_) && c.equals(c_));
-		assertTrue((d == d_) && d.equals(d_));
-		assertTrue((e == e_) && e.equals(e_));
-		String[] array1;
-		String[] array2;
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(5, ArrayTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a };
-		array2 = new String[] { a_ };
-		assertEquals(1, ArrayTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(4, ArrayTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(4, ArrayTools.identityDiffStart(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(0, ArrayTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[0];
-		assertEquals(0, ArrayTools.identityDiffStart(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[0];
-		assertEquals(0, ArrayTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, e_, c_, d_ };
-		assertEquals(2, ArrayTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(3, ArrayTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, c_, d_, e_ };
-		assertEquals(0, ArrayTools.identityDiffStart(array1, array2));
-
-		String c__ = new String(c);
-		assertTrue((c != c__) && c.equals(c_));
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c__, d_, e_ };
-		assertEquals(2, ArrayTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(2, ArrayTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, null, d_, e_ };
-		assertEquals(5, ArrayTools.identityDiffStart(array1, array2));
-	}
-
-
-	// ********** elements are identical **********
-
-	public void testElementsAreIdenticalObjectArrayObjectArray() {
-		Object[] a1 = new Object[4];
-		for (int i = 0; i < a1.length; i++) {
-			a1[i] = String.valueOf(i * 1000);
-		}
-
-		Object[] a2 = new Object[a1.length];
-		for (int i = 0; i < a2.length; i++) {
-			a2[i] = a1[i];
-		}
-
-		assertTrue(ArrayTools.elementsAreIdentical(a1, a2));
-		a2[2] = "2000";
-		assertFalse(ArrayTools.elementsAreIdentical(a1, a2));
-		assertTrue(Arrays.equals(a1, a2));
-	}
-
-	public void testElementsAreIdenticalObjectArrayObjectArray_BothNull() {
-		Object[] a1 = null;
-		Object[] a2 = null;
-		assertTrue(ArrayTools.elementsAreIdentical(a1, a2));
-	}
-
-	public void testElementsAreIdenticalObjectArrayObjectArray_OneNull() {
-		Object[] a1 = null;
-		Object[] a2 = new Object[0];
-		assertFalse(ArrayTools.elementsAreIdentical(a1, a2));
-	}
-
-	public void testElementsAreIdenticalObjectArrayObjectArray_DifferentLengths() {
-		Object[] a1 = new String[] {"foo", "bar"};
-		Object[] a2 = new String[] {"foo", "bar", "baz"};
-		assertFalse(ArrayTools.elementsAreIdentical(a1, a2));
-	}
-
-
-	// ********** index of **********
-
-	public void testIndexOfObjectArrayObject() {
-		Object[] a = this.buildObjectArray1();
-		assertEquals(1, ArrayTools.indexOf(a, "one"));
-	}
-
-	public void testIndexOfObjectArrayObject_NotFound() {
-		Object[] a = this.buildObjectArray1();
-		assertEquals(-1, ArrayTools.indexOf(a, "twenty"));
-	}
-
-	public void testIndexOfObjectArrayObject_Null() {
-		Object[] a = this.buildObjectArray1();
-		a = ArrayTools.add(a, null);
-		assertEquals(a.length - 1, ArrayTools.indexOf(a, null));
-	}
-
-	public void testIndexOfObjectArrayObject_Null_NotFound() {
-		Object[] a = this.buildObjectArray1();
-		assertEquals(-1, ArrayTools.indexOf(a, null));
-	}
-
-	public void testIdentityIndexOfObjectArrayObject() {
-		String foo = "foo";
-		String bar = "bar";
-		String baz = "baz";
-		Object[] a = new Object[3];
-		a[0] = foo;
-		a[1] = bar;
-		a[2] = baz;
-		assertEquals(1, ArrayTools.identityIndexOf(a, bar));
-	}
-
-	public void testIdentityIndexOfObjectArrayObject_NotFound() {
-		String foo = "foo";
-		String bar = "bar";
-		String baz = "baz";
-		Object[] a = new Object[3];
-		a[0] = foo;
-		a[1] = bar;
-		a[2] = baz;
-		assertEquals(-1, ArrayTools.identityIndexOf(a, new String("bar")));
-	}
-
-	public void testIndexOfCharArrayChar() {
-		char[] a = this.buildCharArray();
-		assertEquals(1, ArrayTools.indexOf(a, 'b'));
-		a = ArrayTools.add(a, 'd');
-		assertEquals(a.length - 1, ArrayTools.indexOf(a, 'd'));
-	}
-
-	public void testIndexOfCharArrayChar_NotFound() {
-		char[] a = this.buildCharArray();
-		assertEquals(-1, ArrayTools.indexOf(a, 'z'));
-	}
-
-	public void testIndexOfIntArrayInt() {
-		int[] a = this.buildIntArray();
-		assertEquals(1, ArrayTools.indexOf(a, 10));
-		a = ArrayTools.add(a, 30);
-		assertEquals(a.length - 1, ArrayTools.indexOf(a, 30));
-	}
-
-	public void testIndexOfIntArrayInt_NotFound() {
-		int[] a = this.buildIntArray();
-		assertEquals(-1, ArrayTools.indexOf(a, 1000));
-	}
-
-
-	// ********** insertion index of **********
-
-	public void testInsertionIndexOfObjectArrayComparable() {
-		String[] a = new String[] { "A", "C", "D" };
-		assertEquals(1, ArrayTools.insertionIndexOf(a, "B"));
-
-		a = new String[] { "A", "B", "C", "D" };
-		assertEquals(2, ArrayTools.insertionIndexOf(a, "B"));
-
-		a = new String[] { "A", "B", "B", "B", "C", "D" };
-		assertEquals(4, ArrayTools.insertionIndexOf(a, "B"));
-
-		a = new String[] { "A", "B", "B", "B", "C", "D" };
-		assertEquals(6, ArrayTools.insertionIndexOf(a, "E"));
-
-		a = new String[] { "B", "B", "B", "C", "D" };
-		assertEquals(0, ArrayTools.insertionIndexOf(a, "A"));
-
-		a = new String[] { "A", "A", "B", "B", "C", "D" };
-		assertEquals(2, ArrayTools.insertionIndexOf(a, "A"));
-	}
-
-	public void testInsertionIndexOfObjectArrayObjectComparator() {
-		Comparator<String> c = new ReverseComparator<String>();
-		String[] a = new String[] { "D", "C", "A" };
-		assertEquals(2, ArrayTools.insertionIndexOf(a, "B", c));
-
-		a = new String[] { "D", "C", "B", "A" };
-		assertEquals(3, ArrayTools.insertionIndexOf(a, "B", c));
-
-		a = new String[] { "D", "C", "B", "B", "B", "A" };
-		assertEquals(5, ArrayTools.insertionIndexOf(a, "B", c));
-
-		a = new String[] { "D", "C", "B", "B", "B", "A" };
-		assertEquals(0, ArrayTools.insertionIndexOf(a, "E", c));
-
-		a = new String[] { "D", "C", "B", "B", "B" };
-		assertEquals(5, ArrayTools.insertionIndexOf(a, "A", c));
-
-		a = new String[] { "D", "C", "B", "B", "A", "A" };
-		assertEquals(6, ArrayTools.insertionIndexOf(a, "A", c));
-	}
-
-
-	// ********** last index of **********
-
-	public void testLastIndexOfObjectArrayObject() {
-		Object[] a = this.buildObjectArray1();
-		assertEquals(1, ArrayTools.lastIndexOf(a, "one"));
-	}
-
-	public void testLastIndexOfObjectArrayObject_NotFound() {
-		Object[] a = this.buildObjectArray1();
-		assertEquals(-1, ArrayTools.lastIndexOf(a, "twenty"));
-	}
-
-	public void testLastIndexOfObjectArrayObject_Null() {
-		Object[] a = this.buildObjectArray1();
-		a = ArrayTools.add(a, null);
-		assertEquals(a.length - 1, ArrayTools.lastIndexOf(a, null));
-	}
-
-	public void testLastIndexOfObjectArrayObject_Null_NotFound() {
-		Object[] a = this.buildObjectArray1();
-		assertEquals(-1, ArrayTools.lastIndexOf(a, null));
-	}
-
-	public void testLastIndexOfCharArrayChar() {
-		char[] a = this.buildCharArray();
-		assertEquals(1, ArrayTools.lastIndexOf(a, 'b'));
-		a = ArrayTools.add(a, 'd');
-		assertEquals(a.length - 1, ArrayTools.lastIndexOf(a, 'd'));
-	}
-
-	public void testLastIndexOfCharArrayChar_NotFound() {
-		char[] a = this.buildCharArray();
-		assertEquals(-1, ArrayTools.lastIndexOf(a, 'z'));
-	}
-
-	public void testLastIndexOfIntArrayInt() {
-		int[] a = this.buildIntArray();
-		assertEquals(1, ArrayTools.lastIndexOf(a, 10));
-		a = ArrayTools.add(a, 30);
-		assertEquals(a.length - 1, ArrayTools.lastIndexOf(a, 30));
-	}
-
-	public void testLastIndexOfIntArrayInt_NotFound() {
-		int[] a = this.buildIntArray();
-		assertEquals(-1, ArrayTools.lastIndexOf(a, 1000));
-	}
-
-
-	// ********** min/max **********
-
-	public void testMinCharArray() {
-		assertEquals('a', ArrayTools.min(this.buildCharArray()));
-	}
-
-	public void testMinCharArray_Exception() {
-		char[] array = new char[0];
-		boolean exCaught = false;
-		try {
-			char c = ArrayTools.min(array);
-			fail("bogus char: " + c);
-		} catch (IndexOutOfBoundsException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testMinIntArray() {
-		assertEquals(0, ArrayTools.min(this.buildIntArray()));
-	}
-
-	public void testMinIntArray_Exception() {
-		int[] array = new int[0];
-		boolean exCaught = false;
-		try {
-			int i = ArrayTools.min(array);
-			fail("bogus int: " + i);
-		} catch (IndexOutOfBoundsException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testMaxCharArray1() {
-		assertEquals('c', ArrayTools.max(this.buildCharArray()));
-	}
-
-	public void testMaxCharArray2() {
-		char[] array = new char[] { 'x', 'a', 'b', 'c' };
-		assertEquals('x', ArrayTools.max(array));
-	}
-
-	public void testMaxCharArray_Exception() {
-		char[] array = new char[0];
-		boolean exCaught = false;
-		try {
-			char c = ArrayTools.max(array);
-			fail("bogus char: " + c);
-		} catch (IndexOutOfBoundsException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testMaxIntArray1() {
-		assertEquals(20, ArrayTools.max(this.buildIntArray()));
-	}
-
-	public void testMaxIntArray2() {
-		int[] array = new int[] { 77, 3, 1, -3 };
-		assertEquals(77, ArrayTools.max(array));
-	}
-
-	public void testMaxIntArray_Exception() {
-		int[] array = new int[0];
-		boolean exCaught = false;
-		try {
-			int i = ArrayTools.max(array);
-			fail("bogus int: " + i);
-		} catch (IndexOutOfBoundsException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-
-	// ********** move **********
-
-	public void testMoveObjectArrayIntInt() {
-		String[] array = new String[] { "0", "1", "2", "3", "4", "5" };
-
-		String[] result = ArrayTools.move(array, 4, 2);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "0", "1", "3", "4", "2", "5" }, result));
-
-		result = ArrayTools.move(array, 0, 5);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "1", "3", "4", "2" }, result));
-
-		result = ArrayTools.move(array, 2, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result));
-
-		result = ArrayTools.move(array, 4, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result));
-	}
-
-	public void testMoveObjectArrayIntIntInt() {
-		String[] array = new String[] { "0", "1", "2", "3", "4", "5" };
-
-		String[] result = ArrayTools.move(array, 4, 2, 1);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "0", "1", "3", "4", "2", "5" }, result));
-
-		result = ArrayTools.move(array, 0, 5, 1);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "1", "3", "4", "2" }, result));
-
-		result = ArrayTools.move(array, 2, 4, 1);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result));
-
-		result = ArrayTools.move(array, 2, 4, 2);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result));
-
-		result = ArrayTools.move(array, 0, 1, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "0", "3", "2", "4", "5", "1" }, result));
-
-		result = ArrayTools.move(array, 1, 0, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result));
-
-		result = ArrayTools.move(array, 1, 1, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result));
-
-		result = ArrayTools.move(array, 1, 0, 0);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result));
-	}
-
-	public void testMoveIntArrayIntInt() {
-		int[] array = new int[] { 0, 1, 2, 3, 4, 5 };
-
-		int[] result = ArrayTools.move(array, 4, 2);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new int[] { 0, 1, 3, 4, 2, 5 }, result));
-
-		result = ArrayTools.move(array, 0, 5);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new int[] { 5, 0, 1, 3, 4, 2 }, result));
-
-		result = ArrayTools.move(array, 2, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new int[] { 5, 0, 4, 1, 3, 2 }, result));
-
-		result = ArrayTools.move(array, 2, 2);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new int[] { 5, 0, 4, 1, 3, 2 }, result));
-	}
-
-	public void testMoveIntArrayIntIntInt() {
-		int[] array = new int[] { 0, 1, 2, 3, 4, 5 };
-
-		int[] result = ArrayTools.move(array, 4, 2, 1);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new int[] { 0, 1, 3, 4, 2, 5 }, result));
-
-		result = ArrayTools.move(array, 0, 5, 1);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new int[] { 5, 0, 1, 3, 4, 2 }, result));
-
-		result = ArrayTools.move(array, 2, 4, 1);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new int[] { 5, 0, 4, 1, 3, 2 }, result));
-
-		result = ArrayTools.move(array, 2, 4, 2);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new int[] { 5, 0, 3, 2, 4, 1 }, result));
-
-		result = ArrayTools.move(array, 0, 1, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new int[] { 0, 3, 2, 4, 5, 1 }, result));
-
-		result = ArrayTools.move(array, 1, 0, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new int[] { 5, 0, 3, 2, 4, 1 }, result));
-
-		result = ArrayTools.move(array, 1, 1, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new int[] { 5, 0, 3, 2, 4, 1 }, result));
-
-		result = ArrayTools.move(array, 1, 0, 0);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new int[] { 5, 0, 3, 2, 4, 1 }, result));
-	}
-
-	public void testMoveCharArrayIntInt() {
-		char[] array = new char[] { 'a', 'b', 'c', 'd', 'e', 'f' };
-
-		char[] result = ArrayTools.move(array, 4, 2);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new char[] { 'a', 'b', 'd', 'e', 'c', 'f' }, result));
-
-		result = ArrayTools.move(array, 0, 5);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new char[] { 'f', 'a', 'b', 'd', 'e', 'c' }, result));
-
-		result = ArrayTools.move(array, 2, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new char[] { 'f', 'a', 'e', 'b', 'd', 'c' }, result));
-
-		result = ArrayTools.move(array, 2, 2);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new char[] { 'f', 'a', 'e', 'b', 'd', 'c' }, result));
-	}
-
-	public void testMoveCharArrayIntIntInt() {
-		char[] array = new char[] { 'a', 'b', 'b', 'c', 'd', 'e' };
-
-		char[] result = ArrayTools.move(array, 4, 2, 1);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new char[] { 'a', 'b', 'c', 'd', 'b', 'e' }, result));
-
-		result = ArrayTools.move(array, 0, 5, 1);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new char[] { 'e', 'a', 'b', 'c', 'd', 'b' }, result));
-
-		result = ArrayTools.move(array, 2, 4, 1);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new char[] { 'e', 'a', 'd', 'b', 'c', 'b' }, result));
-
-		result = ArrayTools.move(array, 2, 4, 2);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new char[] { 'e', 'a', 'c', 'b', 'd', 'b' }, result));
-
-		result = ArrayTools.move(array, 0, 1, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new char[] { 'a', 'c', 'b', 'd', 'e', 'b' }, result));
-
-		result = ArrayTools.move(array, 1, 0, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new char[] { 'e', 'a', 'c', 'b', 'd', 'b' }, result));
-
-		result = ArrayTools.move(array, 1, 1, 4);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new char[] { 'e', 'a', 'c', 'b', 'd', 'b' }, result));
-
-		result = ArrayTools.move(array, 1, 0, 0);
-		assertSame(array, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new char[] { 'e', 'a', 'c', 'b', 'd', 'b' }, result));
-	}
-
-
-	// ********** remove **********
-
-	public void testRemoveObjectArrayObject_Object() {
-		Object[] a = this.buildObjectArray1();
-		a = ArrayTools.add(a, "three");
-		a = ArrayTools.add(a, "four");
-		a = ArrayTools.add(a, "five");
-
-		assertEquals(6, a.length);
-		assertTrue(ArrayTools.contains(a, "three"));
-		a = ArrayTools.remove(a, "three");
-		assertEquals(5, a.length);
-		assertFalse(ArrayTools.contains(a, "three"));
-		assertTrue(ArrayTools.contains(a, "four"));
-		assertTrue(ArrayTools.contains(a, "five"));
-	}
-
-	public void testRemoveObjectArrayObject_String() {
-		String[] a = this.buildStringArray1();
-		a = ArrayTools.add(a, "three");
-		a = ArrayTools.add(a, "four");
-		a = ArrayTools.add(a, "five");
-
-		assertEquals(6, a.length);
-		assertTrue(ArrayTools.contains(a, "three"));
-		a = ArrayTools.remove(a, "three");
-		assertEquals(5, a.length);
-		assertFalse(ArrayTools.contains(a, "three"));
-		assertTrue(ArrayTools.contains(a, "four"));
-		assertTrue(ArrayTools.contains(a, "five"));
-	}
-
-	public void testRemoveCharArrayChar() {
-		char[] a = this.buildCharArray();
-		a = ArrayTools.add(a, 'd');
-		a = ArrayTools.add(a, 'e');
-		a = ArrayTools.add(a, 'f');
-
-		assertEquals(6, a.length);
-		assertTrue(ArrayTools.contains(a, 'd'));
-		a = ArrayTools.remove(a, 'd');
-		assertEquals(5, a.length);
-		assertFalse(ArrayTools.contains(a, 'd'));
-		assertTrue(ArrayTools.contains(a, 'e'));
-		assertTrue(ArrayTools.contains(a, 'f'));
-	}
-
-	public void testRemoveIntArrayInt() {
-		int[] a = this.buildIntArray();
-		a = ArrayTools.add(a, 30);
-		a = ArrayTools.add(a, 40);
-		a = ArrayTools.add(a, 50);
-
-		assertEquals(6, a.length);
-		assertTrue(ArrayTools.contains(a, 30));
-		a = ArrayTools.remove(a, 30);
-		assertEquals(5, a.length);
-		assertFalse(ArrayTools.contains(a, 30));
-		assertTrue(ArrayTools.contains(a, 40));
-		assertTrue(ArrayTools.contains(a, 50));
-	}
-
-
-	// ********** remove all **********
-
-	public void testRemoveAllObjectArrayObjectArray() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		String[] a2 = new String[] { "E", "B" };
-		String[] a3 = ArrayTools.removeAll(a1, (Object[]) a2);
-		assertTrue(Arrays.equals(new String[] { "A", "A", "C", "C", "D", "D", "F", "F" }, a3));
-	}
-
-	public void testRemoveAllObjectArrayObjectArray_Empty() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		String[] a2 = new String[0];
-		String[] a3 = ArrayTools.removeAll(a1, (Object[]) a2);
-		assertTrue(Arrays.equals(a1, a3));
-	}
-
-	public void testRemoveAllObjectArrayObjectArray_NoMatches() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		String[] a2 = new String[] { "X", "Y", "Z" };
-		String[] a3 = ArrayTools.removeAll(a1, (Object[]) a2);
-		assertTrue(Arrays.equals(a1, a3));
-	}
-
-	public void testRemoveAllObjectArrayIterable() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Iterable<?> iterable = Arrays.asList(new String[] { "E", "B" });
-		String[] a3 = ArrayTools.removeAll(a1, iterable);
-		assertTrue(Arrays.equals(new String[] { "A", "A", "C", "C", "D", "D", "F", "F" }, a3));
-	}
-
-	public void testRemoveAllObjectArrayIterableInt() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Iterable<?> iterable = Arrays.asList(new String[] { "E", "B" });
-		String[] a3 = ArrayTools.removeAll(a1, iterable, 7);
-		assertTrue(Arrays.equals(new String[] { "A", "A", "C", "C", "D", "D", "F", "F" }, a3));
-	}
-
-	public void testRemoveAllObjectArrayIterator() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Iterable<?> iterable = Arrays.asList(new String[] { "E", "B" });
-		String[] a3 = ArrayTools.removeAll(a1, iterable.iterator());
-		assertTrue(Arrays.equals(new String[] { "A", "A", "C", "C", "D", "D", "F", "F" }, a3));
-	}
-
-	public void testRemoveAllObjectArrayIterator_Empty() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		String[] a3 = ArrayTools.removeAll(a1, EmptyIterator.instance());
-		assertTrue(Arrays.equals(a1, a3));
-	}
-
-	public void testRemoveAllObjectArrayIteratorInt() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Iterable<?> iterable = Arrays.asList(new String[] { "E", "B" });
-		String[] a3 = ArrayTools.removeAll(a1, iterable.iterator(), 7);
-		assertTrue(Arrays.equals(new String[] { "A", "A", "C", "C", "D", "D", "F", "F" }, a3));
-	}
-
-	public void testRemoveAllObjectArrayIteratorInt_Empty() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		String[] a3 = ArrayTools.removeAll(a1, EmptyIterator.instance(), 7);
-		assertTrue(Arrays.equals(a1, a3));
-	}
-
-	public void testRemoveAllObjectArrayCollection() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Collection<String> collection = Arrays.asList(new String[] { "E", "B" });
-		String[] a3 = ArrayTools.removeAll(a1, collection);
-		assertTrue(Arrays.equals(new String[] { "A", "A", "C", "C", "D", "D", "F", "F" }, a3));
-	}
-
-	public void testRemoveAllObjectArrayCollection_Empty() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Collection<String> collection = new ArrayList<String>();
-		String[] a3 = ArrayTools.removeAll(a1, collection);
-		assertTrue(Arrays.equals(a1, a3));
-	}
-
-	public void testRemoveAllObjectArrayCollection_EmptyArray() {
-		String[] a1 = new String[0];
-		Collection<String> collection = Arrays.asList(new String[] { "E", "B" });
-		String[] a3 = ArrayTools.removeAll(a1, collection);
-		assertTrue(Arrays.equals(a1, a3));
-		assertEquals(0, a3.length);
-	}
-
-	public void testRemoveAllObjectArrayCollection_NoMatches() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Collection<String> collection = Arrays.asList(new String[] { "X", "Y", "Z" });
-		String[] a3 = ArrayTools.removeAll(a1, collection);
-		assertTrue(Arrays.equals(a1, a3));
-	}
-
-	public void testRemoveAllCharArrayCharArray() {
-		char[] a1 = new char[] { 'A', 'A', 'B', 'B', 'C', 'C', 'D', 'D', 'E', 'E', 'F', 'F' };
-		char[] a2 = new char[] { 'E', 'B' };
-		assertTrue(Arrays.equals(new char[] { 'A', 'A', 'C', 'C', 'D', 'D', 'F', 'F' }, ArrayTools.removeAll(a1, a2)));
-	}
-
-	public void testRemoveAllCharArrayCharArray_Empty1() {
-		char[] a1 = new char[0];
-		char[] a2 = new char[] { 'E', 'B' };
-		assertTrue(Arrays.equals(a1, ArrayTools.removeAll(a1, a2)));
-	}
-
-	public void testRemoveAllCharArrayCharArray_Empty2() {
-		char[] a1 = new char[] { 'A', 'A', 'B', 'B', 'C', 'C', 'D', 'D', 'E', 'E', 'F', 'F' };
-		char[] a2 = new char[0];
-		assertTrue(Arrays.equals(a1, ArrayTools.removeAll(a1, a2)));
-	}
-
-	public void testRemoveAllCharArrayCharArray_NoMatches() {
-		char[] a1 = new char[] { 'A', 'A', 'B', 'B', 'C', 'C', 'D', 'D', 'E', 'E', 'F', 'F' };
-		char[] a2 = new char[] { 'X', 'Z' };
-		assertTrue(Arrays.equals(a1, ArrayTools.removeAll(a1, a2)));
-	}
-
-	public void testRemoveAllIntArrayIntArray() {
-		int[] a1 = new int[] { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6 };
-		int[] a2 = new int[] { 5, 2 };
-		assertTrue(Arrays.equals(new int[] { 1, 1, 3, 3, 4, 4, 6, 6 }, ArrayTools.removeAll(a1, a2)));
-	}
-
-	public void testRemoveAllIntArrayIntArray_Empty1() {
-		int[] a1 = new int[0];
-		int[] a2 = new int[] { 5, 2 };
-		assertTrue(Arrays.equals(a1, ArrayTools.removeAll(a1, a2)));
-	}
-
-	public void testRemoveAllIntArrayIntArray_Empty2() {
-		int[] a1 = new int[] { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6 };
-		int[] a2 = new int[0];
-		assertTrue(Arrays.equals(a1, ArrayTools.removeAll(a1, a2)));
-	}
-
-	public void testRemoveAllIntArrayIntArray_NoMatches() {
-		int[] a1 = new int[] { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6 };
-		int[] a2 = new int[] { 52, 67 };
-		assertTrue(Arrays.equals(a1, ArrayTools.removeAll(a1, a2)));
-	}
-
-
-	// ********** remove all occurrences **********
-
-	public void testRemoveAllOccurrencesObjectArrayObject() {
-		String[] a = this.buildStringArray1();
-		assertEquals(3, a.length);
-		a = ArrayTools.removeAllOccurrences(a, "three");
-		assertEquals(3, a.length);
-		a = ArrayTools.removeAllOccurrences(a, "two");
-		assertEquals(2, a.length);
-		a = ArrayTools.removeAllOccurrences(a, "two");
-		assertEquals(2, a.length);
-
-		a = ArrayTools.add(a, "five");
-		a = ArrayTools.add(a, "five");
-		a = ArrayTools.add(a, "five");
-		assertEquals(5, a.length);
-		a = ArrayTools.removeAllOccurrences(a, "five");
-		assertEquals(2, a.length);
-		a = ArrayTools.removeAllOccurrences(a, "five");
-		assertEquals(2, a.length);
-
-		a = ArrayTools.add(a, null);
-		a = ArrayTools.add(a, null);
-		a = ArrayTools.add(a, null);
-		assertEquals(5, a.length);
-		a = ArrayTools.removeAllOccurrences(a, null);
-		assertEquals(2, a.length);
-		a = ArrayTools.removeAllOccurrences(a, null);
-		assertEquals(2, a.length);
-	}
-
-	public void testRemoveAllOccurrencesObjectArrayObject_Empty() {
-		String[] a = new String[0];
-		a = ArrayTools.removeAllOccurrences(a, "three");
-		assertEquals(0, a.length);
-	}
-
-	public void testRemoveAllOccurrencesCharArrayChar() {
-		char[] a = this.buildCharArray();
-		assertEquals(3, a.length);
-		a = ArrayTools.removeAllOccurrences(a, 'd');
-		assertEquals(3, a.length);
-		a = ArrayTools.removeAllOccurrences(a, 'b');
-		assertEquals(2, a.length);
-		a = ArrayTools.removeAllOccurrences(a, 'b');
-		assertEquals(2, a.length);
-
-		a = ArrayTools.add(a, 'g');
-		a = ArrayTools.add(a, 'g');
-		a = ArrayTools.add(a, 'g');
-		assertEquals(5, a.length);
-		a = ArrayTools.removeAllOccurrences(a, 'g');
-		assertEquals(2, a.length);
-		a = ArrayTools.removeAllOccurrences(a, 'g');
-		assertEquals(2, a.length);
-	}
-
-	public void testRemoveAllOccurrencesCharArrayChar_Empty() {
-		char[] a = new char[0];
-		a = ArrayTools.removeAllOccurrences(a, 'a');
-		assertEquals(0, a.length);
-	}
-
-	public void testRemoveAllOccurrencesIntArrayInt() {
-		int[] a = this.buildIntArray();
-		assertEquals(3, a.length);
-		a = ArrayTools.removeAllOccurrences(a, 55);
-		assertEquals(3, a.length);
-		a = ArrayTools.removeAllOccurrences(a, 10);
-		assertEquals(2, a.length);
-		a = ArrayTools.removeAllOccurrences(a, 10);
-		assertEquals(2, a.length);
-
-		a = ArrayTools.add(a, 77);
-		a = ArrayTools.add(a, 77);
-		a = ArrayTools.add(a, 77);
-		assertEquals(5, a.length);
-		a = ArrayTools.removeAllOccurrences(a, 77);
-		assertEquals(2, a.length);
-		a = ArrayTools.removeAllOccurrences(a, 77);
-		assertEquals(2, a.length);
-	}
-
-	public void testRemoveAllOccurrencesIntArrayInt_Empty() {
-		int[] a = new int[0];
-		a = ArrayTools.removeAllOccurrences(a, 22);
-		assertEquals(0, a.length);
-	}
-
-
-	// ********** remove duplicate elements **********
-
-	public void testRemoveDuplicateElementsObjectArray() {
-		List<String> list = this.buildStringVector1();
-		list.add("zero");
-		list.add("zero");
-		list.add("two");
-		list.add("zero");
-		String[] array = ArrayTools.removeDuplicateElements(list.toArray(new String[list.size()]));
-		int i = 0;
-		assertEquals("zero", array[i++]);
-		assertEquals("one", array[i++]);
-		assertEquals("two", array[i++]);
-		assertEquals(i, array.length);
-	}
-
-	public void testRemoveDuplicateElementsObjectArray_Empty() {
-		String[] array = ArrayTools.removeDuplicateElements(new String[0]);
-		assertEquals(0, array.length);
-	}
-
-	public void testRemoveDuplicateElementsObjectArray_SingleElement() {
-		String[] array = ArrayTools.removeDuplicateElements(new String[] { "foo" });
-		assertEquals(1, array.length);
-	}
-
-	public void testRemoveDuplicateElementsObjectArray_NoDuplicates() {
-		String[] a1 = new String[] { "foo", "bar", "baz" };
-		String[] a2 = ArrayTools.removeDuplicateElements(a1);
-		assertEquals(3, a2.length);
-		assertTrue(Arrays.equals(a1, a2));
-	}
-
-
-	// ********** remove element at index **********
-
-	public void testRemoveElementAtIndexObjectArrayInt() {
-		String[] a = new String[] { "A", "B", "A", "C", "A", "D" };
-		a = ArrayTools.removeElementAtIndex(a, 3);
-		assertTrue(Arrays.equals(new String[] { "A", "B", "A", "A", "D" }, a));
-	}
-
-	public void testRemoveElementAtIndexCharArrayInt() {
-		char[] a = new char[] { 'A', 'B', 'A', 'C', 'A', 'D' };
-		a = ArrayTools.removeElementAtIndex(a, 3);
-		assertTrue(Arrays.equals(new char[] { 'A', 'B', 'A', 'A', 'D' }, a));
-	}
-
-	public void testRemoveElementAtIndexIntArrayInt() {
-		int[] a = new int[] { 8, 6, 7, 33, 2, 11 };
-		a = ArrayTools.removeElementsAtIndex(a, 3, 3);
-		assertTrue(Arrays.equals(new int[] { 8, 6, 7 }, a));
-	}
-
-	public void testRemoveFirstObjectArray() {
-		String[] a = new String[] { "A", "B", "A", "C", "A", "D" };
-		a = ArrayTools.removeFirst(a);
-		assertTrue(Arrays.equals(new String[] { "B", "A", "C", "A", "D" }, a));
-	}
-
-	public void testRemoveFirstCharArray() {
-		char[] a = new char[] { 'A', 'B', 'A', 'C', 'A', 'D' };
-		a = ArrayTools.removeFirst(a);
-		assertTrue(Arrays.equals(new char[] { 'B', 'A', 'C', 'A', 'D' }, a));
-	}
-
-	public void testRemoveFirstIntArray() {
-		int[] a = new int[] { 8, 6, 7, 33, 2, 11 };
-		a = ArrayTools.removeFirst(a);
-		assertTrue(Arrays.equals(new int[] { 6, 7, 33, 2, 11 }, a));
-	}
-
-	public void testRemoveLastObjectArray() {
-		String[] a = new String[] { "A", "B", "A", "C", "A", "D" };
-		a = ArrayTools.removeLast(a);
-		assertTrue(Arrays.equals(new String[] { "A", "B", "A", "C", "A" }, a));
-	}
-
-	public void testRemoveLastCharArray() {
-		char[] a = new char[] { 'A', 'B', 'A', 'C', 'A', 'D' };
-		a = ArrayTools.removeLast(a);
-		assertTrue(Arrays.equals(new char[] { 'A', 'B', 'A', 'C', 'A' }, a));
-	}
-
-	public void testRemoveLastIntArray() {
-		int[] a = new int[] { 8, 6, 7, 33, 2, 11 };
-		a = ArrayTools.removeLast(a);
-		assertTrue(Arrays.equals(new int[] { 8, 6, 7, 33, 2 }, a));
-	}
-
-
-	// ********** remove elements at index **********
-
-	public void testRemoveElementsAtIndexObjectArrayIntInt() {
-		String[] a = new String[] { "A", "B", "A", "C", "A", "D" };
-		a = ArrayTools.removeElementsAtIndex(a, 3, 2);
-		assertTrue(Arrays.equals(new String[] { "A", "B", "A", "D" }, a));
-	}
-
-	public void testRemoveElementsAtIndexObjectArrayIntInt_ZeroLength() {
-		String[] a1 = new String[] { "A", "B", "A", "C", "A", "D" };
-		String[] a2 = ArrayTools.removeElementsAtIndex(a1, 3, 0);
-		assertTrue(Arrays.equals(a1, a2));
-	}
-
-	public void testRemoveElementsAtIndexObjectArrayIntInt_Empty() {
-		String[] a = new String[] { "A", "B", "A", "C", "A", "D" };
-		a = ArrayTools.removeElementsAtIndex(a, 0, 6);
-		assertEquals(0, a.length);
-	}
-
-	public void testRemoveElementsAtIndexCharArrayIntInt() {
-		char[] a = new char[] { 'A', 'B', 'A', 'C', 'A', 'D' };
-		a = ArrayTools.removeElementsAtIndex(a, 0, 5);
-		assertTrue(Arrays.equals(new char[] { 'D' }, a));
-	}
-
-	public void testRemoveElementsAtIndexCharArrayIntInt_ZeroLength() {
-		char[] a1 = new char[] { 'A', 'B', 'A', 'C', 'A', 'D' };
-		char[] a2 = ArrayTools.removeElementsAtIndex(a1, 3, 0);
-		assertTrue(Arrays.equals(a1, a2));
-	}
-
-	public void testRemoveElementsAtIndexCharArrayIntInt_Empty() {
-		char[] a = new char[] { 'A', 'B', 'A', 'C', 'A', 'D' };
-		a = ArrayTools.removeElementsAtIndex(a, 0, 6);
-		assertEquals(0, a.length);
-	}
-
-	public void testRemoveElementsAtIndexIntArrayIntInt() {
-		int[] a = new int[] { 8, 6, 7, 33, 2, 11 };
-		a = ArrayTools.removeElementsAtIndex(a, 3, 3);
-		assertTrue(Arrays.equals(new int[] { 8, 6, 7 }, a));
-	}
-
-	public void testRemoveElementsAtIndexIntArrayIntInt_ZeroLength() {
-		int[] a1 = new int[] { 8, 6, 7, 33, 2, 11 };
-		int[] a2 = ArrayTools.removeElementsAtIndex(a1, 3, 0);
-		assertTrue(Arrays.equals(a1, a2));
-	}
-
-	public void testRemoveElementsAtIndexIntArrayIntInt_Empty() {
-		int[] a = new int[] { 8, 6, 7, 33, 2, 11 };
-		a = ArrayTools.removeElementsAtIndex(a, 0, 6);
-		assertEquals(0, a.length);
-	}
-
-
-	// ********** replace all **********
-
-	public void testReplaceAllObjectArrayObjectObject_Object() {
-		Object[] a = new Object[] { "A", "B", "A", "C", "A", "D" };
-		a = ArrayTools.replaceAll(a, "A", "Z");
-		assertTrue(Arrays.equals(new Object[] { "Z", "B", "Z", "C", "Z", "D" }, a));
-	}
-
-	public void testReplaceAllObjectArrayObjectObject_String() {
-		String[] a = new String[] { "A", "B", "A", "C", "A", "D" };
-		a = ArrayTools.replaceAll(a, "A", "Z");
-		assertTrue(Arrays.equals(new String[] { "Z", "B", "Z", "C", "Z", "D" }, a));
-	}
-
-	public void testReplaceAllObjectArrayObjectObject_Null() {
-		String[] a = new String[] { null, "B", null, "C", null, "D" };
-		a = ArrayTools.replaceAll(a, null, "Z");
-		assertTrue(Arrays.equals(new String[] { "Z", "B", "Z", "C", "Z", "D" }, a));
-	}
-
-	public void testReplaceAllCharArrayCharChar() {
-		char[] a = new char[] { 'A', 'B', 'A', 'C', 'A', 'D' };
-		a = ArrayTools.replaceAll(a, 'A', 'Z');
-		assertTrue(Arrays.equals(new char[] { 'Z', 'B', 'Z', 'C', 'Z', 'D' }, a));
-	}
-
-	public void testReplaceAllIntArrayIntInt() {
-		int[] a = new int[] { 0, 1, 0, 7, 0, 99 };
-		a = ArrayTools.replaceAll(a, 0, 13);
-		assertTrue(Arrays.equals(new int[] { 13, 1, 13, 7, 13, 99 }, a));
-	}
-
-
-	// ********** retain all **********
-
-	public void testRetainAllObjectArrayObjectArray() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Object[] a2 = new Object[] { "E", "B", new Integer(7) };
-		assertTrue(Arrays.equals(new String[] { "B", "B", "E", "E" }, ArrayTools.retainAll(a1, a2)));
-	}
-
-	public void testRetainAllObjectArrayObjectArray_EmptyObjectArray1() {
-		String[] a1 = new String[0];
-		String[] a2 = new String[] { "E", "B", "" };
-		String[] a3 = ArrayTools.retainAll(a1, a2);
-		assertEquals(0, a3.length);
-	}
-
-	public void testRetainAllObjectArrayObjectArray_EmptyObjectArray2() {
-		String[] a1 = new String[] { "E", "B", "" };
-		String[] a2 = new String[0];
-		String[] a3 = ArrayTools.retainAll(a1, a2);
-		assertEquals(0, a3.length);
-	}
-
-	public void testRetainAllObjectArrayObjectArray_BothEmpty() {
-		String[] a1 = new String[0];
-		String[] a2 = new String[0];
-		String[] a3 = ArrayTools.retainAll(a1, a2);
-		assertEquals(0, a3.length);
-	}
-
-	public void testRetainAllObjectArrayIterable() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Iterable<String> iterable = Arrays.asList(new String[] { "E", "B", "" });
-		assertTrue(Arrays.equals(new String[] { "B", "B", "E", "E" }, ArrayTools.retainAll(a1, iterable)));
-	}
-
-	public void testRetainAllObjectArrayIterable_EmptyObjectArray() {
-		String[] a1 = new String[0];
-		Iterable<String> iterable = Arrays.asList(new String[] { "E", "B", "" });
-		String[] a3 = ArrayTools.retainAll(a1, iterable);
-		assertEquals(0, a3.length);
-	}
-
-	public void testRetainAllObjectArrayIterableInt() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Iterable<String> iterable = Arrays.asList(new String[] { "E", "B", "" });
-		assertTrue(Arrays.equals(new String[] { "B", "B", "E", "E" }, ArrayTools.retainAll(a1, iterable, 3)));
-	}
-
-	public void testRetainAllObjectArrayIterableInt_EmptyObjectArray() {
-		String[] a1 = new String[0];
-		Iterable<String> iterable = Arrays.asList(new String[] { "E", "B", "" });
-		String[] a3 = ArrayTools.retainAll(a1, iterable, 3);
-		assertEquals(0, a3.length);
-	}
-
-	public void testRetainAllObjectArrayIterator() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Iterator<String> iterator = Arrays.asList(new String[] { "E", "B", "" }).iterator();
-		assertTrue(Arrays.equals(new String[] { "B", "B", "E", "E" }, ArrayTools.retainAll(a1, iterator)));
-	}
-
-	public void testRetainAllObjectArrayIterator_EmptyObjectArray() {
-		String[] a1 = new String[0];
-		Iterator<String> iterator = Arrays.asList(new String[] { "E", "B", "" }).iterator();
-		String[] a3 = ArrayTools.retainAll(a1, iterator);
-		assertEquals(0, a3.length);
-	}
-
-	public void testRetainAllObjectArrayIterator_EmptyIterator() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		assertTrue(Arrays.equals(new String[0], ArrayTools.retainAll(a1, EmptyIterator.instance())));
-	}
-
-	public void testRetainAllObjectArrayIteratorInt() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Iterator<String> iterator = Arrays.asList(new String[] { "E", "B", "" }).iterator();
-		assertTrue(Arrays.equals(new String[] { "B", "B", "E", "E" }, ArrayTools.retainAll(a1, iterator, 3)));
-	}
-
-	public void testRetainAllObjectArrayIteratorInt_EmptyIterator() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		assertTrue(Arrays.equals(new String[0], ArrayTools.retainAll(a1, EmptyIterator.instance(), 3)));
-	}
-
-	public void testRetainAllObjectArrayIteratorInt_EmptyObjectArray() {
-		String[] a1 = new String[0];
-		Iterator<String> iterator = Arrays.asList(new String[] { "E", "B", "" }).iterator();
-		String[] a3 = ArrayTools.retainAll(a1, iterator, 3);
-		assertEquals(0, a3.length);
-	}
-
-	public void testRetainAllObjectArrayCollection() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Collection<String> collection = Arrays.asList(new String[] { "E", "B", "" });
-		assertTrue(Arrays.equals(new String[] { "B", "B", "E", "E" }, ArrayTools.retainAll(a1, collection)));
-	}
-
-	public void testRetainAllObjectArrayCollection_EmptyObjectArray() {
-		String[] a1 = new String[0];
-		Collection<String> collection = Arrays.asList(new String[] { "E", "B", "" });
-		String[] a3 = ArrayTools.retainAll(a1, collection);
-		assertEquals(0, a3.length);
-	}
-
-	public void testRetainAllObjectArrayCollection_EmptyCollection() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Collection<String> collection = new ArrayList<String>();
-		String[] a3 = ArrayTools.retainAll(a1, collection);
-		assertEquals(0, a3.length);
-	}
-
-	public void testRetainAllObjectArrayCollection_All() {
-		String[] a1 = new String[] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" };
-		Collection<String> collection = Arrays.asList(new String[] { "A", "B", "C", "D", "E", "F" });
-		assertTrue(Arrays.equals(a1, ArrayTools.retainAll(a1, collection)));
-	}
-
-	public void testRetainAllCharArrayCharArray() {
-		char[] a1 = new char[] { 'A', 'A', 'B', 'B', 'C', 'C', 'D', 'D', 'E', 'E', 'F', 'F' };
-		char[] a2 = new char[] { 'E', 'B' };
-		assertTrue(Arrays.equals(new char[] { 'B', 'B', 'E', 'E' }, ArrayTools.retainAll(a1, a2)));
-	}
-
-	public void testRetainAllCharArrayCharArray_EmptyCharArray1() {
-		char[] a1 = new char[0];
-		char[] a2 = new char[] { 'E', 'B' };
-		assertSame(a1, ArrayTools.retainAll(a1, a2));
-	}
-
-	public void testRetainAllCharArrayCharArray_EmptyCharArray2() {
-		char[] a1 = new char[] { 'E', 'B' };
-		char[] a2 = new char[0];
-		assertEquals(0, ArrayTools.retainAll(a1, a2).length);
-	}
-
-	public void testRetainAllCharArrayCharArray_RetainAll() {
-		char[] a1 = new char[] { 'E', 'B', 'E', 'B', 'E', 'B', 'E', 'B', 'E' };
-		char[] a2 = new char[] { 'E', 'B' };
-		assertSame(a1, ArrayTools.retainAll(a1, a2));
-	}
-
-	public void testRetainAllIntArrayIntArray() {
-		int[] a1 = new int[] { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6 };
-		int[] a2 = new int[] { 5, 2 };
-		assertTrue(Arrays.equals(new int[] { 2, 2, 5, 5 }, ArrayTools.retainAll(a1, a2)));
-	}
-
-	public void testRetainAllIntArrayIntArray_EmptyIntArray1() {
-		int[] a1 = new int[0];
-		int[] a2 = new int[] { 5, 2 };
-		assertSame(a1, ArrayTools.retainAll(a1, a2));
-	}
-
-	public void testRetainAllIntArrayIntArray_EmptyIntArray2() {
-		int[] a1 = new int[] { 5, 2 };
-		int[] a2 = new int[0];
-		assertEquals(0, ArrayTools.retainAll(a1, a2).length);
-	}
-
-	public void testRetainAllIntArrayIntArray_RetainAll() {
-		int[] a1 = new int[] { 5, 2, 5, 2, 5, 2, 5, 2, 5, 2, 5 };
-		int[] a2 = new int[] { 5, 2 };
-		assertSame(a1, ArrayTools.retainAll(a1, a2));
-	}
-
-
-	// ********** reverse **********
-
-	public void testReverseObjectArray_Object() {
-		Object[] a = this.buildObjectArray1();
-		a = ArrayTools.reverse(a);
-		assertEquals("two", a[0]);
-		assertEquals("one", a[1]);
-		assertEquals("zero", a[2]);
-	}
-
-	public void testReverseObjectArray_String() {
-		String[] a = this.buildStringArray1();
-		a = ArrayTools.reverse(a);
-		assertEquals("two", a[0]);
-		assertEquals("one", a[1]);
-		assertEquals("zero", a[2]);
-	}
-
-	public void testReverseObjectArray_Singleton() {
-		String[] a1 = new String[] { "foo" };
-		String[] a2 = ArrayTools.reverse(a1);
-		assertTrue(Arrays.equals(a1, a2));
-	}
-
-	public void testReverseCharArray() {
-		char[] a = this.buildCharArray();
-		a = ArrayTools.reverse(a);
-		assertEquals('c', a[0]);
-		assertEquals('b', a[1]);
-		assertEquals('a', a[2]);
-	}
-
-	public void testReverseCharArray_Singleton() {
-		char[] a1 = new char[] { 'f' };
-		char[] a2 = ArrayTools.reverse(a1);
-		assertTrue(Arrays.equals(a1, a2));
-	}
-
-	public void testReverseIntArray() {
-		int[] a = this.buildIntArray();
-		a = ArrayTools.reverse(a);
-		assertEquals(20, a[0]);
-		assertEquals(10, a[1]);
-		assertEquals(0, a[2]);
-	}
-
-	public void testReverseIntArray_Singleton() {
-		int[] a1 = new int[] { 7 };
-		int[] a2 = ArrayTools.reverse(a1);
-		assertTrue(Arrays.equals(a1, a2));
-	}
-
-
-	// ********** rotate **********
-
-	public void testRotateObjectArray() {
-		String[] a = this.buildStringArray1();
-		a = ArrayTools.rotate(a);
-		assertEquals("two", a[0]);
-		assertEquals("zero", a[1]);
-		assertEquals("one", a[2]);
-	}
-
-	public void testRotateObjectArray_Zero() {
-		String[] a1 = new String[0];
-		String[] a2 = ArrayTools.rotate(a1);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateObjectArray_One() {
-		String[] a1 = new String[] { "foo  " };
-		String[] a2 = ArrayTools.rotate(a1);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateObjectArrayInt() {
-		String[] a = this.buildStringArray1();
-		a = ArrayTools.rotate(a, 2);
-		assertEquals("one", a[0]);
-		assertEquals("two", a[1]);
-		assertEquals("zero", a[2]);
-	}
-
-	public void testRotateObjectArrayInt_ZeroDistance() {
-		String[] a1 = this.buildStringArray1();
-		String[] a2 = ArrayTools.rotate(a1, 0);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateObjectArrayInt_NegativeDistance() {
-		String[] a1 = this.buildStringArray1();
-		String[] a2 = ArrayTools.rotate(a1, -1);
-		assertEquals("one", a2[0]);
-		assertEquals("two", a2[1]);
-		assertEquals("zero", a2[2]);
-	}
-
-	public void testRotateObjectArrayInt_Zero() {
-		String[] a1 = new String[0];
-		String[] a2 = ArrayTools.rotate(a1, 7);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateObjectArrayInt_One() {
-		String[] a1 = new String[] { "foo  " };
-		String[] a2 = ArrayTools.rotate(a1, 8);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateCharArray() {
-		char[] a = this.buildCharArray();
-		a = ArrayTools.rotate(a);
-		assertEquals('c', a[0]);
-		assertEquals('a', a[1]);
-		assertEquals('b', a[2]);
-	}
-
-	public void testRotateCharArray_Zero() {
-		char[] a1 = new char[0];
-		char[] a2 = ArrayTools.rotate(a1);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateCharArray_One() {
-		char[] a1 = new char[] { 'a' };
-		char[] a2 = ArrayTools.rotate(a1);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateCharArrayInt() {
-		char[] a = this.buildCharArray();
-		a = ArrayTools.rotate(a, 2);
-		assertEquals('b', a[0]);
-		assertEquals('c', a[1]);
-		assertEquals('a', a[2]);
-	}
-
-	public void testRotateCharArrayInt_ZeroDistance() {
-		char[] a1 = new char[] { 'a', 'b', 'c' };
-		char[] a2 = ArrayTools.rotate(a1, 0);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateCharArrayInt_NegativeDistance() {
-		char[] a = this.buildCharArray();
-		a = ArrayTools.rotate(a, -1);
-		assertEquals('b', a[0]);
-		assertEquals('c', a[1]);
-		assertEquals('a', a[2]);
-	}
-
-	public void testRotateCharArrayInt_Zero() {
-		char[] a1 = new char[0];
-		char[] a2 = ArrayTools.rotate(a1, 2001);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateCharArrayInt_One() {
-		char[] a1 = new char[] { 'a' };
-		char[] a2 = ArrayTools.rotate(a1, 22);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateIntArray() {
-		int[] a = this.buildIntArray();
-		a = ArrayTools.rotate(a);
-		assertEquals(20, a[0]);
-		assertEquals(0, a[1]);
-		assertEquals(10, a[2]);
-	}
-
-	public void testRotateIntArray_Zero() {
-		int[] a1 = new int[0];
-		int[] a2 = ArrayTools.rotate(a1);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateIntArray_One() {
-		int[] a1 = new int[] { 77 };
-		int[] a2 = ArrayTools.rotate(a1);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateIntArrayInt() {
-		int[] a = this.buildIntArray();
-		a = ArrayTools.rotate(a, 2);
-		assertEquals(10, a[0]);
-		assertEquals(20, a[1]);
-		assertEquals(0, a[2]);
-	}
-
-	public void testRotateIntArrayInt_ZeroDistance() {
-		int[] a1 = new int[] { 3, 2, 1 };
-		int[] a2 = ArrayTools.rotate(a1, 0);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateIntArrayInt_NegativeDistance() {
-		int[] a = this.buildIntArray();
-		a = ArrayTools.rotate(a, -1);
-		assertEquals(10, a[0]);
-		assertEquals(20, a[1]);
-		assertEquals(0, a[2]);
-	}
-
-	public void testRotateIntArrayInt_Zero() {
-		int[] a1 = new int[0];
-		int[] a2 = ArrayTools.rotate(a1, 3);
-		assertSame(a1, a2);
-	}
-
-	public void testRotateIntArrayInt_One() {
-		int[] a1 = new int[] { 77 };
-		int[] a2 = ArrayTools.rotate(a1, 44);
-		assertSame(a1, a2);
-	}
-
-
-	// ********** shuffle **********
-
-	public void testShuffleObjectArray() {
-		String[] array1 = this.buildStringArray1();
-		String[] array2 = ArrayTools.shuffle(this.buildStringArray1());
-		assertEquals(array1.length, array2.length);
-		assertTrue(ArrayTools.containsAll(array1, (Object[]) array2));
-	}
-
-	public void testShuffleObjectArray_Singleton() {
-		String[] array1 = new String[] { "foo" };
-		String[] array2 = ArrayTools.shuffle(new String[] { "foo" });
-		assertEquals(array1.length, array2.length);
-		assertTrue(ArrayTools.containsAll(array1, (Object[]) array2));
-	}
-
-	public void testShuffleCharArray() {
-		char[] array1 = this.buildCharArray();
-		char[] array2 = ArrayTools.shuffle(this.buildCharArray());
-		assertEquals(array1.length, array2.length);
-		assertTrue(ArrayTools.containsAll(array1, array2));
-	}
-
-	public void testShuffleCharArray_Singleton() {
-		char[] array1 = new char[] { 'f' };
-		char[] array2 = ArrayTools.shuffle(new char[] { 'f' });
-		assertEquals(array1.length, array2.length);
-		assertTrue(ArrayTools.containsAll(array1, array2));
-	}
-
-	public void testShuffleIntArray() {
-		int[] array1 = this.buildIntArray();
-		int[] array2 = ArrayTools.shuffle(this.buildIntArray());
-		assertEquals(array1.length, array2.length);
-		assertTrue(ArrayTools.containsAll(array1, array2));
-	}
-
-	public void testShuffleIntArray_Singleton() {
-		int[] array1 = new int[] { 7 };
-		int[] array2 = ArrayTools.shuffle(new int[] { 7 });
-		assertEquals(array1.length, array2.length);
-		assertTrue(ArrayTools.containsAll(array1, array2));
-	}
-
-
-	// ********** sub-array **********
-
-	public void testSubArrayObjectArrayIntInt() {
-		String[] array = new String[] {"foo", "bar", "baz", "joo", "jar", "jaz"};
-		String[] result = new String[] {"foo", "bar", "baz", "joo"};
-		assertTrue(Arrays.equals(result, ArrayTools.subArray(array, 0, 4)));
-
-		result = new String[] {"jar"};
-		assertTrue(Arrays.equals(result, ArrayTools.subArray(array, 4, 5)));
-
-		result = new String[0];
-		assertTrue(Arrays.equals(result, ArrayTools.subArray(array, 5, 5)));
-
-		result = new String[] {"joo", "jar", "jaz"};
-		assertTrue(Arrays.equals(result, ArrayTools.subArray(array, 3, 6)));
-	}
-
-	public void testSubArrayIntArrayIntInt() {
-		int[] array = new int[] {77, 99, 333, 4, 9090, 42};
-		int[] result = new int[] {77, 99, 333, 4};
-		assertTrue(Arrays.equals(result, ArrayTools.subArray(array, 0, 4)));
-
-		result = new int[] {9090};
-		assertTrue(Arrays.equals(result, ArrayTools.subArray(array, 4, 5)));
-
-		result = new int[0];
-		assertTrue(Arrays.equals(result, ArrayTools.subArray(array, 5, 5)));
-
-		result = new int[] {4, 9090, 42};
-		assertTrue(Arrays.equals(result, ArrayTools.subArray(array, 3, 6)));
-	}
-
-	public void testSubArrayCharArrayIntInt() {
-		char[] array = new char[] {'a', 'b', 'c', 'd', 'e', 'f'};
-		char[] result = new char[] {'a', 'b', 'c', 'd'};
-		assertTrue(Arrays.equals(result, ArrayTools.subArray(array, 0, 4)));
-
-		result = new char[] {'e'};
-		assertTrue(Arrays.equals(result, ArrayTools.subArray(array, 4, 5)));
-
-		result = new char[0];
-		assertTrue(Arrays.equals(result, ArrayTools.subArray(array, 5, 5)));
-
-		result = new char[] {'d', 'e', 'f'};
-		assertTrue(Arrays.equals(result, ArrayTools.subArray(array, 3, 6)));
-	}
-
-
-	// ********** swap **********
-
-	public void testSwapObjectArray() {
-		String[] a = this.buildStringArray1();
-		a = ArrayTools.swap(a, 1, 2);
-		assertEquals("zero", a[0]);
-		assertEquals("two", a[1]);
-		assertEquals("one", a[2]);
-	}
-
-	public void testSwapObjectArray_SameIndices() {
-		String[] a1 = this.buildStringArray1();
-		String[] a2 = this.buildStringArray1();
-		a1 = ArrayTools.swap(a1, 1, 1);
-		assertTrue(Arrays.equals(a1, a2));
-	}
-
-	public void testSwapCharArray() {
-		char[] a = this.buildCharArray();
-		a = ArrayTools.swap(a, 1, 2);
-		assertEquals('a', a[0]);
-		assertEquals('c', a[1]);
-		assertEquals('b', a[2]);
-	}
-
-	public void testSwapCharArray_SameIndices() {
-		char[] a1 = this.buildCharArray();
-		char[] a2 = this.buildCharArray();
-		a1 = ArrayTools.swap(a1, 1, 1);
-		assertTrue(Arrays.equals(a1, a2));
-	}
-
-	public void testSwapIntArray() {
-		int[] a = this.buildIntArray();
-		a = ArrayTools.swap(a, 1, 2);
-		assertEquals(0, a[0]);
-		assertEquals(20, a[1]);
-		assertEquals(10, a[2]);
-	}
-
-	public void testSwapIntArray_SameIndices() {
-		int[] a1 = this.buildIntArray();
-		int[] a2 = this.buildIntArray();
-		a1 = ArrayTools.swap(a1, 1, 1);
-		assertTrue(Arrays.equals(a1, a2));
-	}
-
-
-	// ********** Arrays enhancements **********
-
-	public void testFillBooleanArrayBoolean() {
-		boolean[] a1 = new boolean[9];
-		boolean[] a2 = ArrayTools.fill(a1, true);
-		for (boolean x : a1) {
-			assertTrue(x);
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testFillBooleanArrayIntIntBoolean() {
-		boolean[] a1 = new boolean[9];
-		boolean[] a2 = ArrayTools.fill(a1, false);
-		int from = 3;
-		int to = 6;
-		boolean[] a3 = ArrayTools.fill(a2, from, to, true);
-		for (int i = 0; i < a1.length; i++) {
-			boolean x = a1[i];
-			if (i < from || i >= to) {
-				assertFalse(x);
-			} else {
-				assertTrue(x);
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testFillByteArrayByte() {
-		byte[] a1 = new byte[9];
-		byte[] a2 = ArrayTools.fill(a1, (byte) 77);
-		for (byte x : a1) {
-			assertEquals(77, x);
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testFillByteArrayIntIntByte() {
-		byte[] a1 = new byte[9];
-		byte[] a2 = ArrayTools.fill(a1, (byte) 3);
-		int from = 3;
-		int to = 6;
-		byte[] a3 = ArrayTools.fill(a2, from, to, (byte) 77);
-		for (int i = 0; i < a1.length; i++) {
-			byte x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals(3, x);
-			} else {
-				assertEquals(77, x);
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testFillCharArrayChar() {
-		char[] a1 = new char[9];
-		char[] a2 = ArrayTools.fill(a1, 'c');
-		for (char x : a1) {
-			assertEquals('c', x);
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testFillCharArrayIntIntChar() {
-		char[] a1 = new char[9];
-		char[] a2 = ArrayTools.fill(a1, 'a');
-		int from = 3;
-		int to = 6;
-		char[] a3 = ArrayTools.fill(a2, from, to, 'c');
-		for (int i = 0; i < a1.length; i++) {
-			char x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals('a', x);
-			} else {
-				assertEquals('c', x);
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testFillDoubleArrayDouble() {
-		double[] a1 = new double[9];
-		double[] a2 = ArrayTools.fill(a1, 77.77);
-		for (double x : a1) {
-			assertEquals(77.77, x, 0.0);
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testFillDoubleArrayIntIntDouble() {
-		double[] a1 = new double[9];
-		double[] a2 = ArrayTools.fill(a1, 3.3);
-		int from = 3;
-		int to = 6;
-		double[] a3 = ArrayTools.fill(a2, from, to, 77.77);
-		for (int i = 0; i < a1.length; i++) {
-			double x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals(3.3, x, 0.0);
-			} else {
-				assertEquals(77.77, x, 0.0);
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testFillFloatArrayFloat() {
-		float[] a1 = new float[9];
-		float[] a2 = ArrayTools.fill(a1, 77.77f);
-		for (float x : a1) {
-			assertEquals(77.77f, x, 0.0);
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testFillFloatArrayIntIntFloat() {
-		float[] a1 = new float[9];
-		float[] a2 = ArrayTools.fill(a1, 3.3f);
-		int from = 3;
-		int to = 6;
-		float[] a3 = ArrayTools.fill(a2, from, to, 77.77f);
-		for (int i = 0; i < a1.length; i++) {
-			float x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals(3.3f, x, 0.0);
-			} else {
-				assertEquals(77.77f, x, 0.0);
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testFillIntArrayInt() {
-		int[] a1 = new int[9];
-		int[] a2 = ArrayTools.fill(a1, 77);
-		for (int x : a1) {
-			assertEquals(77, x);
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testFillIntArrayIntIntInt() {
-		int[] a1 = new int[9];
-		int[] a2 = ArrayTools.fill(a1, 3);
-		int from = 3;
-		int to = 6;
-		int[] a3 = ArrayTools.fill(a2, from, to, 77);
-		for (int i = 0; i < a1.length; i++) {
-			int x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals(3, x);
-			} else {
-				assertEquals(77, x);
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testFillObjectArrayObject() {
-		String[] a1 = new String[9];
-		String[] a2 = ArrayTools.fill(a1, "77");
-		for (String x : a1) {
-			assertEquals("77", x);
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testFillObjectArrayIntIntObject() {
-		String[] a1 = new String[9];
-		String[] a2 = ArrayTools.fill(a1, "3");
-		int from = 3;
-		int to = 6;
-		String[] a3 = ArrayTools.fill(a2, from, to, "77");
-		for (int i = 0; i < a1.length; i++) {
-			String x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals("3", x);
-			} else {
-				assertEquals("77", x);
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testFillLongArrayLong() {
-		long[] a1 = new long[9];
-		long[] a2 = ArrayTools.fill(a1, 77);
-		for (long x : a1) {
-			assertEquals(77, x);
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testFillLongArrayIntIntLong() {
-		long[] a1 = new long[9];
-		long[] a2 = ArrayTools.fill(a1, 3);
-		int from = 3;
-		int to = 6;
-		long[] a3 = ArrayTools.fill(a2, from, to, 77);
-		for (int i = 0; i < a1.length; i++) {
-			long x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals(3, x);
-			} else {
-				assertEquals(77, x);
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testFillShortArrayShort() {
-		short[] a1 = new short[9];
-		short[] a2 = ArrayTools.fill(a1, (short) 77);
-		for (short x : a1) {
-			assertEquals(77, x);
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testFillShortArrayIntIntShort() {
-		short[] a1 = new short[9];
-		short[] a2 = ArrayTools.fill(a1, (short) 3);
-		int from = 3;
-		int to = 6;
-		short[] a3 = ArrayTools.fill(a2, from, to, (short) 77);
-		for (int i = 0; i < a1.length; i++) {
-			short x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals(3, x);
-			} else {
-				assertEquals(77, x);
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testSortByteArray() {
-		byte[] a1 = new byte[3];
-		a1[0] = (byte) 33;
-		a1[1] = (byte) 11;
-		a1[2] = (byte) 22;
-		byte[] a2 = ArrayTools.sort(a1);
-		byte last = (byte) 0;
-		for (byte x : a1) {
-			assertTrue(last < x);
-			last = x;
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testSortByteArrayIntInt() {
-		byte[] a1 = new byte[9];
-		byte[] a2 = ArrayTools.fill(a1, (byte) 3);
-		a2[3] = (byte) 33;
-		a2[4] = (byte) 11;
-		a2[5] = (byte) 22;
-		int from = 3;
-		int to = 6;
-		byte[] a3 = ArrayTools.sort(a2, from, to);
-		byte last = (byte) 0;
-		for (int i = 0; i < a1.length; i++) {
-			byte x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals(3, x);
-			} else {
-				assertTrue(last < x);
-				last = x;
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testSortCharArray() {
-		char[] a1 = new char[3];
-		a1[0] = 'z';
-		a1[1] = 'b';
-		a1[2] = 'm';
-		char[] a2 = ArrayTools.sort(a1);
-		char last = 'a';
-		for (char x : a1) {
-			assertTrue(last < x);
-			last = x;
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testSortCharArrayIntInt() {
-		char[] a1 = new char[9];
-		char[] a2 = ArrayTools.fill(a1, 'c');
-		a2[3] = 'z';
-		a2[4] = 'b';
-		a2[5] = 'm';
-		int from = 3;
-		int to = 6;
-		char[] a3 = ArrayTools.sort(a2, from, to);
-		char last = 'a';
-		for (int i = 0; i < a1.length; i++) {
-			char x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals('c', x);
-			} else {
-				assertTrue(last < x);
-				last = x;
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testSortDoubleArray() {
-		double[] a1 = new double[3];
-		a1[0] = 33.33;
-		a1[1] = 11.11;
-		a1[2] = 22.22;
-		double[] a2 = ArrayTools.sort(a1);
-		double last = 0;
-		for (double x : a1) {
-			assertTrue(last < x);
-			last = x;
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testSortDoubleArrayIntInt() {
-		double[] a1 = new double[9];
-		double[] a2 = ArrayTools.fill(a1, 3.3);
-		a2[3] = 33.33;
-		a2[4] = 11.11;
-		a2[5] = 22.22;
-		int from = 3;
-		int to = 6;
-		double[] a3 = ArrayTools.sort(a2, from, to);
-		double last = 0;
-		for (int i = 0; i < a1.length; i++) {
-			double x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals(3.3, x, 0.0);
-			} else {
-				assertTrue(last < x);
-				last = x;
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testSortFloatArray() {
-		float[] a1 = new float[3];
-		a1[0] = 33.33f;
-		a1[1] = 11.11f;
-		a1[2] = 22.22f;
-		float[] a2 = ArrayTools.sort(a1);
-		float last = 0;
-		for (float x : a1) {
-			assertTrue(last < x);
-			last = x;
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testSortFloatArrayIntInt() {
-		float[] a1 = new float[9];
-		float[] a2 = ArrayTools.fill(a1, 3.3f);
-		a2[3] = 33.33f;
-		a2[4] = 11.11f;
-		a2[5] = 22.22f;
-		int from = 3;
-		int to = 6;
-		float[] a3 = ArrayTools.sort(a2, from, to);
-		float last = 0;
-		for (int i = 0; i < a1.length; i++) {
-			float x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals(3.3f, x, 0.0);
-			} else {
-				assertTrue(last < x);
-				last = x;
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testSortIntArray() {
-		int[] a1 = new int[3];
-		a1[0] = 33;
-		a1[1] = 11;
-		a1[2] = 22;
-		int[] a2 = ArrayTools.sort(a1);
-		int last = 0;
-		for (int x : a1) {
-			assertTrue(last < x);
-			last = x;
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testSortIntArrayIntInt() {
-		int[] a1 = new int[9];
-		int[] a2 = ArrayTools.fill(a1, 3);
-		a2[3] = 33;
-		a2[4] = 11;
-		a2[5] = 22;
-		int from = 3;
-		int to = 6;
-		int[] a3 = ArrayTools.sort(a2, from, to);
-		int last = 0;
-		for (int i = 0; i < a1.length; i++) {
-			int x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals(3, x);
-			} else {
-				assertTrue(last < x);
-				last = x;
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testSortObjectArray() {
-		String[] a1 = new String[3];
-		a1[0] = "y";
-		a1[1] = "b";
-		a1[2] = "m";
-		String[] a2 = ArrayTools.sort(a1);
-		String last = "a";
-		for (String x : a1) {
-			assertTrue(last.compareTo(x) < 0);
-			last = x;
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testSortObjectArrayComparator() {
-		String[] a1 = new String[3];
-		a1[0] = "y";
-		a1[1] = "b";
-		a1[2] = "m";
-		String[] a2 = ArrayTools.sort(a1, new ReverseComparator<String>());
-		String last = "z";
-		for (String x : a1) {
-			assertTrue(last.compareTo(x) > 0);
-			last = x;
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testSortObjectArrayIntInt() {
-		String[] a1 = new String[9];
-		String[] a2 = ArrayTools.fill(a1, "c");
-		a2[3] = "y";
-		a2[4] = "b";
-		a2[5] = "m";
-		int from = 3;
-		int to = 6;
-		String[] a3 = ArrayTools.sort(a2, from, to);
-		String last = "a";
-		for (int i = 0; i < a1.length; i++) {
-			String x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals("c", x);
-			} else {
-				assertTrue(last.compareTo(x) < 0);
-				last = x;
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testSortObjectArrayIntIntComparator() {
-		String[] a1 = new String[9];
-		String[] a2 = ArrayTools.fill(a1, "c");
-		a2[3] = "y";
-		a2[4] = "b";
-		a2[5] = "m";
-		int from = 3;
-		int to = 6;
-		String[] a3 = ArrayTools.sort(a2, from, to, new ReverseComparator<String>());
-		String last = "z";
-		for (int i = 0; i < a1.length; i++) {
-			String x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals("c", x);
-			} else {
-				assertTrue(last.compareTo(x) > 0);
-				last = x;
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testSortLongArray() {
-		long[] a1 = new long[3];
-		a1[0] = 33;
-		a1[1] = 11;
-		a1[2] = 22;
-		long[] a2 = ArrayTools.sort(a1);
-		long last = 0;
-		for (long x : a1) {
-			assertTrue(last < x);
-			last = x;
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testSortLongArrayIntInt() {
-		long[] a1 = new long[9];
-		long[] a2 = ArrayTools.fill(a1, 3);
-		a2[3] = 33;
-		a2[4] = 11;
-		a2[5] = 22;
-		int from = 3;
-		int to = 6;
-		long[] a3 = ArrayTools.sort(a2, from, to);
-		long last = 0;
-		for (int i = 0; i < a1.length; i++) {
-			long x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals(3, x);
-			} else {
-				assertTrue(last < x);
-				last = x;
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-	public void testSortShortArray() {
-		short[] a1 = new short[3];
-		a1[0] = (short) 33;
-		a1[1] = (short) 11;
-		a1[2] = (short) 22;
-		short[] a2 = ArrayTools.sort(a1);
-		short last = (short) 0;
-		for (short x : a1) {
-			assertTrue(last < x);
-			last = x;
-		}
-		assertSame(a1, a2);
-	}
-
-	public void testSortShortArrayIntInt() {
-		short[] a1 = new short[9];
-		short[] a2 = ArrayTools.fill(a1, (short) 3);
-		a2[3] = (short) 33;
-		a2[4] = (short) 11;
-		a2[5] = (short) 22;
-		int from = 3;
-		int to = 6;
-		short[] a3 = ArrayTools.sort(a2, from, to);
-		short last = (short) 0;
-		for (int i = 0; i < a1.length; i++) {
-			short x = a1[i];
-			if (i < from || i >= to) {
-				assertEquals(3, x);
-			} else {
-				assertTrue(last < x);
-				last = x;
-			}
-		}
-		assertSame(a1, a2);
-		assertSame(a1, a3);
-	}
-
-
-	// ********** constructor **********
-
-	public void testConstructor() {
-		boolean exCaught = false;
-		try {
-			Object at = ReflectionTools.newInstance(ArrayTools.class);
-			fail("bogus: " + at);
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof InvocationTargetException) {
-				if (ex.getCause().getCause() instanceof UnsupportedOperationException) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-
-	// ********** utility **********
-
-	private Object[] buildObjectArray1() {
-		return new Object[] { "zero", "one", "two" };
-	}
-
-	private String[] buildStringArray1() {
-		return new String[] { "zero", "one", "two" };
-	}
-
-	private char[] buildCharArray() {
-		return new char[] { 'a', 'b', 'c' };
-	}
-
-	private int[] buildIntArray() {
-		return new int[] { 0, 10, 20 };
-	}
-
-	private Object[] buildObjectArray2() {
-		return new Object[] { "three", "four", "five" };
-	}
-
-	private String[] buildStringArray2() {
-		return new String[] { "three", "four", "five" };
-	}
-
-	private List<String> buildStringList1() {
-		List<String> l = new ArrayList<String>();
-		this.addToCollection1(l);
-		return l;
-	}
-
-	private List<Object> buildObjectList1() {
-		List<Object> l = new ArrayList<Object>();
-		this.addToCollection1(l);
-		return l;
-	}
-
-	private void addToCollection1(Collection<? super String> c) {
-		c.add("zero");
-		c.add("one");
-		c.add("two");
-	}
-
-	private List<String> buildStringList2() {
-		List<String> l = new ArrayList<String>();
-		this.addToCollection2(l);
-		return l;
-	}
-
-	private void addToCollection2(Collection<? super String> c) {
-		c.add("three");
-		c.add("four");
-		c.add("five");
-	}
-
-	private Vector<String> buildStringVector1() {
-		Vector<String> v = new Vector<String>();
-		this.addToCollection1(v);
-		return v;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/AsynchronousCommandExecutorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/AsynchronousCommandExecutorTests.java
deleted file mode 100644
index c2d7c35..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/AsynchronousCommandExecutorTests.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.internal.AsynchronousCommandExecutor;
-import org.eclipse.jpt.utility.internal.StatefulCommandExecutor;
-
-public class AsynchronousCommandExecutorTests
-	extends MultiThreadedTestCase
-{
-	public AsynchronousCommandExecutorTests(String name) {
-		super(name);
-	}
-
-	public void testExecution() throws Exception {
-		TestCommand command = new TestCommand();
-		StatefulCommandExecutor commandExecutor = new AsynchronousCommandExecutor(this.buildThreadFactory());
-		commandExecutor.start();
-		commandExecutor.execute(command);
-		commandExecutor.execute(command);
-		commandExecutor.execute(command);
-		Thread.sleep(TWO_TICKS);  // wait for the command to execute
-		commandExecutor.stop();
-		assertEquals(3, command.count);
-	}
-
-	static class TestCommand implements Command {
-		int count = 0;
-		public void execute() {
-			this.count++;
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BagTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BagTests.java
deleted file mode 100644
index 13c6750..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BagTests.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.HashBag;
-
-@SuppressWarnings("nls")
-public class BagTests extends TestCase {
-
-	public BagTests(String name) {
-		super(name);
-	}
-
-	public void testEmptyBag_iterator() throws Exception {
-		assertFalse(Bag.Empty.instance().iterator().hasNext());
-	}
-
-	public void testEmptyBag_size() throws Exception {
-		assertEquals(0, Bag.Empty.instance().size());
-	}
-
-	public void testEmptyBag_uniqueIterator() throws Exception {
-		assertFalse(Bag.Empty.instance().uniqueIterator().hasNext());
-	}
-
-	public void testEmptyBag_uniqueCount() throws Exception {
-		assertEquals(0, Bag.Empty.instance().uniqueCount());
-	}
-
-	public void testEmptyBag_count() throws Exception {
-		assertEquals(0, Bag.Empty.instance().count("foo"));
-	}
-
-	public void testEmptyBag_entries() throws Exception {
-		assertFalse(Bag.Empty.instance().entries().hasNext());
-	}
-
-	public void testEmptyBag_remove() throws Exception {
-		assertFalse(Bag.Empty.instance().remove("foo", 3));
-	}
-
-	public void testEmptyBag_add() throws Exception {
-		boolean exCaught = false;
-		try {
-			Bag.Empty.instance().add("foo", 3);
-			fail();
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testEmptyBag_equals() throws Exception {
-		assertTrue(Bag.Empty.instance().equals(Bag.Empty.instance()));
-		assertFalse(Bag.Empty.instance().equals("foo"));
-
-		Bag<Object> bag = new HashBag<Object>();
-		assertTrue(Bag.Empty.instance().equals(bag));
-		bag.add("foo");
-		assertFalse(Bag.Empty.instance().equals(bag));
-	}
-
-	public void testEmptyBag_hashCode() throws Exception {
-		assertEquals(0, Bag.Empty.instance().hashCode());
-	}
-
-	public void testEmptyBag_serialization() throws Exception {
-		Bag<?> xxx = TestTools.serialize(Bag.Empty.instance());
-		assertSame(Bag.Empty.instance(), xxx);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BidiFilterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BidiFilterTests.java
deleted file mode 100644
index 3663c3c..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BidiFilterTests.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.BidiFilter;
-
-@SuppressWarnings("nls")
-public class BidiFilterTests extends TestCase {
-
-	public BidiFilterTests(String name) {
-		super(name);
-	}
-
-	public void testNullBidiFilter_accept() throws Exception {
-		assertTrue(BidiFilter.Null.instance().accept("foo"));
-	}
-
-	public void testNullBidiFilter_reverseAccept() throws Exception {
-		assertTrue(BidiFilter.Null.instance().reverseAccept("foo"));
-	}
-
-	public void testNullBidiFilter_toString() throws Exception {
-		assertNotNull(BidiFilter.Null.instance().toString());
-	}
-
-	public void testNullBidiFilter_serialization() throws Exception {
-		BidiFilter<?> xxx = TestTools.serialize(BidiFilter.Null.instance());
-		assertSame(BidiFilter.Null.instance(), xxx);
-	}
-
-	public void testOpaqueBidiFilter_accept() throws Exception {
-		assertFalse(BidiFilter.Opaque.instance().accept("foo"));
-	}
-
-	public void testOpaqueBidiFilter_reverseAccept() throws Exception {
-		assertFalse(BidiFilter.Opaque.instance().reverseAccept("foo"));
-	}
-
-	public void testOpaqueBidiFilter_toString() throws Exception {
-		assertNotNull(BidiFilter.Opaque.instance().toString());
-	}
-
-	public void testOpaqueBidiFilter_serialization() throws Exception {
-		BidiFilter<?> xxx = TestTools.serialize(BidiFilter.Opaque.instance());
-		assertSame(BidiFilter.Opaque.instance(), xxx);
-	}
-
-	public void testDisabledBidiFilter_accept() throws Exception {
-		boolean exCaught = false;
-		try {
-			BidiFilter.Disabled.instance().accept("foo");
-			fail();
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testDisabledBidiFilter_reverseAccept() throws Exception {
-		boolean exCaught = false;
-		try {
-			BidiFilter.Disabled.instance().reverseAccept("foo");
-			fail();
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testDisabledBidiFilter_toString() throws Exception {
-		assertNotNull(BidiFilter.Disabled.instance().toString());
-	}
-
-	public void testDisabledBidiFilter_serialization() throws Exception {
-		BidiFilter<?> xxx = TestTools.serialize(BidiFilter.Disabled.instance());
-		assertSame(BidiFilter.Disabled.instance(), xxx);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BidiStringConverterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BidiStringConverterTests.java
deleted file mode 100644
index ec60348..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BidiStringConverterTests.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.BidiStringConverter;
-
-@SuppressWarnings("nls")
-public class BidiStringConverterTests extends TestCase {
-
-	public BidiStringConverterTests(String name) {
-		super(name);
-	}
-
-	public void testDefaultBidiStringConverter_convertToString() throws Exception {
-		assertEquals("foo", BidiStringConverter.Default.instance().convertToString("foo"));
-		assertNull(BidiStringConverter.Default.instance().convertToString(null));
-	}
-
-	public void testDefaultBidiStringConverter_convertToObject() throws Exception {
-		assertEquals("foo", BidiStringConverter.Default.instance().convertToObject("foo"));
-		assertNull(BidiStringConverter.Default.instance().convertToString(null));
-	}
-
-	public void testDefaultBidiStringConverter_toString() throws Exception {
-		assertNotNull(BidiStringConverter.Default.instance().toString());
-	}
-
-	public void testDefaultBidiStringConverter_serialization() throws Exception {
-		BidiStringConverter<?> xxx = TestTools.serialize(BidiStringConverter.Default.instance());
-		assertSame(BidiStringConverter.Default.instance(), xxx);
-	}
-
-	public void testDisabledBidiStringConverter_convertToString() throws Exception {
-		boolean exCaught = false;
-		try {
-			BidiStringConverter.Disabled.instance().convertToString("foo");
-			fail();
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testDisabledBidiStringConverter_convertToObject() throws Exception {
-		boolean exCaught = false;
-		try {
-			BidiStringConverter.Disabled.instance().convertToObject("foo");
-			fail();
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testDisabledBidiStringConverter_toString() throws Exception {
-		assertNotNull(BidiStringConverter.Disabled.instance().toString());
-	}
-
-	public void testDisabledBidiStringConverter_serialization() throws Exception {
-		BidiStringConverter<?> xxx = TestTools.serialize(BidiStringConverter.Disabled.instance());
-		assertSame(BidiStringConverter.Disabled.instance(), xxx);
-	}
-
-	public void testBooleanBidiStringConverter_convertToString() throws Exception {
-		assertEquals("true", BidiStringConverter.BooleanConverter.instance().convertToString(Boolean.TRUE));
-		assertEquals("false", BidiStringConverter.BooleanConverter.instance().convertToString(Boolean.FALSE));
-		assertNull(BidiStringConverter.BooleanConverter.instance().convertToString(null));
-	}
-
-	public void testBooleanBidiStringConverter_convertToObject() throws Exception {
-		assertEquals(Boolean.TRUE, BidiStringConverter.BooleanConverter.instance().convertToObject("true"));
-		assertEquals(Boolean.TRUE, BidiStringConverter.BooleanConverter.instance().convertToObject("TRUE"));
-		assertEquals(Boolean.FALSE, BidiStringConverter.BooleanConverter.instance().convertToObject("false"));
-		assertEquals(Boolean.FALSE, BidiStringConverter.BooleanConverter.instance().convertToObject("xxxx"));
-		assertNull(BidiStringConverter.BooleanConverter.instance().convertToObject(null));
-	}
-
-	public void testBooleanBidiStringConverter_toString() throws Exception {
-		assertNotNull(BidiStringConverter.BooleanConverter.instance().toString());
-	}
-
-	public void testBooleanBidiStringConverter_serialization() throws Exception {
-		BidiStringConverter<?> xxx = TestTools.serialize(BidiStringConverter.BooleanConverter.instance());
-		assertSame(BidiStringConverter.BooleanConverter.instance(), xxx);
-	}
-
-	public void testIntegerBidiStringConverter_convertToString() throws Exception {
-		assertEquals("7", BidiStringConverter.IntegerConverter.instance().convertToString(Integer.valueOf(7)));
-		assertNull(BidiStringConverter.IntegerConverter.instance().convertToString(null));
-	}
-
-	public void testIntegerBidiStringConverter_convertToObject() throws Exception {
-		assertEquals(Integer.valueOf(7), BidiStringConverter.IntegerConverter.instance().convertToObject("7"));
-		assertNull(BidiStringConverter.IntegerConverter.instance().convertToObject(null));
-	}
-
-	public void testIntegerBidiStringConverter_toString() throws Exception {
-		assertNotNull(BidiStringConverter.IntegerConverter.instance().toString());
-	}
-
-	public void testIntegerBidiStringConverter_serialization() throws Exception {
-		BidiStringConverter<?> xxx = TestTools.serialize(BidiStringConverter.IntegerConverter.instance());
-		assertSame(BidiStringConverter.IntegerConverter.instance(), xxx);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BidiTransformerTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BidiTransformerTests.java
deleted file mode 100644
index 24cfea5..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BidiTransformerTests.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.BidiTransformer;
-
-@SuppressWarnings("nls")
-public class BidiTransformerTests extends TestCase {
-
-	public BidiTransformerTests(String name) {
-		super(name);
-	}
-
-	public void testNullBidiTransformer_transform() throws Exception {
-		assertEquals("foo", BidiTransformer.Null.instance().transform("foo"));
-		assertNull(BidiTransformer.Null.instance().transform(null));
-	}
-
-	public void testNullBidiTransformer_reverseTransform() throws Exception {
-		assertEquals("foo", BidiTransformer.Null.instance().reverseTransform("foo"));
-		assertNull(BidiTransformer.Null.instance().transform(null));
-	}
-
-	public void testNullBidiTransformer_toString() throws Exception {
-		assertNotNull(BidiTransformer.Null.instance().toString());
-	}
-
-	public void testNullBidiTransformer_serialization() throws Exception {
-		BidiTransformer<?, ?> xxx = TestTools.serialize(BidiTransformer.Null.instance());
-		assertSame(BidiTransformer.Null.instance(), xxx);
-	}
-
-	public void testDisabledBidiTransformer_transform() throws Exception {
-		boolean exCaught = false;
-		try {
-			BidiTransformer.Disabled.instance().transform("foo");
-			fail();
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testDisabledBidiTransformer_reverseTransform() throws Exception {
-		boolean exCaught = false;
-		try {
-			BidiTransformer.Disabled.instance().reverseTransform("foo");
-			fail();
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testDisabledBidiTransformer_toString() throws Exception {
-		assertNotNull(BidiTransformer.Disabled.instance().toString());
-	}
-
-	public void testDisabledBidiTransformer_serialization() throws Exception {
-		BidiTransformer<?, ?> xxx = TestTools.serialize(BidiTransformer.Disabled.instance());
-		assertSame(BidiTransformer.Disabled.instance(), xxx);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BitToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BitToolsTests.java
deleted file mode 100644
index f669a51..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BitToolsTests.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.lang.reflect.InvocationTargetException;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.BitTools;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-
-public class BitToolsTests extends TestCase {
-
-	public BitToolsTests(String name) {
-		super(name);
-	}
-
-	public void testFlagIsSetIntInt() {
-		assertTrue(BitTools.flagIsSet(0x0003, 0x0001));
-		assertTrue(BitTools.flagIsSet(0x0303, 0x0001));
-		assertTrue(BitTools.flagIsSet(0x0303, 0x0101));
-		assertTrue(BitTools.flagIsSet(0x0303, 0x0103));
-
-		assertFalse(BitTools.flagIsSet(0x0303, 0x1103));
-		assertFalse(BitTools.flagIsSet(0x0000, 0x1103));
-	}
-
-	public void testFlagIsOffIntInt() {
-		assertFalse(BitTools.flagIsOff(0x0003, 0x0001));
-		assertFalse(BitTools.flagIsOff(0x0303, 0x0001));
-		assertFalse(BitTools.flagIsOff(0x0303, 0x0101));
-		assertFalse(BitTools.flagIsOff(0x0303, 0x0103));
-
-		assertTrue(BitTools.flagIsOff(0x2204, 0x1103));
-		assertTrue(BitTools.flagIsOff(0x0000, 0x1103));
-	}
-
-	public void testOnlyFlagIsSetIntInt() {
-		assertFalse(BitTools.onlyFlagIsSet(0x0003, 0x0001));
-		assertTrue(BitTools.onlyFlagIsSet(0x0001, 0x0001));
-
-		assertFalse(BitTools.onlyFlagIsSet(0x0303, 0x0001));
-		assertTrue(BitTools.onlyFlagIsSet(0x0001, 0x0001));
-
-		assertFalse(BitTools.onlyFlagIsSet(0x0303, 0x0101));
-		assertTrue(BitTools.onlyFlagIsSet(0x0101, 0x0101));
-
-		assertFalse(BitTools.onlyFlagIsSet(0x0303, 0x0103));
-		assertTrue(BitTools.onlyFlagIsSet(0x0103, 0x0103));
-
-		assertFalse(BitTools.onlyFlagIsSet(0x0303, 0x1103));
-		assertTrue(BitTools.onlyFlagIsSet(0x1103, 0x1103));
-
-		assertFalse(BitTools.onlyFlagIsSet(0x0000, 0x1103));
-		assertTrue(BitTools.onlyFlagIsSet(0x0103, 0x0103));
-	}
-
-	public void testOnlyFlagIsOffIntInt() {
-		assertFalse(BitTools.onlyFlagIsOff(0x0003, 0x0001));
-		assertFalse(BitTools.onlyFlagIsOff(0x0303, 0x0001));
-		assertTrue(BitTools.onlyFlagIsOff(0xFFFFFFFE, 0x0001));
-
-		assertFalse(BitTools.onlyFlagIsOff(0x0303, 0x0101));
-		assertTrue(BitTools.onlyFlagIsOff(0xFFFFFEFE, 0x0101));
-
-		assertFalse(BitTools.onlyFlagIsOff(0x0303, 0x0103));
-		assertTrue(BitTools.onlyFlagIsOff(0xFFFFFEFC, 0x0103));
-
-		assertFalse(BitTools.onlyFlagIsOff(0x0303, 0x1103));
-		assertTrue(BitTools.onlyFlagIsOff(0xFFFFEEFC, 0x1103));
-	}
-
-	public void testAllFlagsAreSetIntInt() {
-		assertTrue(BitTools.allFlagsAreSet(0x0003, 0x0001));
-		assertTrue(BitTools.allFlagsAreSet(0x0303, 0x0001));
-		assertTrue(BitTools.allFlagsAreSet(0x0303, 0x0101));
-		assertTrue(BitTools.allFlagsAreSet(0x0303, 0x0103));
-
-		assertFalse(BitTools.allFlagsAreSet(0x0303, 0x1103));
-		assertFalse(BitTools.allFlagsAreSet(0x0000, 0x1103));
-	}
-
-	public void testAllFlagsAreOffIntInt() {
-		assertFalse(BitTools.allFlagsAreOff(0x0003, 0x0001));
-		assertFalse(BitTools.allFlagsAreOff(0x0303, 0x0001));
-		assertFalse(BitTools.allFlagsAreOff(0x0303, 0x0101));
-		assertFalse(BitTools.allFlagsAreOff(0x0303, 0x0103));
-
-		assertTrue(BitTools.allFlagsAreOff(0x2204, 0x1103));
-		assertTrue(BitTools.allFlagsAreOff(0x0000, 0x1103));
-	}
-
-	public void testOnlyFlagsAreSetIntInt() {
-		assertFalse(BitTools.onlyFlagsAreSet(0x0003, 0x0001));
-		assertTrue(BitTools.onlyFlagsAreSet(0x0001, 0x0001));
-
-		assertFalse(BitTools.onlyFlagsAreSet(0x0303, 0x0001));
-		assertTrue(BitTools.onlyFlagsAreSet(0x0001, 0x0001));
-
-		assertFalse(BitTools.onlyFlagsAreSet(0x0303, 0x0101));
-		assertTrue(BitTools.onlyFlagsAreSet(0x0101, 0x0101));
-
-		assertFalse(BitTools.onlyFlagsAreSet(0x0303, 0x0103));
-		assertTrue(BitTools.onlyFlagsAreSet(0x0103, 0x0103));
-
-		assertFalse(BitTools.onlyFlagsAreSet(0x0303, 0x1103));
-		assertTrue(BitTools.onlyFlagsAreSet(0x1103, 0x1103));
-
-		assertFalse(BitTools.onlyFlagsAreSet(0x0000, 0x1103));
-		assertTrue(BitTools.onlyFlagsAreSet(0x0103, 0x0103));
-	}
-
-	public void testOnlyFlagsAreOffIntInt() {
-		assertFalse(BitTools.onlyFlagsAreOff(0x0003, 0x0001));
-		assertFalse(BitTools.onlyFlagsAreOff(0x0303, 0x0001));
-		assertTrue(BitTools.onlyFlagsAreOff(0xFFFFFFFE, 0x0001));
-
-		assertFalse(BitTools.onlyFlagsAreOff(0x0303, 0x0101));
-		assertTrue(BitTools.onlyFlagsAreOff(0xFFFFFEFE, 0x0101));
-
-		assertFalse(BitTools.onlyFlagsAreOff(0x0303, 0x0103));
-		assertTrue(BitTools.onlyFlagsAreOff(0xFFFFFEFC, 0x0103));
-
-		assertFalse(BitTools.onlyFlagsAreOff(0x0303, 0x1103));
-		assertTrue(BitTools.onlyFlagsAreOff(0xFFFFEEFC, 0x1103));
-	}
-
-	public void testAnyFlagsAreSetIntInt() {
-		assertTrue(BitTools.anyFlagsAreSet(0x0003, 0x0001));
-		assertTrue(BitTools.anyFlagsAreSet(0xFFFF, 0x0001));
-		assertTrue(BitTools.anyFlagsAreSet(0x0003, 0xFFFF));
-
-		assertFalse(BitTools.anyFlagsAreSet(0x0303, 0x1010));
-		assertFalse(BitTools.anyFlagsAreSet(0x0000, 0xFFFF));
-	}
-
-	public void testAnyFlagsAreOffIntInt() {
-		assertTrue(BitTools.anyFlagsAreOff(0x333E, 0x0001));
-		assertTrue(BitTools.anyFlagsAreOff(0xFFFE, 0x0001));
-		assertTrue(BitTools.anyFlagsAreOff(0x0003, 0xFFFF));
-
-		assertFalse(BitTools.anyFlagsAreOff(0x7373, 0x1010));
-		assertFalse(BitTools.anyFlagsAreOff(0xFFFF, 0xFFFF));
-	}
-
-	public void testAllFlagsAreSetIntIntArray() {
-		assertTrue(BitTools.allFlagsAreSet(0x0003, new int[] { 0x0001 }));
-		assertTrue(BitTools.allFlagsAreSet(0x0303, new int[] { 0x0001 }));
-		assertTrue(BitTools.allFlagsAreSet(0x0303, new int[] { 0x0100, 0x0001 }));
-		assertTrue(BitTools.allFlagsAreSet(0x0303, new int[] { 0x0100, 0x0002, 0x0001 }));
-
-		assertFalse(BitTools.allFlagsAreSet(0x0303, new int[] { 0x1000, 0x0100, 0x0002, 0x0001 }));
-		assertFalse(BitTools.allFlagsAreSet(0x0000, new int[] { 0x1000, 0x0100, 0x0002, 0x0001 }));
-	}
-
-	public void testAllFlagsAreOffIntIntArray() {
-		assertFalse(BitTools.allFlagsAreOff(0x0003, new int[] { 0x0001 }));
-		assertFalse(BitTools.allFlagsAreOff(0x0303, new int[] { 0x0001 }));
-		assertFalse(BitTools.allFlagsAreOff(0x0303, new int[] { 0x0100, 0x0001 }));
-		assertFalse(BitTools.allFlagsAreOff(0x0303, new int[] { 0x0100, 0x0002, 0x0001 }));
-
-		assertTrue(BitTools.allFlagsAreOff(0x0303, new int[] { 0x1000, 0x0400, 0x0020, 0x0000 }));
-		assertTrue(BitTools.allFlagsAreOff(0x0000, new int[] { 0x1000, 0x0100, 0x0002, 0x0001 }));
-	}
-
-	public void testOnlyFlagsAreSetIntIntArray() {
-		assertFalse(BitTools.onlyFlagsAreSet(0x0003, new int[] { 0x001, 0x0000, 0x0000, 0x0001 }));
-		assertTrue(BitTools.onlyFlagsAreSet(0x0001, new int[] { 0x001, 0x0000, 0x0000, 0x0001 }));
-
-		assertFalse(BitTools.onlyFlagsAreSet(0x0303, new int[] { 0x001, 0x0000, 0x0000, 0x0001 }));
-		assertTrue(BitTools.onlyFlagsAreSet(0x0001, new int[] { 0x001, 0x0000, 0x0000, 0x0001 }));
-
-		assertFalse(BitTools.onlyFlagsAreSet(0x0303, new int[] { 0x001, 0x0100, 0x0000, 0x0001 }));
-		assertTrue(BitTools.onlyFlagsAreSet(0x0101, new int[] { 0x001, 0x0100, 0x0000, 0x0001 }));
-
-		assertFalse(BitTools.onlyFlagsAreSet(0x0303, new int[] { 0x001, 0x0100, 0x0002, 0x0001 }));
-		assertTrue(BitTools.onlyFlagsAreSet(0x0103, new int[] { 0x001, 0x0100, 0x0002, 0x0001 }));
-
-		assertFalse(BitTools.onlyFlagsAreSet(0x0303, new int[] { 0x011, 0x0100, 0x0002, 0x0001 }));
-		assertTrue(BitTools.onlyFlagsAreSet(0x1103, new int[] { 0x1100, 0x0100, 0x0002, 0x0001 }));
-
-		assertFalse(BitTools.onlyFlagsAreSet(0x0000, new int[] { 0x011, 0x0100, 0x0002, 0x0001 }));
-		assertTrue(BitTools.onlyFlagsAreSet(0x0103, new int[] { 0x0101, 0x0100, 0x0002, 0x0001 }));
-	}
-
-	public void testOnlyFlagsAreOffIntIntArray() {
-		assertFalse(BitTools.onlyFlagsAreOff(0x0003, new int[] { 0x001, 0x0000, 0x0000, 0x0001 }));
-		assertFalse(BitTools.onlyFlagsAreOff(0x0303, new int[] { 0x001, 0x0000, 0x0000, 0x0001 }));
-		assertTrue(BitTools.onlyFlagsAreOff(0xFFFFFFFE, new int[] { 0x001, 0x0000, 0x0000, 0x0001 }));
-
-		assertFalse(BitTools.onlyFlagsAreOff(0x0303, new int[] { 0x001, 0x0100, 0x0000, 0x0001 }));
-		assertTrue(BitTools.onlyFlagsAreOff(0xFFFFFEFE, new int[] { 0x001, 0x0100, 0x0000, 0x0001 }));
-
-		assertFalse(BitTools.onlyFlagsAreOff(0x0303, new int[] { 0x001, 0x0100, 0x0002, 0x0001 }));
-		assertTrue(BitTools.onlyFlagsAreOff(0xFFFFFEFC, new int[] { 0x001, 0x0100, 0x0002, 0x0001 }));
-
-		assertFalse(BitTools.onlyFlagsAreOff(0x0303, new int[] { 0x1100, 0x0100, 0x0002, 0x0001 }));
-		assertTrue(BitTools.onlyFlagsAreOff(0xFFFFEEFC, new int[] { 0x1100, 0x0100, 0x0002, 0x0001 }));
-	}
-
-	public void testAnyFlagsAreSetIntIntArray() {
-		assertTrue(BitTools.anyFlagsAreSet(0x0003, new int[] { 0x0001 }));
-		assertTrue(BitTools.anyFlagsAreSet(0xFFFF, new int[] { 0x0001 }));
-		assertTrue(BitTools.anyFlagsAreSet(0x0303, new int[] { 0xF000, 0x0F00, 0x00F0, 0x000F }));
-
-		assertFalse(BitTools.anyFlagsAreSet(0x0303, new int[] { 0x1000, 0x0010 }));
-		assertFalse(BitTools.anyFlagsAreSet(0x0000, new int[] { 0xF000, 0x0F00, 0x00F0, 0x000F }));
-	}
-
-	public void testAnyFlagsAreOffIntIntArray() {
-		assertFalse(BitTools.anyFlagsAreOff(0x0003, new int[] { 0x0001 }));
-		assertFalse(BitTools.anyFlagsAreOff(0xFFFF, new int[] { 0x0001 }));
-		assertFalse(BitTools.anyFlagsAreOff(0x0303, new int[] { 0x0100, 0x0200, 0x0003, 0x0002 }));
-
-		assertTrue(BitTools.anyFlagsAreOff(0x0303, new int[] { 0x0100, 0x0010 }));
-		assertTrue(BitTools.anyFlagsAreOff(0x0000, new int[] { 0xF000, 0x0F00, 0x00F0, 0x000F }));
-	}
-
-	public void testOrFlags() {
-		assertEquals(0x0001, BitTools.orFlags(new int[] { 0x0001, 0x0000 }));
-		assertEquals(0x0011, BitTools.orFlags(new int[] { 0x0001, 0x0011 }));
-		assertEquals(0xF011, BitTools.orFlags(new int[] { 0x0001, 0x0011, 0xF000 }));
-	}
-
-	public void testAndFlags() {
-		assertEquals(0x0001, BitTools.andFlags(new int[] { 0x0001, 0x0001 }));
-		assertEquals(0x0001, BitTools.andFlags(new int[] { 0x0001, 0x0011 }));
-		assertEquals(0x0000, BitTools.andFlags(new int[] { 0x0001, 0x0011, 0xF000 }));
-		assertEquals(0x0001, BitTools.andFlags(new int[] { 0x0001, 0x0011, 0xF001 }));
-	}
-
-	public void testXorFlags() {
-		assertEquals(0x0001, BitTools.xorFlags(new int[] { 0x0001, 0x0000 }));
-		assertEquals(0x0010, BitTools.xorFlags(new int[] { 0x0001, 0x0011 }));
-		assertEquals(0xF010, BitTools.xorFlags(new int[] { 0x0001, 0x0011, 0xF000 }));
-		assertEquals(0xFF11, BitTools.xorFlags(new int[] { 0x0001, 0x0011, 0xF000, 0x0F01 }));
-		assertEquals(0xF010, BitTools.xorFlags(new int[] { 0x0001, 0x0011, 0xF000, 0x0F01, 0x0F01 }));
-	}
-
-	public void testConstructor() {
-		boolean exCaught = false;
-		try {
-			Object at = ReflectionTools.newInstance(BitTools.class);
-			fail("bogus: " + at); //$NON-NLS-1$
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof InvocationTargetException) {
-				if (ex.getCause().getCause() instanceof UnsupportedOperationException) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BooleanReferenceTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BooleanReferenceTests.java
deleted file mode 100644
index e338086..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BooleanReferenceTests.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.BooleanReference;
-
-@SuppressWarnings("nls")
-public class BooleanReferenceTests extends TestCase {
-
-	public BooleanReferenceTests(String name) {
-		super(name);
-	}
-
-	public void testGetValue() {
-		BooleanReference br = new BooleanReference(true);
-		assertTrue(br.getValue());
-	}
-
-	public void testGetValueDefault() {
-		BooleanReference br = new BooleanReference();
-		assertFalse(br.getValue());
-	}
-
-	public void testIs() {
-		BooleanReference br = new BooleanReference(true);
-		assertTrue(br.is(true));
-		assertFalse(br.is(false));
-	}
-
-	public void testIsNot() {
-		BooleanReference br = new BooleanReference(true);
-		assertFalse(br.isNot(true));
-		assertTrue(br.isNot(false));
-	}
-
-	public void testIsTrue() {
-		BooleanReference br = new BooleanReference(true);
-		assertTrue(br.isTrue());
-	}
-
-	public void testIsFalse() {
-		BooleanReference br = new BooleanReference(true);
-		assertFalse(br.isFalse());
-		br.setFalse();
-		assertTrue(br.isFalse());
-	}
-
-	public void testSetValue() {
-		BooleanReference br = new BooleanReference(true);
-		assertTrue(br.getValue());
-		br.setValue(false);
-		assertFalse(br.getValue());
-	}
-
-	public void testFlip() {
-		BooleanReference br = new BooleanReference(true);
-		assertTrue(br.getValue());
-		assertFalse(br.flip());
-		assertFalse(br.getValue());
-		assertTrue(br.flip());
-		assertTrue(br.getValue());
-	}
-
-	public void testSetNotBoolean() {
-		BooleanReference br = new BooleanReference(false);
-		assertFalse(br.getValue());
-		br.setNot(true);
-		assertFalse(br.getValue());
-		br.setNot(true);
-		assertFalse(br.getValue());
-		br.setNot(false);
-		assertTrue(br.getValue());
-	}
-
-	public void testSetTrue() {
-		BooleanReference br = new BooleanReference(false);
-		assertFalse(br.getValue());
-		br.setTrue();
-		assertTrue(br.getValue());
-	}
-
-	public void testSetFalse() {
-		BooleanReference br = new BooleanReference(true);
-		assertTrue(br.getValue());
-		br.setFalse();
-		assertFalse(br.getValue());
-	}
-
-	public void testClone() {
-		BooleanReference br = new BooleanReference(true);
-		BooleanReference clone = (BooleanReference) br.clone();
-		assertTrue(clone.getValue());
-		assertEquals(br, clone);
-	}
-
-	public void testEquals() {
-		BooleanReference br1 = new BooleanReference(true);
-		BooleanReference br2 = new BooleanReference(true);
-		assertEquals(br1, br2);
-
-		BooleanReference br3 = new BooleanReference(false);
-		assertFalse(br1.equals(br3));
-	}
-
-	public void testHashCode() {
-		BooleanReference br1 = new BooleanReference(true);
-		assertEquals(1, br1.hashCode());
-		br1.setFalse();
-		assertEquals(0, br1.hashCode());
-	}
-
-	public void testToString() {
-		BooleanReference br1 = new BooleanReference(true);
-		assertEquals("[true]", br1.toString());
-		br1.setFalse();
-		assertEquals("[false]", br1.toString());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BooleanToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BooleanToolsTests.java
deleted file mode 100644
index 8170446..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BooleanToolsTests.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.lang.reflect.InvocationTargetException;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.BooleanTools;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-
-public class BooleanToolsTests extends TestCase {
-	private static final Boolean TRUE = Boolean.TRUE;
-	private static final Boolean FALSE = Boolean.FALSE;
-
-	public BooleanToolsTests(String name) {
-		super(name);
-	}
-
-	public void testNOT() {
-		assertEquals(FALSE, BooleanTools.not(TRUE));
-		assertEquals(TRUE, BooleanTools.not(FALSE));
-	}
-
-	public void testAND() {
-		assertEquals(TRUE, BooleanTools.and(TRUE, TRUE));
-		assertEquals(FALSE, BooleanTools.and(TRUE, FALSE));
-		assertEquals(FALSE, BooleanTools.and(FALSE, TRUE));
-		assertEquals(FALSE, BooleanTools.and(FALSE, FALSE));
-	}
-
-	public void testOR() {
-		assertEquals(TRUE, BooleanTools.or(TRUE, TRUE));
-		assertEquals(TRUE, BooleanTools.or(TRUE, FALSE));
-		assertEquals(TRUE, BooleanTools.or(FALSE, TRUE));
-		assertEquals(FALSE, BooleanTools.or(FALSE, FALSE));
-	}
-
-	public void testXOR() {
-		assertEquals(FALSE, BooleanTools.xor(TRUE, TRUE));
-		assertEquals(TRUE, BooleanTools.xor(TRUE, FALSE));
-		assertEquals(TRUE, BooleanTools.xor(FALSE, TRUE));
-		assertEquals(FALSE, BooleanTools.xor(FALSE, FALSE));
-	}
-
-	public void testNAND() {
-		assertEquals(FALSE, BooleanTools.nand(TRUE, TRUE));
-		assertEquals(TRUE, BooleanTools.nand(TRUE, FALSE));
-		assertEquals(TRUE, BooleanTools.nand(FALSE, TRUE));
-		assertEquals(TRUE, BooleanTools.nand(FALSE, FALSE));
-	}
-
-	public void testNOR() {
-		assertEquals(FALSE, BooleanTools.nor(TRUE, TRUE));
-		assertEquals(FALSE, BooleanTools.nor(TRUE, FALSE));
-		assertEquals(FALSE, BooleanTools.nor(FALSE, TRUE));
-		assertEquals(TRUE, BooleanTools.nor(FALSE, FALSE));
-	}
-
-	public void testXNOR() {
-		assertEquals(TRUE, BooleanTools.xnor(TRUE, TRUE));
-		assertEquals(FALSE, BooleanTools.xnor(TRUE, FALSE));
-		assertEquals(FALSE, BooleanTools.xnor(FALSE, TRUE));
-		assertEquals(TRUE, BooleanTools.xnor(FALSE, FALSE));
-	}
-
-	public void testConstructor() {
-		boolean exCaught = false;
-		try {
-			Object at = ReflectionTools.newInstance(BooleanTools.class);
-			fail("bogus: " + at); //$NON-NLS-1$
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof InvocationTargetException) {
-				if (ex.getCause().getCause() instanceof UnsupportedOperationException) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ClassNameTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ClassNameTests.java
deleted file mode 100644
index b3cd7e8..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ClassNameTests.java
+++ /dev/null
@@ -1,368 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.InvocationTargetException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.ClassName;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-
-@SuppressWarnings("nls")
-public class ClassNameTests extends TestCase {
-
-	public ClassNameTests(String name) {
-		super(name);
-	}
-
-	public void testIsArray() {
-		assertFalse(ClassName.isArray(int.class.getName()));
-		assertTrue(ClassName.isArray(int[].class.getName()));
-		assertTrue(ClassName.isArray(int[][].class.getName()));
-
-		assertFalse(ClassName.isArray(java.lang.String.class.getName()));
-		assertTrue(ClassName.isArray(java.lang.String[].class.getName()));
-		assertTrue(ClassName.isArray(java.lang.String[][].class.getName()));
-	}
-
-	public void testGetElementTypeName() {
-		assertEquals(java.util.Vector.class.getName(), ClassName.getElementTypeName(java.util.Vector.class.getName()));
-		assertEquals(int.class.getName(), ClassName.getElementTypeName(int.class.getName()));
-		assertEquals(void.class.getName(), ClassName.getElementTypeName(void.class.getName()));
-		assertEquals(java.util.Vector.class.getName(), ClassName.getElementTypeName(java.util.Vector[].class.getName()));
-		assertEquals(int.class.getName(), ClassName.getElementTypeName(int[].class.getName()));
-		assertEquals(java.util.Vector.class.getName(), ClassName.getElementTypeName(java.util.Vector[][][].class.getName()));
-		assertEquals(int.class.getName(), ClassName.getElementTypeName(int[][][].class.getName()));
-	}
-
-	public void testGetArrayDepth() {
-		assertEquals(0, ClassName.getArrayDepth(java.util.Vector.class.getName()));
-		assertEquals(0, ClassName.getArrayDepth(int.class.getName()));
-		assertEquals(0, ClassName.getArrayDepth(void.class.getName()));
-		assertEquals(1, ClassName.getArrayDepth(java.util.Vector[].class.getName()));
-		assertEquals(1, ClassName.getArrayDepth(int[].class.getName()));
-		assertEquals(3, ClassName.getArrayDepth(java.util.Vector[][][].class.getName()));
-		assertEquals(3, ClassName.getArrayDepth(int[][][].class.getName()));
-	}
-
-	public void testGetComponentTypeName() {
-		assertEquals(null, ClassName.getComponentTypeName(java.lang.Object.class.getName()));
-		assertEquals(java.lang.Object.class.getName(), ClassName.getComponentTypeName(java.lang.Object[].class.getName()));
-		assertEquals(java.lang.Object[].class.getName(), ClassName.getComponentTypeName(java.lang.Object[][].class.getName()));
-
-		assertEquals(null, ClassName.getComponentTypeName(int.class.getName()));
-		assertEquals(int.class.getName(), ClassName.getComponentTypeName(int[].class.getName()));
-		assertEquals(int[].class.getName(), ClassName.getComponentTypeName(int[][].class.getName()));
-	}
-
-	public void testGetSimpleName() throws Exception {
-		assertEquals("Object", ClassName.getSimpleName(java.lang.Object.class.getName()));
-		assertEquals("Object[]", ClassName.getSimpleName(java.lang.Object[].class.getName()));
-		assertEquals("Object[][]", ClassName.getSimpleName(java.lang.Object[][].class.getName()));
-
-		assertEquals(java.util.Map.class.getSimpleName(), ClassName.getSimpleName(java.util.Map.class.getName()));
-		assertEquals(java.util.Map.Entry.class.getSimpleName(), ClassName.getSimpleName(java.util.Map.Entry.class.getName()));
-
-		assertEquals("int", ClassName.getSimpleName(int.class.getName()));
-		assertEquals("int[]", ClassName.getSimpleName(int[].class.getName()));
-		assertEquals("int[][]", ClassName.getSimpleName(int[][].class.getName()));
-
-		Object anonObject = new Object() {
-			// anonymous class
-		};
-		assertEquals("", ClassName.getSimpleName(anonObject.getClass().getName()));
-
-		class Local {
-			// anonymous class
-		}
-		Local localObject = new Local();
-		assertEquals("Local", ClassName.getSimpleName(localObject.getClass().getName()));
-	}
-
-	public void testGetPackageName() throws Exception {
-		assertEquals(java.lang.Object.class.getPackage().getName(), ClassName.getPackageName(java.lang.Object.class.getName()));
-		assertEquals("", ClassName.getPackageName(java.lang.Object[].class.getName()));
-		assertEquals("", ClassName.getPackageName(java.lang.Object[][].class.getName()));
-
-		assertEquals(java.util.Map.class.getPackage().getName(), ClassName.getPackageName(java.util.Map.class.getName()));
-		assertEquals(java.util.Map.Entry.class.getPackage().getName(), ClassName.getPackageName(java.util.Map.Entry.class.getName()));
-
-		assertEquals("", ClassName.getPackageName(int.class.getName()));
-		assertEquals("", ClassName.getPackageName(int[].class.getName()));
-		assertEquals("", ClassName.getPackageName(int[][].class.getName()));
-
-		assertEquals("", ClassName.getPackageName(void.class.getName()));
-
-		Object anonObject = new Object() {
-			// anonymous class
-		};
-		assertEquals(anonObject.getClass().getPackage().getName(), ClassName.getPackageName(anonObject.getClass().getName()));
-	}
-
-	public void testIsTopLevel() throws Exception {
-		assertTrue(ClassName.isTopLevel(java.util.Map.class.getName())); // top-level
-		assertFalse(ClassName.isTopLevel(java.util.Map.Entry.class.getName())); // member
-		assertFalse(ClassName.isTopLevel(Class.forName(this.getClass().getName() + "$1LocalClass").getName())); // local
-		assertFalse(ClassName.isTopLevel(Class.forName("java.util.Vector$1").getName())); // anonymous
-
-		Object[] array = new java.util.Map[0]; // top-level
-		assertFalse(ClassName.isTopLevel(array.getClass().getName()));
-		array = new java.util.Map.Entry[0]; // member
-		assertFalse(ClassName.isTopLevel(array.getClass().getName()));
-		Class<?> localClass = Class.forName(this.getClass().getName() + "$1LocalClass"); // local
-		array = (Object[]) Array.newInstance(localClass, 0);
-		assertFalse(ClassName.isTopLevel(array.getClass().getName()));
-		Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
-		array = (Object[]) Array.newInstance(anonClass, 0);
-		assertFalse(ClassName.isTopLevel(array.getClass().getName()));
-	}
-
-	public void testIsMember() throws Exception {
-		assertFalse(ClassName.isMember(java.util.Map.class.getName())); // top-level
-		assertTrue(ClassName.isMember(java.util.Map.Entry.class.getName())); // member
-		assertFalse(ClassName.isMember(Class.forName(this.getClass().getName() + "$1LocalClass").getName())); // local
-		assertFalse(ClassName.isMember(Class.forName("java.util.Vector$1").getName())); // anonymous
-
-		Object[] array = new java.util.Map[0]; // top-level
-		assertFalse(ClassName.isMember(array.getClass().getName()));
-		array = new java.util.Map.Entry[0]; // member
-		assertFalse(ClassName.isMember(array.getClass().getName()));
-		Class<?> localClass = Class.forName(this.getClass().getName() + "$1LocalClass"); // local
-		array = (Object[]) Array.newInstance(localClass, 0);
-		assertFalse(ClassName.isMember(array.getClass().getName()));
-		Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
-		array = (Object[]) Array.newInstance(anonClass, 0);
-		assertFalse(ClassName.isMember(array.getClass().getName()));
-
-		// test a few edge cases
-		assertTrue(ClassName.isMember("java.util.Map$a1"));
-		assertTrue(ClassName.isMember("java.util.Map$1aa$aaa"));  // member inside local
-		assertTrue(ClassName.isMember("java.util.Map$1$aaa"));  // member inside anonymous
-		assertTrue(ClassName.isMember("java.util.Map$a1$aaa$bbb"));
-		assertTrue(ClassName.isMember("java.util.Map$1a1$aaa"));  // member inside local
-		assertFalse(ClassName.isMember("java.util.Map$1a"));
-		assertTrue(ClassName.isMember("java.util.Map$a12345$b12345"));
-		assertFalse(ClassName.isMember("java.util.Map$12345a"));
-		assertFalse(ClassName.isMember("java.util.Map$333"));
-		assertFalse(ClassName.isMember("java.util.Map3$333"));
-	}
-
-	public void testIsLocal() throws Exception {
-		class LocalClass {
-			void foo() {
-				System.getProperty("foo");
-			}
-		}
-		new LocalClass().foo();
-		assertFalse(ClassName.isLocal(java.util.Map.class.getName())); // top-level
-		assertFalse(ClassName.isLocal(java.util.Map.Entry.class.getName())); // member
-		assertTrue(ClassName.isLocal(Class.forName(this.getClass().getName() + "$1LocalClass").getName())); // local
-		assertFalse(ClassName.isLocal(Class.forName("java.util.Vector$1").getName())); // anonymous
-
-		Object[] array = new java.util.Map[0]; // top-level
-		assertFalse(ClassName.isLocal(array.getClass().getName()));
-		array = new java.util.Map.Entry[0]; // member
-		assertFalse(ClassName.isLocal(array.getClass().getName()));
-		Class<?> localClass = Class.forName(this.getClass().getName() + "$1LocalClass"); // local
-		array = (Object[]) Array.newInstance(localClass, 0);
-		assertFalse(ClassName.isLocal(array.getClass().getName()));
-		Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
-		array = (Object[]) Array.newInstance(anonClass, 0);
-		assertFalse(ClassName.isLocal(array.getClass().getName()));
-
-		// test a few edge cases
-		assertFalse(ClassName.isLocal("java.util.Map$a1"));
-		assertFalse(ClassName.isLocal("java.util.Map$a1$aaa$bbb"));
-		assertFalse(ClassName.isLocal("java.util.Map$11$aaa"));
-		assertTrue(ClassName.isLocal("java.util.Map$1a"));
-		assertTrue(ClassName.isLocal("java.util.Map$2abc"));
-		assertTrue(ClassName.isLocal("java.util.Map$2abc1"));
-		assertFalse(ClassName.isLocal("java.util.Map$a12345$b12345"));
-		assertTrue(ClassName.isLocal("java.util.Map$12345$1234a"));
-		assertFalse(ClassName.isLocal("java.util.Map$333"));
-		assertFalse(ClassName.isLocal("java.util.Map3$333"));
-	}
-
-	public void testIsAnonymous() throws Exception {
-		assertFalse(ClassName.isAnonymous(java.util.Map.class.getName())); // top-level
-		assertFalse(ClassName.isAnonymous(java.util.Map.Entry.class.getName())); // member
-		assertFalse(ClassName.isAnonymous(Class.forName(this.getClass().getName() + "$1LocalClass").getName())); // local
-		assertTrue(ClassName.isAnonymous(Class.forName("java.util.Vector$1").getName())); // anonymous
-
-		Object[] array = new java.util.Map[0]; // top-level
-		assertFalse(ClassName.isAnonymous(array.getClass().getName()));
-		array = new java.util.Map.Entry[0]; // member
-		assertFalse(ClassName.isAnonymous(array.getClass().getName()));
-		Class<?> localClass = Class.forName(this.getClass().getName() + "$1LocalClass"); // local
-		array = (Object[]) Array.newInstance(localClass, 0);
-		assertFalse(ClassName.isAnonymous(array.getClass().getName()));
-		Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
-		array = (Object[]) Array.newInstance(anonClass, 0);
-		assertFalse(ClassName.isAnonymous(array.getClass().getName()));
-
-		// test a few edge cases
-		assertFalse(ClassName.isAnonymous("java.util.Map$a1"));
-		assertFalse(ClassName.isAnonymous("java.util.Map$a1$aaa$bbb"));
-		assertFalse(ClassName.isAnonymous("java.util.Map$1a1$aaa"));
-		assertFalse(ClassName.isAnonymous("java.util.Map$1$a"));
-		assertFalse(ClassName.isAnonymous("java.util.Map$1a"));
-		assertFalse(ClassName.isAnonymous("java.util.Map$a12345$b12345"));
-		assertFalse(ClassName.isAnonymous("java.util.Map$12345$a1234"));
-		assertTrue(ClassName.isAnonymous("java.util.Map$333"));
-		assertTrue(ClassName.isAnonymous("java.util.Map3$333"));
-	}
-
-	public void testIsReference() throws Exception {
-		assertFalse(ClassName.isReference(int.class.getName())); // top-level
-
-		assertTrue(ClassName.isReference(java.util.Map.class.getName())); // top-level
-		assertTrue(ClassName.isReference(java.util.Map.Entry.class.getName())); // member
-		assertTrue(ClassName.isReference(Class.forName(this.getClass().getName() + "$1LocalClass").getName())); // local
-		assertTrue(ClassName.isReference(Class.forName("java.util.Vector$1").getName())); // anonymous
-
-		Object[] array = new java.util.Map[0]; // top-level
-		assertTrue(ClassName.isReference(array.getClass().getName()));
-		array = new java.util.Map.Entry[0]; // member
-		assertTrue(ClassName.isReference(array.getClass().getName()));
-		Class<?> localClass = Class.forName(this.getClass().getName() + "$1LocalClass"); // local
-		array = (Object[]) Array.newInstance(localClass, 0);
-		assertTrue(ClassName.isReference(array.getClass().getName()));
-		Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
-		array = (Object[]) Array.newInstance(anonClass, 0);
-		assertTrue(ClassName.isReference(array.getClass().getName()));
-	}
-
-	public void testIsPrimitive() {
-		assertTrue(void.class.isPrimitive());
-
-		assertTrue(ClassName.isPrimitive(void.class.getName()));
-		assertTrue(ClassName.isPrimitive(int.class.getName()));
-		assertTrue(ClassName.isPrimitive(float.class.getName()));
-		assertTrue(ClassName.isPrimitive(boolean.class.getName()));
-
-		assertFalse(ClassName.isPrimitive(java.lang.Number.class.getName()));
-		assertFalse(ClassName.isPrimitive(java.lang.String.class.getName()));
-		assertFalse(ClassName.isPrimitive(java.lang.Boolean.class.getName()));
-		assertFalse(ClassName.isPrimitive(java.lang.Integer.class.getName()));
-	}
-
-	public void testIsPrimitiveWrapper() {
-		assertFalse(ClassName.isPrimitiveWrapper(void.class.getName()));
-		assertFalse(ClassName.isPrimitiveWrapper(int.class.getName()));
-		assertFalse(ClassName.isPrimitiveWrapper(float.class.getName()));
-		assertFalse(ClassName.isPrimitiveWrapper(boolean.class.getName()));
-
-		assertFalse(ClassName.isPrimitiveWrapper(java.lang.reflect.Field.class.getName()));
-		assertFalse(ClassName.isPrimitiveWrapper(java.lang.String.class.getName()));
-		assertTrue(ClassName.isPrimitiveWrapper(java.lang.Boolean.class.getName()));
-		assertTrue(ClassName.isPrimitiveWrapper(java.lang.Integer.class.getName()));
-	}
-
-	public void testIsVariablePrimitive() {
-		assertFalse(ClassName.isVariablePrimitive(void.class.getName()));
-
-		assertTrue(ClassName.isVariablePrimitive(int.class.getName()));
-		assertTrue(ClassName.isVariablePrimitive(float.class.getName()));
-		assertTrue(ClassName.isVariablePrimitive(boolean.class.getName()));
-
-		assertFalse(ClassName.isVariablePrimitive(java.lang.Number.class.getName()));
-		assertFalse(ClassName.isVariablePrimitive(java.lang.String.class.getName()));
-		assertFalse(ClassName.isVariablePrimitive(java.lang.Boolean.class.getName()));
-	}
-
-	public void testIsVariablePrimitiveWrapper() {
-		assertFalse(ClassName.isVariablePrimitiveWrapper(java.lang.Void.class.getName()));
-
-		assertTrue(ClassName.isVariablePrimitiveWrapper(java.lang.Integer.class.getName()));
-		assertTrue(ClassName.isVariablePrimitiveWrapper(java.lang.Float.class.getName()));
-		assertTrue(ClassName.isVariablePrimitiveWrapper(java.lang.Boolean.class.getName()));
-
-		assertFalse(ClassName.isVariablePrimitiveWrapper(java.lang.Number.class.getName()));
-		assertFalse(ClassName.isVariablePrimitiveWrapper(java.lang.String.class.getName()));
-		assertFalse(ClassName.isVariablePrimitiveWrapper(java.lang.Object.class.getName()));
-	}
-
-	public void testGetWrapperClassName() {
-		assertEquals(java.lang.Void.class.getName(), ClassName.getWrapperClassName(void.class.getName()));
-		assertEquals(java.lang.Integer.class.getName(), ClassName.getWrapperClassName(int.class.getName()));
-		assertEquals(java.lang.Float.class.getName(), ClassName.getWrapperClassName(float.class.getName()));
-		assertEquals(java.lang.Boolean.class.getName(), ClassName.getWrapperClassName(boolean.class.getName()));
-
-		assertNull(ClassName.getWrapperClassName(java.lang.String.class.getName()));
-	}
-
-	public void testGetPrimitiveClassName() {
-		assertEquals(void.class.getName(), ClassName.getPrimitiveClassName(java.lang.Void.class.getName()));
-		assertEquals(int.class.getName(), ClassName.getPrimitiveClassName(java.lang.Integer.class.getName()));
-		assertEquals(float.class.getName(), ClassName.getPrimitiveClassName(java.lang.Float.class.getName()));
-		assertEquals(boolean.class.getName(), ClassName.getPrimitiveClassName(java.lang.Boolean.class.getName()));
-
-		assertNull(ClassName.getPrimitiveClassName(java.lang.String.class.getName()));
-	}
-	
-	public void testAreAutoboxEquivalents() {
-		assertTrue(ClassName.areAutoboxEquivalents(Integer.class.getName(), Integer.class.getName()));
-		assertTrue(ClassName.areAutoboxEquivalents(int.class.getName(), Integer.class.getName()));
-		assertTrue(ClassName.areAutoboxEquivalents(Integer.class.getName(), int.class.getName()));
-		assertFalse(ClassName.areAutoboxEquivalents(int.class.getName(), Boolean.class.getName()));
-		assertTrue(ClassName.areAutoboxEquivalents(String.class.getName(), String.class.getName()));
-	}
-	
-	public void testForCode() {
-		assertEquals("byte", ClassName.forCode('B'));
-		assertEquals("char", ClassName.forCode('C'));
-		assertEquals("double", ClassName.forCode('D'));
-		assertEquals("float", ClassName.forCode('F'));
-		assertEquals("int", ClassName.forCode('I'));
-		assertEquals("long", ClassName.forCode('J'));
-		assertEquals("short", ClassName.forCode('S'));
-		assertEquals("boolean", ClassName.forCode('Z'));
-		assertEquals("void", ClassName.forCode('V'));
-
-		assertNull(ClassName.forCode('X'));
-
-		assertEquals("byte", ClassName.forCode((int) 'B'));
-		assertEquals("char", ClassName.forCode((int) 'C'));
-		assertEquals("double", ClassName.forCode((int) 'D'));
-		assertEquals("float", ClassName.forCode((int) 'F'));
-		assertEquals("int", ClassName.forCode((int) 'I'));
-		assertEquals("long", ClassName.forCode((int) 'J'));
-		assertEquals("short", ClassName.forCode((int) 'S'));
-		assertEquals("boolean", ClassName.forCode((int) 'Z'));
-		assertEquals("void", ClassName.forCode((int) 'V'));
-
-		assertNull(ClassName.forCode((int) 'X'));
-	}
-
-	public void testGetCodeForClassName() {
-		assertEquals('I', ClassName.getCodeForClassName(int.class.getName()));
-		assertEquals('I', ClassName.getCodeForClassName("int"));
-		assertEquals('B', ClassName.getCodeForClassName(byte.class.getName()));
-		assertEquals('B', ClassName.getCodeForClassName("byte"));
-
-		assertEquals((char) 0, ClassName.getCodeForClassName(java.lang.Object.class.getName()));
-	}
-
-	public void testConstructor() {
-		boolean exCaught = false;
-		try {
-			Object at = ReflectionTools.newInstance(ClassName.class);
-			fail("bogus: " + at); //$NON-NLS-1$
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof InvocationTargetException) {
-				if (ex.getCause().getCause() instanceof UnsupportedOperationException) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ClasspathTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ClasspathTests.java
deleted file mode 100644
index 19d7c67..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ClasspathTests.java
+++ /dev/null
@@ -1,401 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.Classpath;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.Tools;
-
-@SuppressWarnings("nls")
-public class ClasspathTests extends TestCase {
-	private static final String JAVA_HOME = System.getProperty("java.home");
-
-	public ClasspathTests(String name) {
-		super(name);
-	}
-
-	public void testCompressed() {
-		String path = "";
-
-		// no changes
-		path = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar")).compressed().getPath();
-		assertEquals(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar"), path);
-
-		path = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar")).compressed().getPath();
-		assertEquals(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar"), path);
-
-		path = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\i18n.jar;C:\\jdk\\jaws.jar")).compressed().getPath();
-		assertEquals(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar"), path);
-
-		path = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar;C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar")).compressed().getPath();
-		assertEquals(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar"), path);
-
-		path = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\i18n.jar;C:\\jdk\\i18n.jar;C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar")).compressed().getPath();
-		assertEquals(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar"), path);
-
-		path = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar;C:\\jdk\\rt.jar;;;;C:\\jdk\\jaws.jar;C:\\jdk\\jaws.jar;C:\\jdk\\rt.jar;;;")).compressed().getPath();
-		assertEquals(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar"), path);
-
-		// no changes
-		path = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar")).compressed().getPath();
-		assertEquals(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar"), path);
-
-		path = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar")).compressed().getPath();
-		assertEquals(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar"), path);
-
-		path = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\..\\jdk\\i18n.jar;C:\\jdk\\jaws.jar")).compressed().getPath();
-		assertEquals(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar"), path);
-
-		path = new Classpath(this.morph("C:\\jdk1\\jdk2\\jdk3\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk1\\jdk2\\jdk3\\..\\..\\..\\jdk1\\jdk2\\jdk3\\i18n.jar;C:\\jdk\\jaws.jar")).compressed().getPath();
-		assertEquals(this.morph("C:\\jdk1\\jdk2\\jdk3\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar"), path);
-
-	}
-
-	public void testConvertToClassName() {
-		String fileName = "java/lang/String.class";
-		File file = new File(fileName);
-		String className = Classpath.convertToClassName(file);
-		assertEquals(java.lang.String.class.getName(), className);
-	}
-
-	public void testConvertToClass() throws ClassNotFoundException {
-		String fileName = "java/lang/String.class";
-		File file = new File(fileName);
-		Class<?> javaClass = Classpath.convertToClass(file);
-		assertEquals(java.lang.String.class, javaClass);
-	}
-
-	public void testConvertToArchiveClassFileEntryName() {
-		String fileName = Classpath.convertToArchiveClassFileEntryName(java.lang.String.class);
-		assertEquals("java/lang/String.class", fileName);
-	}
-
-	public void testConvertToArchiveEntryNameBase() {
-		String fileName = Classpath.convertToArchiveEntryNameBase(java.lang.String.class);
-		assertEquals("java/lang/String", fileName);
-	}
-
-	public void testConvertToClassFileName() {
-		char sc = File.separatorChar;
-		String fileName = Classpath.convertToClassFileName(java.lang.String.class);
-		assertEquals("java" + sc + "lang" + sc + "String.class", fileName);
-	}
-
-	public void testConvertToClassFileString() {
-		char sc = File.separatorChar;
-		File file = Classpath.convertToClassFile(java.lang.String.class.getName());
-		assertEquals("java" + sc + "lang" + sc + "String.class", file.getPath());
-	}
-
-	public void testConvertToClassFileClass() {
-		char sc = File.separatorChar;
-		File file = Classpath.convertToClassFile(java.lang.String.class);
-		assertEquals("java" + sc + "lang" + sc + "String.class", file.getPath());
-	}
-
-	public void testConvertToJavaFileName() {
-		char sc = File.separatorChar;
-		String fileName = Classpath.convertToJavaFileName(java.lang.String.class);
-		assertEquals("java" + sc + "lang" + sc + "String.java", fileName);
-	}
-
-	public void testConvertToJavaFileString() {
-		char sc = File.separatorChar;
-		File file = Classpath.convertToJavaFile(java.lang.String.class.getName());
-		assertEquals("java" + sc + "lang" + sc + "String.java", file.getPath());
-	}
-
-	public void testConvertToJavaFileClass() {
-		char sc = File.separatorChar;
-		File file = Classpath.convertToJavaFile(java.lang.String.class);
-		assertEquals("java" + sc + "lang" + sc + "String.java", file.getPath());
-	}
-
-	public void testConvertToFileNameBase() {
-		char sc = File.separatorChar;
-		String fileName = Classpath.convertToFileNameBase(java.lang.String.class);
-		assertEquals("java" + sc + "lang" + sc + "String", fileName);
-	}
-
-	public void testConvertToURLs() {
-		Iterator<URL> entries = new Classpath(this.morph("C:\\jdk\\rt.jar;C:\\jdk\\i18n.jar;C:\\jdk\\jaws.jar;C:\\foo\\classes;C:\\bar\\bar.jar")).getURLs().iterator();
-		assertEquals(this.morphURL("/C:/jdk/rt.jar"), entries.next().getPath());
-		assertEquals(this.morphURL("/C:/jdk/i18n.jar"), entries.next().getPath());
-		assertEquals(this.morphURL("/C:/jdk/jaws.jar"), entries.next().getPath());
-		assertEquals(this.morphURL("/C:/foo/classes"), entries.next().getPath());
-		assertEquals(this.morphURL("/C:/bar/bar.jar"), entries.next().getPath());
-		assertFalse(entries.hasNext());
-	}
-
-	public void testGetEntries() {
-		Classpath cp = new Classpath(this.morph("C:\\jdk\\rt.jar;;.;C:\\jdk\\i18n.jar;;;C:\\jdk\\jaws.jar;;C:\\foo\\classes;C:\\bar\\bar.jar;C:\\bar\\bar.jar;"));
-		Iterator<Classpath.Entry> entries = cp.getEntries().iterator();
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entries.next().getFileName());
-		assertEquals(this.morph("."), entries.next().getFileName());
-		assertEquals(this.morph("C:\\jdk\\i18n.jar"), entries.next().getFileName());
-		assertEquals(this.morph("C:\\jdk\\jaws.jar"), entries.next().getFileName());
-		assertEquals(this.morph("C:\\foo\\classes"), entries.next().getFileName());
-		assertEquals(this.morph("C:\\bar\\bar.jar"), entries.next().getFileName());
-		assertEquals(this.morph("C:\\bar\\bar.jar"), entries.next().getFileName());
-		assertFalse(entries.hasNext());
-
-		cp = cp.compressed();
-		entries = cp.getEntries().iterator();
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entries.next().getFileName());
-		assertEquals(this.morph("."), entries.next().getFileName());
-		assertEquals(this.morph("C:\\jdk\\i18n.jar"), entries.next().getFileName());
-		assertEquals(this.morph("C:\\jdk\\jaws.jar"), entries.next().getFileName());
-		assertEquals(this.morph("C:\\foo\\classes"), entries.next().getFileName());
-		assertEquals(this.morph("C:\\bar\\bar.jar"), entries.next().getFileName());
-		assertFalse(entries.hasNext());
-	}
-
-	public void testGetEntryForFileNamed() {
-		Classpath.Entry entry = null;
-
-		// in the middle - qualified
-		entry = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\rt.jar;C:\\jdk\\jaws.jar;C:\\foo\\classes;C:\\bar\\bar.jar")).getEntryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.getFileName());
-
-		// in the middle - unqualified
-		entry = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\jaws.jar;rt.jar;C:\\foo\\classes;C:\\bar\\bar.jar")).getEntryForFileNamed("rt.jar");
-		assertEquals("rt.jar", entry.getFileName());
-
-		// at the beginning - qualified
-		entry = new Classpath(this.morph("C:\\jdk\\rt.jar;C:\\jdk\\i18n.jar;C:\\jdk\\jaws.jar;C:\\foo\\classes;C:\\bar\\bar.jar")).getEntryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.getFileName());
-
-		// at the beginning - unqualified
-		entry = new Classpath(this.morph("rt.jar;C:\\jdk\\i18n.jar;C:\\jdk\\jaws.jar;C:\\foo\\classes;C:\\bar\\bar.jar")).getEntryForFileNamed("rt.jar");
-		assertEquals("rt.jar", entry.getFileName());
-
-		// at the end - qualified
-		entry = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\jaws.jar;C:\\foo\\classes;C:\\bar\\bar.jar;C:\\jdk\\rt.jar")).getEntryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.getFileName());
-
-		// at the end - unqualified
-		entry = new Classpath(this.morph("C:\\jdk\\i18n.jar;C:\\jdk\\jaws.jar;C:\\foo\\classes;C:\\bar\\bar.jar;rt.jar")).getEntryForFileNamed("rt.jar");
-		assertEquals("rt.jar", entry.getFileName());
-
-		// alone - qualified
-		entry = new Classpath(this.morph("C:\\jdk\\rt.jar")).getEntryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.getFileName());
-
-		// alone - unqualified
-		entry = new Classpath("rt.jar").getEntryForFileNamed("rt.jar");
-		assertEquals("rt.jar", entry.getFileName());
-
-		// trick entry at the beginning
-		entry = new Classpath(this.morph("rt.jar.new;C:\\jdk\\rt.jar;C:\\jdk\\i18n.jar;C:\\jdk\\jaws.jar;C:\\foo\\classes;C:\\bar\\bar.jar")).getEntryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.getFileName());
-
-		// trick entry in the middle
-		entry = new Classpath(this.morph("rt.jar.new;C:\\jdk\\rtrtrt.jar;C:\\jdk\\rt.jar;C:\\jdk\\i18n.jar;C:\\jdk\\jaws.jar;C:\\foo\\classes;C:\\bar\\bar.jar")).getEntryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.getFileName());
-
-		// trick entry at the end
-		entry = new Classpath(this.morph("rt.jar.new;C:\\jdk\\rtrtrt.jar;C:\\jdk\\rt.jar;C:\\jdk\\i18n.jar;C:\\jdk\\jaws.jar;C:\\foo\\classes;C:\\bar\\bar.jar;C:\\jdk\\rtrtrt.jar")).getEntryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.getFileName());
-
-		// missing
-		entry = new Classpath(this.morph("rt.jar.new;C:\\jdk\\rtrtrt.jar;C:\\jdk\\i18n.jar;C:\\jdk\\jaws.jar;C:\\foo\\classes;C:\\bar\\bar.jar;C:\\jdk\\rtrtrt.jar")).getEntryForFileNamed("rt.jar");
-		assertEquals("path entry should not be found", null, entry);
-
-	}
-
-	public void testGetEntryForClassNamed() {
-		assertNotNull(Classpath.completeClasspath().getEntryForClassNamed(java.lang.String.class.getName()));
-		assertNull(Classpath.completeClasspath().getEntryForClassNamed("foo.bar.Baz"));
-	}
-
-	public void testLocationForClass() {
-		Class<?> javaClass = Classpath.class;
-		File entry = new File(Classpath.locationFor(javaClass));
-		if (entry.isFile() || entry.isDirectory()) {
-			assertTrue(entry.exists());
-		}
-		if (entry.isDirectory()) {
-			assertTrue(new File(entry, Classpath.convertToClassFileName(javaClass)).exists());
-		}
-	}
-
-	public void testRtJarName() throws IOException {
-		File rtFile = new File(Classpath.rtJarName());
-		assertTrue("rt.jar does not exist", rtFile.exists());
-
-		JarFile rtJarFile = new JarFile(rtFile);
-		JarEntry entry = rtJarFile.getJarEntry("java/lang/Object.class");
-		rtJarFile.close();
-		assertTrue("bogus rt.jar", entry != null);
-	}
-
-	public void testJREClassNames() {
-		assertTrue("Vector is missing from JRE class names", CollectionTools.contains(Classpath.bootClasspath().getClassNames(), java.util.Vector.class.getName()));
-		assertTrue("File is missing from JRE class names", CollectionTools.contains(Classpath.bootClasspath().getClassNames(), java.io.File.class.getName()));
-	}
-
-	public void testJavaExtensionDirectoryNames() {
-		char sep = File.separatorChar;
-		String stdExtDirName = JAVA_HOME + sep + "lib" + sep + "ext";
-		assertTrue("standard extension dir name missing: " + stdExtDirName, ArrayTools.contains(Classpath.javaExtensionDirectoryNames(), stdExtDirName));
-	}
-
-	public void testJavaExtensionDirectories() {
-		char sep = File.separatorChar;
-		File stdExtDir = new File(JAVA_HOME + sep + "lib" + sep + "ext");
-		assertTrue("standard extension dir missing: " + stdExtDir.getParent(), ArrayTools.contains(Classpath.javaExtensionDirectories(), stdExtDir));
-	}
-
-	public void testJavaExtensionClasspathEntries() {
-		char sep = File.separatorChar;
-		String jdk = System.getProperty("java.version");
-		if (jdk.startsWith("1.4") || jdk.startsWith("1.5") || jdk.startsWith("1.6")) {
-			Collection<String> jarNames = new ArrayList<String>();
-			Iterable<Classpath.Entry> entries = Classpath.javaExtensionClasspath().getEntries();
-			for (Classpath.Entry entry : entries) {
-				jarNames.add(entry.getFileName());
-			}
-			String stdExtJarName = JAVA_HOME + sep + "lib" + sep + "ext" + sep + "dnsns.jar";
-			String msg = "jdk 1.4.x standard extension jar missing: " + stdExtJarName;
-			boolean jarPresent = jarNames.contains(stdExtJarName);
-			if (Tools.jvmIsSun() || (Tools.jvmIsIBM() && jdk.startsWith("1.6"))) {
-				assertTrue(msg, jarPresent);
-			}
-		} else {
-			fail("we need to update this test for the current jdk");
-		}
-	}
-
-	public void testJavaExtensionClassNames() {
-		String jdk = System.getProperty("java.version");
-		if (jdk.startsWith("1.4") || jdk.startsWith("1.5") || jdk.startsWith("1.6")) {
-			String className = "sun.net.spi.nameservice.dns.DNSNameService";
-			String msg = "jdk 1.4.x standard extension class missing: " + className;
-			boolean classPresent = CollectionTools.contains(Classpath.javaExtensionClasspath().classNames(), className);
-			if (Tools.jvmIsSun() || (Tools.jvmIsIBM() && jdk.startsWith("1.6"))) {
-				assertTrue(msg, classPresent);
-			}
-		} else {
-			fail("we need to update this test for the current jdk");
-		}
-	}
-
-	public void testJavaClasspathClassNames() {
-		String className = this.getClass().getName();
-		ClassLoader cl = this.getClass().getClassLoader();
-		// make sure we are running under the "normal" class loader;
-		// when the tests are executed as an ANT task, they are run under
-		// an ANT class loader and the "Java" classpath does not include this class
-		if (cl.getClass().getName().startsWith("sun.misc")) {
-			assertTrue("class missing: " + className, CollectionTools.contains(Classpath.javaClasspath().getClassNames(), className));
-		}
-	}
-
-	public void testCompleteClasspathClassNames() {
-		String className = this.getClass().getName();
-		ClassLoader cl = this.getClass().getClassLoader();
-		// make sure we are running under the "normal" class loader;
-		// when the tests are executed as an ANT task, they are run under
-		// an ANT class loader and the "Java" classpath does not include this class
-		if (cl.getClass().getName().startsWith("sun.misc")) {
-			assertTrue("class missing: " + className, CollectionTools.contains(Classpath.completeClasspath().getClassNames(), className));
-		}
-	}
-
-	public void testClasspathForClass() {
-		assertNotNull(Classpath.classpathFor(java.lang.String.class));
-	}
-
-	public void testAddClassNamesTo() {
-		Collection<String> classNames = new ArrayList<String>(1000);
-		Classpath.bootClasspath().addClassNamesTo(classNames);
-		assertTrue(classNames.contains(java.util.Vector.class.getName()));
-	}
-
-	public void testToString() {
-		assertNotNull(Classpath.bootClasspath().toString());
-	}
-
-	public void testEntry_getCanonicalFile() {
-		Classpath.Entry entry = Classpath.bootClasspath().getEntryForClassNamed(java.lang.String.class.getName());
-		assertTrue(entry.getCanonicalFile().getPath().endsWith(".jar"));
-	}
-
-	public void testEntry_getCanonicalFileName() {
-		Classpath.Entry entry = Classpath.bootClasspath().getEntryForClassNamed(java.lang.String.class.getName());
-		if (Tools.jvmIsSun()) {
-			assertTrue(entry.getCanonicalFileName().endsWith("rt.jar"));
-		} else if (Tools.jvmIsIBM()) {
-			assertTrue(entry.getCanonicalFileName().endsWith("vm.jar"));
-		}
-	}
-
-	public void testEntry_equals() {
-		Classpath.Entry entry = Classpath.bootClasspath().getEntryForClassNamed(java.lang.String.class.getName());
-		assertFalse(entry.equals("foo"));
-	}
-
-	public void testEntry_containsClass() {
-		Classpath.Entry entry = Classpath.bootClasspath().getEntryForClassNamed(java.lang.String.class.getName());
-		assertTrue(entry.contains(java.lang.String.class));
-	}
-
-	public void testEntry_containsString() {
-		Classpath.Entry entry = Classpath.bootClasspath().getEntryForClassNamed(java.lang.String.class.getName());
-		assertTrue(entry.contains(java.lang.String.class.getName()));
-	}
-
-	public void testEntry_getClassNames() {
-		Classpath.Entry entry = Classpath.bootClasspath().getEntryForClassNamed(java.lang.String.class.getName());
-		assertTrue(CollectionTools.contains(entry.getClassNames(), java.lang.String.class.getName()));
-	}
-
-	public void testEntry_classNames() {
-		Classpath.Entry entry = Classpath.bootClasspath().getEntryForClassNamed(java.lang.String.class.getName());
-		assertTrue(CollectionTools.contains(entry.classNames(), java.lang.String.class.getName()));
-	}
-
-	/**
-	 * morph the specified path to a platform-independent path
-	 */
-	private String morph(String path) {
-		String result = path;
-		result = result.replace('\\', File.separatorChar);
-		result = result.replace(';', File.pathSeparatorChar);
-		if (!ArrayTools.contains(File.listRoots(), new File("C:\\"))) {
-			result = result.replaceAll("C:", "");
-		}
-		return result;
-	}
-
-	/**
-	 * morph the specified URL to a platform-independent path
-	 */
-	private String morphURL(String url) {
-		String result = url;
-		if (!ArrayTools.contains(File.listRoots(), new File("C:\\"))) {
-			result = result.replaceAll("/C:", "");
-		}
-		return result;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CollectionToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CollectionToolsTests.java
deleted file mode 100644
index 39787ae..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CollectionToolsTests.java
+++ /dev/null
@@ -1,2313 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import java.util.Random;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.Vector;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.Range;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.ReverseComparator;
-import org.eclipse.jpt.utility.internal.enumerations.EmptyEnumeration;
-import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-
-@SuppressWarnings("nls")
-public class CollectionToolsTests extends TestCase {
-
-	public CollectionToolsTests(String name) {
-		super(name);
-	}
-
-
-	// ********** add all **********
-
-	public void testAddAllCollectionIterable_StringModified() {
-		List<String> list1 = this.buildStringList1();
-		Iterable<String> iterable2 = this.buildStringList2();
-		assertTrue(CollectionTools.addAll(list1, iterable2.iterator()));
-		assertEquals(6, list1.size());
-		assertTrue(list1.containsAll(this.buildStringList2()));
-	}
-
-	public void testAddAllCollectionIterable_StringUnmodified() {
-		Set<String> set1 = this.buildStringSet1();
-		Iterable<String> iterable3 = this.buildStringList1(); // same elements as set1
-		assertFalse(CollectionTools.addAll(set1, iterable3.iterator()));
-		assertEquals(3, set1.size());
-		assertTrue(set1.containsAll(this.buildStringList1()));
-	}
-
-	public void testAddAllCollectionIterable_ObjectModified() {
-		List<Object> list1 = this.buildObjectList1();
-		Iterable<String> iterable2 = this.buildStringList2();
-		assertTrue(CollectionTools.addAll(list1, iterable2));
-		assertEquals(6, list1.size());
-		assertTrue(list1.containsAll((List<String>) iterable2));
-	}
-
-	public void testAddAllCollectionIterable_ObjectUnmodified() {
-		Set<Object> set1 = this.buildObjectSet1();
-		Iterable<String> iterable3 = this.buildStringList1(); // same elements as set1
-		assertFalse(CollectionTools.addAll(set1, iterable3));
-		assertEquals(3, set1.size());
-		assertTrue(set1.containsAll((List<String>) iterable3));
-	}
-
-	public void testAddAllCollectionIterable_EmptyIterable() {
-		Set<Object> set1 = this.buildObjectSet1();
-		assertFalse(CollectionTools.addAll(set1, EmptyIterable.instance()));
-		assertEquals(3, set1.size());
-	}
-
-	public void testAddAllCollectionIterableInt_Modified() {
-		List<String> list1 = this.buildStringList1();
-		List<String> list2 = this.buildStringList2();
-		Iterable<String> iterable2 = list2;
-		assertTrue(CollectionTools.addAll(list1, iterable2, list2.size()));
-		assertEquals(6, list1.size());
-		assertTrue(list1.containsAll(this.buildStringList2()));
-	}
-
-	public void testAddAllCollectionIterableInt_Unmodified() {
-		Set<String> set1 = this.buildStringSet1();
-		List<String> list1 = this.buildStringList1(); // same elements as set1
-		Iterable<String> iterable3 = list1;
-		assertFalse(CollectionTools.addAll(set1, iterable3, list1.size()));
-		assertEquals(3, set1.size());
-		assertTrue(set1.containsAll(this.buildStringList1()));
-	}
-
-	public void testAddAllCollectionIterator_StringModified() {
-		List<String> list1 = this.buildStringList1();
-		List<String> list2 = this.buildStringList2();
-		assertTrue(CollectionTools.addAll(list1, list2.iterator()));
-		assertEquals(6, list1.size());
-		assertTrue(list1.containsAll(list2));
-	}
-
-	public void testAddAllCollectionIterator_StringUnmodified() {
-		Set<String> set1 = this.buildStringSet1();
-		List<String> list3 = this.buildStringList1(); // same elements as s1
-		assertFalse(CollectionTools.addAll(set1, list3.iterator()));
-		assertEquals(3, set1.size());
-		assertTrue(set1.containsAll(list3));
-	}
-
-	public void testAddAllCollectionIterator_ObjectModified() {
-		List<Object> list1 = this.buildObjectList1();
-		List<String> list2 = this.buildStringList2();
-		assertTrue(CollectionTools.addAll(list1, list2.iterator()));
-		assertEquals(6, list1.size());
-		assertTrue(list1.containsAll(list2));
-	}
-
-	public void testAddAllCollectionIterator_ObjectUnmodified() {
-		Set<Object> set1 = this.buildObjectSet1();
-		List<String> list3 = this.buildStringList1(); // same elements as s1
-		assertFalse(CollectionTools.addAll(set1, list3.iterator()));
-		assertEquals(3, set1.size());
-		assertTrue(set1.containsAll(list3));
-	}
-
-	public void testAddAllCollectionIterator_EmptyIterator() {
-		List<String> list1 = this.buildStringList1();
-		assertFalse(CollectionTools.addAll(list1, EmptyIterator.<String>instance()));
-		assertEquals(3, list1.size());
-	}
-
-	public void testAddAllCollectionIteratorInt_Modified() {
-		List<String> list1 = this.buildStringList1();
-		List<String> list2 = this.buildStringList2();
-		assertTrue(CollectionTools.addAll(list1, list2.iterator(), 3));
-		assertEquals(6, list1.size());
-		assertTrue(list1.containsAll(list2));
-	}
-
-	public void testAddAllCollectionIteratorInt_Unmodified() {
-		Set<String> set1 = this.buildStringSet1();
-		List<String> list3 = this.buildStringList1(); // same elements as s1
-		assertFalse(CollectionTools.addAll(set1, list3.iterator(), 3));
-		assertEquals(3, set1.size());
-		assertTrue(set1.containsAll(list3));
-	}
-
-	public void testAddAllCollectionIteratorInt_EmptyIterator() {
-		List<String> list1 = this.buildStringList1();
-		assertFalse(CollectionTools.addAll(list1, EmptyIterator.<String>instance(), 0));
-		assertEquals(3, list1.size());
-	}
-
-	public void testAddAllCollectionObjectArray_StringModified() {
-		List<String> list = this.buildStringList1();
-		String[] a = this.buildStringArray1();
-		assertTrue(CollectionTools.addAll(list, a));
-		assertEquals(6, list.size());
-		assertTrue(list.containsAll(CollectionTools.collection(a)));
-	}
-
-	public void testAddAllCollectionObjectArray_StringListEmptyArray() {
-		List<String> list = this.buildStringList1();
-		assertFalse(CollectionTools.addAll(list, new String[0]));
-	}
-
-	public void testAddAllCollectionObjectArray_StringUnmodified() {
-		Set<String> set = this.buildStringSet1();
-		String[] a = this.buildStringArray1();
-		assertFalse(CollectionTools.addAll(set, a));
-		assertEquals(3, set.size());
-		assertTrue(set.containsAll(CollectionTools.collection(a)));
-
-		assertFalse(CollectionTools.addAll(set, new String[0]));
-	}
-
-	public void testAddAllCollectionObjectArray_StringSetEmptyArray() {
-		Set<String> set = this.buildStringSet1();
-		assertFalse(CollectionTools.addAll(set, new String[0]));
-	}
-
-	public void testAddAllCollectionObjectArray_ObjectModified() {
-		List<Object> list = this.buildObjectList1();
-		String[] a = this.buildStringArray1();
-
-		assertTrue(CollectionTools.addAll(list, a));
-		assertEquals(6, list.size());
-		assertTrue(list.containsAll(CollectionTools.collection(a)));
-	}
-
-	public void testAddAllCollectionObjectArray_ObjectUnmodified() {
-		String[] a = this.buildStringArray1();
-		Set<Object> set = this.buildObjectSet1();
-		assertFalse(CollectionTools.addAll(set, a));
-		assertEquals(3, set.size());
-		assertTrue(set.containsAll(CollectionTools.collection(a)));
-	}
-
-	public void testAddAllListIntObjectArray() {
-		List<String> list = this.buildStringList1();
-		CollectionTools.addAll(list, 2, new String[] { "X", "X", "X" });
-		assertEquals(6, list.size());
-		assertTrue(list.contains("X"));
-		assertTrue(Arrays.equals(new Object[] { "zero", "one", "X", "X", "X", "two" }, list.toArray()));
-	}
-
-	public void testAddAllListIntObjectArray_Zero() {
-		List<String> list = new ArrayList<String>();
-		CollectionTools.addAll(list, 0, new String[] { "X", "X", "X" });
-		assertEquals(3, list.size());
-		assertTrue(list.contains("X"));
-		assertTrue(Arrays.equals(new Object[] { "X", "X", "X" }, list.toArray()));
-	}
-
-	public void testAddAllListIntObjectArray_EmptyArray() {
-		List<String> list = this.buildStringList1();
-		CollectionTools.addAll(list, 2, new String[0]);
-		assertEquals(3, list.size());
-		assertTrue(Arrays.equals(new Object[] { "zero", "one", "two" }, list.toArray()));
-	}
-
-	public void testAddAllListIntIterable() {
-		List<String> list = this.buildStringList1();
-		Iterable<String> iterable = Arrays.asList(new String[] { "X", "X", "X" });
-		CollectionTools.addAll(list, 2, iterable);
-		assertEquals(6, list.size());
-		assertTrue(list.contains("X"));
-		assertTrue(Arrays.equals(new Object[] { "zero", "one", "X", "X", "X", "two" }, list.toArray()));
-	}
-
-	public void testAddAllListIntIterable_Zero() {
-		List<String> list = new ArrayList<String>();
-		Iterable<String> iterable = Arrays.asList(new String[] { "X", "X", "X" });
-		CollectionTools.addAll(list, 0, iterable);
-		assertEquals(3, list.size());
-		assertTrue(list.contains("X"));
-		assertTrue(Arrays.equals(new Object[] { "X", "X", "X" }, list.toArray()));
-	}
-
-	public void testAddAllListIntIterable_EmptyIterable() {
-		List<String> list = this.buildStringList1();
-		Iterable<String> iterable = EmptyIterable.instance();
-		CollectionTools.addAll(list, 2, iterable);
-		assertEquals(3, list.size());
-		assertTrue(Arrays.equals(new Object[] { "zero", "one", "two" }, list.toArray()));
-	}
-
-	public void testAddAllListIntIterableInt() {
-		List<String> list = this.buildStringList1();
-		Iterable<String> iterable = Arrays.asList(new String[] { "X", "X", "X" });
-		CollectionTools.addAll(list, 2, iterable, 3);
-		assertEquals(6, list.size());
-		assertTrue(list.contains("X"));
-		assertTrue(Arrays.equals(new Object[] { "zero", "one", "X", "X", "X", "two" }, list.toArray()));
-	}
-
-	public void testAddAllListIntIterableInt_Zero() {
-		List<String> list = new ArrayList<String>();
-		Iterable<String> iterable = Arrays.asList(new String[] { "X", "X", "X" });
-		CollectionTools.addAll(list, 0, iterable, 3);
-		assertEquals(3, list.size());
-		assertTrue(list.contains("X"));
-		assertTrue(Arrays.equals(new Object[] { "X", "X", "X" }, list.toArray()));
-	}
-
-	public void testAddAllListIntIterableInt_EmptyIterable() {
-		List<String> list = this.buildStringList1();
-		Iterable<String> iterable = EmptyIterable.instance();
-		CollectionTools.addAll(list, 2, iterable, 0);
-		assertEquals(3, list.size());
-		assertTrue(Arrays.equals(new Object[] { "zero", "one", "two" }, list.toArray()));
-	}
-
-	public void testAddAllListIntIterator() {
-		List<String> list = this.buildStringList1();
-		Iterator<String> iterator = Arrays.asList(new String[] { "X", "X", "X" }).iterator();
-		CollectionTools.addAll(list, 2, iterator);
-		assertEquals(6, list.size());
-		assertTrue(list.contains("X"));
-		assertTrue(Arrays.equals(new Object[] { "zero", "one", "X", "X", "X", "two" }, list.toArray()));
-	}
-
-	public void testAddAllListIntIterator_Zero() {
-		List<String> list = new ArrayList<String>();
-		Iterator<String> iterator = Arrays.asList(new String[] { "X", "X", "X" }).iterator();
-		CollectionTools.addAll(list, 0, iterator);
-		assertEquals(3, list.size());
-		assertTrue(list.contains("X"));
-		assertTrue(Arrays.equals(new Object[] { "X", "X", "X" }, list.toArray()));
-	}
-
-	public void testAddAllListIntIterator_EmptyIterator() {
-		List<String> list = this.buildStringList1();
-		Iterator<String> iterator = EmptyIterator.instance();
-		CollectionTools.addAll(list, 2, iterator);
-		assertEquals(3, list.size());
-		assertTrue(Arrays.equals(new Object[] { "zero", "one", "two" }, list.toArray()));
-	}
-
-	public void testAddAllListIntIteratorInt() {
-		List<String> list = this.buildStringList1();
-		Iterator<String> iterator = Arrays.asList(new String[] { "X", "X", "X" }).iterator();
-		CollectionTools.addAll(list, 2, iterator, 3);
-		assertEquals(6, list.size());
-		assertTrue(list.contains("X"));
-		assertTrue(Arrays.equals(new Object[] { "zero", "one", "X", "X", "X", "two" }, list.toArray()));
-	}
-
-	public void testAddAllListIntIteratorInt_Zero() {
-		List<String> list = new ArrayList<String>();
-		Iterator<String> iterator = Arrays.asList(new String[] { "X", "X", "X" }).iterator();
-		CollectionTools.addAll(list, 0, iterator, 3);
-		assertEquals(3, list.size());
-		assertTrue(list.contains("X"));
-		assertTrue(Arrays.equals(new Object[] { "X", "X", "X" }, list.toArray()));
-	}
-
-	public void testAddAllListIntIteratorInt_EmptyIterator() {
-		List<String> list = this.buildStringList1();
-		Iterator<String> iterator = EmptyIterator.instance();
-		CollectionTools.addAll(list, 2, iterator, 0);
-		assertEquals(3, list.size());
-		assertTrue(Arrays.equals(new Object[] { "zero", "one", "two" }, list.toArray()));
-	}
-
-
-	// ********** bag **********
-
-	public void testBagEnumeration_String() {
-		Bag<String> b = CollectionTools.bag(this.buildStringVector1().elements());
-		assertEquals(3, b.size());
-		assertTrue(b.containsAll(this.buildStringVector1()));
-	}
-
-	public void testBagEnumeration_Object() {
-		Bag<Object> b = CollectionTools.<Object>bag(this.buildStringVector1().elements());
-		assertEquals(3, b.size());
-		assertTrue(b.containsAll(this.buildStringVector1()));
-	}
-
-	public void testBagEnumeration_Empty() {
-		Bag<Object> b = CollectionTools.<Object>bag(EmptyEnumeration.instance());
-		assertEquals(0, b.size());
-	}
-
-	public void testBagEnumerationInt() {
-		Bag<String> b = CollectionTools.bag(this.buildStringVector1().elements(), 3);
-		assertEquals(3, b.size());
-		assertTrue(b.containsAll(this.buildStringVector1()));
-	}
-
-	public void testBagEnumerationInt_Empty() {
-		Bag<String> b = CollectionTools.bag(EmptyEnumeration.<String>instance(), 3);
-		assertEquals(0, b.size());
-	}
-
-	public void testBagIterable() {
-		Iterable<String> iterable = this.buildStringList1();
-		Bag<String> b = CollectionTools.bag(iterable);
-		assertEquals(3, b.size());
-		assertTrue(b.containsAll(this.buildStringList1()));
-	}
-
-	public void testBagIterableInt() {
-		Iterable<String> iterable = this.buildStringList1();
-		Bag<String> b = CollectionTools.bag(iterable, 3);
-		assertEquals(3, b.size());
-		assertTrue(b.containsAll(this.buildStringList1()));
-	}
-
-	public void testBagIterator_String() {
-		Bag<String> b = CollectionTools.bag(this.buildStringList1().iterator());
-		assertEquals(3, b.size());
-		assertTrue(b.containsAll(this.buildStringList1()));
-	}
-
-	public void testBagIterator_StringObject() {
-		Collection<String> c = new ArrayList<String>();
-		c.add("zero");
-		c.add("one");
-		c.add("two");
-		c.add("three");
-		Bag<Object> b = CollectionTools.<Object>bag(c.iterator());
-		assertEquals(4, b.size());
-		assertTrue(b.containsAll(c));
-	}
-
-	public void testBagIterator_Empty() {
-		Bag<String> b = CollectionTools.bag(EmptyIterator.<String>instance());
-		assertEquals(0, b.size());
-	}
-
-	public void testBagIteratorInt() {
-		Bag<String> b = CollectionTools.bag(this.buildStringList1().iterator(), 3);
-		assertEquals(3, b.size());
-		assertTrue(b.containsAll(this.buildStringList1()));
-	}
-
-	public void testBagIteratorInt_Empty() {
-		Bag<String> b = CollectionTools.bag(EmptyIterator.<String>instance(), 3);
-		assertEquals(0, b.size());
-	}
-
-	public void testBagObjectArray() {
-		Bag<String> b = CollectionTools.bag(this.buildStringArray1());
-		assertEquals(3, b.size());
-		assertTrue(CollectionTools.containsAll(b, (Object[]) this.buildStringArray1()));
-	}
-
-	public void testBagObjectArray_Vararg() {
-		Bag<String> b = CollectionTools.bag("foo", "bar", "baz");
-		assertEquals(3, b.size());
-		assertTrue(CollectionTools.containsAll(b, new Object[]{"foo", "bar", "baz"}));
-	}
-
-	public void testBagObjectArray_Empty() {
-		Bag<String> b = CollectionTools.bag(Bag.Empty.<String>instance());
-		assertEquals(0, b.size());
-	}
-
-
-	// ********** collection **********
-
-	public void testCollectionEnumeration() {
-		Collection<String> c = CollectionTools.collection(this.buildStringVector1().elements());
-		assertEquals(3, c.size());
-		assertTrue(c.containsAll(this.buildStringVector1()));
-	}
-
-	public void testCollectionEnumeration_ObjectString() {
-		Collection<Object> c = CollectionTools.<Object>collection(this.buildStringVector1().elements());
-		assertEquals(3, c.size());
-		assertTrue(c.containsAll(this.buildStringVector1()));
-	}
-
-	public void testCollectionEnumerationInt() {
-		Collection<String> c = CollectionTools.collection(this.buildStringVector1().elements(), 3);
-		assertEquals(3, c.size());
-		assertTrue(c.containsAll(this.buildStringVector1()));
-	}
-
-	public void testCollectionIterable() {
-		Iterable<String> iterable = this.buildStringList1();
-		Collection<String> c = CollectionTools.collection(iterable);
-		assertEquals(3, c.size());
-		assertTrue(c.containsAll(this.buildStringList1()));
-	}
-
-	public void testCollectionIterableInt() {
-		Iterable<String> iterable = this.buildStringList1();
-		Collection<String> c = CollectionTools.collection(iterable, 3);
-		assertEquals(3, c.size());
-		assertTrue(c.containsAll(this.buildStringList1()));
-	}
-
-	public void testCollectionIterator() {
-		Collection<String> c = CollectionTools.collection(this.buildStringList1().iterator());
-		assertEquals(3, c.size());
-		assertTrue(c.containsAll(this.buildStringList1()));
-	}
-
-	public void testCollectionIterator_ObjectString() {
-		Collection<Object> c = CollectionTools.<Object>collection(this.buildStringList1().iterator());
-		assertEquals(3, c.size());
-		assertTrue(c.containsAll(this.buildStringList1()));
-	}
-
-	public void testCollectionIteratorInt() {
-		Collection<String> c = CollectionTools.collection(this.buildStringList1().iterator(), 3);
-		assertEquals(3, c.size());
-		assertTrue(c.containsAll(this.buildStringList1()));
-	}
-
-	public void testCollectionObjectArray() {
-		Collection<String> c = CollectionTools.collection(this.buildStringArray1());
-		assertEquals(3, c.size());
-		assertTrue(CollectionTools.containsAll(c, (Object[]) this.buildStringArray1()));
-	}
-
-
-	// ********** contains **********
-
-	public void testContainsEnumerationObject_String() {
-		Vector<String> v = this.buildStringVector1();
-		assertTrue(CollectionTools.contains(v.elements(), "one"));
-		assertFalse(CollectionTools.contains(v.elements(), null));
-		v.add(null);
-		assertTrue(CollectionTools.contains(v.elements(), null));
-	}
-
-	public void testContainsEnumerationObject_Object() {
-		Vector<Object> c = new Vector<Object>();
-		c.add("zero");
-		c.add("one");
-		c.add("two");
-		c.add("three");
-		String one = "one";
-		assertTrue(CollectionTools.contains(c.elements(), one));
-		assertFalse(CollectionTools.contains(c.elements(), null));
-		c.add(null);
-		assertTrue(CollectionTools.contains(c.elements(), null));
-	}
-
-	public void testContainsIterableObject() {
-		Collection<String> c = this.buildStringList1();
-		Iterable<String> iterable = c;
-		assertTrue(CollectionTools.contains(iterable, "one"));
-		assertFalse(CollectionTools.contains(iterable, null));
-		c.add(null);
-		assertTrue(CollectionTools.contains(iterable, null));
-	}
-
-	public void testContainsIteratorObject_String() {
-		Collection<String> c = this.buildStringList1();
-		assertTrue(CollectionTools.contains(c.iterator(), "one"));
-		assertFalse(CollectionTools.contains(c.iterator(), null));
-		c.add(null);
-		assertTrue(CollectionTools.contains(c.iterator(), null));
-	}
-
-	public void testContainsIteratorObject_Object() {
-		Collection<Object> c = new HashBag<Object>();
-		c.add("zero");
-		c.add("one");
-		c.add("two");
-		c.add("three");
-		String one = "one";
-		assertTrue(CollectionTools.contains(c.iterator(), one));
-		assertFalse(CollectionTools.contains(c.iterator(), null));
-		c.add(null);
-		assertTrue(CollectionTools.contains(c.iterator(), null));
-	}
-
-
-	// ********** contains all **********
-
-	public void testContainsAllCollectionIterable() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertTrue(CollectionTools.containsAll(this.buildStringList1(), iterable));
-	}
-
-	public void testContainsAllCollectionIterator_String() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1(), this.buildStringList1().iterator()));
-	}
-
-	public void testContainsAllCollectionIterator_Object() {
-		Collection<Object> c1 = new ArrayList<Object>();
-		c1.add("zero");
-		c1.add("one");
-		c1.add("two");
-		Collection<String> c2 = new ArrayList<String>();
-		c2.add("two");
-		c2.add("zero");
-		c2.add("one");
-		assertTrue(CollectionTools.containsAll(c1, c2.iterator()));
-	}
-
-	public void testContainsAllCollectionObjectArray_StringObject() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1(), this.buildObjectArray1()));
-	}
-
-	public void testContainsAllCollectionObjectArray() {
-		Object[] a = new Object[] { "zero", "one", "two" };
-		assertTrue(CollectionTools.containsAll(this.buildStringList1(), a));
-	}
-
-	public void testContainsAllIterableCollection() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertTrue(CollectionTools.containsAll(iterable, this.buildStringList1()));
-	}
-
-	public void testContainsAllIterableIntCollection() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertTrue(CollectionTools.containsAll(iterable, 3, this.buildStringList1()));
-	}
-
-	public void testContainsAllIterableIterable() {
-		Iterable<String> iterable1 = this.buildStringList1();
-		Iterable<String> iterable2 = this.buildStringList1();
-		assertTrue(CollectionTools.containsAll(iterable1, iterable2));
-	}
-
-	public void testContainsAllIterableIntIterable() {
-		Iterable<String> iterable1 = this.buildStringList1();
-		Iterable<String> iterable2 = this.buildStringList1();
-		assertTrue(CollectionTools.containsAll(iterable1, 3, iterable2));
-	}
-
-	public void testContainsAllIterableIterator() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertTrue(CollectionTools.containsAll(iterable, this.buildStringList1().iterator()));
-	}
-
-	public void testContainsAllIterableIntIterator() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertTrue(CollectionTools.containsAll(iterable, 3, this.buildStringList1().iterator()));
-	}
-
-	public void testContainsAllIterableObjectArray() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertTrue(CollectionTools.containsAll(iterable, this.buildObjectArray1()));
-		iterable = this.buildStringList2();
-		assertFalse(CollectionTools.containsAll(iterable, this.buildObjectArray1()));
-	}
-
-	public void testContainsAllIterableIntObjectArray() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertTrue(CollectionTools.containsAll(iterable, 3, this.buildObjectArray1()));
-		iterable = this.buildStringList2();
-		assertFalse(CollectionTools.containsAll(iterable, 3, this.buildObjectArray1()));
-	}
-
-	public void testContainsAllIteratorCollection_StringString() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildStringList1()));
-		assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildStringList2()));
-	}
-
-	public void testContainsAllIteratorCollection_ObjectString() {
-		Collection<Object> c1 = new ArrayList<Object>();
-		c1.add("zero");
-		c1.add("one");
-		c1.add("two");
-		Collection<String> c2 = new ArrayList<String>();
-		c2.add("zero");
-		c2.add("one");
-		c2.add("two");
-		assertTrue(CollectionTools.containsAll(c1.iterator(), c2));
-	}
-
-	public void testContainsAllIteratorIntCollection() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), 5, this.buildStringList1()));
-		assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), 5, this.buildStringList2()));
-	}
-
-	public void testContainsAllIteratorIterable() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), iterable));
-		iterable = this.buildStringList2();
-		assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), iterable));
-	}
-
-	public void testContainsAllIteratorIntIterable() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), 3, iterable));
-		iterable = this.buildStringList2();
-		assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), 3, iterable));
-	}
-
-	public void testContainsAllIteratorIterator_StringString() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildStringList1().iterator()));
-		assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildStringList2().iterator()));
-	}
-
-	public void testContainsAllIteratorIterator_ObjectString() {
-		Collection<Object> c1 = new ArrayList<Object>();
-		c1.add("zero");
-		c1.add("one");
-		c1.add("two");
-		Collection<String> c2 = new ArrayList<String>();
-		c2.add("zero");
-		c2.add("one");
-		c2.add("two");
-		assertTrue(CollectionTools.containsAll(c1.iterator(), c2.iterator()));
-	}
-
-	public void testContainsAllIteratorIntIterator() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), 3, this.buildStringList1().iterator()));
-		assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), 3, this.buildStringList2().iterator()));
-	}
-
-	public void testContainsAllIteratorObjectArray() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildObjectArray1()));
-		assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildObjectArray2()));
-	}
-
-	public void testContainsAllIteratorIntObjectArray() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), 3, this.buildObjectArray1()));
-		assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), 3, this.buildObjectArray2()));
-	}
-
-
-	// ********** diff **********
-
-	public void testDiffEndListList() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("a");
-		list1.add("b");
-		list1.add("c");
-		List<String> list2 = new ArrayList<String>();
-		list2.add(new String("a"));
-		list2.add(new String("b"));
-		list2.add(new String("c"));
-		assertEquals(-1, CollectionTools.diffEnd(list1, list2));
-	}
-
-	public void testDiffRangeListList() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("a");
-		list1.add("b");
-		list1.add("c");
-		List<String> list2 = new ArrayList<String>();
-		list2.add(new String("a"));
-		list2.add(new String("b"));
-		list2.add(new String("c"));
-		assertEquals(new Range(3, -1), CollectionTools.diffRange(list1, list2));
-	}
-
-	public void testDiffStartListList() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("a");
-		list1.add("b");
-		list1.add("c");
-		List<String> list2 = new ArrayList<String>();
-		list2.add(new String("a"));
-		list2.add(new String("b"));
-		list2.add(new String("c"));
-		assertEquals(3, CollectionTools.diffStart(list1, list2));
-	}
-
-
-	// ********** identity diff **********
-
-	public void testIdentityDiffEndListList() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("a");
-		list1.add("b");
-		list1.add("c");
-		List<String> list2 = new ArrayList<String>();
-		list2.add("a");
-		list2.add("b");
-		list2.add("c");
-		assertEquals(-1, CollectionTools.identityDiffEnd(list1, list2));
-	}
-
-	public void testIdentityDiffRangeListList() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("a");
-		list1.add("b");
-		list1.add("c");
-		List<String> list2 = new ArrayList<String>();
-		list2.add("a");
-		list2.add("b");
-		list2.add("c");
-		assertEquals(new Range(3, -1), CollectionTools.identityDiffRange(list1, list2));
-	}
-
-	public void testIdentityDiffStartListList() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("a");
-		list1.add("b");
-		list1.add("c");
-		List<String> list2 = new ArrayList<String>();
-		list2.add("a");
-		list2.add("b");
-		list2.add("c");
-		assertEquals(3, CollectionTools.identityDiffStart(list1, list2));
-	}
-
-
-	// ********** elements are equal **********
-
-	public void testElementsAreDifferentIterableIterable() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("1000");
-		list1.add("2000");
-		list1.add("3000");
-		list1.add("4000");
-
-		List<String> list2 = new ArrayList<String>();
-
-		assertTrue(CollectionTools.elementsAreDifferent(list1, list2));
-		assertFalse(CollectionTools.elementsAreEqual(list1, list2));
-	}
-
-	public void testElementsAreDifferentIteratorIterator() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("1000");
-		list1.add("2000");
-		list1.add("3000");
-		list1.add("4000");
-
-		List<String> list2 = new ArrayList<String>();
-
-		assertTrue(CollectionTools.elementsAreDifferent(list1.iterator(), list2.iterator()));
-		assertFalse(CollectionTools.elementsAreEqual(list1, list2));
-	}
-
-	public void testElementsAreEqualIterableIterable() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("1000");
-		list1.add("2000");
-		list1.add("3000");
-		list1.add("4000");
-
-		List<String> list2 = new ArrayList<String>();
-		for (int i = 0; i < list1.size(); i++) {
-			list2.add(String.valueOf((i + 1) * 1000));
-		}
-		assertFalse(CollectionTools.elementsAreIdentical(list1, list2));
-		assertFalse(CollectionTools.elementsAreDifferent(list1, list2));
-		assertTrue(CollectionTools.elementsAreEqual(list1, list2));
-	}
-
-	public void testElementsAreEqualIteratorIterator() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("1000");
-		list1.add("2000");
-		list1.add("3000");
-		list1.add("4000");
-
-		List<String> list2 = new ArrayList<String>();
-		for (int i = 0; i < list1.size(); i++) {
-			list2.add(String.valueOf((i + 1) * 1000));
-		}
-		assertFalse(CollectionTools.elementsAreIdentical(list1.iterator(), list2.iterator()));
-		assertFalse(CollectionTools.elementsAreDifferent(list1.iterator(), list2.iterator()));
-		assertTrue(CollectionTools.elementsAreEqual(list1.iterator(), list2.iterator()));
-	}
-
-
-	// ********** elements are identical **********
-
-	public void testElementsAreIdenticalIterableIterable() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("0");
-		list1.add("1");
-		list1.add("2");
-		list1.add("3");
-		Iterable<String> iterable1 = list1;
-
-		List<String> list2 = new ArrayList<String>();
-		for (String s : list1) {
-			list2.add(s);
-		}
-		Iterable<String> iterable2 = list2;
-		assertTrue(CollectionTools.elementsAreIdentical(iterable1, iterable2));
-		assertTrue(CollectionTools.elementsAreEqual(iterable1, iterable2));
-	}
-
-	public void testElementsAreIdenticalIteratorIterator() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("0");
-		list1.add("1");
-		list1.add("2");
-		list1.add("3");
-
-		List<String> list2 = new ArrayList<String>();
-		for (String s : list1) {
-			list2.add(s);
-		}
-		assertTrue(CollectionTools.elementsAreIdentical(list1.iterator(), list2.iterator()));
-		assertTrue(CollectionTools.elementsAreEqual(list1.iterator(), list2.iterator()));
-	}
-
-	public void testElementsAreIdenticalIteratorIterator_Not() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("0");
-		list1.add("1");
-		list1.add("2");
-		list1.add("3");
-
-		List<String> list2 = new ArrayList<String>();
-		for (String s : list1) {
-			list2.add(s);
-		}
-		list2.remove(0);
-		assertFalse(CollectionTools.elementsAreIdentical(list1.iterator(), list2.iterator()));
-		assertFalse(CollectionTools.elementsAreEqual(list1.iterator(), list2.iterator()));
-	}
-
-	public void testElementsAreIdenticalIteratorIterator_DifferentSizes() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("0");
-		list1.add("1");
-		list1.add("2");
-		list1.add("3");
-
-		List<String> list2 = new ArrayList<String>();
-		for (String s : list1) {
-			list2.add(s);
-		}
-		list2.remove(3);
-		assertFalse(CollectionTools.elementsAreIdentical(list1.iterator(), list2.iterator()));
-		assertFalse(CollectionTools.elementsAreEqual(list1.iterator(), list2.iterator()));
-	}
-
-
-	// ********** get **********
-
-	public void testGetIterableInt() {
-		List<String> list = this.buildStringList1();
-		Iterable<String> iterable = list;
-		String o = CollectionTools.get(iterable, 1);
-		assertEquals("one", o);
-		list.add(null);
-		o = CollectionTools.get(iterable, 3);
-		assertNull(o);
-	}
-
-	public void testGetIteratorInt1() {
-		List<String> list = this.buildStringList1();
-		String o = CollectionTools.get(list.iterator(), 1);
-		assertEquals("one", o);
-		list.add(null);
-		o = CollectionTools.get(list.iterator(), list.size() - 1);
-		assertNull(o);
-	}
-
-	public void testGetIteratorInt2() {
-		List<String> list = this.buildStringList1();
-		boolean exCaught = false;
-		try {
-			CollectionTools.get(list.iterator(), list.size());
-			fail();
-		} catch (IndexOutOfBoundsException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-
-	// ********** hash code **********
-
-	public void testHashCodeIterable1() {
-		Iterable<String> iterable = null;
-		assertEquals(0, CollectionTools.hashCode(iterable));
-	}
-
-	public void testHashCodeIterable2() {
-		List<String> list = this.buildStringList1();
-		Iterable<String> iterable = list;
-		int hashCode = CollectionTools.hashCode(iterable);
-		assertEquals(list.hashCode(), hashCode);
-
-		list.add(null);
-		hashCode = CollectionTools.hashCode(iterable);
-		assertEquals(list.hashCode(), hashCode);
-	}
-
-
-	// ********** index of **********
-
-	public void testIndexOfIterableObject_String() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertEquals(1, CollectionTools.indexOf(iterable, "one"));
-	}
-
-	public void testIndexOfIteratorObject_String() {
-		List<String> list = this.buildStringList1();
-		assertEquals(1, CollectionTools.indexOf(list.iterator(), "one"));
-	}
-
-	public void testIndexOfIteratorObject_String_Not() {
-		List<String> list = this.buildStringList1();
-		assertEquals(-1, CollectionTools.indexOf(list.iterator(), null));
-		assertEquals(-1, CollectionTools.indexOf(list.iterator(), "shazam"));
-	}
-
-	public void testIndexOfIteratorObject_Null() {
-		List<String> list = this.buildStringList1();
-		list.add(null);
-		assertEquals(list.size() - 1, CollectionTools.indexOf(list.iterator(), null));
-	}
-
-	public void testIndexOfIteratorObject_Object() {
-		List<Object> list = new ArrayList<Object>();
-		list.add("0");
-		list.add("1");
-		list.add("2");
-		list.add("3");
-
-		String one = "1";
-		assertEquals(1, CollectionTools.indexOf(list.iterator(), one));
-		list.add(null);
-		assertEquals(list.size() - 1, CollectionTools.indexOf(list.iterator(), null));
-	}
-
-
-	// ********** insertion index of **********
-
-	public void testInsertionIndexOfListComparable() {
-		List<String> list = Arrays.asList(new String[] { "A", "C", "D" });
-		assertEquals(1, CollectionTools.insertionIndexOf(list, "B"));
-
-		list = Arrays.asList(new String[] { "A", "B", "C", "D" });
-		assertEquals(2, CollectionTools.insertionIndexOf(list, "B"));
-
-		list = Arrays.asList(new String[] { "A", "B", "B", "B", "C", "D" });
-		assertEquals(4, CollectionTools.insertionIndexOf(list, "B"));
-
-		list = Arrays.asList(new String[] { "A", "B", "B", "B", "C", "D" });
-		assertEquals(6, CollectionTools.insertionIndexOf(list, "E"));
-
-		list = Arrays.asList(new String[] { "B", "B", "B", "C", "D" });
-		assertEquals(0, CollectionTools.insertionIndexOf(list, "A"));
-
-		list = Arrays.asList(new String[] { "A", "A", "B", "B", "C", "D" });
-		assertEquals(2, CollectionTools.insertionIndexOf(list, "A"));
-	}
-
-	public void testInsertionIndexOfListObjectComparator() {
-		Comparator<String> c = new ReverseComparator<String>();
-		List<String> list = Arrays.asList(new String[] { "D", "C", "A" });
-		assertEquals(2, CollectionTools.insertionIndexOf(list, "B", c));
-
-		list = Arrays.asList(new String[] { "D", "C", "B", "A" });
-		assertEquals(3, CollectionTools.insertionIndexOf(list, "B", c));
-
-		list = Arrays.asList(new String[] { "D", "C", "B", "B", "B", "A" });
-		assertEquals(5, CollectionTools.insertionIndexOf(list, "B", c));
-
-		list = Arrays.asList(new String[] { "D", "C", "B", "B", "B", "A" });
-		assertEquals(0, CollectionTools.insertionIndexOf(list, "E", c));
-
-		list = Arrays.asList(new String[] { "D", "C", "B", "B", "B" });
-		assertEquals(5, CollectionTools.insertionIndexOf(list, "A", c));
-
-		list = Arrays.asList(new String[] { "D", "C", "B", "B", "A", "A" });
-		assertEquals(6, CollectionTools.insertionIndexOf(list, "A", c));
-	}
-
-
-	// ********** is empty **********
-	
-	public void testIsEmptyIterable() {
-		assertFalse(CollectionTools.isEmpty(buildObjectList1()));
-		assertTrue(CollectionTools.isEmpty(EmptyIterable.instance()));
-	}
-	
-	public void testIsEmptyIterator() {
-		assertFalse(CollectionTools.isEmpty(buildObjectList1().iterator()));
-		assertTrue(CollectionTools.isEmpty(EmptyIterator.instance()));
-	}
-	
-	
-	// ********** iterable/iterator **********
-
-	public void testIterableObjectArray() {
-		String[] strings = this.buildStringArray1();
-		int i = 0;
-		for (String string : CollectionTools.iterable(strings)) {
-			assertEquals(strings[i++], string);
-		}
-	}
-
-	public void testIteratorObjectArray() {
-		String[] a = this.buildStringArray1();
-		int i = 0;
-		for (Iterator<String> stream = CollectionTools.iterator(a); stream.hasNext(); i++) {
-			assertEquals(a[i], stream.next());
-		}
-	}
-
-
-	// ********** last **********
-
-	public void testLastIterable1() {
-		List<String> list = this.buildStringList1();
-		Iterable<String> iterable = list;
-		assertEquals("two", CollectionTools.last(iterable));
-		list.add(null);
-		assertEquals(null, CollectionTools.last(iterable));
-	}
-
-	public void testLastIterable2() {
-		Iterable<String> iterable = new ArrayList<String>();
-		boolean exCaught = false;
-		try {
-			CollectionTools.last(iterable);
-			fail();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testLastIterator1() {
-		List<String> list = this.buildStringList1();
-		assertEquals("two", CollectionTools.last(list.iterator()));
-		list.add(null);
-		assertEquals(null, CollectionTools.last(list.iterator()));
-	}
-
-	public void testLastIterator2() {
-		List<String> list = new ArrayList<String>();
-		boolean exCaught = false;
-		try {
-			CollectionTools.last(list.iterator());
-			fail();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-
-	// ********** last index of **********
-
-	public void testLastIndexOfIterableObject() {
-		List<String> list = this.buildStringList1();
-		Iterable<String> iterable = list;
-		assertEquals(1, CollectionTools.lastIndexOf(iterable, "one"));
-		list.add(null);
-		assertEquals(list.size() - 1, CollectionTools.lastIndexOf(iterable, null));
-	}
-
-	public void testLastIndexOfIterableIntObject() {
-		List<String> list = this.buildStringList1();
-		Iterable<String> iterable = list;
-		assertEquals(1, CollectionTools.lastIndexOf(iterable, 23, "one"));
-		list.add(null);
-		assertEquals(list.size() - 1, CollectionTools.lastIndexOf(iterable, 42, null));
-	}
-
-	public void testLastIndexOfIteratorObject() {
-		List<String> list = this.buildStringList1();
-		assertEquals(1, CollectionTools.lastIndexOf(list.iterator(), "one"));
-		list.add(null);
-		assertEquals(list.size() - 1, CollectionTools.lastIndexOf(list.iterator(), null));
-	}
-
-	public void testLastIndexOfIteratorObject_Empty() {
-		assertEquals(-1, CollectionTools.lastIndexOf(EmptyIterator.instance(), "foo"));
-	}
-
-	public void testLastIndexOfIteratorIntObject() {
-		List<String> list = this.buildStringList1();
-		assertEquals(1, CollectionTools.lastIndexOf(list.iterator(), 3, "one"));
-		list.add(null);
-		assertEquals(list.size() - 1, CollectionTools.lastIndexOf(list.iterator(), 4, null));
-	}
-
-	public void testLastIndexOfIteratorIntObject_Empty() {
-		assertEquals(-1, CollectionTools.lastIndexOf(EmptyIterator.instance(), 42, "foo"));
-	}
-
-
-	// ********** list **********
-
-	public void testListIterable() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertEquals(this.buildStringList1(), CollectionTools.list(iterable));
-	}
-
-	public void testListIterableInt() {
-		Iterable<String> iterable = this.buildStringList1();
-		assertEquals(this.buildStringList1(), CollectionTools.list(iterable, 3));
-	}
-
-	public void testListIterator_String() {
-		List<String> list = CollectionTools.list(this.buildStringList1().iterator());
-		assertEquals(this.buildStringList1(), list);
-	}
-
-	public void testListIterator_StringObject() {
-		List<String> list1 = new ArrayList<String>();
-		list1.add("0");
-		list1.add("1");
-		list1.add("2");
-		list1.add("3");
-
-		List<Object> list2 = CollectionTools.<Object>list(list1.iterator());
-		assertEquals(list1, list2);
-	}
-
-	public void testListIterator_Empty() {
-		assertEquals(0, CollectionTools.list(EmptyIterator.instance()).size());
-	}
-
-	public void testListIteratorInt() {
-		List<String> list = CollectionTools.list(this.buildStringList1().iterator(), 3);
-		assertEquals(this.buildStringList1(), list);
-	}
-
-	public void testListIteratorInt_Empty() {
-		assertEquals(0, CollectionTools.list(EmptyIterator.instance(), 5).size());
-	}
-
-	public void testListObjectArray() {
-		List<String> list = CollectionTools.list(this.buildStringArray1());
-		assertEquals(this.buildStringList1(), list);
-	}
-
-	public void testListIteratorObjectArray() {
-		String[] a = this.buildStringArray1();
-		int i = 0;
-		for (ListIterator<String> stream = CollectionTools.listIterator(a); stream.hasNext(); i++) {
-			assertEquals(a[i], stream.next());
-		}
-	}
-
-	public void testListIteratorObjectArrayInt() {
-		String[] a = this.buildStringArray1();
-		int i = 1;
-		for (ListIterator<String> stream = CollectionTools.listIterator(a, 1); stream.hasNext(); i++) {
-			assertEquals(a[i], stream.next());
-		}
-	}
-
-
-	// ********** move **********
-
-	public void testMoveListIntIntRandomAccess() {
-		List<String> list = new ArrayList<String>();
-		CollectionTools.addAll(list, new String[] { "0", "1", "2", "3", "4", "5" });
-
-		List<String> result = CollectionTools.move(list, 4, 2);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "0", "1", "3", "4", "2", "5" }, result.toArray()));
-
-		result = CollectionTools.move(list, 0, 5);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "1", "3", "4", "2" }, result.toArray()));
-
-		result = CollectionTools.move(list, 2, 4);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result.toArray()));
-
-		result = CollectionTools.move(list, 2, 2);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result.toArray()));
-	}
-
-	public void testMoveListIntIntSequentialAccess() {
-		List<String> list = new LinkedList<String>();
-		CollectionTools.addAll(list, new String[] { "0", "1", "2", "3", "4", "5" });
-
-		List<String> result = CollectionTools.move(list, 4, 2);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "0", "1", "3", "4", "2", "5" }, result.toArray()));
-
-		result = CollectionTools.move(list, 0, 5);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "1", "3", "4", "2" }, result.toArray()));
-
-		result = CollectionTools.move(list, 2, 4);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result.toArray()));
-
-		result = CollectionTools.move(list, 2, 2);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result.toArray()));
-	}
-
-	public void testMoveListIntIntIntRandomAccess() {
-		List<String> list = new ArrayList<String>(Arrays.asList(new String[] { "0", "1", "2", "3", "4", "5" }));
-
-		List<String> result = CollectionTools.move(list, 4, 2, 1);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "0", "1", "3", "4", "2", "5" }, result.toArray()));
-
-		result = CollectionTools.move(list, 0, 5, 1);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "1", "3", "4", "2" }, result.toArray()));
-
-		result = CollectionTools.move(list, 2, 4, 1);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result.toArray()));
-
-		result = CollectionTools.move(list, 2, 4, 2);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray()));
-
-		result = CollectionTools.move(list, 0, 1, 4);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "0", "3", "2", "4", "5", "1" }, result.toArray()));
-
-		result = CollectionTools.move(list, 1, 0, 4);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray()));
-
-		result = CollectionTools.move(list, 1, 1, 4);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray()));
-
-		result = CollectionTools.move(list, 1, 0, 0);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray()));
-	}
-
-	public void testMoveListIntIntIntSequentialAccess() {
-		List<String> list = new LinkedList<String>(Arrays.asList(new String[] { "0", "1", "2", "3", "4", "5" }));
-
-		List<String> result = CollectionTools.move(list, 4, 2, 1);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "0", "1", "3", "4", "2", "5" }, result.toArray()));
-
-		result = CollectionTools.move(list, 0, 5, 1);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "1", "3", "4", "2" }, result.toArray()));
-
-		result = CollectionTools.move(list, 2, 4, 1);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result.toArray()));
-
-		result = CollectionTools.move(list, 2, 4, 2);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray()));
-
-		result = CollectionTools.move(list, 0, 1, 4);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "0", "3", "2", "4", "5", "1" }, result.toArray()));
-
-		result = CollectionTools.move(list, 1, 0, 4);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray()));
-
-		result = CollectionTools.move(list, 1, 1, 4);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray()));
-
-		result = CollectionTools.move(list, 1, 0, 0);
-		assertSame(list, result);  // the array is modified in place and returned
-		assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray()));
-	}
-
-
-	// ********** remove all **********
-
-	public void testRemoveAllCollectionIterable() {
-		Collection<String> c = this.buildStringList1();
-		Iterable<String> iterable = this.buildStringList1();
-		assertTrue(CollectionTools.removeAll(c, iterable));
-		assertEquals(0, c.size());
-		assertFalse(c.contains("one"));
-		assertFalse(c.contains("two"));
-		assertFalse(c.contains("three"));
-
-		c = this.buildStringList1();
-		iterable = this.buildStringList2();
-		assertFalse(CollectionTools.removeAll(c, iterable));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-	}
-
-	public void testRemoveAllCollectionIterableInt() {
-		Collection<String> c = this.buildStringList1();
-		Iterable<String> iterable = this.buildStringList1();
-		assertTrue(CollectionTools.removeAll(c, iterable, 4));
-		assertEquals(0, c.size());
-		assertFalse(c.contains("one"));
-		assertFalse(c.contains("two"));
-		assertFalse(c.contains("three"));
-
-		c = this.buildStringList1();
-		iterable = this.buildStringList2();
-		assertFalse(CollectionTools.removeAll(c, iterable, 55));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-	}
-
-	public void testRemoveAllCollectionIterator_Empty() {
-		Collection<String> c = this.buildStringList1();
-		assertTrue(CollectionTools.removeAll(c, this.buildStringList1().iterator()));
-		assertEquals(0, c.size());
-		assertFalse(c.contains("one"));
-		assertFalse(c.contains("two"));
-		assertFalse(c.contains("three"));
-
-		c = this.buildStringList1();
-		assertFalse(CollectionTools.removeAll(c, this.buildStringList2().iterator()));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-
-		c = this.buildStringList1();
-		assertFalse(CollectionTools.removeAll(c, EmptyIterator.instance()));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-	}
-
-	public void testRemoveAllCollectionIteratorInt_Empty() {
-		Collection<String> c = this.buildStringList1();
-		assertTrue(CollectionTools.removeAll(c, this.buildStringList1().iterator(), 5));
-		assertEquals(0, c.size());
-		assertFalse(c.contains("one"));
-		assertFalse(c.contains("two"));
-		assertFalse(c.contains("three"));
-
-		c = this.buildStringList1();
-		assertFalse(CollectionTools.removeAll(c, this.buildStringList2().iterator(), 5));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-
-		c = this.buildStringList1();
-		assertFalse(CollectionTools.removeAll(c, EmptyIterator.instance(), 0));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-	}
-
-	public void testRemoveAllCollectionIterator_Duplicates() {
-		Collection<String> c = new ArrayList<String>();
-		c.add("a");
-		c.add("a");
-		c.add("b");
-		c.add("c");
-		c.add("d");
-		c.add("d");
-		String[] a = new String[] { "a", "d" };
-		Iterator<String> iterator = new ArrayIterator<String>(a);
-		assertTrue(CollectionTools.removeAll(c, iterator));
-		assertEquals(2, c.size());
-		assertFalse(c.contains("a"));
-		assertTrue(c.contains("b"));
-		assertTrue(c.contains("c"));
-		assertFalse(c.contains("d"));
-
-		iterator = new ArrayIterator<String>(a);
-		assertFalse(CollectionTools.removeAll(c, iterator));
-	}
-
-	public void testRemoveAllCollectionIterator_ObjectString() {
-		Collection<Object> c = new ArrayList<Object>();
-		c.add("a");
-		c.add("a");
-		c.add("b");
-		c.add("c");
-		c.add("d");
-		c.add("d");
-		String[] a = new String[] { "a", "d" };
-		Iterator<String> iterator = new ArrayIterator<String>(a);
-		assertTrue(CollectionTools.removeAll(c, iterator));
-		assertEquals(2, c.size());
-		assertFalse(c.contains("a"));
-		assertTrue(c.contains("b"));
-		assertTrue(c.contains("c"));
-		assertFalse(c.contains("d"));
-
-		iterator = new ArrayIterator<String>(a);
-		assertFalse(CollectionTools.removeAll(c, iterator));
-	}
-
-	public void testRemoveAllCollectionObjectArray_Empty() {
-		Collection<String> c = this.buildStringList1();
-		assertTrue(CollectionTools.removeAll(c, this.buildObjectArray1()));
-		assertEquals(0, c.size());
-		assertFalse(c.contains("one"));
-		assertFalse(c.contains("two"));
-		assertFalse(c.contains("three"));
-
-		c = this.buildStringList1();
-		assertFalse(CollectionTools.removeAll(c, this.buildObjectArray2()));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-
-		c = this.buildStringList1();
-		assertFalse(CollectionTools.removeAll(c, new Object[0]));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-	}
-
-	public void testRemoveAllCollectionObjectArray_Duplicates() {
-		Collection<String> c = new ArrayList<String>();
-		c.add("a");
-		c.add("a");
-		c.add("b");
-		c.add("c");
-		c.add("d");
-		c.add("d");
-		String[] a = new String[] { "a", "d" };
-		assertTrue(CollectionTools.removeAll(c, (Object[]) a));
-		assertEquals(2, c.size());
-		assertFalse(c.contains("a"));
-		assertTrue(c.contains("b"));
-		assertTrue(c.contains("c"));
-		assertFalse(c.contains("d"));
-
-		assertFalse(CollectionTools.removeAll(c,(Object[])  a));
-	}
-
-	public void testRemoveAllCollectionObjectArray_MoreDuplicates() {
-		Collection<String> c = new ArrayList<String>();
-		c.add("a");
-		c.add("b");
-		c.add("c");
-		c.add("d");
-		c.add("a");
-		c.add("d");
-		c.add("d");
-		c.add("a");
-		c.add("c");
-		String[] a = new String[] { "a", "d" };
-		assertTrue(CollectionTools.removeAll(c, (Object[]) a));
-		assertEquals(3, c.size());
-		assertFalse(c.contains("a"));
-		assertTrue(c.contains("b"));
-		assertTrue(c.contains("c"));
-		assertFalse(c.contains("d"));
-
-		assertFalse(CollectionTools.removeAll(c, (Object[]) a));
-	}
-
-
-	// ********** remove all occurrences **********
-
-	public void testRemoveAllOccurrencesCollectionObject() {
-		Collection<String> c = this.buildStringList1();
-		assertEquals(3, c.size());
-		assertFalse(CollectionTools.removeAllOccurrences(c, "three"));
-		assertTrue(CollectionTools.removeAllOccurrences(c, "two"));
-		assertFalse(CollectionTools.removeAllOccurrences(c, "two"));
-		assertEquals(2, c.size());
-
-		c.add("five");
-		c.add("five");
-		c.add("five");
-		assertEquals(5, c.size());
-		assertTrue(CollectionTools.removeAllOccurrences(c, "five"));
-		assertFalse(CollectionTools.removeAllOccurrences(c, "five"));
-		assertEquals(2, c.size());
-
-		c.add(null);
-		c.add(null);
-		c.add(null);
-		assertEquals(5, c.size());
-		assertTrue(CollectionTools.removeAllOccurrences(c, null));
-		assertFalse(CollectionTools.removeAllOccurrences(c, null));
-		assertEquals(2, c.size());
-	}
-
-
-	// ********** remove elements at index **********
-
-	public void testRemoveElementsAtIndexListIntInt() {
-		List<String> list = new ArrayList<String>(Arrays.asList(new String[] { "A", "B", "A", "C", "A", "D" }));
-		List<String> removed = CollectionTools.removeElementsAtIndex(list, 3, 2);
-		assertTrue(Arrays.equals(new String[] { "A", "B", "A", "D" }, list.toArray()));
-		assertTrue(Arrays.equals(new String[] { "C", "A" }, removed.toArray()));
-
-		list = new ArrayList<String>(Arrays.asList(new String[] { "A", "B", "C", "D", "E", "F" }));
-		removed = CollectionTools.removeElementsAtIndex(list, 3, 3);
-		assertTrue(Arrays.equals(new String[] { "A", "B", "C" }, list.toArray()));
-		assertTrue(Arrays.equals(new String[] { "D", "E", "F" }, removed.toArray()));
-
-		list = new ArrayList<String>(Arrays.asList(new String[] { "A", "B", "C", "D", "E", "F" }));
-		removed = CollectionTools.removeElementsAtIndex(list, 0, 3);
-		assertTrue(Arrays.equals(new String[] { "D", "E", "F" }, list.toArray()));
-		assertTrue(Arrays.equals(new String[] { "A", "B", "C" }, removed.toArray()));
-	}
-
-
-	// ********** remove duplicate elements **********
-
-	public void testRemoveDuplicateElementsList1() {
-		List<String> list = this.buildStringVector1();
-		list.add("zero");
-		list.add("zero");
-		list.add("two");
-		list.add("zero");
-		assertTrue(CollectionTools.removeDuplicateElements(list));
-		int i = 0;
-		assertEquals("zero", list.get(i++));
-		assertEquals("one", list.get(i++));
-		assertEquals("two", list.get(i++));
-		assertEquals(i, list.size());
-	}
-
-	public void testRemoveDuplicateElementsList2() {
-		List<String> list = this.buildStringVector1();
-		assertFalse(CollectionTools.removeDuplicateElements(list));
-		int i = 0;
-		assertEquals("zero", list.get(i++));
-		assertEquals("one", list.get(i++));
-		assertEquals("two", list.get(i++));
-		assertEquals(i, list.size());
-	}
-
-	public void testRemoveDuplicateElementsList_Empty() {
-		List<String> list = new ArrayList<String>();
-		assertFalse(CollectionTools.removeDuplicateElements(list));
-		assertEquals(0, list.size());
-	}
-
-	public void testRemoveDuplicateElementsList_SingleElement() {
-		List<String> list = new ArrayList<String>();
-		list.add("zero");
-		assertFalse(CollectionTools.removeDuplicateElements(list));
-		assertEquals(1, list.size());
-	}
-
-
-	// ********** retain all **********
-
-	public void testRetainAllCollectionIterable() {
-		Collection<String> c = this.buildStringList1();
-		Iterable<String> iterable = this.buildStringList1();
-		assertFalse(CollectionTools.retainAll(c, iterable));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-
-		iterable = this.buildStringList2();
-		assertTrue(CollectionTools.retainAll(c, iterable));
-		assertEquals(0, c.size());
-		assertFalse(c.contains("one"));
-		assertFalse(c.contains("two"));
-		assertFalse(c.contains("three"));
-	}
-
-	public void testRetainAllCollectionIterableInt() {
-		Collection<String> c = this.buildStringList1();
-		Iterable<String> iterable = this.buildStringList1();
-		assertFalse(CollectionTools.retainAll(c, iterable));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-
-		iterable = this.buildStringList2();
-		assertTrue(CollectionTools.retainAll(c, iterable, 7));
-		assertEquals(0, c.size());
-		assertFalse(c.contains("one"));
-		assertFalse(c.contains("two"));
-		assertFalse(c.contains("three"));
-	}
-
-	public void testRetainAllCollectionIterator() {
-		Collection<String> c = this.buildStringList1();
-		assertFalse(CollectionTools.retainAll(c, this.buildStringList1().iterator()));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-
-		assertTrue(CollectionTools.retainAll(c, this.buildStringList2().iterator()));
-		assertEquals(0, c.size());
-		assertFalse(c.contains("one"));
-		assertFalse(c.contains("two"));
-		assertFalse(c.contains("three"));
-	}
-
-	public void testRetainAllCollectionIterator_ObjectString() {
-		Collection<Object> c1 = new ArrayList<Object>();
-		c1.add("zero");
-		c1.add("one");
-		c1.add("two");
-		
-		Collection<String> c2 = new ArrayList<String>();
-		c2.add("zero");
-		c2.add("one");
-		c2.add("two");
-		
-		assertFalse(CollectionTools.retainAll(c1, c2.iterator()));
-		assertEquals(c2.size(), c1.size());
-		assertEquals(c2, c1);
-
-		Collection<String> c3 = new ArrayList<String>();
-		c3.add("three");
-		c3.add("four");
-		c3.add("five");
-	}
-
-	public void testRetainAllCollectionIterator_EmptyIterator() {
-		Collection<String> c = this.buildStringList1();
-		assertTrue(CollectionTools.retainAll(c, EmptyIterator.instance()));
-		assertEquals(0, c.size());
-	}
-
-	public void testRetainAllCollectionIterator_EmptyCollection() {
-		Collection<String> c = new ArrayList<String>();
-		assertFalse(CollectionTools.retainAll(c, this.buildStringList1().iterator()));
-		assertEquals(0, c.size());
-	}
-
-	public void testRetainAllCollectionIterator_EmptyCollectionEmptyIterator() {
-		Collection<String> c = new ArrayList<String>();
-		assertFalse(CollectionTools.retainAll(c, EmptyIterator.instance()));
-		assertEquals(0, c.size());
-	}
-
-	public void testRetainAllCollectionIteratorInt() {
-		Collection<String> c = this.buildStringList1();
-		assertFalse(CollectionTools.retainAll(c, this.buildStringList1().iterator(), 8));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-
-		assertTrue(CollectionTools.retainAll(c, this.buildStringList2().iterator(), 9));
-		assertEquals(0, c.size());
-		assertFalse(c.contains("one"));
-		assertFalse(c.contains("two"));
-		assertFalse(c.contains("three"));
-	}
-
-	public void testRetainAllCollectionIteratorInt_EmptyIterator() {
-		Collection<String> c = this.buildStringList1();
-		assertTrue(CollectionTools.retainAll(c, EmptyIterator.instance(), 0));
-		assertEquals(0, c.size());
-	}
-
-	public void testRetainAllCollectionIteratorInt_EmptyCollection() {
-		Collection<String> c = new ArrayList<String>();
-		assertFalse(CollectionTools.retainAll(c, this.buildStringList1().iterator(), 3));
-		assertEquals(0, c.size());
-	}
-
-	public void testRetainAllCollectionIteratorInt_EmptyCollectionEmptyIterator() {
-		Collection<String> c = new ArrayList<String>();
-		assertFalse(CollectionTools.retainAll(c, EmptyIterator.instance(), 0));
-		assertEquals(0, c.size());
-	}
-
-	public void testRetainAllCollectionObjectArray() {
-		Collection<String> c = this.buildStringList1();
-		assertFalse(CollectionTools.retainAll(c, this.buildObjectArray1()));
-		assertEquals(this.buildStringList1().size(), c.size());
-		assertEquals(this.buildStringList1(), c);
-
-		assertTrue(CollectionTools.retainAll(c, this.buildObjectArray2()));
-		assertEquals(0, c.size());
-		assertFalse(c.contains("one"));
-		assertFalse(c.contains("two"));
-		assertFalse(c.contains("three"));
-	}
-
-	public void testRetainAllCollectionObjectArray_EmptyObjectArray() {
-		Collection<String> c = this.buildStringList1();
-		assertTrue(CollectionTools.retainAll(c, new Object[0]));
-		assertEquals(0, c.size());
-	}
-
-	public void testRetainAllCollectionObjectArray_EmptyCollection() {
-		Collection<String> c = new ArrayList<String>();
-		assertFalse(CollectionTools.retainAll(c, (Object[]) new String[] { "foo" }));
-		assertEquals(0, c.size());
-	}
-
-	public void testRetainAllCollectionObjectArray_EmptyCollectionEmptyObjectArray() {
-		Collection<String> c = new ArrayList<String>();
-		assertFalse(CollectionTools.retainAll(c, (Object[]) new String[0]));
-		assertEquals(0, c.size());
-	}
-
-
-	// ********** reverse list **********
-
-	public void testReverseListIterable() {
-		Iterable<String> iterable = this.buildStringList1();
-		List<String> actual = CollectionTools.reverseList(iterable);
-		List<String> expected = this.buildStringList1();
-		Collections.reverse(expected);
-		assertEquals(expected, actual);
-	}
-
-	public void testReverseListIterableInt() {
-		Iterable<String> iterable = this.buildStringList1();
-		List<String> actual = CollectionTools.reverseList(iterable, 10);
-		List<String> expected = this.buildStringList1();
-		Collections.reverse(expected);
-		assertEquals(expected, actual);
-	}
-
-	public void testReverseListIterator_String() {
-		List<String> actual = CollectionTools.reverseList(this.buildStringList1().iterator());
-		List<String> expected = this.buildStringList1();
-		Collections.reverse(expected);
-		assertEquals(expected, actual);
-	}
-
-	public void testReverseListIterator_Object() {
-		List<Object> actual = CollectionTools.<Object>reverseList(this.buildStringList1().iterator());
-		List<Object> expected = this.buildObjectList1();
-		Collections.reverse(expected);
-		assertEquals(expected, actual);
-	}
-
-	public void testReverseListIteratorInt() {
-		List<String> actual = CollectionTools.reverseList(this.buildStringList1().iterator(), 33);
-		List<String> expected = this.buildStringList1();
-		Collections.reverse(expected);
-		assertEquals(expected, actual);
-	}
-
-
-	// ********** rotate **********
-
-	public void testRotateList() {
-		List<String> actual = CollectionTools.rotate(this.buildStringList1());
-		List<String> expected = this.buildStringList1();
-		Collections.rotate(expected, 1);
-		assertEquals(expected, actual);
-	}
-
-
-	// ********** set **********
-
-	public void testSetIterable() {
-		Iterable<String> iterable = this.buildStringSet1();
-		assertEquals(this.buildStringSet1(), CollectionTools.set(iterable));
-	}
-
-	public void testSetIterableInt() {
-		Iterable<String> iterable = this.buildStringSet1();
-		assertEquals(this.buildStringSet1(), CollectionTools.set(iterable, 22));
-	}
-
-	public void testSetIterator_String() {
-		assertEquals(this.buildStringSet1(), CollectionTools.set(this.buildStringSet1().iterator()));
-	}
-
-	public void testSetIterator_Object() {
-		List<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("1");
-		list.add("2");
-		list.add("3");
-		list.add("0");
-		list.add("1");
-		list.add("2");
-		list.add("3");
-		Set<String> set = new HashSet<String>();
-		set.addAll(list);
-
-		assertEquals(set, CollectionTools.<Object>set(list.iterator()));
-	}
-
-	public void testSetIteratorInt() {
-		assertEquals(this.buildStringSet1(), CollectionTools.set(this.buildStringSet1().iterator(), 3));
-	}
-
-	public void testSetObjectArray() {
-		assertEquals(this.buildStringSet1(), CollectionTools.set(this.buildStringSet1().toArray()));
-	}
-
-
-	// ********** singleton iterator **********
-
-	public void testSingletonIterator_String() {
-		Iterator<String> stream = CollectionTools.singletonIterator("foo");
-		assertTrue(stream.hasNext());
-		assertEquals("foo", stream.next());
-	}
-
-	public void testSingletonIterator_Object() {
-		Iterator<Object> stream = CollectionTools.<Object>singletonIterator("foo");
-		assertTrue(stream.hasNext());
-		assertEquals("foo", stream.next());
-	}
-
-	public void testSingletonIterator_Cast() {
-		Iterator<Object> stream = CollectionTools.singletonIterator((Object) "foo");
-		assertTrue(stream.hasNext());
-		assertEquals("foo", stream.next());
-	}
-
-	public void testSingletonListIterator_String() {
-		ListIterator<String> stream = CollectionTools.singletonListIterator("foo");
-		assertTrue(stream.hasNext());
-		assertEquals("foo", stream.next());
-		assertFalse(stream.hasNext());
-		assertTrue(stream.hasPrevious());
-		assertEquals("foo", stream.previous());
-	}
-
-
-	// ********** size **********
-
-	public void testSizeIterable() {
-		Iterable<Object> iterable = this.buildObjectList1();
-		assertEquals(3, CollectionTools.size(iterable));
-	}
-
-	public void testSizeIterator() {
-		assertEquals(3, CollectionTools.size(this.buildObjectList1().iterator()));
-	}
-	
-	
-	// ********** sort **********
-
-	public void testSortIterable() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss = new TreeSet<String>();
-		ss.addAll(list);
-
-		Iterable<String> iterable1 = list;
-		Iterable<String> iterable2 = CollectionTools.<String>sort(iterable1);
-		assertTrue(CollectionTools.elementsAreEqual(ss, iterable2));
-	}
-
-	public void testSortIterableInt() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss = new TreeSet<String>();
-		ss.addAll(list);
-
-		Iterable<String> iterable1 = list;
-		Iterable<String> iterable2 = CollectionTools.<String>sort(iterable1, 77);
-		assertTrue(CollectionTools.elementsAreEqual(ss, iterable2));
-	}
-
-	public void testSortIterableComparator() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss = new TreeSet<String>(new ReverseComparator<String>());
-		ss.addAll(list);
-
-		Iterable<String> iterable1 = list;
-		Iterable<String> iterable2 = CollectionTools.<String>sort(iterable1, new ReverseComparator<String>());
-		assertTrue(CollectionTools.elementsAreEqual(ss, iterable2));
-	}
-
-	public void testSortIterableComparatorInt() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss = new TreeSet<String>(new ReverseComparator<String>());
-		ss.addAll(list);
-
-		Iterable<String> iterable1 = list;
-		Iterable<String> iterable2 = CollectionTools.<String>sort(iterable1, new ReverseComparator<String>(), 77);
-		assertTrue(CollectionTools.elementsAreEqual(ss, iterable2));
-	}
-
-	public void testSortIterator() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss = new TreeSet<String>();
-		ss.addAll(list);
-
-		Iterator<String> iterator1 = list.iterator();
-		Iterator<String> iterator2 = CollectionTools.<String>sort(iterator1);
-		assertTrue(CollectionTools.elementsAreEqual(ss.iterator(), iterator2));
-	}
-
-	public void testSortIteratorInt() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss = new TreeSet<String>();
-		ss.addAll(list);
-
-		Iterator<String> iterator1 = list.iterator();
-		Iterator<String> iterator2 = CollectionTools.<String>sort(iterator1, 77);
-		assertTrue(CollectionTools.elementsAreEqual(ss.iterator(), iterator2));
-	}
-
-	public void testSortIteratorComparator() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss = new TreeSet<String>(new ReverseComparator<String>());
-		ss.addAll(list);
-
-		Iterator<String> iterator1 = list.iterator();
-		Iterator<String> iterator2 = CollectionTools.<String>sort(iterator1, new ReverseComparator<String>());
-		assertTrue(CollectionTools.elementsAreEqual(ss.iterator(), iterator2));
-	}
-
-	public void testSortIteratorComparatorInt() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss = new TreeSet<String>(new ReverseComparator<String>());
-		ss.addAll(list);
-
-		Iterator<String> iterator1 = list.iterator();
-		Iterator<String> iterator2 = CollectionTools.<String>sort(iterator1, new ReverseComparator<String>(), 77);
-		assertTrue(CollectionTools.elementsAreEqual(ss.iterator(), iterator2));
-	}
-
-
-	// ********** sorted set **********
-
-	public void testSortedSetIterable() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss1 = new TreeSet<String>();
-		ss1.addAll(list);
-
-		Iterable<String> iterable = list;
-		SortedSet<String> ss2 = CollectionTools.<String>sortedSet(iterable);
-		assertEquals(ss1, ss2);
-	}
-
-	public void testSortedSetIterableInt() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss1 = new TreeSet<String>();
-		ss1.addAll(list);
-
-		Iterable<String> iterable = list;
-		SortedSet<String> ss2 = CollectionTools.<String>sortedSet(iterable, 5);
-		assertEquals(ss1, ss2);
-	}
-
-	public void testSortedSetIterableComparator() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss1 = new TreeSet<String>(new ReverseComparator<String>());
-		ss1.addAll(list);
-
-		Iterable<String> iterable = list;
-		SortedSet<String> ss2 = CollectionTools.<String>sortedSet(iterable, new ReverseComparator<String>());
-		assertEquals(ss1, ss2);
-	}
-
-	public void testSortedSetIterableComparatorInt() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss1 = new TreeSet<String>(new ReverseComparator<String>());
-		ss1.addAll(list);
-
-		Iterable<String> iterable = list;
-		SortedSet<String> ss2 = CollectionTools.<String>sortedSet(iterable, new ReverseComparator<String>(), 5);
-		assertEquals(ss1, ss2);
-	}
-
-	public void testSortedSetIterator() {
-		assertEquals(this.buildSortedStringSet1(), CollectionTools.sortedSet(this.buildSortedStringSet1().iterator()));
-	}
-
-	public void testSortedSetIterator_TreeSet() {
-		SortedSet<String> ss1 = new TreeSet<String>();
-		ss1.add("0");
-		ss1.add("2");
-		ss1.add("3");
-		ss1.add("1");
-
-		SortedSet<String> set2 = CollectionTools.<String>sortedSet(ss1.iterator());
-		assertEquals(ss1, set2);
-	}
-
-	public void testSortedSetIteratorInt() {
-		assertEquals(this.buildSortedStringSet1(), CollectionTools.sortedSet(this.buildSortedStringSet1().iterator(), 8));
-	}
-
-	public void testSortedSetObjectArray() {
-		assertEquals(this.buildSortedStringSet1(), CollectionTools.sortedSet(this.buildStringSet1().toArray(new String[0])));
-	}
-
-	public void testSortedSetObjectArrayComparator() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("0");
-		list.add("2");
-		list.add("3");
-		list.add("1");
-
-		SortedSet<String> ss1 = new TreeSet<String>(new ReverseComparator<String>());
-		ss1.addAll(list);
-
-		String[] array = list.toArray(new String[list.size()]);
-		SortedSet<String> ss2 = CollectionTools.<String>sortedSet(array, new ReverseComparator<String>());
-		assertEquals(ss1, ss2);
-	}
-
-
-	// ********** Old School Vector **********
-
-	public void testVectorIterable() {
-		Iterable<String> iterable = this.buildStringList1();
-		Vector<String> v = CollectionTools.vector(iterable);
-		assertEquals(3, v.size());
-		assertTrue(v.containsAll(this.buildStringList1()));
-	}
-
-	public void testVectorIterableInt() {
-		Iterable<String> iterable = this.buildStringList1();
-		Vector<String> v = CollectionTools.vector(iterable, 8);
-		assertEquals(3, v.size());
-		assertTrue(v.containsAll(this.buildStringList1()));
-	}
-
-	public void testVectorIterator_String() {
-		Vector<String> v = CollectionTools.vector(this.buildStringList1().iterator());
-		assertEquals(3, v.size());
-		assertTrue(v.containsAll(this.buildStringList1()));
-	}
-
-	public void testVectorIterator_Object() {
-		Vector<Object> v = CollectionTools.<Object>vector(this.buildStringList1().iterator());
-		assertEquals(3, v.size());
-		assertTrue(v.containsAll(this.buildStringList1()));
-	}
-
-	public void testVectorIteratorInt() {
-		Vector<String> v = CollectionTools.vector(this.buildStringList1().iterator(), 7);
-		assertEquals(3, v.size());
-		assertTrue(v.containsAll(this.buildStringList1()));
-	}
-
-	public void testVectorObjectArray() {
-		Vector<String> v = CollectionTools.vector(this.buildStringArray1());
-		assertEquals(3, v.size());
-		assertTrue(v.containsAll(this.buildStringList1()));
-	}
-
-
-	// ********** single-use iterable **********
-
-	public void testIterableIterator() {
-		Iterator<Object> emptyIterator = EmptyIterator.instance();
-		Iterable<Object> emptyIterable = CollectionTools.iterable(emptyIterator);
-		
-		assertFalse(emptyIterable.iterator().hasNext());
-		
-		boolean exceptionThrown = false;
-		try {
-			emptyIterator = emptyIterable.iterator();
-			fail("invalid iterator: " + emptyIterator);
-		} catch (IllegalStateException ise) {
-			exceptionThrown = true;
-		}
-		assertTrue("IllegalStateException not thrown.", exceptionThrown);
-	}
-
-	public void testIterableIterator_NPE() {
-		Iterator<Object> nullIterator = null;
-		boolean exceptionThrown = false;
-		try {
-			Iterable<Object> emptyIterable = CollectionTools.iterable(nullIterator);
-			fail("invalid iterable: " + emptyIterable);
-		} catch (NullPointerException ise) {
-			exceptionThrown = true;
-		}
-		assertTrue(exceptionThrown);
-	}
-
-	public void testIterableIterator_ToString() {
-		Iterator<Object> emptyIterator = EmptyIterator.instance();
-		Iterable<Object> emptyIterable = CollectionTools.iterable(emptyIterator);
-		assertNotNull(emptyIterable.toString());
-	}
-
-
-	// ********** java.util.Collections enhancements **********
-
-	public void testCopyListList() {
-		List<String> src = this.buildStringList1();
-		List<String> dest = new ArrayList<String>();
-		for (String s : src) {
-			dest.add(s.toUpperCase());
-		}
-		List<String> result = CollectionTools.copy(dest, src);
-		assertSame(dest, result);
-		assertTrue(CollectionTools.elementsAreIdentical(src, dest));
-	}
-
-	public void testFillListObject() {
-		List<String> list = this.buildStringList1();
-		List<String> result = CollectionTools.fill(list, "foo");
-		assertSame(list, result);
-		for (String string : result) {
-			assertEquals("foo", string);
-		}
-	}
-
-	public void testShuffleList() {
-		List<String> list = this.buildStringList1();
-		List<String> result = CollectionTools.shuffle(list);
-		assertSame(list, result);
-	}
-
-	public void testShuffleListRandom() {
-		List<String> list = this.buildStringList1();
-		List<String> result = CollectionTools.shuffle(list, new Random());
-		assertSame(list, result);
-	}
-
-	public void testSortList() {
-		List<String> list = this.buildStringList1();
-		SortedSet<String> ss = new TreeSet<String>();
-		ss.addAll(list);
-		List<String> result = CollectionTools.sort(list);
-		assertSame(list, result);
-		assertTrue(CollectionTools.elementsAreEqual(ss, result));
-	}
-
-	public void testSwapListIntInt() {
-		List<String> list = this.buildStringList1();
-		List<String> result = CollectionTools.swap(list, 0, 1);
-		assertSame(list, result);
-		List<String> original = this.buildStringList1();
-		assertEquals(original.get(0), result.get(1));
-		assertEquals(original.get(1), result.get(0));
-		assertEquals(original.get(2), result.get(2));
-	}
-
-	public void testConstructor() {
-		boolean exCaught = false;
-		try {
-			Object at = ReflectionTools.newInstance(CollectionTools.class);
-			fail("bogus: " + at); //$NON-NLS-1$
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof InvocationTargetException) {
-				if (ex.getCause().getCause() instanceof UnsupportedOperationException) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-
-	// ********** test harness **********
-
-	private Object[] buildObjectArray1() {
-		return new Object[] { "zero", "one", "two" };
-	}
-
-	private String[] buildStringArray1() {
-		return new String[] { "zero", "one", "two" };
-	}
-
-	private Object[] buildObjectArray2() {
-		return new Object[] { "three", "four", "five" };
-	}
-
-	private Vector<String> buildStringVector1() {
-		Vector<String> v = new Vector<String>();
-		this.addToCollection1(v);
-		return v;
-	}
-
-	private List<String> buildStringList1() {
-		List<String> l = new ArrayList<String>();
-		this.addToCollection1(l);
-		return l;
-	}
-
-	private List<Object> buildObjectList1() {
-		List<Object> l = new ArrayList<Object>();
-		this.addToCollection1(l);
-		return l;
-	}
-
-	private void addToCollection1(Collection<? super String> c) {
-		c.add("zero");
-		c.add("one");
-		c.add("two");
-	}
-
-	private List<String> buildStringList2() {
-		List<String> l = new ArrayList<String>();
-		this.addToCollection2(l);
-		return l;
-	}
-
-	private void addToCollection2(Collection<? super String> c) {
-		c.add("three");
-		c.add("four");
-		c.add("five");
-	}
-
-	private Set<String> buildStringSet1() {
-		Set<String> s = new HashSet<String>();
-		this.addToCollection1(s);
-		return s;
-	}
-
-	private Set<Object> buildObjectSet1() {
-		Set<Object> s = new HashSet<Object>();
-		this.addToCollection1(s);
-		return s;
-	}
-
-	private SortedSet<String> buildSortedStringSet1() {
-		SortedSet<String> s = new TreeSet<String>();
-		this.addToCollection1(s);
-		return s;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CommandExecutorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CommandExecutorTests.java
deleted file mode 100644
index 2dc789c..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CommandExecutorTests.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.CommandExecutor;
-import org.eclipse.jpt.utility.internal.ThreadLocalCommandExecutor;
-
-public class CommandExecutorTests
-	extends MultiThreadedTestCase
-{
-
-	public CommandExecutorTests(String name) {
-		super(name);
-	}
-
-	public void testDefaultCommandExecutor_toString() throws Exception {
-		CommandExecutor commandExecutor = CommandExecutor.Default.instance();
-		assertNotNull(commandExecutor.toString());
-	}
-
-	public void testDefaultCommandExecutor_serialization() throws Exception {
-		CommandExecutor commandExecutor1 = CommandExecutor.Default.instance();
-		CommandExecutor commandExecutor2 = TestTools.serialize(commandExecutor1);
-		assertSame(commandExecutor1, commandExecutor2);
-	}
-
-	public void testDefaultCommandExecutor() {
-		TestCommand testCommand = new TestCommand();
-		assertEquals(0, testCommand.count);
-		CommandExecutor commandExecutor = CommandExecutor.Default.instance();
-		commandExecutor.execute(testCommand);
-		assertEquals(1, testCommand.count);
-	}
-
-	static class TestCommand implements Command {
-		int count = 0;
-		public void execute() {
-			this.count++;
-		}
-	}
-
-	public void testThreadLocalCommandExecutor_toString() throws Exception {
-		CommandExecutor commandExecutor = new ThreadLocalCommandExecutor();
-		assertNotNull(commandExecutor.toString());
-	}
-
-	public void testThreadLocalCommandExecutor() throws Exception {
-		ThreadLocalCommandExecutor threadLocalCommandExecutor = new ThreadLocalCommandExecutor();
-		TestRunnable testRunnable1 = new TestRunnable(threadLocalCommandExecutor, 1);
-		Thread thread1 = this.buildThread(testRunnable1);
-		thread1.run();
-
-		TestRunnable testRunnable2 = new TestRunnable(threadLocalCommandExecutor, 2);
-		Thread thread2 = this.buildThread(testRunnable2);
-		thread2.run();
-
-		TestRunnable testRunnable3 = new TestRunnable(threadLocalCommandExecutor, 3, null);
-		Thread thread3 = this.buildThread(testRunnable3);
-		thread3.run();
-
-		thread1.join();
-		thread2.join();
-		thread3.join();
-
-		assertEquals(1, testRunnable1.testCommand.count);
-		assertEquals(1, testRunnable1.testCommandExecutor.count);
-
-		assertEquals(2, testRunnable2.testCommand.count);
-		assertEquals(2, testRunnable2.testCommandExecutor.count);
-
-		assertEquals(3, testRunnable3.testCommand.count);
-		assertNull(testRunnable3.testCommandExecutor);
-	}
-
-	static class TestCommandExecutor implements CommandExecutor {
-		int count = 0;
-		public void execute(Command command) {
-			this.count++;
-			command.execute();
-		}
-	}
-
-	static class TestRunnable implements Runnable {
-		final ThreadLocalCommandExecutor threadLocalCommandExecutor;
-		final int executionCount;
-		final TestCommand testCommand = new TestCommand();
-		final TestCommandExecutor testCommandExecutor;
-		TestRunnable(ThreadLocalCommandExecutor threadLocalCommandExecutor, int executionCount) {
-			this(threadLocalCommandExecutor, executionCount, new TestCommandExecutor());
-		}
-		TestRunnable(ThreadLocalCommandExecutor threadLocalCommandExecutor, int executionCount, TestCommandExecutor testCommandExecutor) {
-			super();
-			this.threadLocalCommandExecutor = threadLocalCommandExecutor;
-			this.executionCount = executionCount;
-			this.testCommandExecutor = testCommandExecutor;
-		}
-		public void run() {
-			this.threadLocalCommandExecutor.set(this.testCommandExecutor);
-			for (int i = 0; i < this.executionCount; i++) {
-				this.threadLocalCommandExecutor.execute(this.testCommand);
-			}
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CommandRunnableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CommandRunnableTests.java
deleted file mode 100644
index 717d813..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CommandRunnableTests.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.internal.CommandRunnable;
-
-@SuppressWarnings("nls")
-public class CommandRunnableTests extends TestCase {
-	boolean commandExecuted = false;
-
-	public CommandRunnableTests(String name) {
-		super(name);
-	}
-
-	public void testNullCommand() {
-		boolean exCaught = false;
-		try {
-			Runnable runnable = new CommandRunnable(null);
-			fail("bogus: " + runnable);
-		} catch (NullPointerException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testRun() {
-		Runnable runnable = new CommandRunnable(this.buildCommand());
-		runnable.run();
-		assertTrue(this.commandExecuted);
-	}
-
-	public void testToString() {
-		Runnable runnable = new CommandRunnable(this.buildCommand());
-		assertNotNull(runnable.toString());
-	}
-
-	private Command buildCommand() {
-		return new Command() {
-			public void execute() {
-				CommandRunnableTests.this.commandExecuted = true;
-			}
-		};
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CommandTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CommandTests.java
deleted file mode 100644
index 24f592d..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CommandTests.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.CommandExecutor;
-import org.eclipse.jpt.utility.internal.CommandRunnable;
-import org.eclipse.jpt.utility.internal.RunnableCommand;
-import org.eclipse.jpt.utility.internal.ThreadLocalCommand;
-
-public class CommandTests
-	extends MultiThreadedTestCase
-{
-	public CommandTests(String name) {
-		super(name);
-	}
-
-	public void testNullCommand() {
-		Command command = Command.Null.instance();
-		command.execute();  // just make sure it doesn't blow up?
-	}
-
-	public void testNullCommand_toString() {
-		Command command = Command.Null.instance();
-		assertNotNull(command.toString());
-	}
-
-	public void testNullCommand_serialization() throws Exception {
-		Command command1 = Command.Null.instance();
-		Command command2 = TestTools.serialize(command1);
-		assertSame(command1, command2);
-	}
-
-	public void testDisabledCommand() {
-		Command command = Command.Disabled.instance();
-		boolean exCaught = false;
-		try {
-			command.execute();
-			fail();
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testDisabledCommand_toString() {
-		Command command = Command.Disabled.instance();
-		assertNotNull(command.toString());
-	}
-
-	public void testDisabledCommand_serialization() throws Exception {
-		Command command1 = Command.Disabled.instance();
-		Command command2 = TestTools.serialize(command1);
-		assertSame(command1, command2);
-	}
-
-	public void testRunnableCommand() {
-		SimpleTestRunnable testRunnable = new SimpleTestRunnable();
-		assertFalse(testRunnable.ran);
-		Command command = new RunnableCommand(testRunnable);
-		command.execute();
-		assertTrue(testRunnable.ran);
-	}
-
-	static class SimpleTestRunnable implements Runnable {
-		boolean ran = false;
-		public void run() {
-			this.ran = true;
-		}
-	}
-
-	public void testCommandRunnable() {
-		TestCommand testCommand = new TestCommand();
-		assertEquals(0, testCommand.count);
-		Runnable runnable = new CommandRunnable(testCommand);
-		runnable.run();
-		assertEquals(1, testCommand.count);
-	}
-
-	static class TestCommand implements Command {
-		int count = 0;
-		public void execute() {
-			this.count++;
-		}
-	}
-
-	public void testThreadLocalCommand() throws Exception {
-		ThreadLocalCommand threadLocalCommand = new ThreadLocalCommand();
-		TestRunnable testRunnable1 = new TestRunnable(threadLocalCommand, 1);
-		Thread thread1 = this.buildThread(testRunnable1);
-		thread1.run();
-
-		TestRunnable testRunnable2 = new TestRunnable(threadLocalCommand, 2);
-		Thread thread2 = this.buildThread(testRunnable2);
-		thread2.run();
-
-		thread1.join();
-		thread2.join();
-
-		assertEquals(1, testRunnable1.testCommand.count);
-
-		assertEquals(2, testRunnable2.testCommand.count);
-	}
-
-	static class TestCommandExecutor implements CommandExecutor {
-		int count = 0;
-		public void execute(Command command) {
-			this.count++;
-			command.execute();
-		}
-	}
-
-	static class TestRunnable implements Runnable {
-		final ThreadLocalCommand threadLocalCommand;
-		final int executionCount;
-		final TestCommand testCommand = new TestCommand();
-		TestRunnable(ThreadLocalCommand threadLocalCommand, int executionCount) {
-			super();
-			this.threadLocalCommand = threadLocalCommand;
-			this.executionCount = executionCount;
-		}
-		public void run() {
-			this.threadLocalCommand.set(this.testCommand);
-			for (int i = 0; i < this.executionCount; i++) {
-				this.threadLocalCommand.execute();
-			}
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CompositeCommandTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CompositeCommandTests.java
deleted file mode 100644
index ff81cd1..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CompositeCommandTests.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.internal.CommandRunnable;
-import org.eclipse.jpt.utility.internal.CompositeCommand;
-
-public class CompositeCommandTests extends TestCase {
-	boolean command1Executed = false;
-	boolean command2Executed = false;
-
-	public CompositeCommandTests(String name) {
-		super(name);
-	}
-
-	public void testRun() {
-		Runnable runnable = new CommandRunnable(this.buildCompositeCommand());
-		runnable.run();
-		assertTrue(this.command1Executed);
-		assertTrue(this.command2Executed);
-	}
-
-	public void testToString() {
-		Runnable runnable = new CommandRunnable(this.buildCompositeCommand());
-		assertNotNull(runnable.toString());
-	}
-
-	private Command buildCompositeCommand() {
-		return new CompositeCommand(
-					this.buildCommand1(),
-					this.buildCommand2()
-				);
-	}
-
-	private Command buildCommand1() {
-		return new Command() {
-			public void execute() {
-				CompositeCommandTests.this.command1Executed = true;
-			}
-		};
-	}
-
-	private Command buildCommand2() {
-		return new Command() {
-			public void execute() {
-				CompositeCommandTests.this.command2Executed = true;
-			}
-		};
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ExceptionHandlerTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ExceptionHandlerTests.java
deleted file mode 100644
index af6793e..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ExceptionHandlerTests.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.ExceptionHandler;
-
-public class ExceptionHandlerTests extends TestCase {
-
-	public ExceptionHandlerTests(String name) {
-		super(name);
-	}
-
-	public void testNullExceptionHandler() {
-		ExceptionHandler exceptionHandler = ExceptionHandler.Null.instance();
-		exceptionHandler.handleException(new NullPointerException());  // just make sure it doesn't blow up?
-	}
-
-	public void testNullExceptionHandlerToString() {
-		ExceptionHandler exceptionHandler = ExceptionHandler.Null.instance();
-		assertNotNull(exceptionHandler.toString());
-	}
-
-	public void testRuntimeExceptionHandler() {
-		Exception npe = new NullPointerException();
-		ExceptionHandler exceptionHandler = ExceptionHandler.Runtime.instance();
-		boolean exCaught = false;
-		try {
-			exceptionHandler.handleException(npe);
-			fail();
-		} catch (RuntimeException ex) {
-			assertSame(npe, ex.getCause());
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testRuntimeExceptionHandlerToString() {
-		ExceptionHandler exceptionHandler = ExceptionHandler.Runtime.instance();
-		assertNotNull(exceptionHandler.toString());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/FileToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/FileToolsTests.java
deleted file mode 100644
index cb02a0c..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/FileToolsTests.java
+++ /dev/null
@@ -1,593 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.FileTools;
-import org.eclipse.jpt.utility.internal.Tools;
-
-@SuppressWarnings("nls")
-public class FileToolsTests extends TestCase {
-	private File tempDir;
-
-	public FileToolsTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.tempDir = this.buildTempDir();
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		this.deleteDir(this.tempDir);
-	}
-
-	public void testFilesIn() {
-		Collection<File> files = CollectionTools.collection(FileTools.filesIn(this.tempDir.getPath()));
-		assertEquals("invalid file count", 3, files.size());
-	}
-
-	public void testDirectoriesIn() {
-		Collection<File> files = CollectionTools.collection(FileTools.directoriesIn(this.tempDir.getPath()));
-		assertEquals("invalid directory count", 2, files.size());
-	}
-
-	public void testFilesInTree() {
-		Collection<File> files = CollectionTools.collection(FileTools.filesInTree(this.tempDir.getPath()));
-		assertEquals("invalid file count", 9, files.size());
-	}
-
-	public void testDirectoriesInTree() {
-		Collection<File> files = CollectionTools.collection(FileTools.directoriesInTree(this.tempDir.getPath()));
-		assertEquals("invalid directory count", 3, files.size());
-	}
-
-	public void testDeleteDirectory() throws IOException {
-		// build another temporary directory just for this test
-		File dir = this.buildTempDir();
-		assertTrue("temporary directory not created", dir.exists());
-		FileTools.deleteDirectory(dir.getPath());
-		assertFalse("temporary directory not deleted", dir.exists());
-	}
-
-	public void testDeleteDirectoryContents() throws IOException {
-		// build another temporary directory just for this test
-		File dir = this.buildTempDir();
-		assertTrue("temporary directory not created", dir.exists());
-		FileTools.deleteDirectoryContents(dir.getPath());
-		assertTrue("temporary directory should not have been deleted", dir.exists());
-		assertTrue("temporary directory contents not deleted", dir.listFiles().length == 0);
-		dir.delete();
-	}
-
-	public void testCopyToFile() throws IOException {
-		File destFile = new File(this.tempDir, "destfile.txt");
-		this.copyToFile(destFile, "testCopyToFile");
-	}
-
-	public void testCopyToPreExistingFile() throws IOException {
-		File destFile = new File(this.tempDir, "destfile.txt");
-		Writer writer = new OutputStreamWriter(new FileOutputStream(destFile));
-		writer.write("this text should be replaced...");
-		writer.close();
-		this.copyToFile(destFile, "testCopyToPreExistingFile");
-	}
-
-	private void copyToFile(File destFile, String writeString) throws IOException {
-		File sourceFile = new File(this.tempDir, "sourcefile.txt");
-		char[] readBuffer = new char[writeString.length()];
-
-		Writer writer = new OutputStreamWriter(new FileOutputStream(sourceFile));
-		writer.write(writeString);
-		writer.close();
-
-		FileTools.copyToFile(sourceFile, destFile);
-
-		Reader reader = new InputStreamReader(new FileInputStream(destFile));
-		reader.read(readBuffer);
-		reader.close();
-		String readString = new String(readBuffer);
-		assertEquals(writeString, readString);
-	}
-
-	public void testCopyToDirectory() throws IOException {
-		File sourceFile = new File(this.tempDir, "sourcefile.txt");
-		String writeString = "testCopyToDirectory";
-
-		File destDir = new File(this.tempDir, "destdir");
-		destDir.mkdir();
-		File destFile = new File(destDir, "sourcefile.txt");
-		char[] readBuffer = new char[writeString.length()];
-
-		Writer writer = new OutputStreamWriter(new FileOutputStream(sourceFile));
-		writer.write(writeString);
-		writer.close();
-
-		FileTools.copyToDirectory(sourceFile, destDir);
-
-		Reader reader = new InputStreamReader(new FileInputStream(destFile));
-		reader.read(readBuffer);
-		reader.close();
-		String readString = new String(readBuffer);
-		assertEquals(writeString, readString);
-		
-		FileTools.copyToDirectory(sourceFile, destDir); //Try again with the directory is already created
-		reader = new InputStreamReader(new FileInputStream(destFile));
-		reader.read(readBuffer);
-		reader.close();
-		readString = new String(readBuffer);
-		assertEquals(writeString, readString);
-	}
-
-	public void testFilter() throws IOException {
-		String prefix = "XXXtestFileXXX";
-		File testFile1 = new File(this.tempDir, prefix + "1");
-		testFile1.createNewFile();
-		File testFile2 = new File(this.tempDir, prefix + "2");
-		testFile2.createNewFile();
-
-		FileFilter filter = this.buildFileFilter(prefix);
-		Iterator<File> filteredFilesIterator = FileTools.filter(FileTools.filesIn(this.tempDir), filter);
-		Collection<File> filteredFiles = CollectionTools.collection(filteredFilesIterator);
-		assertEquals(2, filteredFiles.size());
-		assertTrue(filteredFiles.contains(testFile1));
-		assertTrue(filteredFiles.contains(testFile2));
-	}
-
-	private FileFilter buildFileFilter(final String prefix) {
-		return new FileFilter() {
-			public boolean accept(File file) {
-				return file.getName().startsWith(prefix);
-			}
-		};
-	}
-
-	public void testStripExtension() {
-		assertEquals("foo", FileTools.stripExtension("foo.xml"));
-		assertEquals("foo.bar", FileTools.stripExtension("foo.bar.xml"));
-		assertEquals("foo", FileTools.stripExtension("foo"));
-		assertEquals("foo", FileTools.stripExtension("foo."));
-	}
-
-	public void testExtension() {
-		assertEquals(".xml", FileTools.extension("foo.xml"));
-		assertEquals(".xml", FileTools.extension("foo.bar.xml"));
-		assertEquals("", FileTools.extension("foo"));
-		assertEquals("", FileTools.extension("foo,xml"));
-		assertEquals(".", FileTools.extension("foo."));
-	}
-
-	public void testEmptyTemporaryDirectory() throws IOException {
-		File tempDir1 = FileTools.temporaryDirectory();
-		File testFile1 = new File(tempDir1, "junk");
-		testFile1.createNewFile();
-
-		File tempDir2 = FileTools.emptyTemporaryDirectory();
-		assertEquals(tempDir1, tempDir2);
-		assertTrue(tempDir2.isDirectory());
-		assertEquals(0, tempDir2.listFiles().length);
-		tempDir2.delete();
-	}
-
-	public void testCanonicalFileName() {
-		File file1 = new File("foo");
-		file1 = new File(file1, "bar");
-		file1 = new File(file1, "baz");
-		file1 = new File(file1, "..");
-		file1 = new File(file1, "..");
-		file1 = new File(file1, "bar");
-		file1 = new File(file1, "baz");
-		File file2 = new File(System.getProperty("user.dir"));
-		file2 = new File(file2, "foo");
-		file2 = new File(file2, "bar");
-		file2 = new File(file2, "baz");
-		File file3 = FileTools.canonicalFile(file1);
-		assertEquals(file2, file3);
-	}
-
-	public void testPathFiles() {
-		File[] expected;
-		File[] actual;
-
-		if (Tools.osIsWindows()) {
-			expected = new File[] { new File("C:/"), new File("C:/foo"), new File("C:/foo/bar"), new File("C:/foo/bar/baz.txt") };
-			actual = this.pathFiles(new File("C:/foo/bar/baz.txt"));
-			assertTrue(Arrays.equals(expected, actual));
-		}
-
-		expected = new File[] { new File("/"), new File("/foo"), new File("/foo/bar"), new File("/foo/bar/baz.txt") };
-		actual = this.pathFiles(new File("/foo/bar/baz.txt"));
-		assertTrue(Arrays.equals(expected, actual));
-
-		expected = new File[] { new File("foo"), new File("foo/bar"), new File("foo/bar/baz.txt") };
-		actual = this.pathFiles(new File("foo/bar/baz.txt"));
-		assertTrue(Arrays.equals(expected, actual));
-
-		expected = new File[] { new File(".."), new File("../foo"), new File("../foo/bar"), new File("../foo/bar/baz.txt") };
-		actual = this.pathFiles(new File("../foo/bar/baz.txt"));
-		assertTrue(Arrays.equals(expected, actual));
-
-		expected = new File[] { new File("."), new File("./foo"), new File("./foo/bar"), new File("./foo/bar/baz.txt") };
-		actual = this.pathFiles(new File("./foo/bar/baz.txt"));
-		assertTrue(Arrays.equals(expected, actual));
-	}
-
-	private File[] pathFiles(File file) {
-		return (File[]) ReflectionTools.executeStaticMethod(FileTools.class, "pathFiles", File.class, file);
-	}
-
-	public void testRelativeParentFile() {
-		assertEquals(new File(".."), this.relativeParentFile(1));
-		assertEquals(new File("../.."), this.relativeParentFile(2));
-		assertEquals(new File("../../.."), this.relativeParentFile(3));
-
-		boolean exCaught = false;
-		try {
-			File file = this.relativeParentFile(0);
-			fail("invalid return: " + file);
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof InvocationTargetException) {
-				InvocationTargetException ite = (InvocationTargetException) ex.getCause();
-				if (ite.getTargetException() instanceof IllegalArgumentException) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	private File relativeParentFile(int len) {
-		return (File) ReflectionTools.executeStaticMethod(FileTools.class, "relativeParentFile", int.class, new Integer(len));
-	}
-
-	public void testConvertToRelativeFile() {
-		String prefix = Tools.osIsWindows() ? "C:" : "";
-		File file;
-		File dir;
-		File relativeFile;
-
-		if (Tools.osIsWindows()) {
-			// on Windows, a drive must be specified for a file to be absolute (i.e. not relative)
-			this.verifyUnchangedRelativeFile("/dir1/dir2/file.txt", "C:/dir1/dir2");
-			// different drives
-			this.verifyUnchangedRelativeFile("D:/dir1/dir2/file.txt", "C:/dir1/dir2");
-		}
-		this.verifyUnchangedRelativeFile("dir1/dir2/file.txt", prefix + "/dir1/dir2");
-		this.verifyUnchangedRelativeFile("./dir1/dir2/file.txt", prefix + "/dir1/dir2");
-		this.verifyUnchangedRelativeFile("../../dir1/dir2/file.txt", prefix + "/dir1/dir2");
-
-		file = new File(prefix + "/dir1/dir2");
-		dir = new File(prefix + "/dir1/dir2");
-		relativeFile = FileTools.convertToRelativeFile(file, dir);
-		assertEquals(new File("."), relativeFile);
-
-		file = new File(prefix + "/dir1/dir2/file.txt");
-		dir = new File(prefix + "/dir1/dir2");
-		relativeFile = FileTools.convertToRelativeFile(file, dir);
-		assertEquals(new File("file.txt"), relativeFile);
-
-		file = new File(prefix + "/dir1/dir2/../dir2/file.txt");
-		dir = new File(prefix + "/dir1/dir2");
-		relativeFile = FileTools.convertToRelativeFile(file, dir);
-		assertEquals(new File("file.txt"), relativeFile);
-
-		file = new File(prefix + "/dir1/dir2/dir3/dir4/dir5/file.txt");
-		dir = new File(prefix + "/dir1/dir2");
-		relativeFile = FileTools.convertToRelativeFile(file, dir);
-		assertEquals(new File("dir3/dir4/dir5/file.txt"), relativeFile);
-
-		file = new File(prefix + "/dir1/dir2/file.txt");
-		dir = new File(prefix + "/dir1/dir2/dir3/dir4/dir5");
-		relativeFile = FileTools.convertToRelativeFile(file, dir);
-		assertEquals(new File("../../../file.txt"), relativeFile);
-
-		file = new File(prefix + "/dir1/dir2/file.txt");
-		dir = new File(prefix + "/dir1/dir2/dir3");
-		relativeFile = FileTools.convertToRelativeFile(file, dir);
-		assertEquals(new File("../file.txt"), relativeFile);
-
-		file = new File(prefix + "/dir1/dir2/dirA/dirB/dirC/file.txt");
-		dir = new File(prefix + "/dir1/dir2/dir3/dir4/dir5");
-		relativeFile = FileTools.convertToRelativeFile(file, dir);
-		assertEquals(new File("../../../dirA/dirB/dirC/file.txt"), relativeFile);
-
-		file = new File(prefix + "/dir1/dir2");
-		dir = new File(prefix + "/dir1/dir2/dir3/dir4/dir5");
-		relativeFile = FileTools.convertToRelativeFile(file, dir);
-		assertEquals(new File("../../.."), relativeFile);
-
-		file = new File(prefix + "/My Documents/My Workspace/Project 1/lib/toplink.jar");
-		dir = new File(prefix + "/My Documents/My Workspace/Project 1");
-		relativeFile = FileTools.convertToRelativeFile(file, dir);
-		assertEquals(new File("lib/toplink.jar"), relativeFile);
-	}
-
-	private void verifyUnchangedRelativeFile(String fileName, String dirName) {
-		File file = new File(fileName);
-		File dir = new File(dirName);
-		File relativeFile = FileTools.convertToRelativeFile(file, dir);
-		assertEquals(file, relativeFile);
-	}
-
-	public void testConvertToAbsoluteFile() {
-		String prefix = Tools.osIsWindows() ? "C:" : "";
-		File file;
-		File dir;
-		File absoluteFile;
-
-		if (Tools.osIsWindows()) {
-			// on Windows, a drive must be specified for a file to be absolute (i.e. not relative)
-			this.verifyUnchangedAbsoluteFile("C:/dir1/dir2/file.txt", "C:/dir1/dir2");
-			// different drives
-			this.verifyUnchangedAbsoluteFile("D:/dir1/dir2/file.txt", "C:/dir1/dir2");
-		}
-		this.verifyUnchangedAbsoluteFile(prefix + "/dir1/dir2/file.txt", prefix + "/dir1/dir2");
-		this.verifyUnchangedAbsoluteFile(prefix + "/./dir1/dir2/file.txt", prefix + "/dir1/dir2");
-		this.verifyUnchangedAbsoluteFile(prefix + "/dir1/dir2/../../dir1/dir2/file.txt", prefix + "/dir1/dir2");
-
-		file = new File(".");
-		dir = new File(prefix + "/dir1/dir2");
-		absoluteFile = FileTools.convertToAbsoluteFile(file, dir);
-		assertEquals(new File(prefix + "/dir1/dir2"), absoluteFile);
-
-		file = new File("./file.txt");
-		dir = new File(prefix + "/dir1/dir2");
-		absoluteFile = FileTools.convertToAbsoluteFile(file, dir);
-		assertEquals(new File(prefix + "/dir1/dir2/file.txt"), absoluteFile);
-
-		file = new File("file.txt");
-		dir = new File(prefix + "/dir1/dir2");
-		absoluteFile = FileTools.convertToAbsoluteFile(file, dir);
-		assertEquals(new File(prefix + "/dir1/dir2/file.txt"), absoluteFile);
-
-		file = new File("../dir2/file.txt");
-		dir = new File(prefix + "/dir1/dir2");
-		absoluteFile = FileTools.convertToAbsoluteFile(file, dir);
-		assertEquals(new File(prefix + "/dir1/dir2/file.txt"), absoluteFile);
-
-		file = new File("dir3/dir4/dir5/file.txt");
-		dir = new File(prefix + "/dir1/dir2");
-		absoluteFile = FileTools.convertToAbsoluteFile(file, dir);
-		assertEquals(new File(prefix + "/dir1/dir2/dir3/dir4/dir5/file.txt"), absoluteFile);
-
-		file = new File("../../../file.txt");
-		dir = new File(prefix + "/dir1/dir2/dir3/dir4/dir5");
-		absoluteFile = FileTools.convertToAbsoluteFile(file, dir);
-		assertEquals(new File(prefix + "/dir1/dir2/file.txt"), absoluteFile);
-
-		// too many ".." directories will resolve to the root;
-		// this is consistent with Windows and Linux command shells
-		file = new File("../../../../../../../../file.txt");
-		dir = new File(prefix + "/dir1/dir2");
-		absoluteFile = FileTools.convertToAbsoluteFile(file, dir);
-		assertEquals(new File(prefix + "/file.txt"), absoluteFile);
-
-		file = new File("../file.txt");
-		dir = new File(prefix + "/dir1/dir2/dir3");
-		absoluteFile = FileTools.convertToAbsoluteFile(file, dir);
-		assertEquals(new File(prefix + "/dir1/dir2/file.txt"), absoluteFile);
-
-		file = new File("../../../dirA/dirB/dirC/file.txt");
-		dir = new File(prefix + "/dir1/dir2/dir3/dir4/dir5");
-		absoluteFile = FileTools.convertToAbsoluteFile(file, dir);
-		assertEquals(new File(prefix + "/dir1/dir2/dirA/dirB/dirC/file.txt"), absoluteFile);
-
-		file = new File("../../..");
-		dir = new File(prefix + "/dir1/dir2/dir3/dir4/dir5");
-		absoluteFile = FileTools.convertToAbsoluteFile(file, dir);
-		assertEquals(new File(prefix + "/dir1/dir2"), absoluteFile);
-
-		file = new File("lib/toplink.jar");
-		dir = new File(prefix + "/My Documents/My Workspace/Project 1");
-		absoluteFile = FileTools.convertToAbsoluteFile(file, dir);
-		assertEquals(new File(prefix + "/My Documents/My Workspace/Project 1/lib/toplink.jar"), absoluteFile);
-	}
-
-	public void testFileNameIsReserved() {
-		boolean expected = Tools.osIsWindows();
-		assertEquals(expected, FileTools.fileNameIsReserved("CON"));
-		assertEquals(expected, FileTools.fileNameIsReserved("con"));
-		assertEquals(expected, FileTools.fileNameIsReserved("cON"));
-		assertEquals(expected, FileTools.fileNameIsReserved("AUX"));
-		assertEquals(expected, FileTools.fileNameIsReserved("COM3"));
-		assertEquals(expected, FileTools.fileNameIsReserved("LPT3"));
-		assertEquals(expected, FileTools.fileNameIsReserved("nUL"));
-		assertEquals(expected, FileTools.fileNameIsReserved("Prn"));
-	}
-
-	public void testFileHasAnyReservedComponents() {
-		boolean expected = Tools.osIsWindows();
-		assertEquals(expected, FileTools.fileHasAnyReservedComponents(new File("C:/CON")));
-		assertEquals(expected, FileTools.fileHasAnyReservedComponents(new File("/con/foo")));
-		assertEquals(expected, FileTools.fileHasAnyReservedComponents(new File("c:/temp/cON")));
-		assertEquals(expected, FileTools.fileHasAnyReservedComponents(new File("bar//baz//AUX")));
-		assertEquals(expected, FileTools.fileHasAnyReservedComponents(new File("COM3//ttt")));
-		assertEquals(expected, FileTools.fileHasAnyReservedComponents(new File("d:/LPT3/xxx")));
-		assertEquals(expected, FileTools.fileHasAnyReservedComponents(new File("c:/my docs and stuff/tuesday/nUL")));
-		assertEquals(expected, FileTools.fileHasAnyReservedComponents(new File("Prn")));
-	}
-
-	public void testShortenFileNameFile() {
-		if (Tools.osIsWindows()) {
-			this.verifyShortenFileNameFileWin();
-		} else {
-			this.verifyShortenFileNameFileNonWin();
-		}
-	}
-
-	private void verifyShortenFileNameFileWin() {
-		File file = new File("C:\\Documents and Settings\\Administrator\\Desktop\\Project\\Text.txt");
-		String fileName = FileTools.shortenFileName(file);
-		assertEquals("C:\\Documents and Settings\\...\\Desktop\\Project\\Text.txt", fileName);
-		assertTrue(fileName.length() <= FileTools.MAXIMUM_SHORTENED_FILE_NAME_LENGTH);
-
-		file = new File("C:/");
-		fileName = FileTools.shortenFileName(file);
-		assertEquals("C:\\", fileName);
-		assertTrue(fileName.length() <= FileTools.MAXIMUM_SHORTENED_FILE_NAME_LENGTH);
-	}
-
-	private void verifyShortenFileNameFileNonWin() {
-		File file = new File("/home/administrator/documents and settings/desktop/Project/Text.txt");
-		String fileName = FileTools.shortenFileName(file);
-		assertEquals("/home/administrator/.../desktop/Project/Text.txt", fileName);
-		assertTrue(fileName.length() <= FileTools.MAXIMUM_SHORTENED_FILE_NAME_LENGTH);
-
-		file = new File("/home");
-		fileName = FileTools.shortenFileName(file);
-		assertEquals("/home", fileName);
-		assertTrue(fileName.length() <= FileTools.MAXIMUM_SHORTENED_FILE_NAME_LENGTH);
-	}
-
-	public void testShortenFileNameFileInt() {
-		if (Tools.osIsWindows()) {
-			this.verifyShortenFileNameFileIntWin();
-		} else {
-			this.verifyShortenFileNameFileIntNonWin();
-		}
-	}
-
-	private void verifyShortenFileNameFileIntWin() {
-		File file = new File("C:\\Documents and Settings\\Administrator\\Desktop\\Project\\Text.txt");
-		String fileName = FileTools.shortenFileName(file, 31);
-		assertEquals("C:\\...\\Desktop\\Project\\Text.txt", fileName);
-		assertEquals(31, fileName.length());
-
-		file = new File("C:/This is the file name.txt");
-		fileName = FileTools.shortenFileName(file, 10);
-		assertEquals("C:\\This is the file name.txt", fileName);
-		assertEquals(28, fileName.length());
-	}
-
-	private void verifyShortenFileNameFileIntNonWin() {
-		File file = new File("/home/administrator/documents and settings/desktop/Project/Text.txt");
-		String fileName = FileTools.shortenFileName(file, 31);
-		assertEquals("/home/.../desktop/Project/Text.txt", fileName);
-		assertEquals(34, fileName.length());
-
-		file = new File("/This is the file name.txt");
-		fileName = FileTools.shortenFileName(file, 10);
-		assertEquals("/This is the file name.txt", fileName);
-		assertEquals(26, fileName.length());
-	}
-
-	public void testShortenFileNameURL() throws Exception {
-		if (Tools.osIsWindows()) {
-			this.verifyShortenFileNameURLWin();
-		} else {
-			this.verifyShortenFileNameURLNonWin();
-		}
-	}
-
-	private void verifyShortenFileNameURLWin() throws Exception {
-		URL url = new URL("file", "", "C:/Documents and Settings/Administrator/Desktop/Project/Text.txt");
-		String fileName = FileTools.shortenFileName(url);
-		assertEquals("C:\\Documents and Settings\\...\\Desktop\\Project\\Text.txt", fileName);
-		assertTrue(fileName.length() <= FileTools.MAXIMUM_SHORTENED_FILE_NAME_LENGTH);
-	}
-
-	private void verifyShortenFileNameURLNonWin() throws Exception {
-		URL url = new URL("file", "", "/home/administrator/documents and settings/desktop/Project/Text.txt");
-		String fileName = FileTools.shortenFileName(url);
-		assertEquals("/home/administrator/.../desktop/Project/Text.txt", fileName);
-		assertTrue(fileName.length() <= FileTools.MAXIMUM_SHORTENED_FILE_NAME_LENGTH);
-	}
-
-	public void testShortenFileNameURLInt() throws Exception {
-		if (Tools.osIsWindows()) {
-			this.verifyShortenFileNameURLIntWin();
-		} else {
-			this.verifyShortenFileNameURLIntNonWin();
-		}
-	}
-
-	private void verifyShortenFileNameURLIntWin() throws Exception {
-		URL url = new URL("file", "", "/C:/Documents and Settings/Administrator/Desktop/Project/Text.txt");
-		String fileName = FileTools.shortenFileName(url, 31);
-		assertEquals("C:\\...\\Desktop\\Project\\Text.txt", fileName);
-		assertEquals(31, fileName.length());
-	}
-
-	private void verifyShortenFileNameURLIntNonWin() throws Exception {
-		URL url = new URL("file", "", "/home/administrator/documents and settings/desktop/Project/Text.txt");
-		String fileName = FileTools.shortenFileName(url, 31);
-		assertEquals("/home/.../desktop/Project/Text.txt", fileName);
-		assertEquals(34, fileName.length());
-	}
-
-	private void verifyUnchangedAbsoluteFile(String fileName, String dirName) {
-		File file = new File(fileName);
-		File dir = new File(dirName);
-		File absoluteFile = FileTools.convertToAbsoluteFile(file, dir);
-		assertEquals(file, absoluteFile);
-	}
-
-	private File buildTempDir() throws IOException {
-		// build a new directory for each test, to prevent any cross-test effects
-		File dir = FileTools.newTemporaryDirectory(this.getClass().getSimpleName() + "." + this.getName());
-
-		File file0a = new File(dir, "file0a");
-		file0a.createNewFile();
-		File file0b = new File(dir, "file0b");
-		file0b.createNewFile();
-		File file0c = new File(dir, "file0c");
-		file0c.createNewFile();
-
-		File subdir1 = new File(dir, "subdir1");
-		subdir1.mkdir();
-		File file1a = new File(subdir1, "file1a");
-		file1a.createNewFile();
-		File file1b = new File(subdir1, "file1b");
-		file1b.createNewFile();
-
-		File subdir2 = new File(dir, "subdir2");
-		subdir2.mkdir();
-		File file2a = new File(subdir2, "file2a");
-		file2a.createNewFile();
-		File file2b = new File(subdir2, "file2b");
-		file2b.createNewFile();
-
-		File subdir3 = new File(subdir2, "subdir3");
-		subdir3.mkdir();
-		File file3a = new File(subdir3, "file3a");
-		file3a.createNewFile();
-		File file3b = new File(subdir3, "file3b");
-		file3b.createNewFile();
-
-		return dir;
-	}
-
-	private void deleteDir(File dir) {
-		FileTools.deleteDirectory(dir);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/FilterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/FilterTests.java
deleted file mode 100644
index 5b40cd5..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/FilterTests.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.Filter;
-
-@SuppressWarnings("nls")
-public class FilterTests extends TestCase {
-
-	public FilterTests(String name) {
-		super(name);
-	}
-
-	public void testNullFilter() {
-		Filter<String> filter = Filter.Null.instance();
-		assertTrue(filter.accept(""));
-		assertTrue(filter.accept("foo"));
-		assertTrue(filter.accept("bar"));
-	}
-
-	public void testNullFilter_toString() {
-		Filter<String> filter = Filter.Null.instance();
-		assertNotNull(filter.toString());
-	}
-
-	public void testNullFilter_serialization() throws Exception {
-		Filter<String> filter = Filter.Null.instance();
-		assertSame(filter, TestTools.serialize(filter));
-	}
-
-	public void testOpaqueFilter() {
-		Filter<String> filter = Filter.Opaque.instance();
-		assertFalse(filter.accept(""));
-		assertFalse(filter.accept("foo"));
-		assertFalse(filter.accept("bar"));
-	}
-
-	public void testOpaqueFilter_toString() {
-		Filter<String> filter = Filter.Opaque.instance();
-		assertNotNull(filter.toString());
-	}
-
-	public void testOpaqueFilter_serialization() throws Exception {
-		Filter<String> filter = Filter.Opaque.instance();
-		assertSame(filter, TestTools.serialize(filter));
-	}
-
-	public void testDisabledFilter() {
-		Filter<String> filter = Filter.Disabled.instance();
-		boolean exCaught = false;
-		try {
-			assertFalse(filter.accept("foo"));
-			fail();
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testDisabledFilter_toString() {
-		Filter<String> filter = Filter.Disabled.instance();
-		assertNotNull(filter.toString());
-	}
-
-	public void testDisabledFilter_serialization() throws Exception {
-		Filter<String> filter = Filter.Disabled.instance();
-		assertSame(filter, TestTools.serialize(filter));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/HashBagTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/HashBagTests.java
deleted file mode 100644
index 3b20add..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/HashBagTests.java
+++ /dev/null
@@ -1,555 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.Tools;
-
-@SuppressWarnings("nls")
-public class HashBagTests extends TestCase {
-	private HashBag<String> bag;
-
-	public HashBagTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.bag = this.buildBag();
-	}
-
-	private HashBag<String> buildBag() {
-		HashBag<String> b = new HashBag<String>();
-		b.add(null);
-		b.add(new String("one"));
-		b.add(new String("two"));
-		b.add(new String("two"));
-		b.add(new String("three"));
-		b.add(new String("three"));
-		b.add(new String("three"));
-		b.add(new String("four"));
-		b.add(new String("four"));
-		b.add(new String("four"));
-		b.add(new String("four"));
-		return b;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	private Collection<String> buildCollection() {
-		Collection<String> c = new ArrayList<String>();
-		c.add(new String("foo"));
-		c.add(new String("foo"));
-		c.add(new String("bar"));
-		c.add(new String("bar"));
-		c.add(new String("bar"));
-		return c;
-	}
-
-	public void testCtorCollection() {
-		Collection<String> c = this.buildCollection();
-		Bag<String> b = new HashBag<String>(c);
-		for (String s : c) {
-			assertTrue(b.contains(s));
-		}
-	}
-
-	public void testCtorIntFloat() {
-		boolean exCaught;
-
-		exCaught = false;
-		try {
-			this.bag = new HashBag<String>(-20, 0.66f);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		exCaught = false;
-		try {
-			this.bag = new HashBag<String>(20, -0.66f);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAdd() {
-		// the other adds took place in setUp
-		assertTrue(this.bag.add("five"));
-
-		assertTrue(this.bag.contains("one"));
-		assertTrue(this.bag.contains("two"));
-		assertTrue(this.bag.contains("three"));
-		assertTrue(this.bag.contains("four"));
-		assertTrue(this.bag.contains("five"));
-	}
-
-	public void testAddCount() {
-		// the other adds took place in setUp
-		this.bag.add("minus3", -3);
-		this.bag.add("zero", 0);
-		this.bag.add("five", 5);
-
-		assertFalse(this.bag.contains("minus3"));
-		assertFalse(this.bag.contains("zero"));
-		assertEquals(1, this.bag.count("one"));
-		assertEquals(2, this.bag.count("two"));
-		assertEquals(3, this.bag.count("three"));
-		assertEquals(4, this.bag.count("four"));
-		assertEquals(5, this.bag.count("five"));
-
-		this.bag.add("three", 2);
-		assertEquals(5, this.bag.count("three"));
-	}
-
-	public void testAddAll() {
-		Collection<String> c = this.buildCollection();
-		assertTrue(this.bag.addAll(c));
-		for (String s : c) {
-			assertTrue(this.bag.contains(s));
-		}
-	}
-
-	public void testClear() {
-		assertTrue(this.bag.contains("one"));
-		assertTrue(this.bag.contains("two"));
-		assertTrue(this.bag.contains("three"));
-		assertTrue(this.bag.contains("four"));
-		assertTrue(this.bag.contains(null));
-		assertEquals(11, this.bag.size());
-		this.bag.clear();
-		assertFalse(this.bag.contains("one"));
-		assertFalse(this.bag.contains("two"));
-		assertFalse(this.bag.contains("three"));
-		assertFalse(this.bag.contains("four"));
-		assertFalse(this.bag.contains(null));
-		assertEquals(0, this.bag.size());
-	}
-
-	public void testClone() {
-		Bag<String> bag2 = this.bag.clone();
-		assertTrue(this.bag != bag2);
-		assertEquals(this.bag, bag2);
-		assertTrue(this.bag.hashCode() == bag2.hashCode());
-	}
-
-	public void testContains() {
-		assertTrue(this.bag.contains(null));
-		assertTrue(this.bag.contains("one"));
-		assertTrue(this.bag.contains("two"));
-		assertTrue(this.bag.contains("three"));
-		assertTrue(this.bag.contains("four"));
-		assertTrue(this.bag.contains(new String("four")));
-		assertTrue(this.bag.contains("fo" + "ur"));
-		assertFalse(this.bag.contains("five"));
-	}
-
-	public void testContainsAll() {
-		Collection<String> c = new ArrayList<String>();
-		c.add(null);
-		c.add(new String("one"));
-		c.add(new String("two"));
-		c.add(new String("three"));
-		c.add(new String("four"));
-		assertTrue(this.bag.containsAll(c));
-	}
-
-	public void testCount() {
-		assertEquals(0, this.bag.count("zero"));
-		assertEquals(1, this.bag.count("one"));
-		assertEquals(2, this.bag.count("two"));
-		assertEquals(3, this.bag.count("three"));
-		assertEquals(4, this.bag.count("four"));
-		assertEquals(0, this.bag.count("five"));
-	}
-
-	public void testEquals() {
-		Bag<String> bag2 = this.buildBag();
-		assertEquals(this.bag, bag2);
-		bag2.add("five");
-		assertFalse(this.bag.equals(bag2));
-		Collection<String> c = new ArrayList<String>(this.bag);
-		assertFalse(this.bag.equals(c));
-	}
-
-	public void testHashCode() {
-		Bag<String> bag2 = this.buildBag();
-		assertEquals(this.bag.hashCode(), bag2.hashCode());
-	}
-
-	public void testIsEmpty() {
-		assertFalse(this.bag.isEmpty());
-		this.bag.clear();
-		assertTrue(this.bag.isEmpty());
-		this.bag.add("foo");
-		assertFalse(this.bag.isEmpty());
-	}
-
-	public void testEmptyIterator() {
-		this.bag.clear();
-		Iterator<String> iterator = this.bag.iterator();
-		assertFalse(iterator.hasNext());
-
-		boolean exCaught = false;
-		Object element = null;
-		try {
-			element = iterator.next();
-			fail(element.toString());
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		exCaught = false;
-		try {
-			iterator.remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testIterator() {
-		int i = 0;
-		Iterator<String> iterator = this.bag.iterator();
-		assertTrue(iterator.hasNext());
-		while (iterator.hasNext()) {
-			iterator.next();
-			i++;
-		}
-		assertEquals(11, i);
-		assertFalse(iterator.hasNext());
-
-		boolean exCaught = false;
-		Object element = null;
-		try {
-			element = iterator.next();
-			fail(element.toString());
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		iterator.remove();
-		assertEquals(10, this.bag.size());
-
-		exCaught = false;
-		try {
-			iterator.remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		// start over
-		iterator = this.bag.iterator();
-		this.bag.add("five");
-		exCaught = false;
-		try {
-			iterator.next();
-		} catch (ConcurrentModificationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testUniqueIterator() {
-		int i = 0;
-		Iterator<String> iterator = this.bag.uniqueIterator();
-		assertTrue(iterator.hasNext());
-		while (iterator.hasNext()) {
-			iterator.next();
-			i++;
-		}
-		assertEquals(5, i);
-		assertFalse(iterator.hasNext());
-
-		boolean exCaught = false;
-		Object element = null;
-		try {
-			element = iterator.next();
-			fail(element.toString());
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		// start over
-		iterator = this.bag.uniqueIterator();
-		Object next = null;
-		while (iterator.hasNext() && !"four".equals(next)) {
-			next = iterator.next();
-		}
-		iterator.remove();
-		assertEquals(7, this.bag.size());
-
-		exCaught = false;
-		try {
-			iterator.remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		// start over
-		iterator = this.bag.uniqueIterator();
-		this.bag.add("five");
-		exCaught = false;
-		try {
-			iterator.next();
-		} catch (ConcurrentModificationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testEntries() {
-		int i = 0;
-		Iterator<Bag.Entry<String>> iterator = this.bag.entries();
-		assertTrue(iterator.hasNext());
-		while (iterator.hasNext()) {
-			iterator.next();
-			i++;
-		}
-		assertEquals(5, i);
-		assertFalse(iterator.hasNext());
-
-		boolean exCaught = false;
-		Object element = null;
-		try {
-			element = iterator.next();
-			fail(element.toString());
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		// start over
-		iterator = this.bag.entries();
-		Bag.Entry<String> next = null;
-		while (iterator.hasNext()) {
-			next = iterator.next();
-			if (next.getElement().equals("four")) {
-				iterator.remove();
-				break;
-			}
-		}
-		assertEquals(7, this.bag.size());
-
-		exCaught = false;
-		try {
-			iterator.remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		// start over
-		iterator = this.bag.entries();
-		this.bag.add("five");
-		exCaught = false;
-		try {
-			iterator.next();
-		} catch (ConcurrentModificationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testHashingDistribution() throws Exception {
-		Bag<String> bigBag = new HashBag<String>();
-		for (int i = 0; i < 10000; i++) {
-			bigBag.add("object" + i);
-		}
-
-		java.lang.reflect.Field field = bigBag.getClass().getDeclaredField("table");
-		field.setAccessible(true);
-		Object[] table = (Object[]) field.get(bigBag);
-		int bucketCount = table.length;
-		int filledBucketCount = 0;
-		for (Object o : table) {
-			if (o != null) {
-				filledBucketCount++;
-			}
-		}
-		float loadFactor = ((float) filledBucketCount) / ((float) bucketCount);
-		if ((loadFactor < 0.20) || (loadFactor > 0.80)) {
-			String msg = "poor load factor: " + loadFactor;
-			if (Tools.jvmIsSun()) {
-				fail(msg);
-			} else {
-				// poor load factor is seen in the Eclipse build environment for some reason...
-				System.out.println(this.getClass().getName() + '.' + this.getName() + " - " + msg);
-				TestTools.printSystemProperties();
-			}
-		}
-	}
-
-	public void testRemove() {
-		assertTrue(this.bag.remove("one"));
-		assertFalse(this.bag.contains("one"));
-		assertFalse(this.bag.remove("one"));
-
-		assertTrue(this.bag.remove("two"));
-		assertTrue(this.bag.remove("two"));
-		assertFalse(this.bag.contains("two"));
-		assertFalse(this.bag.remove("two"));
-	}
-
-	public void testRemoveCount() {
-		assertFalse(this.bag.remove("one", 0));
-		assertTrue(this.bag.contains("one"));
-
-		assertTrue(this.bag.remove("one", 1));
-		assertFalse(this.bag.contains("one"));
-		assertFalse(this.bag.remove("one"));
-
-		assertFalse(this.bag.remove("two", -3));
-		assertTrue(this.bag.remove("two", 1));
-		assertTrue(this.bag.contains("two"));
-
-		assertTrue(this.bag.remove("two", 1));
-		assertFalse(this.bag.contains("two"));
-		assertFalse(this.bag.remove("two"));
-
-		assertTrue(this.bag.remove("three", 3));
-		assertFalse(this.bag.contains("three"));
-		assertFalse(this.bag.remove("three"));
-	}
-
-	public void testRemoveAll() {
-		Collection<String> c = new ArrayList<String>();
-		c.add("one");
-		c.add("three");
-		assertTrue(this.bag.removeAll(c));
-		assertFalse(this.bag.contains("one"));
-		assertFalse(this.bag.contains("three"));
-		assertFalse(this.bag.remove("one"));
-		assertFalse(this.bag.remove("three"));
-		assertFalse(this.bag.removeAll(c));
-	}
-
-	public void testRetainAll() {
-		Collection<String> c = new ArrayList<String>();
-		c.add("one");
-		c.add("three");
-		assertTrue(this.bag.retainAll(c));
-		assertTrue(this.bag.contains("one"));
-		assertTrue(this.bag.contains("three"));
-		assertFalse(this.bag.contains("two"));
-		assertFalse(this.bag.contains("four"));
-		assertFalse(this.bag.remove("two"));
-		assertFalse(this.bag.remove("four"));
-		assertFalse(this.bag.retainAll(c));
-	}
-
-	public void testSize() {
-		assertTrue(this.bag.size() == 11);
-		this.bag.add("five");
-		this.bag.add("five");
-		this.bag.add("five");
-		this.bag.add("five");
-		this.bag.add("five");
-		assertEquals(16, this.bag.size());
-	}
-
-	public void testSerialization() throws Exception {
-		Bag<String> bag2 = TestTools.serialize(this.bag);
-
-		assertTrue("same object?", this.bag != bag2);
-		assertEquals(11, bag2.size());
-		assertEquals(this.bag, bag2);
-		// look for similar elements
-		assertTrue(bag2.contains(null));
-		assertTrue(bag2.contains("one"));
-		assertTrue(bag2.contains("two"));
-		assertTrue(bag2.contains("three"));
-		assertTrue(bag2.contains("four"));
-
-		int nullCount = 0, oneCount = 0, twoCount = 0, threeCount = 0, fourCount = 0;
-		for (String s : bag2) {
-			if (s == null) {
-				nullCount++;
-			} else if (s.equals("one")) {
-				oneCount++;
-			} else if (s.equals("two")) {
-				twoCount++;
-			} else if (s.equals("three")) {
-				threeCount++;
-			} else if (s.equals("four")) {
-				fourCount++;
-			}
-		}
-		assertEquals(1, nullCount);
-		assertEquals(1, oneCount);
-		assertEquals(2, twoCount);
-		assertEquals(3, threeCount);
-		assertEquals(4, fourCount);
-	}
-
-	public void testToArray() {
-		Object[] a = this.bag.toArray();
-		assertEquals(11, a.length);
-		assertTrue(ArrayTools.contains(a, null));
-		assertTrue(ArrayTools.contains(a, "one"));
-		assertTrue(ArrayTools.contains(a, "two"));
-		assertTrue(ArrayTools.contains(a, "three"));
-		assertTrue(ArrayTools.contains(a, "four"));
-	}
-
-	public void testToArrayObjectArray() {
-		String[] a = new String[12];
-		a[11] = "not null";
-		String[] b = this.bag.toArray(a);
-		assertEquals(a, b);
-		assertEquals(12, a.length);
-		assertTrue(ArrayTools.contains(a, null));
-		assertTrue(ArrayTools.contains(a, "one"));
-		assertTrue(ArrayTools.contains(a, "two"));
-		assertTrue(ArrayTools.contains(a, "three"));
-		assertTrue(ArrayTools.contains(a, "four"));
-		assertTrue(a[11] == null);
-	}
-
-	public void testToString() {
-		String s = this.bag.toString();
-		assertTrue(s.startsWith("["));
-		assertTrue(s.endsWith("]"));
-		int commaCount = 0;
-		for (int i = 0; i < s.length(); i++) {
-			if (s.charAt(i) == ',') {
-				commaCount++;
-			}
-		}
-		assertEquals(10, commaCount);
-		assertTrue(s.indexOf("one") != -1);
-		assertTrue(s.indexOf("two") != -1);
-		assertTrue(s.indexOf("three") != -1);
-		assertTrue(s.indexOf("four") != -1);
-		assertTrue(s.indexOf("null") != -1);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/IdentityHashBagTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/IdentityHashBagTests.java
deleted file mode 100644
index 7d69a58..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/IdentityHashBagTests.java
+++ /dev/null
@@ -1,573 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.IdentityHashBag;
-import org.eclipse.jpt.utility.internal.Tools;
-
-@SuppressWarnings("nls")
-public class IdentityHashBagTests extends TestCase {
-	private IdentityHashBag<String> bag;
-	private String one = "one";
-	private String two = "two";
-	private String three = "three";
-	private String four = "four";
-	private String foo = "foo";
-	private String bar = "bar";
-
-	public IdentityHashBagTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.bag = this.buildBag();
-	}
-	
-	protected IdentityHashBag<String> buildBag() {
-		IdentityHashBag<String> result = new IdentityHashBag<String>();
-		result.add(null);
-		result.add(this.one);
-		result.add(this.two);
-		result.add(this.two);
-		result.add(this.three);
-		result.add(this.three);
-		result.add(this.three);
-		result.add(this.four);
-		result.add(this.four);
-		result.add(this.four);
-		result.add(this.four);
-		return result;
-	}
-	
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	private Collection<String> buildCollection() {
-		Collection<String> c = new ArrayList<String>();
-		c.add(this.foo);
-		c.add(this.foo);
-		c.add(this.bar);
-		c.add(this.bar);
-		c.add(this.bar);
-		return c;
-	}
-	
-	public void testCtorCollection() {
-		Collection<String> c = this.buildCollection();
-		IdentityHashBag<String> localBag = new IdentityHashBag<String>(c);
-		for (String s : c) {
-			assertTrue(localBag.contains(s));
-		}
-	}
-	
-	public void testCtorIntFloat() {
-		boolean exCaught;
-	
-		exCaught = false;
-		try {
-			this.bag = new IdentityHashBag<String>(-20, 0.66f);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalArgumentException not thrown", exCaught);
-	
-		exCaught = false;
-		try {
-			this.bag = new IdentityHashBag<String>(20, -0.66f);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalArgumentException not thrown", exCaught);
-	}
-	
-	public void testAdd() {
-		// the other adds took place in setUp
-		String five = "five";
-		assertTrue(this.bag.add(five));
-	
-		assertTrue(this.bag.contains(this.one));
-		assertTrue(this.bag.contains(this.two));
-		assertTrue(this.bag.contains(this.three));
-		assertTrue(this.bag.contains(this.four));
-		assertTrue(this.bag.contains(five));
-	}
-	
-	public void testAddCount() {
-		String minus3 = "minus3";
-		String zero = "zero";
-		String five = "five";
-		// the other adds took place in setUp
-		this.bag.add(minus3, -3);
-		this.bag.add(zero, 0);
-		this.bag.add(five, 5);
-
-		assertFalse(this.bag.contains(minus3));
-		assertFalse(this.bag.contains(zero));
-		assertEquals(1, this.bag.count(this.one));
-		assertEquals(2, this.bag.count(this.two));
-		assertEquals(3, this.bag.count(this.three));
-		assertEquals(4, this.bag.count(this.four));
-		assertEquals(5, this.bag.count(five));
-
-		this.bag.add(this.three, 2);
-		assertEquals(5, this.bag.count(this.three));
-	}
-
-	public void testAddAll() {
-		Collection<String> c = this.buildCollection();
-		assertTrue(this.bag.addAll(c));
-		for (String s : c) {
-			assertTrue(this.bag.contains(s));
-		}
-	}
-	
-	public void testClear() {
-		assertTrue(this.bag.contains(this.one));
-		assertTrue(this.bag.contains(this.two));
-		assertTrue(this.bag.contains(this.three));
-		assertTrue(this.bag.contains(this.four));
-		assertTrue(this.bag.contains(null));
-		assertEquals(11, this.bag.size());
-		this.bag.clear();
-		assertFalse(this.bag.contains(this.one));
-		assertFalse(this.bag.contains(this.two));
-		assertFalse(this.bag.contains(this.three));
-		assertFalse(this.bag.contains(this.four));
-		assertFalse(this.bag.contains(null));
-		assertEquals(0, this.bag.size());
-	}
-	
-	public void testClone() {
-		IdentityHashBag<String> bag2 = this.bag.clone();
-		assertTrue("bad clone", this.bag != bag2);
-		assertEquals("bad clone", this.bag, bag2);
-		assertTrue("bad clone", this.bag.hashCode() == bag2.hashCode());
-	}
-	
-	public void testContains() {
-		assertTrue(this.bag.contains(null));
-		assertTrue(this.bag.contains(this.one));
-		assertTrue(this.bag.contains(this.two));
-		assertTrue(this.bag.contains(this.three));
-		assertTrue(this.bag.contains(this.four));
-
-		assertFalse(this.bag.contains(new String("four")));
-		assertFalse(this.bag.contains("five"));
-	}
-	
-	public void testContainsAll() {
-		Collection<String> c = new ArrayList<String>();
-		c.add(null);
-		c.add(this.one);
-		c.add(this.two);
-		c.add(this.three);
-		c.add(this.four);
-		assertTrue(this.bag.containsAll(c));
-		c.add(new String(this.four));
-		assertFalse(this.bag.containsAll(c));
-	}
-	
-	public void testCount() {
-		assertEquals(0, this.bag.count("zero"));
-		assertEquals(1, this.bag.count("one"));
-		assertEquals(2, this.bag.count("two"));
-		assertEquals(3, this.bag.count("three"));
-		assertEquals(4, this.bag.count("four"));
-		assertEquals(0, this.bag.count("five"));
-	}
-	
-	public void testEquals() {
-		IdentityHashBag<String> bag2 = this.buildBag();
-		assertEquals(this.bag, bag2);
-		bag2.add("five");
-		assertFalse(this.bag.equals(bag2));
-		Collection<String> c = new ArrayList<String>(this.bag);
-		assertFalse(this.bag.equals(c));
-	}
-	
-	public void testHashCode() {
-		IdentityHashBag<String> bag2 = this.buildBag();
-		assertEquals(this.bag.hashCode(), bag2.hashCode());
-	}
-	
-	public void testIsEmpty() {
-		assertFalse(this.bag.isEmpty());
-		this.bag.clear();
-		assertTrue(this.bag.isEmpty());
-		this.bag.add("foo");
-		assertFalse(this.bag.isEmpty());
-	}
-	
-	public void testEmptyIterator() {
-		this.bag.clear();
-		Iterator<String> iterator = this.bag.iterator();
-		assertFalse(iterator.hasNext());
-	
-		boolean exCaught = false;
-		Object element = null;
-		try {
-			element = iterator.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + element, exCaught);
-	
-		exCaught = false;
-		try {
-			iterator.remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalStateException not thrown", exCaught);
-	}
-	
-	public void testIterator() {
-		int i = 0;
-		Iterator<String> iterator = this.bag.iterator();
-		assertTrue(iterator.hasNext());
-		while (iterator.hasNext()) {
-			iterator.next();
-			i++;
-		}
-		assertEquals(11, i);
-		assertFalse(iterator.hasNext());
-	
-		boolean exCaught = false;
-		Object element = null;
-		try {
-			element = iterator.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + element, exCaught);
-	
-		iterator.remove();
-		assertEquals(10, this.bag.size());
-	
-		exCaught = false;
-		try {
-			iterator.remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalStateException not thrown", exCaught);
-	
-		// start over
-		iterator = this.bag.iterator();
-		this.bag.add("five");
-		exCaught = false;
-		try {
-			iterator.next();
-		} catch (ConcurrentModificationException ex) {
-			exCaught = true;
-		}
-		assertTrue("ConcurrentModificationException not thrown", exCaught);
-	}
-	
-	public void testUniqueIterator() {
-		int i = 0;
-		Iterator<String> iterator = this.bag.uniqueIterator();
-		assertTrue(iterator.hasNext());
-		while (iterator.hasNext()) {
-			iterator.next();
-			i++;
-		}
-		assertEquals(5, i);
-		assertFalse(iterator.hasNext());
-
-		boolean exCaught = false;
-		Object element = null;
-		try {
-			element = iterator.next();
-			fail(element.toString());
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		// start over
-		iterator = this.bag.uniqueIterator();
-		Object next = null;
-		while (iterator.hasNext() && !this.four.equals(next)) {
-			next = iterator.next();
-		}
-		iterator.remove();
-		assertEquals(7, this.bag.size());
-
-		exCaught = false;
-		try {
-			iterator.remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		// start over
-		iterator = this.bag.uniqueIterator();
-		String five = "five";
-		this.bag.add(five);
-		exCaught = false;
-		try {
-			iterator.next();
-		} catch (ConcurrentModificationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testEntries() {
-		int i = 0;
-		Iterator<org.eclipse.jpt.utility.internal.Bag.Entry<String>> iterator = this.bag.entries();
-		assertTrue(iterator.hasNext());
-		while (iterator.hasNext()) {
-			iterator.next();
-			i++;
-		}
-		assertEquals(5, i);
-		assertFalse(iterator.hasNext());
-
-		boolean exCaught = false;
-		Object element = null;
-		try {
-			element = iterator.next();
-			fail(element.toString());
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		// start over
-		iterator = this.bag.entries();
-		org.eclipse.jpt.utility.internal.Bag.Entry<String> next = null;
-		while (iterator.hasNext()) {
-			next = iterator.next();
-			if (next.getElement().equals(this.four)) {
-				iterator.remove();
-				break;
-			}
-		}
-		assertEquals(7, this.bag.size());
-
-		exCaught = false;
-		try {
-			iterator.remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		// start over
-		iterator = this.bag.entries();
-		String five = "five";
-		this.bag.add(five);
-		exCaught = false;
-		try {
-			iterator.next();
-		} catch (ConcurrentModificationException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testHashingDistribution() throws Exception {
-		IdentityHashBag<String> bigBag = new IdentityHashBag<String>();
-		for (int i = 0; i < 10000; i++) {
-			bigBag.add("object" + i);
-		}
-	
-		java.lang.reflect.Field field = bigBag.getClass().getDeclaredField("table");
-		field.setAccessible(true);
-		Object[] table = (Object[]) field.get(bigBag);
-		int bucketCount = table.length;
-		int filledBucketCount = 0;
-		for (int i = 0; i < bucketCount; i++) {
-			if (table[i] != null) {
-				filledBucketCount++;
-			}
-		}
-		float loadFactor = ((float) filledBucketCount) / ((float) bucketCount);
-		if ((loadFactor < 0.20) || (loadFactor > 0.80)) {
-			String msg = "poor load factor: " + loadFactor;
-			if (Tools.jvmIsSun()) {
-				fail(msg);
-			} else {
-				// poor load factor is seen in the Eclipse build environment for some reason...
-				System.out.println(this.getClass().getName() + '.' + this.getName() + " - " + msg);
-				TestTools.printSystemProperties();
-			}
-		}
-	}
-	
-	public void testRemove() {
-		assertTrue(this.bag.remove(this.one));
-		assertFalse(this.bag.contains(this.one));
-		assertFalse(this.bag.remove(this.one));
-	
-		assertTrue(this.bag.remove(this.two));
-		assertTrue(this.bag.remove(this.two));
-		assertFalse(this.bag.contains(this.two));
-		assertFalse(this.bag.remove(this.two));
-
-		assertFalse(this.bag.remove(new String(this.three)));
-	}
-	
-	public void testRemoveCount() {
-		assertFalse(this.bag.remove(this.one, 0));
-		assertTrue(this.bag.contains(this.one));
-
-		assertTrue(this.bag.remove(this.one, 1));
-		assertFalse(this.bag.contains(this.one));
-		assertFalse(this.bag.remove(this.one));
-
-		assertFalse(this.bag.remove(this.two, -3));
-		assertTrue(this.bag.remove(this.two, 1));
-		assertTrue(this.bag.contains(this.two));
-
-		assertTrue(this.bag.remove(this.two, 1));
-		assertFalse(this.bag.contains(this.two));
-		assertFalse(this.bag.remove(this.two));
-
-		assertTrue(this.bag.remove(this.three, 3));
-		assertFalse(this.bag.contains(this.three));
-		assertFalse(this.bag.remove(this.three));
-	}
-
-	public void testRemoveAll() {
-		Collection<String> c = new ArrayList<String>();
-		c.add(this.one);
-		c.add(new String(this.two));
-		c.add(this.three);
-		assertTrue(this.bag.removeAll(c));
-		assertFalse(this.bag.contains(this.one));
-		assertTrue(this.bag.contains(this.two));
-		assertFalse(this.bag.contains(this.three));
-		assertFalse(this.bag.remove(this.one));
-		assertTrue(this.bag.remove(this.two));
-		assertFalse(this.bag.remove(this.three));
-		assertFalse(this.bag.removeAll(c));
-	}
-	
-	public void testRetainAll() {
-		Collection<String> c = new ArrayList<String>();
-		c.add(this.one);
-		c.add(new String(this.two));
-		c.add(this.three);
-		assertTrue(this.bag.retainAll(c));
-		assertTrue(this.bag.contains(this.one));
-		assertFalse(this.bag.contains(this.two));
-		assertTrue(this.bag.contains(this.three));
-		assertFalse(this.bag.contains(this.four));
-		assertFalse(this.bag.remove(this.two));
-		assertFalse(this.bag.remove(this.four));
-		assertFalse(this.bag.retainAll(c));
-	}
-	
-	public void testSize() {
-		assertTrue(this.bag.size() == 11);
-		String five = "five";
-		this.bag.add(five);
-		this.bag.add(five);
-		this.bag.add(five);
-		this.bag.add(five);
-		this.bag.add(new String(five));
-		assertEquals(16, this.bag.size());
-	}
-	
-	public void testSerialization() throws Exception {
-		IdentityHashBag<String> bag2 = TestTools.serialize(this.bag);
-	
-		assertTrue("same object?", this.bag != bag2);
-		assertEquals(11, bag2.size());
-		assertEquals(CollectionTools.bag(this.bag.iterator()), CollectionTools.bag(bag2.iterator()));
-		// look for similar elements
-		assertTrue(CollectionTools.bag(bag2.iterator()).contains(null));
-		assertTrue(CollectionTools.bag(bag2.iterator()).contains("one"));
-		assertTrue(CollectionTools.bag(bag2.iterator()).contains("two"));
-		assertTrue(CollectionTools.bag(bag2.iterator()).contains("three"));
-		assertTrue(CollectionTools.bag(bag2.iterator()).contains("four"));
-	
-		int nullCount = 0, oneCount = 0, twoCount = 0, threeCount = 0, fourCount = 0;
-		for (String next : bag2) {
-			if (next == null)
-				nullCount++;
-			else if (next.equals("one"))
-				oneCount++;
-			else if (next.equals("two"))
-				twoCount++;
-			else if (next.equals("three"))
-				threeCount++;
-			else if (next.equals("four"))
-				fourCount++;
-		}
-		assertEquals(1, nullCount);
-		assertEquals(1, oneCount);
-		assertEquals(2, twoCount);
-		assertEquals(3, threeCount);
-		assertEquals(4, fourCount);
-	}
-	
-	public void testToArray() {
-		Object[] a = this.bag.toArray();
-		assertEquals(11, a.length);
-		assertTrue(ArrayTools.contains(a, null));
-		assertTrue(ArrayTools.contains(a, this.one));
-		assertTrue(ArrayTools.contains(a, this.two));
-		assertTrue(ArrayTools.contains(a, this.three));
-		assertTrue(ArrayTools.contains(a, this.four));
-	}
-	
-	public void testToArrayObjectArray() {
-		String[] a = new String[12];
-		a[11] = "not null";
-		String[] b = this.bag.toArray(a);
-		assertEquals(a, b);
-		assertEquals(12, a.length);
-		assertTrue(ArrayTools.contains(a, null));
-		assertTrue(ArrayTools.contains(a, this.one));
-		assertTrue(ArrayTools.contains(a, this.two));
-		assertTrue(ArrayTools.contains(a, this.three));
-		assertTrue(ArrayTools.contains(a, this.four));
-		assertTrue(a[11] == null);
-	}
-	
-	public void testToString() {
-		String s = this.bag.toString();
-		assertTrue(s.startsWith("["));
-		assertTrue(s.endsWith("]"));
-		int commaCount = 0;
-		for (int i = 0; i < s.length(); i++) {
-			if (s.charAt(i) == ',') {
-				commaCount++;
-			}
-		}
-		assertEquals("invalid number of commas", 10, commaCount);
-		assertTrue(s.indexOf("one") != -1);
-		assertTrue(s.indexOf("two") != -1);
-		assertTrue(s.indexOf("three") != -1);
-		assertTrue(s.indexOf("four") != -1);
-		assertTrue(s.indexOf("null") != -1);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/IndentingPrintWriterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/IndentingPrintWriterTests.java
deleted file mode 100644
index cb19b1c..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/IndentingPrintWriterTests.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.io.StringWriter;
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.IndentingPrintWriter;
-
-@SuppressWarnings("nls")
-public class IndentingPrintWriterTests extends TestCase {
-	StringWriter sw1;
-	StringWriter sw2;
-	IndentingPrintWriter ipw1;
-	IndentingPrintWriter ipw2;
-
-	static final String CR = System.getProperty("line.separator");
-
-	public IndentingPrintWriterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	public void setUp() throws Exception {
-		super.setUp();
-		this.sw1 = new StringWriter();
-		this.ipw1 = new IndentingPrintWriter(this.sw1);
-		this.sw2 = new StringWriter();
-		this.ipw2 = new IndentingPrintWriter(this.sw2, "    "); // indent with 4 spaces instead of a tab
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIndent() {
-		assertEquals("wrong indent level", 0, this.ipw1.getIndentLevel());
-		this.ipw1.indent();
-		assertEquals("wrong indent level", 1, this.ipw1.getIndentLevel());
-	}
-
-	public void testUndent() {
-		assertEquals("wrong indent level", 0, this.ipw1.getIndentLevel());
-		this.ipw1.indent();
-		assertEquals("wrong indent level", 1, this.ipw1.getIndentLevel());
-		this.ipw1.undent();
-		assertEquals("wrong indent level", 0, this.ipw1.getIndentLevel());
-	}
-
-	public void testIncrementIndentLevel() {
-		assertEquals("wrong indent level", 0, this.ipw1.getIndentLevel());
-		this.ipw1.incrementIndentLevel();
-		assertEquals("wrong indent level", 1, this.ipw1.getIndentLevel());
-	}
-
-	public void testDecrementIndentLevel() {
-		assertEquals("wrong indent level", 0, this.ipw1.getIndentLevel());
-		this.ipw1.incrementIndentLevel();
-		assertEquals("wrong indent level", 1, this.ipw1.getIndentLevel());
-		this.ipw1.decrementIndentLevel();
-		assertEquals("wrong indent level", 0, this.ipw1.getIndentLevel());
-	}
-
-	public void testPrintTab() {
-		String expected = "foo0" + CR + "\tfoo1" + CR + "\tfoo1" + CR + "\t\tfoo2" + CR + "\tfoo1" + CR + "\tfoo1" + CR + "foo0" + CR;
-
-		this.ipw1.println("foo0");
-		this.ipw1.indent();
-		this.ipw1.println("foo1");
-		this.ipw1.println("foo1");
-		this.ipw1.indent();
-		this.ipw1.println("foo2");
-		this.ipw1.undent();
-		this.ipw1.println("foo1");
-		this.ipw1.println("foo1");
-		this.ipw1.undent();
-		this.ipw1.println("foo0");
-
-		assertEquals("bogus output", expected, this.sw1.toString());
-	}
-
-	public void testPrintSpaces() {
-		String expected = "foo0" + CR + "    foo1" + CR + "    foo1" + CR + "        foo2" + CR + "    foo1" + CR + "    foo1" + CR + "foo0" + CR;
-
-		this.ipw2.println("foo0");
-		this.ipw2.indent();
-		this.ipw2.println("foo1");
-		this.ipw2.println("foo1");
-		this.ipw2.indent();
-		this.ipw2.println("foo2");
-		this.ipw2.undent();
-		this.ipw2.println("foo1");
-		this.ipw2.println("foo1");
-		this.ipw2.undent();
-		this.ipw2.println("foo0");
-
-		assertEquals("bogus output", expected, this.sw2.toString());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/IntReferenceTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/IntReferenceTests.java
deleted file mode 100644
index aaa5ea0..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/IntReferenceTests.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.IntReference;
-
-@SuppressWarnings("nls")
-public class IntReferenceTests extends TestCase {
-
-	public IntReferenceTests(String name) {
-		super(name);
-	}
-
-	public void testCtors() {
-		IntReference ir;
-		ir = new IntReference();
-		assertEquals(0, ir.getValue());
-		ir = new IntReference(7);
-		assertEquals(7, ir.getValue());
-		ir = new IntReference(-7);
-		assertEquals(-7, ir.getValue());
-	}
-
-	public void testEqualsInt() {
-		IntReference ir;
-		ir = new IntReference();
-		assertTrue(ir.equals(0));
-		assertFalse(ir.equals(7));
-
-		ir = new IntReference(7);
-		assertTrue(ir.equals(7));
-		assertFalse(ir.equals(0));
-	}
-
-	public void testNotEqualsInt() {
-		IntReference ir;
-		ir = new IntReference();
-		assertFalse(ir.notEquals(0));
-		assertTrue(ir.notEquals(7));
-
-		ir = new IntReference(7);
-		assertFalse(ir.notEquals(7));
-		assertTrue(ir.notEquals(0));
-	}
-
-	public void testIsZero() {
-		IntReference ir;
-		ir = new IntReference();
-		assertTrue(ir.isZero());
-
-		ir = new IntReference(7);
-		assertFalse(ir.isZero());
-	}
-
-	public void testIsNotZero() {
-		IntReference ir;
-		ir = new IntReference();
-		assertFalse(ir.isNotZero());
-
-		ir = new IntReference(7);
-		assertTrue(ir.isNotZero());
-	}
-
-	public void testIsGreaterThanInt() {
-		IntReference ir;
-		ir = new IntReference();
-		assertTrue(ir.isGreaterThan(-1));
-		assertFalse(ir.isGreaterThan(0));
-		assertFalse(ir.isGreaterThan(7));
-	}
-
-	public void testIsGreaterThanOrEqualInt() {
-		IntReference ir;
-		ir = new IntReference();
-		assertTrue(ir.isGreaterThanOrEqual(-1));
-		assertTrue(ir.isGreaterThanOrEqual(0));
-		assertFalse(ir.isGreaterThanOrEqual(7));
-	}
-
-	public void testIsLessThanInt() {
-		IntReference ir;
-		ir = new IntReference();
-		assertFalse(ir.isLessThan(-1));
-		assertFalse(ir.isLessThan(0));
-		assertTrue(ir.isLessThan(7));
-	}
-
-	public void testIsLessThanOrEqualInt() {
-		IntReference ir;
-		ir = new IntReference();
-		assertFalse(ir.isLessThanOrEqual(-1));
-		assertTrue(ir.isLessThanOrEqual(0));
-		assertTrue(ir.isLessThanOrEqual(7));
-	}
-
-	public void testIsPositive() {
-		IntReference ir;
-		ir = new IntReference(-3);
-		assertFalse(ir.isPositive());
-
-		ir = new IntReference();
-		assertFalse(ir.isPositive());
-
-		ir = new IntReference(7);
-		assertTrue(ir.isPositive());
-	}
-
-	public void testIsNotPositive() {
-		IntReference ir;
-		ir = new IntReference(-3);
-		assertTrue(ir.isNotPositive());
-
-		ir = new IntReference();
-		assertTrue(ir.isNotPositive());
-
-		ir = new IntReference(7);
-		assertFalse(ir.isNotPositive());
-	}
-
-	public void testIsNegative() {
-		IntReference ir;
-		ir = new IntReference(-3);
-		assertTrue(ir.isNegative());
-
-		ir = new IntReference();
-		assertFalse(ir.isNegative());
-
-		ir = new IntReference(7);
-		assertFalse(ir.isNegative());
-	}
-
-	public void testIsNotNegative() {
-		IntReference ir;
-		ir = new IntReference(-3);
-		assertFalse(ir.isNotNegative());
-
-		ir = new IntReference();
-		assertTrue(ir.isNotNegative());
-
-		ir = new IntReference(7);
-		assertTrue(ir.isNotNegative());
-	}
-
-	public void testSetValueInt() {
-		IntReference ir;
-		ir = new IntReference(-3);
-		assertEquals(-3, ir.getValue());
-		assertEquals(-3, ir.setValue(4));
-		assertEquals(4, ir.getValue());
-	}
-
-	public void testAbs() {
-		IntReference ir;
-		ir = new IntReference(-3);
-		assertEquals(-3, ir.getValue());
-		assertEquals(3, ir.abs());
-		assertEquals(3, ir.getValue());
-
-		ir.setValue(3);
-		assertEquals(3, ir.getValue());
-		assertEquals(3, ir.abs());
-		assertEquals(3, ir.getValue());
-	}
-
-	public void testNeg() {
-		IntReference ir;
-		ir = new IntReference(-3);
-		assertEquals(-3, ir.getValue());
-		assertEquals(3, ir.neg());
-		assertEquals(3, ir.getValue());
-
-		ir.setValue(3);
-		assertEquals(3, ir.getValue());
-		assertEquals(-3, ir.neg());
-		assertEquals(-3, ir.getValue());
-	}
-
-	public void testSetZero() {
-		IntReference ir;
-		ir = new IntReference(-3);
-		assertEquals(-3, ir.getValue());
-		assertEquals(-3, ir.setZero());
-		assertEquals(0, ir.getValue());
-	}
-
-	public void testAddInt() {
-		IntReference ir;
-		int value;
-		ir = new IntReference();
-		assertEquals(0, ir.getValue());
-
-		value = ir.add(3);
-		assertEquals(3, value);
-		assertEquals(3, ir.getValue());
-
-		value = ir.add(-7);
-		assertEquals(-4, value);
-		assertEquals(-4, ir.getValue());
-	}
-
-	public void testIncrement() {
-		IntReference ir;
-		int value;
-		ir = new IntReference();
-		assertEquals(0, ir.getValue());
-
-		value = ir.increment();
-		assertEquals(1, value);
-		assertEquals(1, ir.getValue());
-	}
-
-	public void testSubtractInt() {
-		IntReference ir;
-		int count;
-		ir = new IntReference();
-		assertEquals(0, ir.getValue());
-
-		count = ir.subtract(3);
-		assertEquals(-3, count);
-		assertEquals(-3, ir.getValue());
-
-		count = ir.subtract(-7);
-		assertEquals(4, count);
-		assertEquals(4, ir.getValue());
-	}
-
-	public void testDecrement() {
-		IntReference ir;
-		int count;
-		ir = new IntReference();
-		assertEquals(0, ir.getValue());
-
-		count = ir.decrement();
-		assertEquals(-1, count);
-		assertEquals(-1, ir.getValue());
-	}
-
-	public void testMultiplyInt() {
-		IntReference ir;
-		ir = new IntReference(3);
-		assertEquals(3, ir.getValue());
-		assertEquals(9, ir.multiply(3));
-		assertEquals(9, ir.getValue());
-	}
-
-	public void testDivideInt() {
-		IntReference ir;
-		ir = new IntReference(24);
-		assertEquals(24, ir.getValue());
-		assertEquals(8, ir.divide(3));
-		assertEquals(8, ir.getValue());
-	}
-
-	public void testRemainderInt() {
-		IntReference ir;
-		ir = new IntReference(25);
-		assertEquals(25, ir.getValue());
-		assertEquals(1, ir.remainder(3));
-		assertEquals(1, ir.getValue());
-	}
-
-	public void testMinInt() {
-		IntReference ir;
-		ir = new IntReference(25);
-		assertEquals(25, ir.getValue());
-		assertEquals(3, ir.min(3));
-		assertEquals(3, ir.getValue());
-		assertEquals(3, ir.min(25));
-		assertEquals(3, ir.getValue());
-	}
-
-	public void testMaxInt() {
-		IntReference ir;
-		ir = new IntReference(25);
-		assertEquals(25, ir.getValue());
-		assertEquals(25, ir.max(3));
-		assertEquals(25, ir.getValue());
-		assertEquals(30, ir.max(30));
-		assertEquals(30, ir.getValue());
-	}
-
-	public void testPowInt() {
-		IntReference ir;
-		ir = new IntReference(5);
-		assertEquals(5, ir.getValue());
-		assertEquals(25, ir.pow(2));
-		assertEquals(25, ir.getValue());
-		assertEquals(625, ir.pow(2));
-		assertEquals(625, ir.getValue());
-	}
-
-	public void testCompareToIntReference() {
-		IntReference ir1 = new IntReference(44);
-		IntReference ir2 = new IntReference(44);
-		assertTrue(ir1.compareTo(ir2) == 0);
-		ir2 = new IntReference(55);
-		assertTrue(ir1.compareTo(ir2) < 0);
-		ir2 = new IntReference(33);
-		assertTrue(ir1.compareTo(ir2) > 0);
-	}
-
-	public void testClone() {
-		IntReference ir1 = new IntReference(44);
-		IntReference ir2 = (IntReference) ir1.clone();
-		assertEquals(44, ir2.getValue());
-		assertEquals(ir1, ir2);
-		assertNotSame(ir1, ir2);
-	}
-
-	public void testEquals() {
-		IntReference ir1 = new IntReference(44);
-		IntReference ir2 = new IntReference(44);
-		assertEquals(ir1, ir2);
-		assertEquals(ir1.hashCode(), ir2.hashCode());
-		assertFalse(ir1.equals(null));
-	}
-
-	public void testSerialization() throws Exception {
-		IntReference ir1 = new IntReference(44);
-		IntReference ir2 = TestTools.serialize(ir1);
-		assertEquals(44, ir2.getValue());
-		assertEquals(ir1, ir2);
-		assertNotSame(ir1, ir2);
-	}
-
-	public void testToString() {
-		IntReference ir;
-		ir = new IntReference(5);
-		assertEquals("[5]", ir.toString());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JDBCTypeTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JDBCTypeTests.java
deleted file mode 100644
index 117aba6..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JDBCTypeTests.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.sql.Types;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.JDBCType;
-
-@SuppressWarnings("nls")
-public class JDBCTypeTests extends TestCase {
-
-	public JDBCTypeTests(String name) {
-		super(name);
-	}
-
-	public void testTypesSize() {
-		assertEquals(Types.class.getDeclaredFields().length, JDBCType.types().length);
-	}
-
-	public void testName() {
-		JDBCType jdbcType;
-		jdbcType = JDBCType.type(Types.VARCHAR);
-		assertEquals("VARCHAR", jdbcType.name());
-
-		jdbcType = JDBCType.type(Types.INTEGER);
-		assertEquals("INTEGER", jdbcType.name());
-	}
-
-	public void testCode() {
-		JDBCType jdbcType;
-		jdbcType = JDBCType.type(Types.VARCHAR);
-		assertEquals(Types.VARCHAR, jdbcType.code());
-
-		jdbcType = JDBCType.type(Types.INTEGER);
-		assertEquals(Types.INTEGER, jdbcType.code());
-	}
-
-	public void testInvalidTypeCode() throws Exception {
-		boolean exCaught = false;
-		try {
-			JDBCType jdbcType = JDBCType.type(55);
-			fail("invalid JDBCType: " + jdbcType);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidTypeName() throws Exception {
-		boolean exCaught = false;
-		try {
-			JDBCType jdbcType = JDBCType.type("VARCHAR2");
-			fail("invalid JDBCType: " + jdbcType);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JavaTypeTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JavaTypeTests.java
deleted file mode 100644
index eda195b..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JavaTypeTests.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.JavaType;
-import org.eclipse.jpt.utility.internal.SimpleJavaType;
-
-@SuppressWarnings("nls")
-public class JavaTypeTests extends TestCase {
-
-	public JavaTypeTests(String name) {
-		super(name);
-	}
-
-	public void testInvalidElementTypeNull() throws Exception {
-		boolean exCaught = false;
-		try {
-			JavaType javaType = new SimpleJavaType(null, 0);
-			fail("invalid JavaType: " + javaType);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidElementTypeEmpty() throws Exception {
-		boolean exCaught = false;
-		try {
-			JavaType javaType = new SimpleJavaType("", 0);
-			fail("invalid JavaType: " + javaType);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidElementTypeArray() throws Exception {
-		boolean exCaught = false;
-		try {
-			JavaType javaType = new SimpleJavaType(java.lang.Object[].class.getName(), 0);
-			fail("invalid JavaType: " + javaType);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidArrayDepthNegative() throws Exception {
-		boolean exCaught = false;
-		try {
-			JavaType javaType = new SimpleJavaType(java.lang.Object.class.getName(), -2);
-			fail("invalid JavaType: " + javaType);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidVoidArray() throws Exception {
-		boolean exCaught = false;
-		try {
-			JavaType javaType = new SimpleJavaType(void.class.getName(), 2);
-			fail("invalid JavaType: " + javaType);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testElementTypeName() throws Exception {
-		JavaType javaType;
-		javaType = new SimpleJavaType(java.lang.Object.class);
-		assertEquals("java.lang.Object", javaType.getElementTypeName());
-
-		javaType = new SimpleJavaType(java.lang.Object[].class);
-		assertEquals("java.lang.Object", javaType.getElementTypeName());
-
-		javaType = new SimpleJavaType(int.class);
-		assertEquals("int", javaType.getElementTypeName());
-
-		javaType = new SimpleJavaType(int[].class);
-		assertEquals("int", javaType.getElementTypeName());
-
-		javaType = new SimpleJavaType(void.class);
-		assertEquals("void", javaType.getElementTypeName());
-
-		javaType = new SimpleJavaType(java.util.Map.Entry.class);
-		assertEquals("java.util.Map$Entry", javaType.getElementTypeName());
-
-		javaType = new SimpleJavaType(java.util.Map.Entry[][].class);
-		assertEquals("java.util.Map$Entry", javaType.getElementTypeName());
-	}
-
-	public void testArrayDepth() throws Exception {
-		JavaType javaType;
-		javaType = new SimpleJavaType(java.lang.Object.class);
-		assertEquals(0, javaType.getArrayDepth());
-
-		javaType = new SimpleJavaType(java.lang.Object[].class);
-		assertEquals(1, javaType.getArrayDepth());
-
-		javaType = new SimpleJavaType(int.class);
-		assertEquals(0, javaType.getArrayDepth());
-
-		javaType = new SimpleJavaType(int[].class);
-		assertEquals(1, javaType.getArrayDepth());
-
-		javaType = new SimpleJavaType(void.class);
-		assertEquals(0, javaType.getArrayDepth());
-
-		javaType = new SimpleJavaType(java.util.Map.Entry.class);
-		assertEquals(0, javaType.getArrayDepth());
-
-		javaType = new SimpleJavaType(java.util.Map.Entry[][].class);
-		assertEquals(2, javaType.getArrayDepth());
-	}
-
-	public void testIsArray() throws Exception {
-		JavaType javaType;
-		javaType = new SimpleJavaType(java.lang.Object.class);
-		assertFalse(javaType.isArray());
-
-		javaType = new SimpleJavaType(java.lang.Object[].class);
-		assertTrue(javaType.isArray());
-
-		javaType = new SimpleJavaType(int.class);
-		assertFalse(javaType.isArray());
-
-		javaType = new SimpleJavaType(int[].class);
-		assertTrue(javaType.isArray());
-
-		javaType = new SimpleJavaType(void.class);
-		assertFalse(javaType.isArray());
-
-		javaType = new SimpleJavaType(java.util.Map.Entry.class);
-		assertFalse(javaType.isArray());
-
-		javaType = new SimpleJavaType(java.util.Map.Entry[][].class);
-		assertTrue(javaType.isArray());
-	}
-
-	public void testJavaClass() throws Exception {
-		this.verifyJavaClass(java.lang.Object.class);
-		this.verifyJavaClass(java.lang.Object[].class);
-		this.verifyJavaClass(int.class);
-		this.verifyJavaClass(int[].class);
-		this.verifyJavaClass(void.class);
-		this.verifyJavaClass(java.util.Map.Entry.class);
-		this.verifyJavaClass(java.util.Map.Entry[][].class);
-	}
-
-	private void verifyJavaClass(Class<?> javaClass) throws Exception {
-		JavaType javaType = new SimpleJavaType(javaClass);
-		assertEquals(javaClass, javaType.getJavaClass());
-	}
-
-	public void testJavaClassName() throws Exception {
-		JavaType javaType;
-		javaType = new SimpleJavaType(java.lang.Object.class);
-		assertEquals("java.lang.Object", javaType.getJavaClassName());
-
-		javaType = new SimpleJavaType(java.lang.Object[].class);
-		assertEquals("[Ljava.lang.Object;", javaType.getJavaClassName());
-
-		javaType = new SimpleJavaType(int.class);
-		assertEquals("int", javaType.getJavaClassName());
-
-		javaType = new SimpleJavaType(int[].class);
-		assertEquals("[I", javaType.getJavaClassName());
-
-		javaType = new SimpleJavaType(void.class);
-		assertEquals("void", javaType.getJavaClassName());
-
-		javaType = new SimpleJavaType(java.util.Map.Entry.class);
-		assertEquals("java.util.Map$Entry", javaType.getJavaClassName());
-
-		javaType = new SimpleJavaType(java.util.Map.Entry[][].class);
-		assertEquals("[[Ljava.util.Map$Entry;", javaType.getJavaClassName());
-	}
-
-	public void testDescribes() throws Exception {
-		this.verifyDescribes(java.lang.Object.class);
-		this.verifyDescribes(java.lang.Object[].class);
-		this.verifyDescribes(int.class);
-		this.verifyDescribes(int[].class);
-		this.verifyDescribes(void.class);
-		this.verifyDescribes(java.util.Map.Entry.class);
-		this.verifyDescribes(java.util.Map.Entry[][].class);
-	}
-
-	private void verifyDescribes(Class<?> javaClass) throws Exception {
-		JavaType javaType = new SimpleJavaType(javaClass);
-		assertTrue(javaType.describes(javaClass));
-	}
-
-	public void testDeclaration() throws Exception {
-		JavaType javaType;
-		javaType = new SimpleJavaType(java.lang.Object.class);
-		assertEquals("java.lang.Object", javaType.declaration());
-
-		javaType = new SimpleJavaType(java.lang.Object[].class);
-		assertEquals("java.lang.Object[]", javaType.declaration());
-
-		javaType = new SimpleJavaType(int.class);
-		assertEquals("int", javaType.declaration());
-
-		javaType = new SimpleJavaType(int[].class);
-		assertEquals("int[]", javaType.declaration());
-
-		javaType = new SimpleJavaType(void.class);
-		assertEquals("void", javaType.declaration());
-
-		javaType = new SimpleJavaType(java.util.Map.Entry.class);
-		assertEquals("java.util.Map.Entry", javaType.declaration());
-
-		javaType = new SimpleJavaType(java.util.Map.Entry[][].class);
-		assertEquals("java.util.Map.Entry[][]", javaType.declaration());
-	}
-
-	public void testIsPrimitive() throws Exception {
-		JavaType javaType;
-		javaType = new SimpleJavaType(java.lang.Object.class);
-		assertFalse(javaType.isPrimitive());
-
-		javaType = new SimpleJavaType(java.lang.Object[].class);
-		assertFalse(javaType.isPrimitive());
-
-		javaType = new SimpleJavaType(int.class);
-		assertTrue(javaType.isPrimitive());
-
-		javaType = new SimpleJavaType(int[].class);
-		assertFalse(javaType.isPrimitive());
-
-		javaType = new SimpleJavaType(void.class);
-		assertTrue(javaType.isPrimitive());
-
-		javaType = new SimpleJavaType(java.util.Map.Entry.class);
-		assertFalse(javaType.isPrimitive());
-
-		javaType = new SimpleJavaType(java.util.Map.Entry[][].class);
-		assertFalse(javaType.isPrimitive());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JptUtilityTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JptUtilityTests.java
deleted file mode 100644
index d602e5f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JptUtilityTests.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jpt.utility.tests.internal.enumerations.JptUtilityEnumerationsTests;
-import org.eclipse.jpt.utility.tests.internal.iterables.JptUtilityIterablesTests;
-import org.eclipse.jpt.utility.tests.internal.iterators.JptUtilityIteratorsTests;
-import org.eclipse.jpt.utility.tests.internal.model.JptUtilityModelTests;
-import org.eclipse.jpt.utility.tests.internal.node.JptUtilityNodeTests;
-import org.eclipse.jpt.utility.tests.internal.synchronizers.JptUtilitySynchronizersTests;
-
-/**
- * decentralize test creation code
- */
-public class JptUtilityTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUtilityTests.class.getPackage().getName());
-
-		suite.addTest(JptUtilityEnumerationsTests.suite());
-		suite.addTest(JptUtilityIterablesTests.suite());
-		suite.addTest(JptUtilityIteratorsTests.suite());
-		suite.addTest(JptUtilityModelTests.suite());
-		suite.addTest(JptUtilityNodeTests.suite());
-		suite.addTest(JptUtilitySynchronizersTests.suite());
-
-		suite.addTestSuite(ArrayToolsTests.class);
-		suite.addTestSuite(AsynchronousCommandExecutorTests.class);
-		suite.addTestSuite(BagTests.class);
-		suite.addTestSuite(BidiFilterTests.class);
-		suite.addTestSuite(BidiStringConverterTests.class);
-		suite.addTestSuite(BidiTransformerTests.class);
-		suite.addTestSuite(BitToolsTests.class);
-		suite.addTestSuite(BooleanReferenceTests.class);
-		suite.addTestSuite(BooleanToolsTests.class);
-		suite.addTestSuite(ClasspathTests.class);
-		suite.addTestSuite(ClassNameTests.class);
-		suite.addTestSuite(CollectionToolsTests.class);
-		suite.addTestSuite(CommandExecutorTests.class);
-		suite.addTestSuite(CommandRunnableTests.class);
-		suite.addTestSuite(CommandTests.class);
-		suite.addTestSuite(CompositeCommandTests.class);
-		suite.addTestSuite(ExceptionHandlerTests.class);
-		suite.addTestSuite(FileToolsTests.class);
-		suite.addTestSuite(FilterTests.class);
-		suite.addTestSuite(HashBagTests.class);
-		suite.addTestSuite(IdentityHashBagTests.class);
-		suite.addTestSuite(IndentingPrintWriterTests.class);
-		suite.addTestSuite(IntReferenceTests.class);
-		suite.addTestSuite(JavaTypeTests.class);
-		suite.addTestSuite(JDBCTypeTests.class);
-		suite.addTestSuite(ListenerListTests.class);
-		suite.addTestSuite(MethodSignatureTests.class);
-		suite.addTestSuite(NameToolsTests.class);
-		suite.addTestSuite(NotNullFilterTests.class);
-		suite.addTestSuite(ObjectReferenceTests.class);
-		suite.addTestSuite(RangeTests.class);
-		suite.addTestSuite(ReflectionToolsTests.class);
-		suite.addTestSuite(ReverseComparatorTests.class);
-		suite.addTestSuite(SimpleAssociationTests.class);
-		suite.addTestSuite(SimpleQueueTests.class);
-		suite.addTestSuite(SimpleStackTests.class);
-		suite.addTestSuite(StringToolsTests.class);
-		suite.addTestSuite(SynchronizedBooleanTests.class);
-		suite.addTestSuite(SynchronizedIntTests.class);
-		suite.addTestSuite(SynchronizedObjectTests.class);
-		suite.addTestSuite(SynchronizedQueueTests.class);
-		suite.addTestSuite(SynchronizedStackTests.class);
-		suite.addTestSuite(XMLStringEncoderTests.class);
-
-		return suite;
-	}
-
-	private JptUtilityTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ListenerListTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ListenerListTests.java
deleted file mode 100644
index 98cbfe6..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ListenerListTests.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.io.Serializable;
-import java.util.EventListener;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.ListenerList;
-import org.eclipse.jpt.utility.internal.Tools;
-
-@SuppressWarnings("nls")
-public class ListenerListTests extends TestCase {
-
-	public ListenerListTests(String name) {
-		super(name);
-	}
-
-	public void testGetListeners() throws Exception {
-		ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-		Listener listener1 = new LocalListener();
-		Listener listener2 = new LocalListener();
-		Iterable<Listener> listeners = listenerList.getListeners();
-		assertEquals(0, CollectionTools.size(listeners));
-
-		listenerList.add(listener1);
-		listenerList.add(listener2);
-		listeners = listenerList.getListeners();
-		assertEquals(2, CollectionTools.size(listeners));
-		assertTrue(CollectionTools.contains(listeners, listener1));
-		assertTrue(CollectionTools.contains(listeners, listener2));
-	}
-
-	public void testSize() throws Exception {
-		ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-		Listener listener1 = new LocalListener();
-		Listener listener2 = new LocalListener();
-		assertEquals(0, listenerList.size());
-
-		listenerList.add(listener1);
-		listenerList.add(listener2);
-		assertEquals(2, listenerList.size());
-	}
-
-	public void testIsEmpty() throws Exception {
-		ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-		Listener listener1 = new LocalListener();
-		Listener listener2 = new LocalListener();
-		assertTrue(listenerList.isEmpty());
-
-		listenerList.add(listener1);
-		listenerList.add(listener2);
-		assertFalse(listenerList.isEmpty());
-	}
-
-	public void testAdd_null() throws Exception {
-		ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-		boolean exCaught = false;
-		try {
-			listenerList.add(null);
-			fail("invalid listener list: " + listenerList);
-		} catch (NullPointerException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAdd_duplicate() throws Exception {
-		ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-		Listener listener = new LocalListener();
-		listenerList.add(listener);
-
-		boolean exCaught = false;
-		try {
-			listenerList.add(listener);
-			fail("invalid listener list: " + listenerList);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testRemove() throws Exception {
-		ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-		Listener listener1 = new LocalListener();
-		Listener listener2 = new LocalListener();
-		listenerList.add(listener1);
-		listenerList.add(listener2);
-		assertTrue(CollectionTools.contains(listenerList.getListeners(), listener1));
-		assertTrue(CollectionTools.contains(listenerList.getListeners(), listener2));
-
-		listenerList.remove(listener1);
-		assertFalse(CollectionTools.contains(listenerList.getListeners(), listener1));
-		assertTrue(CollectionTools.contains(listenerList.getListeners(), listener2));
-
-		listenerList.remove(listener2);
-		assertFalse(CollectionTools.contains(listenerList.getListeners(), listener2));
-	}
-
-	public void testRemove_null() throws Exception {
-		ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-		boolean exCaught = false;
-		try {
-			listenerList.remove(null);
-			fail("invalid listener list: " + listenerList);
-		} catch (NullPointerException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testRemove_unregistered() throws Exception {
-		ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-		Listener listener = new LocalListener();
-		listenerList.add(listener);
-		listenerList.remove(listener);
-
-		boolean exCaught = false;
-		try {
-			listenerList.remove(listener);
-			fail("invalid listener list: " + listenerList);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testClear() throws Exception {
-		ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-		Listener listener1 = new LocalListener();
-		Listener listener2 = new LocalListener();
-		listenerList.add(listener1);
-		listenerList.add(listener2);
-		assertTrue(CollectionTools.contains(listenerList.getListeners(), listener1));
-		assertTrue(CollectionTools.contains(listenerList.getListeners(), listener2));
-
-		listenerList.clear();
-		assertFalse(CollectionTools.contains(listenerList.getListeners(), listener1));
-		assertFalse(CollectionTools.contains(listenerList.getListeners(), listener2));
-	}
-
-	public void testSerialization() throws Exception {
-		// This test doesn't pass in the Eclipse build environment (Linux/IBM VM) for some reason
-		if (Tools.jvmIsSun()) {
-			this.verifySerialization();
-		}
-	}
-
-	private void verifySerialization() throws Exception {
-		ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class);
-		Listener listener1 = new LocalListener();
-		Listener listener2 = new LocalListener();
-		listenerList.add(listener1);
-		listenerList.add(listener2);
-
-		ListenerList<Listener> listenerList2 = TestTools.serialize(listenerList);
-		assertNotSame(listenerList, listenerList2);
-		assertEquals(2, listenerList2.size());
-
-		Listener listener3 = new NonSerializableListener();
-		listenerList.add(listener3);
-
-		listenerList2 = TestTools.serialize(listenerList);
-		assertNotSame(listenerList, listenerList2);
-		assertEquals(2, listenerList2.size());
-
-	}
-
-	interface Listener extends EventListener {
-		void somethingHappened();
-	}
-	
-	static class LocalListener implements Listener, Serializable {
-		public void somethingHappened() {
-			// do nothing
-		}
-	}
-	
-	static class NonSerializableListener implements Listener {
-		public void somethingHappened() {
-			// do nothing
-		}
-	}
-	
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/MethodSignatureTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/MethodSignatureTests.java
deleted file mode 100644
index 62aae52..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/MethodSignatureTests.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.JavaType;
-import org.eclipse.jpt.utility.MethodSignature;
-import org.eclipse.jpt.utility.internal.SimpleJavaType;
-import org.eclipse.jpt.utility.internal.SimpleMethodSignature;
-
-@SuppressWarnings("nls")
-public class MethodSignatureTests extends TestCase {
-
-	public MethodSignatureTests(String name) {
-		super(name);
-	}
-
-	public void testInvalidNameNull() throws Exception {
-		boolean exCaught = false;
-		try {
-			MethodSignature methodSignature = new SimpleMethodSignature((String) null);
-			fail("invalid MethodSignature: " + methodSignature);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidNameEmpty() throws Exception {
-		boolean exCaught = false;
-		try {
-			MethodSignature methodSignature = new SimpleMethodSignature("");
-			fail("invalid MethodSignature: " + methodSignature);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidParameterTypesNull() throws Exception {
-		boolean exCaught = false;
-		try {
-			MethodSignature methodSignature = new SimpleMethodSignature("foo", (JavaType[]) null);
-			fail("invalid MethodSignature: " + methodSignature);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidParameterTypesNullItem() throws Exception {
-		boolean exCaught = false;
-		try {
-			MethodSignature methodSignature = new SimpleMethodSignature("foo", new JavaType[1]);
-			fail("invalid MethodSignature: " + methodSignature);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidParameterTypesVoidItem() throws Exception {
-		JavaType jt = new SimpleJavaType(void.class.getName());
-		boolean exCaught = false;
-		try {
-			MethodSignature methodSignature = new SimpleMethodSignature("foo", new JavaType[] {jt});
-			fail("invalid MethodSignature: " + methodSignature);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidParameterTypeNamesNull() throws Exception {
-		boolean exCaught = false;
-		try {
-			MethodSignature methodSignature = new SimpleMethodSignature("foo", (String[]) null);
-			fail("invalid MethodSignature: " + methodSignature);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidParameterTypeNamesNullItem() throws Exception {
-		boolean exCaught = false;
-		try {
-			MethodSignature methodSignature = new SimpleMethodSignature("foo", new String[1]);
-			fail("invalid MethodSignature: " + methodSignature);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidParameterJavaClassesNull() throws Exception {
-		boolean exCaught = false;
-		try {
-			MethodSignature methodSignature = new SimpleMethodSignature("foo", (Class<?>[]) null);
-			fail("invalid MethodSignature: " + methodSignature);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidParameterJavaClassesNullItem() throws Exception {
-		boolean exCaught = false;
-		try {
-			MethodSignature methodSignature = new SimpleMethodSignature("foo", new Class[1]);
-			fail("invalid MethodSignature: " + methodSignature);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testGetSignature0() throws Exception {
-		MethodSignature ms = new SimpleMethodSignature(this.getMethod("method0"));
-		assertEquals("method0()", ms.getSignature());
-	}
-
-	public void testGetSignature1() throws Exception {
-		MethodSignature ms = new SimpleMethodSignature(this.getMethod("method1"));
-		assertEquals("method1(int)", ms.getSignature());
-	}
-
-	public void testGetSignature2() throws Exception {
-		MethodSignature ms = new SimpleMethodSignature(this.getMethod("method2"));
-		assertEquals("method2(int, java.lang.String)", ms.getSignature());
-	}
-
-	public void testGetSignature3() throws Exception {
-		MethodSignature ms = new SimpleMethodSignature(this.getMethod("method3"));
-		assertEquals("method3(int, java.lang.String, java.lang.Object[][])", ms.getSignature());
-	}
-
-	public void testGetName() throws Exception {
-		MethodSignature ms = new SimpleMethodSignature(this.getMethod("method2"));
-		assertEquals("method2", ms.getName());
-	}
-
-	public void testGetParameterTypes() throws Exception {
-		MethodSignature ms = new SimpleMethodSignature(this.getMethod("method3"));
-		JavaType[] expected = new JavaType[3];
-		expected[0] = new SimpleJavaType("int");
-		expected[1] = new SimpleJavaType("java.lang.String");
-		expected[2] = new SimpleJavaType("java.lang.Object", 2);
-		assertTrue(Arrays.equals(expected, ms.getParameterTypes()));
-	}
-
-	public void testEquals() throws Exception {
-		Object ms1 = new SimpleMethodSignature(this.getMethod("method3"));
-		Object ms2 = new SimpleMethodSignature(this.getMethod("method3"));
-		assertNotSame(ms1, ms2);
-		assertEquals(ms1, ms1);
-		assertEquals(ms1, ms2);
-		assertEquals(ms1.hashCode(), ms2.hashCode());
-
-		Object ms3 = new SimpleMethodSignature(this.getMethod("method2"));
-		assertNotSame(ms1, ms3);
-		assertFalse(ms1.equals(ms3));
-	}
-
-	public void testClone() throws Exception {
-		SimpleMethodSignature ms1 = new SimpleMethodSignature(this.getMethod("method3"));
-		SimpleMethodSignature ms2 = (SimpleMethodSignature) ms1.clone();
-		assertNotSame(ms1, ms2);
-		assertEquals(ms1, ms2);
-	}
-
-	public void testSerialization() throws Exception {
-		SimpleMethodSignature ms1 = new SimpleMethodSignature(this.getMethod("method3"));
-		SimpleMethodSignature ms2 = TestTools.serialize(ms1);
-		assertNotSame(ms1, ms2);
-		assertEquals(ms1, ms2);
-	}
-
-	private Method getMethod(String methodName) {
-		for (Method method : this.getClass().getMethods()) {
-			if (method.getName().equals(methodName)) {
-				return method;
-			}
-		}
-		throw new IllegalArgumentException("method not found: " + methodName);
-	}
-
-	public void method0() { /* used by tests */ }
-	@SuppressWarnings("unused") public void method1(int foo) { /* used by tests */ }
-	@SuppressWarnings("unused") public void method2(int foo, String bar) { /* used by tests */ }
-	@SuppressWarnings("unused") public void method3(int foo, String bar, Object[][] baz) { /* used by tests */ }
-
-	@SuppressWarnings("unused") public void methodA(int foo, String bar) { /* used by tests */ }
-	@SuppressWarnings("unused") public void methodA(int foo, String bar, String baz) { /* used by tests */ }
-
-	@SuppressWarnings("unused") public void methodB(int foo, Object bar) { /* used by tests */ }
-	@SuppressWarnings("unused") public void methodB(int foo, String bar) { /* used by tests */ }
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/MultiThreadedTestCase.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/MultiThreadedTestCase.java
deleted file mode 100644
index 0fae1fe..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/MultiThreadedTestCase.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.util.ArrayList;
-import java.util.Vector;
-import java.util.concurrent.ThreadFactory;
-
-import org.eclipse.jpt.utility.internal.CompositeException;
-
-import junit.framework.TestCase;
-
-/**
- * This test case helps simplify the testing of multi-threaded code.
- */
-@SuppressWarnings("nls")
-public abstract class MultiThreadedTestCase
-	extends TestCase
-{
-	private final ArrayList<Thread> threads = new ArrayList<Thread>();
-	/* private */ final Vector<Throwable> exceptions = new Vector<Throwable>();
-
-	/**
-	 * The default "tick" is one second.
-	 * Specify the appropriate system property to override.
-	 */
-	public static final String TICK_SYSTEM_PROPERTY_NAME = "org.eclipse.jpt.utility.tests.tick";
-	public static final long TICK = Long.getLong(TICK_SYSTEM_PROPERTY_NAME, 1000).longValue();
-	public static final long TWO_TICKS = 2 * TICK;
-	public static final long THREE_TICKS = 3 * TICK;
-
-	/**
-	 * Default constructor.
-	 */
-	public MultiThreadedTestCase() {
-		super();
-	}
-
-	/**
-	 * Named constructor.
-	 */
-	public MultiThreadedTestCase(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-	}
-
-	/**
-	 * Stop all the threads constructed during the test case.
-	 * If any exceptions were thrown by the threads, re-throw them here.
-	 */
-	@Override
-	protected void tearDown() throws Exception {
-		for (Thread thread : this.threads) {
-			if (thread.isAlive()) {
-				throw new IllegalStateException("thread is still alive: " + thread);
-			}
-		}
-		if ( ! this.exceptions.isEmpty()) {
-			throw new CompositeException(this.exceptions);
-		}
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	protected Thread buildThread(Runnable runnable) {
-		return this.buildThread(runnable, null);
-	}
-
-	protected Thread buildThread(Runnable runnable, String name) {
-		Thread thread = new Thread(new RunnableWrapper(runnable));
-		if (name != null) {
-			thread.setName(name);
-		}
-		this.threads.add(thread);
-		return thread;
-	}
-
-	protected ThreadFactory buildThreadFactory() {
-		return new TestThreadFactory();
-	}
-
-	/**
-	 * Convenience method that handles {@link InterruptedException}.
-	 */
-	public void sleep(long millis) {
-		TestTools.sleep(millis);
-	}
-
-
-	/**
-	 * Wrap a runnable and log any exception it throws.
-	 */
-	public class TestThreadFactory implements ThreadFactory {
-		public Thread newThread(Runnable r) {
-			return MultiThreadedTestCase.this.buildThread(r);
-		}
-	}
-
-	/**
-	 * Simplify runnables that execute call that throws checked exceptions.
-	 */
-	public abstract class TestRunnable implements Runnable {
-		public final void run() {
-			try {
-				this.run_();
-			} catch (Throwable ex) {
-				throw new RuntimeException(ex);
-			}
-		}
-		protected abstract void run_() throws Throwable;
-	}
-
-	/**
-	 * Wrap a runnable and log any exception it throws.
-	 */
-	private class RunnableWrapper implements Runnable {
-		private final Runnable runnable;
-		RunnableWrapper(Runnable runnable) {
-			super();
-			this.runnable = runnable;
-		}
-		public void run() {
-			try {
-				this.runnable.run();
-			} catch (Throwable ex) {
-				MultiThreadedTestCase.this.exceptions.add(ex);
-			}
-		}
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/NameToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/NameToolsTests.java
deleted file mode 100644
index a389583..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/NameToolsTests.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.NameTools;
-
-@SuppressWarnings("nls")
-public class NameToolsTests extends TestCase {
-
-	public NameToolsTests(String name) {
-		super(name);
-	}
-
-	public void testStringAbsentIgnoreCase() {
-		List<String> colorCollection = this.buildColorCollection();
-		String returned = NameTools.uniqueNameForIgnoreCase("Taupe", colorCollection);
-		assertEquals("Taupe", returned);
-	}
-
-	public void testStringPresentCaseDiffers() {
-		List<String> colorCollection = this.buildColorCollection();
-		String returned = NameTools.uniqueNameFor("green", colorCollection);
-		assertEquals("green", returned);
-	}
-
-	public void testStringPresentIgnoreCase() {
-		List<String> colorCollection = this.buildColorCollection();
-		String returned = NameTools.uniqueNameForIgnoreCase("green", colorCollection);
-		assertEquals("green2", returned);
-	}
-
-	public void testStringPresentWithAppendices() {
-		List<String> colorCollection = this.buildColorCollection();
-		colorCollection.add("Red1");
-		colorCollection.add("red2");
-		String returned = NameTools.uniqueNameForIgnoreCase("red", colorCollection);
-		colorCollection.remove("Red1");
-		colorCollection.remove("red2");
-		assertEquals("red3", returned);
-	}
-
-	private List<String> buildColorCollection() {
-		List<String> colorCollection = new ArrayList<String>();
-		colorCollection.add("Red");
-		colorCollection.add("Orange");
-		colorCollection.add("Yellow");
-		colorCollection.add("Green");
-		colorCollection.add("Blue");
-		colorCollection.add("Indigo");
-		colorCollection.add("Violet");
-		return colorCollection;
-	}
-
-	public void testUniqueNameForCollection1() {
-		Collection<String> strings = new ArrayList<String>();
-		strings.add("Oracle");
-		strings.add("Oracle Corporation");
-		strings.add("Oracle2");
-		strings.add("oracle1");
-		strings.add("Oracl");
-
-		assertEquals("Oracle3", NameTools.uniqueNameFor("Oracle", strings));
-		assertEquals("Test", NameTools.uniqueNameFor("Test", strings));
-
-		assertEquals("Oracle3", NameTools.uniqueNameForIgnoreCase("Oracle", strings));
-		assertEquals("oracle3", NameTools.uniqueNameForIgnoreCase("oracle", strings));
-		assertEquals("Test", NameTools.uniqueNameForIgnoreCase("Test", strings));
-	}
-
-	public void testUniqueNameForCollection2() {
-		Collection<String> strings = new ArrayList<String>();
-		strings.add("Oracle");
-		strings.add("oracle");
-		strings.add("Oracle2");
-		strings.add("Oracle1");
-
-		assertEquals("Oracle3", NameTools.uniqueNameFor("Oracle", strings));
-		assertEquals("Test", NameTools.uniqueNameFor("Test", strings));
-
-		strings.add("Oracle Corporation");
-		assertEquals("Oracle3", NameTools.uniqueNameForIgnoreCase("Oracle", strings));
-		assertEquals("oracle3", NameTools.uniqueNameForIgnoreCase("oracle", strings));
-		assertEquals("Test", NameTools.uniqueNameForIgnoreCase("Test", strings));
-	}
-
-	public void testUniqueNameForCollection3() {
-		Collection<String> strings = new ArrayList<String>();
-		strings.add("Oracle");
-		strings.add("Oracle");
-		strings.add("Oracle2");
-		strings.add("Oracle1");
-
-		assertEquals("Oracle3", NameTools.uniqueNameFor("Oracle", strings));
-	}
-
-	public void testUniqueNameForIterator1() {
-		Collection<String> strings = new ArrayList<String>();
-		strings.add("Oracle");
-		strings.add("Oracle Corporation");
-		strings.add("Oracle2");
-		strings.add("oracle1");
-		strings.add("Oracl");
-
-		assertEquals("Oracle3", NameTools.uniqueNameFor("Oracle", strings.iterator()));
-		assertEquals("Test", NameTools.uniqueNameFor("Test", strings.iterator()));
-
-		assertEquals("Oracle3", NameTools.uniqueNameForIgnoreCase("Oracle", strings.iterator()));
-		assertEquals("oracle3", NameTools.uniqueNameForIgnoreCase("oracle", strings.iterator()));
-		assertEquals("Test", NameTools.uniqueNameForIgnoreCase("Test", strings.iterator()));
-	}
-
-	public void testUniqueNameForIterator2() {
-		Collection<String> strings = new ArrayList<String>();
-		strings.add("Oracle");
-		strings.add("oracle");
-		strings.add("Oracle2");
-		strings.add("Oracle1");
-
-		assertEquals("Oracle3", NameTools.uniqueNameFor("Oracle", strings.iterator()));
-		assertEquals("Test", NameTools.uniqueNameFor("Test", strings.iterator()));
-
-		strings.add("Oracle Corporation");
-		assertEquals("Oracle3", NameTools.uniqueNameForIgnoreCase("Oracle", strings.iterator()));
-		assertEquals("oracle3", NameTools.uniqueNameForIgnoreCase("oracle", strings.iterator()));
-		assertEquals("Test", NameTools.uniqueNameForIgnoreCase("Test", strings.iterator()));
-	}
-
-	public void testUniqueNameForIterator3() {
-		Collection<String> strings = new ArrayList<String>();
-		strings.add("Oracle");
-		strings.add("Oracle");
-		strings.add("Oracle2");
-		strings.add("Oracle1");
-
-		assertEquals("Oracle3", NameTools.uniqueNameFor("Oracle", strings.iterator()));
-	}
-
-	public void testBuildQualifiedDatabaseObjectName() {
-		assertEquals("catalog.schema.name", NameTools.buildQualifiedDatabaseObjectName("catalog", "schema", "name"));
-		assertEquals("catalog..name", NameTools.buildQualifiedDatabaseObjectName("catalog", null, "name"));
-		assertEquals("schema.name", NameTools.buildQualifiedDatabaseObjectName(null, "schema", "name"));
-		assertEquals("name", NameTools.buildQualifiedDatabaseObjectName(null, null, "name"));
-	}
-
-	public void testJavaReservedWords() {
-		assertTrue(CollectionTools.contains(NameTools.javaReservedWords(), "class"));
-		assertFalse(CollectionTools.contains(NameTools.javaReservedWords(), "Class"));
-		assertTrue(CollectionTools.contains(NameTools.javaReservedWords(), "private"));
-	}
-
-	public void testconvertToJavaIdentifierString() {
-		assertEquals("foo", NameTools.convertToJavaIdentifier("foo"));
-		assertEquals("foo1", NameTools.convertToJavaIdentifier("foo1"));
-		assertEquals("private_", NameTools.convertToJavaIdentifier("private"));
-		assertEquals("throw_", NameTools.convertToJavaIdentifier("throw"));
-		assertEquals("_foo", NameTools.convertToJavaIdentifier("1foo"));
-		assertEquals("foo_", NameTools.convertToJavaIdentifier("foo%"));
-		assertEquals("foo__bar__", NameTools.convertToJavaIdentifier("foo  bar  "));
-	}
-
-	public void testconvertToJavaIdentifierStringChar() {
-		assertEquals("foo", NameTools.convertToJavaIdentifier("foo", '$'));
-		assertEquals("foo1", NameTools.convertToJavaIdentifier("foo1", '$'));
-		assertEquals("private$", NameTools.convertToJavaIdentifier("private", '$'));
-		assertEquals("throwss", NameTools.convertToJavaIdentifier("throw", 's'));
-		assertEquals("$foo", NameTools.convertToJavaIdentifier("1foo", '$'));
-		assertEquals("foo$", NameTools.convertToJavaIdentifier("foo%", '$'));
-		assertEquals("foo$$bar$$", NameTools.convertToJavaIdentifier("foo  bar  ", '$'));
-
-		boolean exCaught = false;
-		try {
-			String s = NameTools.convertToJavaIdentifier("1foo", '7');
-			fail("invalid string: \"" + s + "\"");
-		} catch (IllegalArgumentException ex) {
-			if (ex.getMessage().indexOf('7') != -1) {
-				exCaught = true;
-			}
-		}
-		assertTrue(exCaught);
-
-		exCaught = false;
-		try {
-			String s = NameTools.convertToJavaIdentifier("foo%", '^');
-			fail("invalid string: \"" + s + "\"");
-		} catch (IllegalArgumentException ex) {
-			if (ex.getMessage().indexOf('^') != -1) {
-				exCaught = true;
-			}
-		}
-		assertTrue(exCaught);
-
-		exCaught = false;
-		try {
-			String s = NameTools.convertToJavaIdentifier("private", '^');
-			fail("invalid string: \"" + s + "\"");
-		} catch (IllegalArgumentException ex) {
-			if (ex.getMessage().indexOf('^') != -1) {
-				exCaught = true;
-			}
-		}
-		assertTrue(exCaught);
-
-	}
-
-	public void testStringIsLegalJavaIdentifier() {
-		assertFalse(NameTools.stringIsLegalJavaIdentifier("class"));
-		assertTrue(NameTools.stringIsLegalJavaIdentifier("clasS"));
-
-		assertFalse(NameTools.stringIsLegalJavaIdentifier("7foo"));
-		assertFalse(NameTools.stringIsLegalJavaIdentifier("foo@bar"));
-		assertTrue(NameTools.stringIsLegalJavaIdentifier("_foo"));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/NotNullFilterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/NotNullFilterTests.java
deleted file mode 100644
index 9d092f4..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/NotNullFilterTests.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.Filter;
-import org.eclipse.jpt.utility.internal.NotNullFilter;
-
-@SuppressWarnings("nls")
-public class NotNullFilterTests extends TestCase {
-
-	public NotNullFilterTests(String name) {
-		super(name);
-	}
-
-	public void testNotNullFilter() {
-		Filter<String> filter = NotNullFilter.instance();
-		assertTrue(filter.accept(""));
-		assertFalse(filter.accept(null));
-		assertTrue(filter.accept("foo"));
-		assertTrue(filter.accept("bar"));
-	}
-
-	public void testToString() {
-		Filter<String> filter = NotNullFilter.instance();
-		assertNotNull(filter.toString());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ObjectReferenceTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ObjectReferenceTests.java
deleted file mode 100644
index 5637472..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ObjectReferenceTests.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.ObjectReference;
-
-@SuppressWarnings("nls")
-public class ObjectReferenceTests extends TestCase {
-
-	public ObjectReferenceTests(String name) {
-		super(name);
-	}
-
-	public void testGetValue() {
-		ObjectReference<String> or = new ObjectReference<String>();
-		assertNull(or.getValue());
-		or.setValue("foo");
-		assertEquals("foo", or.getValue());
-	}
-
-	public void testValueEqualsObject() {
-		ObjectReference<String> or = new ObjectReference<String>();
-		assertTrue(or.valueEquals(null));
-		assertFalse(or.valueEquals("foo"));
-
-		or.setValue("foo");
-		assertFalse(or.valueEquals(null));
-		assertTrue(or.valueEquals("foo"));
-	}
-
-	public void testValueNotEqualObject() {
-		ObjectReference<String> or = new ObjectReference<String>();
-		assertFalse(or.valueNotEqual(null));
-		assertTrue(or.valueNotEqual("foo"));
-
-		or.setValue("foo");
-		assertTrue(or.valueNotEqual(null));
-		assertFalse(or.valueNotEqual("foo"));
-	}
-
-	public void testIsNull() {
-		ObjectReference<String> or = new ObjectReference<String>();
-		assertTrue(or.isNull());
-		or.setValue("foo");
-		assertFalse(or.isNull());
-	}
-
-	public void testIsNotNull() {
-		ObjectReference<String> or = new ObjectReference<String>();
-		assertFalse(or.isNotNull());
-		or.setValue("foo");
-		assertTrue(or.isNotNull());
-	}
-
-	public void testSetNull() {
-		ObjectReference<String> or = new ObjectReference<String>();
-		assertNull(or.getValue());
-		or.setValue("foo");
-		assertEquals("foo", or.getValue());
-		or.setNull();
-		assertNull(or.getValue());
-	}
-
-	public void testClone() {
-		ObjectReference<String> or = new ObjectReference<String>("foo");
-		@SuppressWarnings("cast")
-		ObjectReference<String> clone = (ObjectReference<String>) or.clone();
-		assertEquals("foo", clone.getValue());
-		assertEquals(or, clone);
-	}
-
-	public void testEquals() {
-		ObjectReference<String> or1 = new ObjectReference<String>("foo");
-		ObjectReference<String> or2 = new ObjectReference<String>("foo");
-		assertTrue(or1.equals(or2));
-		ObjectReference<String> or3 = new ObjectReference<String>("bar");
-		assertFalse(or1.equals(or3));
-	}
-
-	public void testHashCode() {
-		ObjectReference<String> or = new ObjectReference<String>();
-		assertEquals(0, or.hashCode());
-		or.setValue("foo");
-		assertEquals("foo".hashCode(), or.hashCode());
-	}
-
-	public void testToString() {
-		ObjectReference<String> or = new ObjectReference<String>();
-		assertEquals("[null]", or.toString());
-		or.setValue("foo");
-		assertEquals("[foo]", or.toString());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/RangeTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/RangeTests.java
deleted file mode 100644
index d7f2cce..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/RangeTests.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2007 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.Range;
-
-public class RangeTests extends TestCase {
-
-	public RangeTests(String name) {
-		super(name);
-	}
-
-	public void testIncludes() {
-		Range range = new Range(5, 17);
-		assertFalse(range.includes(-55));
-		assertFalse(range.includes(0));
-		assertFalse(range.includes(4));
-		assertTrue(range.includes(5));
-		assertTrue(range.includes(6));
-		assertTrue(range.includes(16));
-		assertTrue(range.includes(17));
-		assertFalse(range.includes(18));
-		assertFalse(range.includes(200));
-	}
-
-	public void testEquals() {
-		Range range1 = new Range(5, 17);
-		Range range2 = new Range(5, 17);
-		assertNotSame(range1, range2);
-		assertEquals(range1, range1);
-		assertEquals(range1, range2);
-		assertEquals(range2, range1);
-		assertEquals(range1.hashCode(), range2.hashCode());
-
-		range2 = new Range(17, 5);
-		assertFalse(range1.equals(range2));
-		assertFalse(range2.equals(range1));
-		// although they are unequal, they can have the same hash code
-		assertEquals(range1.hashCode(), range2.hashCode());
-
-		range2 = new Range(5, 15);
-		assertFalse(range1.equals(range2));
-		assertFalse(range2.equals(range1));
-	}
-
-	public void testClone() {
-		Range range1 = new Range(5, 17);
-		Range range2 = range1.clone();
-		assertNotSame(range1, range2);
-		assertEquals(range1, range1);
-		assertEquals(range1, range2);
-		assertEquals(range2, range1);
-		assertEquals(range1.hashCode(), range2.hashCode());
-	}
-
-	public void testSerialization() throws Exception {
-		Range range1 = new Range(5, 17);
-		Range range2 = TestTools.serialize(range1);
-		assertNotSame(range1, range2);
-		assertEquals(range1, range1);
-		assertEquals(range1, range2);
-		assertEquals(range2, range1);
-		assertEquals(range1.hashCode(), range2.hashCode());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReflectionToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReflectionToolsTests.java
deleted file mode 100644
index afdfc67..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReflectionToolsTests.java
+++ /dev/null
@@ -1,440 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.Vector;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
-
-@SuppressWarnings("nls")
-public class ReflectionToolsTests extends TestCase {
-
-	private static String testStaticField;
-
-	public ReflectionToolsTests(String name) {
-		super(name);
-	}
-
-// this is no longer true - it appears the JLS now defines the generated names...
-//	/**
-//	 * Return the compiler-generated class name. The Eclipse compiler generates
-//	 * "local" classes with names in the form "com.foo.Outer$1$Local"; while the
-//	 * JDK compiler generates "com.foo.Outer$1Local". There might be other
-//	 * differences.... ~bjv
-//	 */
-//	public static String compilerDependentClassNameFor(String className) {
-//		int index = className.indexOf("$1$");
-//		if (index == -1) {
-//			return className;
-//		}
-//		try {
-//			Class.forName(className);
-//		} catch (ClassNotFoundException ex) {
-//			return className.substring(0, index + 2) + className.substring(index + 3);
-//		}
-//		return className;
-//	}
-//
-//	private static String munge(String className) {
-//		return compilerDependentClassNameFor(className);
-//	}
-
-	public void testAllFields() {
-		int fieldCount = 0;
-		fieldCount += java.util.Vector.class.getDeclaredFields().length;
-		fieldCount += java.util.AbstractList.class.getDeclaredFields().length;
-		fieldCount += java.util.AbstractCollection.class.getDeclaredFields().length;
-		fieldCount += java.lang.Object.class.getDeclaredFields().length;
-		Iterable<Field> fields = ReflectionTools.getAllFields(java.util.Vector.class);
-		assertEquals(fieldCount, CollectionTools.size(fields));
-		assertTrue(CollectionTools.contains(this.fieldNames(fields), "modCount"));
-		assertTrue(CollectionTools.contains(this.fieldNames(fields), "serialVersionUID"));
-		assertTrue(CollectionTools.contains(this.fieldNames(fields), "capacityIncrement"));
-		assertTrue(CollectionTools.contains(this.fieldNames(fields), "elementCount"));
-		assertTrue(CollectionTools.contains(this.fieldNames(fields), "elementData"));
-		assertTrue(fields.iterator().next().isAccessible());
-	}
-
-	public void testAllMethods() {
-		int methodCount = 0;
-		methodCount += java.util.Vector.class.getDeclaredMethods().length;
-		methodCount += java.util.AbstractList.class.getDeclaredMethods().length;
-		methodCount += java.util.AbstractCollection.class.getDeclaredMethods().length;
-		methodCount += java.lang.Object.class.getDeclaredMethods().length;
-		Iterable<Method> methods = ReflectionTools.getAllMethods(java.util.Vector.class);
-		assertEquals(methodCount, CollectionTools.size(methods));
-		assertTrue(CollectionTools.contains(this.methodNames(methods), "wait"));
-		assertTrue(CollectionTools.contains(this.methodNames(methods), "addElement"));
-		assertTrue(methods.iterator().next().isAccessible());
-	}
-
-	public void testNewInstanceClass() {
-		Vector<?> v = ReflectionTools.newInstance(java.util.Vector.class);
-		assertNotNull(v);
-		assertEquals(0, v.size());
-	}
-
-	public void testNewInstanceClassClassObject() {
-		int initialCapacity = 200;
-		Vector<?> v = ReflectionTools.newInstance(java.util.Vector.class, int.class, new Integer(initialCapacity));
-		assertNotNull(v);
-		assertEquals(0, v.size());
-		Object[] elementData = (Object[]) ReflectionTools.getFieldValue(v, "elementData");
-		assertEquals(initialCapacity, elementData.length);
-	}
-
-	public void testNewInstanceClassClassArrayObjectArray() {
-		int initialCapacity = 200;
-		Class<?>[] parmTypes = new Class[1];
-		parmTypes[0] = int.class;
-		Object[] parms = new Object[1];
-		parms[0] = new Integer(initialCapacity);
-		Vector<?> v = ReflectionTools.newInstance(java.util.Vector.class, parmTypes, parms);
-		assertNotNull(v);
-		assertEquals(0, v.size());
-		Object[] elementData = (Object[]) ReflectionTools.getFieldValue(v, "elementData");
-		assertEquals(initialCapacity, elementData.length);
-
-		parms[0] = new Integer(-1);
-		boolean exCaught = false;
-		try {
-			v = ReflectionTools.newInstance(java.util.Vector.class, parmTypes, parms);
-		} catch (RuntimeException ex) {
-			exCaught = true;
-		}
-		assertTrue("RuntimeException not thrown", exCaught);
-
-		parmTypes[0] = java.lang.String.class;
-		parms[0] = "foo";
-		exCaught = false;
-		try {
-			v = ReflectionTools.newInstance(java.util.Vector.class, parmTypes, parms);
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof NoSuchMethodException) {
-				exCaught = true;
-			}
-		}
-		assertTrue("NoSuchMethodException not thrown", exCaught);
-	}
-
-	public void testFieldValue() {
-		int initialCapacity = 200;
-		Vector<?> v = new Vector<Object>(initialCapacity);
-		Object[] elementData = (Object[]) ReflectionTools.getFieldValue(v, "elementData");
-		assertEquals(initialCapacity, elementData.length);
-
-		// test inherited field
-		Integer modCountInteger = (Integer) ReflectionTools.getFieldValue(v, "modCount");
-		int modCount = modCountInteger.intValue();
-		assertEquals(0, modCount);
-
-		boolean exCaught = false;
-		Object bogusFieldValue = null;
-		try {
-			bogusFieldValue = ReflectionTools.getFieldValue(v, "bogusField");
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof NoSuchFieldException) {
-				exCaught = true;
-			}
-		}
-		assertTrue("NoSuchFieldException not thrown: " + bogusFieldValue, exCaught);
-	}
-
-	public void testExecuteMethodObjectString() {
-		Vector<String> v = new Vector<String>();
-		int size = ((Integer) ReflectionTools.executeMethod(v, "size")).intValue();
-		assertEquals(0, size);
-
-		v.addElement("foo");
-		size = ((Integer) ReflectionTools.executeMethod(v, "size")).intValue();
-		assertEquals(1, size);
-	}
-
-	public void testExecuteMethodObjectStringClassObject() {
-		Vector<String> v = new Vector<String>();
-		boolean booleanResult = ((Boolean) ReflectionTools.executeMethod(v, "add", Object.class, "foo")).booleanValue();
-		assertTrue(booleanResult);
-		assertTrue(v.contains("foo"));
-		Object voidResult = ReflectionTools.executeMethod(v, "addElement", Object.class, "bar");
-		assertNull(voidResult);
-	}
-
-	public void testExecuteMethodObjectStringClassArrayObjectArray() {
-		Vector<String> v = new Vector<String>();
-		Class<?>[] parmTypes = new Class[1];
-		parmTypes[0] = java.lang.Object.class;
-		Object[] parms = new Object[1];
-		parms[0] = "foo";
-		boolean booleanResult = ((Boolean) ReflectionTools.executeMethod(v, "add", parmTypes, parms)).booleanValue();
-		assertTrue(booleanResult);
-		assertTrue(v.contains("foo"));
-
-		boolean exCaught = false;
-		Object bogusMethodReturnValue = null;
-		try {
-			bogusMethodReturnValue = ReflectionTools.executeMethod(v, "bogusMethod", parmTypes, parms);
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof NoSuchMethodException) {
-				exCaught = true;
-			}
-		}
-		assertTrue("NoSuchMethodException not thrown: " + bogusMethodReturnValue, exCaught);
-	}
-
-	public void testExecuteStaticMethodClassString() {
-		Double randomObject = (Double) ReflectionTools.executeStaticMethod(java.lang.Math.class, "random");
-		assertNotNull(randomObject);
-		double random = randomObject.doubleValue();
-		assertTrue(random >= 0);
-		assertTrue(random < 1);
-	}
-
-	public void testExecuteStaticMethodClassStringClassObject() {
-		String s = (String) ReflectionTools.executeStaticMethod(java.lang.String.class, "valueOf", boolean.class, Boolean.TRUE);
-		assertNotNull(s);
-		assertEquals("true", s);
-	}
-
-	public void testExecuteStaticMethodClassStringClassArrayObjectArray() {
-		Class<?>[] parmTypes = new Class[1];
-		parmTypes[0] = boolean.class;
-		Object[] parms = new Object[1];
-		parms[0] = Boolean.TRUE;
-		String s = (String) ReflectionTools.executeStaticMethod(java.lang.String.class, "valueOf", parmTypes, parms);
-		assertNotNull(s);
-		assertEquals("true", s);
-
-		boolean exCaught = false;
-		Object bogusStaticMethodReturnValue = null;
-		try {
-			bogusStaticMethodReturnValue = ReflectionTools.executeStaticMethod(java.lang.String.class, "bogusStaticMethod", parmTypes, parms);
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof NoSuchMethodException) {
-				exCaught = true;
-			}
-		}
-		assertTrue("NoSuchMethodException not thrown: " + bogusStaticMethodReturnValue, exCaught);
-
-		// test non-static method
-		exCaught = false;
-		try {
-			bogusStaticMethodReturnValue = ReflectionTools.executeStaticMethod(java.lang.String.class, "toString");
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof NoSuchMethodException) {
-				exCaught = true;
-			}
-		}
-		assertTrue("NoSuchMethodException not thrown: " + bogusStaticMethodReturnValue, exCaught);
-	}
-
-	public void testSetFieldValue() {
-		Vector<String> v = new Vector<String>();
-		Object[] newElementData = new Object[5];
-		newElementData[0] = "foo";
-		ReflectionTools.setFieldValue(v, "elementData", newElementData);
-		ReflectionTools.setFieldValue(v, "elementCount", new Integer(1));
-		// test inherited field
-		ReflectionTools.setFieldValue(v, "modCount", new Integer(1));
-		assertTrue(v.contains("foo"));
-
-		boolean exCaught = false;
-		try {
-			ReflectionTools.setFieldValue(v, "bogusField", "foo");
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof NoSuchFieldException) {
-				exCaught = true;
-			}
-		}
-		assertTrue("NoSuchFieldException not thrown", exCaught);
-	}
-
-	public void testSetStaticFieldValue() {
-		ReflectionTools.setStaticFieldValue(this.getClass(), "testStaticField", "new value");
-		assertEquals(testStaticField, "new value");
-
-		boolean exCaught = false;
-		try {
-			ReflectionTools.setStaticFieldValue(this.getClass(), "bogusStaticField", "new value");
-		} catch (RuntimeException ex) {
-			if (ex.getCause() instanceof NoSuchFieldException) {
-				exCaught = true;
-			}
-		}
-		assertTrue("NoSuchFieldException not thrown", exCaught);
-	}
-
-	public void testSimpleName() {
-		assertEquals("Vector", java.util.Vector.class.getSimpleName());
-		assertEquals("Entry", java.util.Map.Entry.class.getSimpleName());
-		assertEquals("int", int.class.getSimpleName());
-		assertEquals("int[]", int[].class.getSimpleName());
-		assertEquals("int[][]", int[][].class.getSimpleName());
-		assertEquals("void", void.class.getSimpleName());
-	}
-
-	public void testPackageName() {
-		assertEquals("java.util", java.util.Vector.class.getPackage().getName());
-		assertEquals("java.util", java.util.Map.Entry.class.getPackage().getName());
-	}
-
-	public void testArrayDepthFor() {
-		assertEquals(0, ReflectionTools.getArrayDepth(java.util.Vector.class));
-		assertEquals(0, ReflectionTools.getArrayDepth(int.class));
-		assertEquals(0, ReflectionTools.getArrayDepth(void.class));
-		assertEquals(1, ReflectionTools.getArrayDepth(java.util.Vector[].class));
-		assertEquals(1, ReflectionTools.getArrayDepth(int[].class));
-		assertEquals(3, ReflectionTools.getArrayDepth(java.util.Vector[][][].class));
-		assertEquals(3, ReflectionTools.getArrayDepth(int[][][].class));
-	}
-
-	public void testElementTypeFor() {
-		assertEquals(java.util.Vector.class, ReflectionTools.getElementType(java.util.Vector.class));
-		assertEquals(int.class, ReflectionTools.getElementType(int.class));
-		assertEquals(void.class, ReflectionTools.getElementType(void.class));
-		assertEquals(java.util.Vector.class, ReflectionTools.getElementType(java.util.Vector[].class));
-		assertEquals(int.class, ReflectionTools.getElementType(int[].class));
-		assertEquals(java.util.Vector.class, ReflectionTools.getElementType(java.util.Vector[][][].class));
-		assertEquals(int.class, ReflectionTools.getElementType(int[][][].class));
-	}
-
-	public void testClassIsPrimitiveWrapperClass() {
-		assertTrue(ReflectionTools.classIsPrimitiveWrapper(java.lang.Void.class));
-		assertTrue(ReflectionTools.classIsPrimitiveWrapper(java.lang.Boolean.class));
-		assertTrue(ReflectionTools.classIsPrimitiveWrapper(java.lang.Integer.class));
-		assertTrue(ReflectionTools.classIsPrimitiveWrapper(java.lang.Float.class));
-
-		assertFalse(ReflectionTools.classIsPrimitiveWrapper(java.lang.String.class));
-		assertFalse(ReflectionTools.classIsPrimitiveWrapper(void.class));
-		assertFalse(ReflectionTools.classIsPrimitiveWrapper(int.class));
-	}
-
-	public void testClassIsVariablePrimitiveWrapperClass() {
-		assertFalse(ReflectionTools.classIsVariablePrimitiveWrapper(java.lang.Void.class));
-
-		assertTrue(ReflectionTools.classIsVariablePrimitiveWrapper(java.lang.Boolean.class));
-		assertTrue(ReflectionTools.classIsVariablePrimitiveWrapper(java.lang.Integer.class));
-		assertTrue(ReflectionTools.classIsVariablePrimitiveWrapper(java.lang.Float.class));
-
-		assertFalse(ReflectionTools.classIsVariablePrimitiveWrapper(java.lang.String.class));
-		assertFalse(ReflectionTools.classIsVariablePrimitiveWrapper(void.class));
-		assertFalse(ReflectionTools.classIsVariablePrimitiveWrapper(int.class));
-	}
-
-	public void testWrapperClass() {
-		assertEquals(java.lang.Void.class, ReflectionTools.getWrapperClass(void.class));
-		assertEquals(java.lang.Integer.class, ReflectionTools.getWrapperClass(int.class));
-		assertEquals(java.lang.Float.class, ReflectionTools.getWrapperClass(float.class));
-		assertEquals(java.lang.Boolean.class, ReflectionTools.getWrapperClass(boolean.class));
-
-		assertNull(ReflectionTools.getWrapperClass(java.lang.String.class));
-	}
-
-	public void testClassForTypeDeclarationStringInt() throws Exception {
-		assertEquals(int.class, ReflectionTools.getClassForTypeDeclaration("int", 0));
-		assertEquals(int[].class, ReflectionTools.getClassForTypeDeclaration("int", 1));
-		assertEquals(int[][][].class, ReflectionTools.getClassForTypeDeclaration("int", 3));
-
-		assertEquals(Object.class, ReflectionTools.getClassForTypeDeclaration("java.lang.Object", 0));
-		assertEquals(Object[][][].class, ReflectionTools.getClassForTypeDeclaration("java.lang.Object", 3));
-
-		assertEquals(void.class, ReflectionTools.getClassForTypeDeclaration("void", 0));
-		try {
-			ReflectionTools.getClassForTypeDeclaration(void.class.getName(), 1);
-			fail("should not get here...");
-		} catch (RuntimeException ex) {
-			// expected
-		}
-	}
-
-	public void testCodeForClass() {
-		assertEquals('I', ReflectionTools.getCodeForClass(int.class));
-		assertEquals('B', ReflectionTools.getCodeForClass(byte.class));
-	}
-
-	public void testClassNameForTypeDeclarationString() throws Exception {
-		assertEquals("int", ReflectionTools.getClassNameForTypeDeclaration("int"));
-		assertEquals("[I", ReflectionTools.getClassNameForTypeDeclaration("int[]"));
-		assertEquals("[[I", ReflectionTools.getClassNameForTypeDeclaration("int [ ] [ ]"));
-
-		assertEquals("java.lang.Object", ReflectionTools.getClassNameForTypeDeclaration("java.lang.Object"));
-		assertEquals("[Ljava.lang.Object;", ReflectionTools.getClassNameForTypeDeclaration("java.lang.Object\t[]"));
-		assertEquals("[[Ljava.lang.Object;", ReflectionTools.getClassNameForTypeDeclaration("java.lang.Object\t[]\t[]"));
-	}
-
-	public void testArrayDepthForTypeDeclarationString() throws Exception {
-		assertEquals(0, ReflectionTools.getArrayDepthForTypeDeclaration("java.lang.Object"));
-		assertEquals(1, ReflectionTools.getArrayDepthForTypeDeclaration("java.lang.Object[]"));
-		assertEquals(3, ReflectionTools.getArrayDepthForTypeDeclaration("java.lang.Object[][][]"));
-
-		assertEquals(0, ReflectionTools.getArrayDepthForTypeDeclaration("int"));
-		assertEquals(1, ReflectionTools.getArrayDepthForTypeDeclaration("int[]"));
-		assertEquals(3, ReflectionTools.getArrayDepthForTypeDeclaration("int[][][]"));
-
-		assertEquals(0, ReflectionTools.getArrayDepthForTypeDeclaration("float"));
-		assertEquals(1, ReflectionTools.getArrayDepthForTypeDeclaration("float [ ]"));
-		assertEquals(3, ReflectionTools.getArrayDepthForTypeDeclaration("float[] [] []"));
-	}
-
-	public void testElementTypeNameForTypeDeclarationString() throws Exception {
-		assertEquals("java.lang.Object", ReflectionTools.getElementTypeNameForTypeDeclaration("java.lang.Object"));
-		assertEquals("java.lang.Object", ReflectionTools.getElementTypeNameForTypeDeclaration("java.lang.Object[]"));
-		assertEquals("java.lang.Object", ReflectionTools.getElementTypeNameForTypeDeclaration("java.lang.Object[][][]"));
-
-		assertEquals("int", ReflectionTools.getElementTypeNameForTypeDeclaration("int"));
-		assertEquals("int", ReflectionTools.getElementTypeNameForTypeDeclaration("int[]"));
-		assertEquals("int", ReflectionTools.getElementTypeNameForTypeDeclaration("int[][][]"));
-
-		assertEquals("float", ReflectionTools.getElementTypeNameForTypeDeclaration("float"));
-		assertEquals("float", ReflectionTools.getElementTypeNameForTypeDeclaration("float [ ]"));
-		assertEquals("float", ReflectionTools.getElementTypeNameForTypeDeclaration("float[] [] []"));
-	}
-
-	public void testClassNameForTypeDeclarationStringInt() throws Exception {
-		assertEquals(int.class.getName(), ReflectionTools.getClassNameForTypeDeclaration("int", 0));
-		assertEquals(int[].class.getName(), ReflectionTools.getClassNameForTypeDeclaration("int", 1));
-		assertEquals(int[][][].class.getName(), ReflectionTools.getClassNameForTypeDeclaration("int", 3));
-
-		assertEquals(Object.class.getName(), ReflectionTools.getClassNameForTypeDeclaration("java.lang.Object", 0));
-		assertEquals(Object[][][].class.getName(), ReflectionTools.getClassNameForTypeDeclaration("java.lang.Object", 3));
-
-		assertEquals(void.class.getName(), ReflectionTools.getClassNameForTypeDeclaration("void", 0));
-		try {
-			ReflectionTools.getClassNameForTypeDeclaration(void.class.getName(), 1);
-			fail("should not get here...");
-		} catch (IllegalArgumentException ex) {
-			// expected
-		}
-	}
-
-	private Iterable<String> fieldNames(Iterable<Field> fields) {
-		return new TransformationIterable<Field, String>(fields) {
-			@Override
-			protected String transform(Field field) {
-				return field.getName();
-			}
-		};
-	}
-
-	private Iterable<String> methodNames(Iterable<Method> methods) {
-		return new TransformationIterable<Method, String>(methods) {
-			@Override
-			protected String transform(Method method) {
-				return method.getName();
-			}
-		};
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReverseComparatorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReverseComparatorTests.java
deleted file mode 100644
index 1661b0c..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReverseComparatorTests.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.ReverseComparator;
-
-@SuppressWarnings("nls")
-public class ReverseComparatorTests extends TestCase {
-	private Comparator<String> naturalReverseComparator;
-	private Comparator<String> customComparator;
-	private Comparator<String> customReverseComparator;
-
-	public ReverseComparatorTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.naturalReverseComparator = new ReverseComparator<String>();
-		this.customComparator = this.buildCustomComparator();
-		this.customReverseComparator = new ReverseComparator<String>(this.customComparator);
-	}
-
-	private Comparator<String> buildCustomComparator() {
-		return new Comparator<String>() {
-			public int compare(String s1, String s2) {
-				String lower1 = s1.toLowerCase();
-				String lower2 = s2.toLowerCase();
-				int result = lower1.compareTo(lower2);
-				if (result == 0) {
-					return s1.compareTo(s2); // use case to differentiate "equal" strings
-				}
-				return result;
-			}
-		};
-	}
-
-	private List<String> buildUnsortedList() {
-		List<String> result = new ArrayList<String>();
-		result.add("T");
-		result.add("Z");
-		result.add("Y");
-		result.add("M");
-		result.add("m");
-		result.add("a");
-		result.add("B");
-		result.add("b");
-		result.add("A");
-		return result;
-	}
-
-	private List<String> buildNaturallySortedList() {
-		List<String> result = new ArrayList<String>(this.buildUnsortedList());
-		Collections.sort(result);
-		return result;
-	}
-
-	private List<String> buildCustomSortedList() {
-		List<String> result = new ArrayList<String>(this.buildUnsortedList());
-		Collections.sort(result, this.customComparator);
-		return result;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testNatural() {
-		List<String> list = this.buildUnsortedList();
-		Collections.sort(list, this.naturalReverseComparator);
-		this.verifyList(this.buildNaturallySortedList(), list);
-	}
-
-	public void testCustom() {
-		List<String> list = this.buildUnsortedList();
-		Collections.sort(list, this.customReverseComparator);
-		this.verifyList(this.buildCustomSortedList(), list);
-	}
-
-	private void verifyList(List<String> normal, List<String> reverse) {
-		int size = normal.size();
-		int max = size - 1;
-		for (int i = 0; i < size; i++) {
-			assertEquals(normal.get(i), reverse.get(max - i));
-		}
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SimpleAssociationTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SimpleAssociationTests.java
deleted file mode 100644
index 36c706a..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SimpleAssociationTests.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import org.eclipse.jpt.utility.internal.Association;
-import org.eclipse.jpt.utility.internal.SimpleAssociation;
-
-@SuppressWarnings("nls")
-public class SimpleAssociationTests extends TestCase {
-	private SimpleAssociation<String, String> assoc;
-
-	public static Test suite() {
-		return new TestSuite(SimpleAssociationTests.class);
-	}
-	
-	public SimpleAssociationTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.assoc = new SimpleAssociation<String, String>("foo", "bar");
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testGetKey() {
-		assertEquals("foo", this.assoc.key());
-	}
-
-	public void testGetValue() {
-		assertEquals("bar", this.assoc.value());
-	}
-
-	public void testSetValue() {
-		assertEquals("bar", this.assoc.value());
-		this.assoc.setValue("baz");
-		assertEquals("baz", this.assoc.value());
-	}
-
-	public void testEquals() {
-		assertFalse(this.assoc.equals("foo"));
-
-		assertEquals(this.assoc, this.copy(this.assoc));
-
-		SimpleAssociation<String, String> assoc2 = new SimpleAssociation<String, String>("foo", "baz");
-		assertFalse(this.assoc.equals(assoc2));
-
-		assoc2 = new SimpleAssociation<String, String>("fop", "bar");
-		assertFalse(this.assoc.equals(assoc2));
-
-		SimpleAssociation<String, String> assoc3 = new SimpleAssociation<String, String>(null, null);
-		SimpleAssociation<String, String> assoc4 = new SimpleAssociation<String, String>(null, null);
-		assertEquals(assoc3, assoc4);
-	}
-
-	public void testHashCode() {
-		assertEquals(this.assoc.hashCode(), this.copy(this.assoc).hashCode());
-
-		SimpleAssociation<String, String> assoc2 = new SimpleAssociation<String, String>(null, null);
-		assertEquals(assoc2.hashCode(), this.copy(assoc2).hashCode());
-	}
-
-	public void testToString() {
-		assertNotNull(this.assoc.toString());
-	}
-
-	public void testClone() {
-		this.verifyClone(this.assoc, this.assoc.clone());
-	}
-
-	private void verifyClone(Association<String, String> expected, Association<String, String> actual) {
-		assertEquals(expected, actual);
-		assertNotSame(expected, actual);
-		assertEquals(expected.key(), actual.key());
-		assertSame(expected.key(), actual.key());
-		assertEquals(expected.value(), actual.value());
-		assertSame(expected.value(), actual.value());
-	}
-
-	public void testSerialization() throws Exception {
-		@SuppressWarnings("cast")
-		Association<String, String> assoc2 = (Association<String, String>) TestTools.serialize(this.assoc);
-
-		assertEquals(this.assoc, assoc2);
-		assertNotSame(this.assoc, assoc2);
-		assertEquals(this.assoc.key(), assoc2.key());
-		assertNotSame(this.assoc.key(), assoc2.key());
-		assertEquals(this.assoc.value(), assoc2.value());
-		assertNotSame(this.assoc.value(), assoc2.value());
-	}
-
-	private SimpleAssociation<String, String> copy(SimpleAssociation<String, String> sa) {
-		return new SimpleAssociation<String, String>(sa.key(), sa.value());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SimpleQueueTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SimpleQueueTests.java
deleted file mode 100644
index 7f70889..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SimpleQueueTests.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.internal.Queue;
-import org.eclipse.jpt.utility.internal.SimpleQueue;
-
-@SuppressWarnings("nls")
-public class SimpleQueueTests
-	extends MultiThreadedTestCase
-{
-
-	public SimpleQueueTests(String name) {
-		super(name);
-	}
-
-	Queue<String> buildQueue() {
-		return new SimpleQueue<String>();
-	}
-
-	public void testIsEmpty() {
-		Queue<String> queue = this.buildQueue();
-		assertTrue(queue.isEmpty());
-		queue.enqueue("first");
-		assertFalse(queue.isEmpty());
-		queue.enqueue("second");
-		assertFalse(queue.isEmpty());
-		queue.dequeue();
-		assertFalse(queue.isEmpty());
-		queue.dequeue();
-		assertTrue(queue.isEmpty());
-	}
-
-	public void testEnqueueAndDequeue() {
-		Queue<String> queue = this.buildQueue();
-		String first = "first";
-		String second = "second";
-
-		queue.enqueue(first);
-		queue.enqueue(second);
-		assertEquals(first, queue.dequeue());
-		assertEquals(second, queue.dequeue());
-	}
-
-	public void testEnqueueAndPeek() {
-		Queue<String> queue = this.buildQueue();
-		String first = "first";
-		String second = "second";
-
-		queue.enqueue(first);
-		queue.enqueue(second);
-		assertEquals(first, queue.peek());
-		assertEquals(first, queue.peek());
-		assertEquals(first, queue.dequeue());
-		assertEquals(second, queue.peek());
-		assertEquals(second, queue.peek());
-		assertEquals(second, queue.dequeue());
-	}
-
-	public void testEmptyQueueExceptionPeek() {
-		Queue<String> queue = this.buildQueue();
-		String first = "first";
-		String second = "second";
-
-		queue.enqueue(first);
-		queue.enqueue(second);
-		assertEquals(first, queue.peek());
-		assertEquals(first, queue.dequeue());
-		assertEquals(second, queue.peek());
-		assertEquals(second, queue.dequeue());
-
-		boolean exCaught = false;
-		try {
-			queue.peek();
-			fail();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testEmptyQueueExceptionDequeue() {
-		Queue<String> queue = this.buildQueue();
-		String first = "first";
-		String second = "second";
-
-		queue.enqueue(first);
-		queue.enqueue(second);
-		assertEquals(first, queue.peek());
-		assertEquals(first, queue.dequeue());
-		assertEquals(second, queue.peek());
-		assertEquals(second, queue.dequeue());
-
-		boolean exCaught = false;
-		try {
-			queue.dequeue();
-			fail();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testClone() {
-		SimpleQueue<String> queue = (SimpleQueue<String>) this.buildQueue();
-		queue.enqueue("first");
-		queue.enqueue("second");
-		queue.enqueue("third");
-
-		this.verifyClone(queue, queue.clone());
-	}
-
-	public void testSerialization() throws Exception {
-		Queue<String> queue = this.buildQueue();
-		queue.enqueue("first");
-		queue.enqueue("second");
-		queue.enqueue("third");
-
-		this.verifyClone(queue, TestTools.serialize(queue));
-	}
-
-	private void verifyClone(Queue<String> original, Queue<String> clone) {
-		assertNotSame(original, clone);
-		assertEquals(original.peek(), clone.peek());
-		assertEquals(original.dequeue(), clone.dequeue());
-		assertEquals(original.peek(), clone.peek());
-		assertEquals(original.dequeue(), clone.dequeue());
-		assertEquals(original.isEmpty(), clone.isEmpty());
-		assertEquals(original.peek(), clone.peek());
-		assertEquals(original.dequeue(), clone.dequeue());
-		assertTrue(original.isEmpty());
-		assertEquals(original.isEmpty(), clone.isEmpty());
-
-		original.enqueue("fourth");
-		assertFalse(original.isEmpty());
-		// clone should still be empty
-		assertTrue(clone.isEmpty());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SimpleStackTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SimpleStackTests.java
deleted file mode 100644
index 369620a..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SimpleStackTests.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.util.EmptyStackException;
-
-import org.eclipse.jpt.utility.internal.SimpleStack;
-import org.eclipse.jpt.utility.internal.Stack;
-
-@SuppressWarnings("nls")
-public class SimpleStackTests
-	extends MultiThreadedTestCase
-{
-	public SimpleStackTests(String name) {
-		super(name);
-	}
-
-	Stack<String> buildStack() {
-		return new SimpleStack<String>();
-	}
-
-	public void testIsEmpty() {
-		Stack<String> stack = this.buildStack();
-		assertTrue(stack.isEmpty());
-		stack.push("first");
-		assertFalse(stack.isEmpty());
-		stack.push("second");
-		assertFalse(stack.isEmpty());
-		stack.pop();
-		assertFalse(stack.isEmpty());
-		stack.pop();
-		assertTrue(stack.isEmpty());
-	}
-
-	public void testPushAndPop() {
-		Stack<String> stack = this.buildStack();
-		String first = "first";
-		String second = "second";
-
-		stack.push(first);
-		stack.push(second);
-		assertEquals(second, stack.pop());
-		assertEquals(first, stack.pop());
-	}
-
-	public void testPushAndPeek() {
-		Stack<String> stack = this.buildStack();
-		String first = "first";
-		String second = "second";
-
-		stack.push(first);
-		stack.push(second);
-		assertEquals(second, stack.peek());
-		assertEquals(second, stack.peek());
-		assertEquals(second, stack.pop());
-		assertEquals(first, stack.peek());
-		assertEquals(first, stack.peek());
-		assertEquals(first, stack.pop());
-	}
-
-	public void testEmptyStackExceptionPeek() {
-		Stack<String> stack = this.buildStack();
-		String first = "first";
-		String second = "second";
-
-		stack.push(first);
-		stack.push(second);
-		assertEquals(second, stack.peek());
-		assertEquals(second, stack.pop());
-		assertEquals(first, stack.peek());
-		assertEquals(first, stack.pop());
-
-		boolean exCaught = false;
-		try {
-			stack.peek();
-			fail();
-		} catch (EmptyStackException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testEmptyStackExceptionPop() {
-		Stack<String> stack = this.buildStack();
-		String first = "first";
-		String second = "second";
-
-		stack.push(first);
-		stack.push(second);
-		assertEquals(second, stack.peek());
-		assertEquals(second, stack.pop());
-		assertEquals(first, stack.peek());
-		assertEquals(first, stack.pop());
-
-		boolean exCaught = false;
-		try {
-			stack.pop();
-			fail();
-		} catch (EmptyStackException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testClone() {
-		SimpleStack<String> stack = (SimpleStack<String>) this.buildStack();
-		stack.push("first");
-		stack.push("second");
-		stack.push("third");
-
-		this.verifyClone(stack, stack.clone());
-	}
-
-	public void testSerialization() throws Exception {
-		Stack<String> stack = this.buildStack();
-		stack.push("first");
-		stack.push("second");
-		stack.push("third");
-
-		this.verifyClone(stack, TestTools.serialize(stack));
-	}
-
-	private void verifyClone(Stack<String> original, Stack<String> clone) {
-		assertNotSame(original, clone);
-		assertEquals(original.peek(), clone.peek());
-		assertEquals(original.pop(), clone.pop());
-		assertEquals(original.peek(), clone.peek());
-		assertEquals(original.pop(), clone.pop());
-		assertEquals(original.isEmpty(), clone.isEmpty());
-		assertEquals(original.peek(), clone.peek());
-		assertEquals(original.pop(), clone.pop());
-		assertTrue(original.isEmpty());
-		assertEquals(original.isEmpty(), clone.isEmpty());
-
-		original.push("fourth");
-		assertFalse(original.isEmpty());
-		// clone should still be empty
-		assertTrue(clone.isEmpty());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/StringToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/StringToolsTests.java
deleted file mode 100644
index 8319dc0..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/StringToolsTests.java
+++ /dev/null
@@ -1,1724 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.io.StringWriter;
-import java.io.Writer;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-@SuppressWarnings("nls")
-public class StringToolsTests extends TestCase {
-
-	public StringToolsTests(String name) {
-		super(name);
-	}
-
-	private static void assertEquals(String expected, char[] actual) {
-		assertEquals(expected, new String(actual));
-	}
-
-	// ********** padding/truncating **********
-
-	public void testPad() {
-		assertEquals("fred", StringTools.pad("fred", 4));
-		assertEquals("fred  ", StringTools.pad("fred", 6));
-		boolean exThrown = false;
-		try {
-			assertEquals("fr", StringTools.pad("fred", 2));
-		} catch (IllegalArgumentException ex) {
-			exThrown = true;
-		}
-		assertTrue(exThrown);
-	}
-
-	public void testPadCharArray() {
-		assertEquals("fred", StringTools.pad(new char[] { 'f', 'r', 'e', 'd' }, 4));
-		assertEquals("fred  ", StringTools.pad(new char[] { 'f', 'r', 'e', 'd' }, 6));
-		boolean exThrown = false;
-		try {
-			assertEquals("fr", StringTools.pad(new char[] { 'f', 'r', 'e', 'd' }, 2));
-		} catch (IllegalArgumentException ex) {
-			exThrown = true;
-		}
-		assertTrue(exThrown);
-	}
-
-	public void testPadOnWriter() {
-		Writer writer;
-		writer = new StringWriter();
-		StringTools.padOn("fred", 4, writer);
-		assertEquals("fred", writer.toString());
-
-		writer = new StringWriter();
-		StringTools.padOn("fred", 6, writer);
-		assertEquals("fred  ", writer.toString());
-
-		writer = new StringWriter();
-		boolean exThrown = false;
-		try {
-			StringTools.padOn("fred", 2, writer);
-			fail();
-		} catch (IllegalArgumentException ex) {
-			exThrown = true;
-		}
-		assertTrue(exThrown);
-	}
-
-	public void testPadOnStringBuffer() {
-		StringBuffer sb;
-		sb = new StringBuffer();
-		StringTools.padOn("fred", 4, sb);
-		assertEquals("fred", sb.toString());
-
-		sb = new StringBuffer();
-		StringTools.padOn("fred", 6, sb);
-		assertEquals("fred  ", sb.toString());
-
-		sb = new StringBuffer();
-		boolean exThrown = false;
-		try {
-			StringTools.padOn("fred", 2, sb);
-			fail();
-		} catch (IllegalArgumentException ex) {
-			exThrown = true;
-		}
-		assertTrue(exThrown);
-	}
-
-	public void testPadOnStringBuilder() {
-		StringBuilder sb;
-		sb = new StringBuilder();
-		StringTools.padOn("fred", 4, sb);
-		assertEquals("fred", sb.toString());
-
-		sb = new StringBuilder();
-		StringTools.padOn("fred", 6, sb);
-		assertEquals("fred  ", sb.toString());
-
-		sb = new StringBuilder();
-		boolean exThrown = false;
-		try {
-			StringTools.padOn("fred", 2, sb);
-			fail();
-		} catch (IllegalArgumentException ex) {
-			exThrown = true;
-		}
-		assertTrue(exThrown);
-	}
-
-	public void testPadOrTruncate() {
-		assertEquals("fred", StringTools.padOrTruncate("fred", 4));
-		assertEquals("fred  ", StringTools.padOrTruncate("fred", 6));
-		assertEquals("fr", StringTools.padOrTruncate("fred", 2));
-	}
-
-	public void testPadOrTruncateCharArray() {
-		assertEquals("fred", StringTools.padOrTruncate(new char[] { 'f', 'r', 'e', 'd' }, 4));
-		assertEquals("fred  ", StringTools.padOrTruncate(new char[] { 'f', 'r', 'e', 'd' }, 6));
-		assertEquals("fr", StringTools.padOrTruncate(new char[] { 'f', 'r', 'e', 'd' }, 2));
-	}
-
-	public void testPadOrTruncateOnWriter() {
-		this.verifyPadOrTruncateOnWriter("fred", "fred", 4);
-		this.verifyPadOrTruncateOnWriter("fred  ", "fred", 6);
-		this.verifyPadOrTruncateOnWriter("fr", "fred", 2);
-	}
-
-	private void verifyPadOrTruncateOnWriter(String expected, String string, int length) {
-		Writer writer = new StringWriter();
-		StringTools.padOrTruncateOn(string, length, writer);
-		assertEquals(expected, writer.toString());
-	}
-
-	public void testPadOrTruncateOnStringBuffer() {
-		this.verifyPadOrTruncateOnStringBuffer("fred", "fred", 4);
-		this.verifyPadOrTruncateOnStringBuffer("fred  ", "fred", 6);
-		this.verifyPadOrTruncateOnStringBuffer("fr", "fred", 2);
-	}
-
-	private void verifyPadOrTruncateOnStringBuffer(String expected, String string, int length) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.padOrTruncateOn(string, length, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testPadOrTruncateOnStringBuilder() {
-		this.verifyPadOrTruncateOnStringBuilder("fred", "fred", 4);
-		this.verifyPadOrTruncateOnStringBuilder("fred  ", "fred", 6);
-		this.verifyPadOrTruncateOnStringBuilder("fr", "fred", 2);
-	}
-
-	private void verifyPadOrTruncateOnStringBuilder(String expected, String string, int length) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.padOrTruncateOn(string, length, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testZeroPad() {
-		assertEquals("1234", StringTools.zeroPad("1234", 4));
-		assertEquals("001234", StringTools.zeroPad("1234", 6));
-		boolean exThrown = false;
-		try {
-			assertEquals("12", StringTools.zeroPad("1234", 2));
-		} catch (IllegalArgumentException ex) {
-			exThrown = true;
-		}
-		assertTrue(exThrown);
-	}
-
-	public void testZeroPadCharArray() {
-		assertEquals("1234", StringTools.zeroPad(new char[] { '1', '2', '3', '4' }, 4));
-		assertEquals("001234", StringTools.zeroPad(new char[] { '1', '2', '3', '4' }, 6));
-		boolean exThrown = false;
-		try {
-			assertEquals("12", StringTools.zeroPad(new char[] { '1', '2', '3', '4' }, 2));
-		} catch (IllegalArgumentException ex) {
-			exThrown = true;
-		}
-		assertTrue(exThrown);
-	}
-
-	public void testZeroPadOnWriter() {
-		Writer writer;
-		writer = new StringWriter();
-		StringTools.zeroPadOn("1234", 4, writer);
-		assertEquals("1234", writer.toString());
-
-		writer = new StringWriter();
-		StringTools.zeroPadOn("1234", 6, writer);
-		assertEquals("001234", writer.toString());
-
-		writer = new StringWriter();
-		boolean exThrown = false;
-		try {
-			StringTools.zeroPadOn("1234", 2, writer);
-			fail();
-		} catch (IllegalArgumentException ex) {
-			exThrown = true;
-		}
-		assertTrue(exThrown);
-	}
-
-	public void testZeroPadOnStringBuffer() {
-		StringBuffer sb;
-		sb = new StringBuffer();
-		StringTools.zeroPadOn("1234", 4, sb);
-		assertEquals("1234", sb.toString());
-
-		sb = new StringBuffer();
-		StringTools.zeroPadOn("1234", 6, sb);
-		assertEquals("001234", sb.toString());
-
-		sb = new StringBuffer();
-		boolean exThrown = false;
-		try {
-			StringTools.zeroPadOn("1234", 2, sb);
-			fail();
-		} catch (IllegalArgumentException ex) {
-			exThrown = true;
-		}
-		assertTrue(exThrown);
-	}
-
-	public void testZeroPadOnStringBuilder() {
-		StringBuilder sb;
-		sb = new StringBuilder();
-		StringTools.zeroPadOn("1234", 4, sb);
-		assertEquals("1234", sb.toString());
-
-		sb = new StringBuilder();
-		StringTools.zeroPadOn("1234", 6, sb);
-		assertEquals("001234", sb.toString());
-
-		sb = new StringBuilder();
-		boolean exThrown = false;
-		try {
-			StringTools.zeroPadOn("1234", 2, sb);
-			fail();
-		} catch (IllegalArgumentException ex) {
-			exThrown = true;
-		}
-		assertTrue(exThrown);
-	}
-
-	public void testZeroPadOrTruncate() {
-		assertEquals("1234", StringTools.zeroPadOrTruncate("1234", 4));
-		assertEquals("001234", StringTools.zeroPadOrTruncate("1234", 6));
-		assertEquals("34", StringTools.zeroPadOrTruncate("1234", 2));
-	}
-
-	public void testZeroPadOrTruncateCharArray() {
-		assertEquals("1234", StringTools.zeroPadOrTruncate(new char[] { '1', '2', '3', '4' }, 4));
-		assertEquals("001234", StringTools.zeroPadOrTruncate(new char[] { '1', '2', '3', '4' }, 6));
-		assertEquals("34", StringTools.zeroPadOrTruncate(new char[] { '1', '2', '3', '4' }, 2));
-	}
-
-	public void testZeroPadOrTruncateOnWriter() {
-		this.verifyZeroPadOrTruncateOnWriter("1234", "1234", 4);
-		this.verifyZeroPadOrTruncateOnWriter("001234", "1234", 6);
-		this.verifyZeroPadOrTruncateOnWriter("34", "1234", 2);
-	}
-
-	private void verifyZeroPadOrTruncateOnWriter(String expected, String string, int length) {
-		Writer writer = new StringWriter();
-		StringTools.zeroPadOrTruncateOn(string, length, writer);
-		assertEquals(expected, writer.toString());
-	}
-
-	public void testZeroPadOrTruncateOnStringBuffer() {
-		this.verifyZeroPadOrTruncateOnStringBuffer("1234", "1234", 4);
-		this.verifyZeroPadOrTruncateOnStringBuffer("001234", "1234", 6);
-		this.verifyZeroPadOrTruncateOnStringBuffer("34", "1234", 2);
-	}
-
-	private void verifyZeroPadOrTruncateOnStringBuffer(String expected, String string, int length) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.zeroPadOrTruncateOn(string, length, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testZeroPadOrTruncateOnStringBuilder() {
-		this.verifyZeroPadOrTruncateOnStringBuilder("1234", "1234", 4);
-		this.verifyZeroPadOrTruncateOnStringBuilder("001234", "1234", 6);
-		this.verifyZeroPadOrTruncateOnStringBuilder("34", "1234", 2);
-	}
-
-	private void verifyZeroPadOrTruncateOnStringBuilder(String expected, String string, int length) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.zeroPadOrTruncateOn(string, length, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	// ********** delimiting **********
-
-	public void testDelimit() {
-		this.verifyDelimit("Employee", "123", "123Employee123");
-		this.verifyDelimit("123", "123", "123123123");
-		this.verifyDelimit("", "123", "123123");
-	}
-
-	private void verifyDelimit(String string, String delimiter, String expectedString) {
-		assertEquals(expectedString, StringTools.delimit(string, delimiter));
-	}
-
-	public void testDelimitOnWriter() {
-		this.verifyDelimitOnWriter("Employee", "123", "123Employee123");
-		this.verifyDelimitOnWriter("123", "123", "123123123");
-		this.verifyDelimitOnWriter("", "123", "123123");
-	}
-
-	private void verifyDelimitOnWriter(String string, String delimiter, String expectedString) {
-		Writer writer = new StringWriter();
-		StringTools.delimitOn(string, delimiter, writer);
-		assertEquals(expectedString, writer.toString());
-	}
-
-	public void testDelimitOnStringBuffer() {
-		this.verifyDelimitOnStringBuffer("Employee", "123", "123Employee123");
-		this.verifyDelimitOnStringBuffer("123", "123", "123123123");
-		this.verifyDelimitOnStringBuffer("", "123", "123123");
-	}
-
-	private void verifyDelimitOnStringBuffer(String string, String delimiter, String expectedString) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.delimitOn(string, delimiter, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-
-	public void testDelimitOnStringBuilder() {
-		this.verifyDelimitOnStringBuilder("Employee", "123", "123Employee123");
-		this.verifyDelimitOnStringBuilder("123", "123", "123123123");
-		this.verifyDelimitOnStringBuilder("", "123", "123123");
-	}
-
-	private void verifyDelimitOnStringBuilder(String string, String delimiter, String expectedString) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.delimitOn(string, delimiter, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-
-	public void testQuote() {
-		this.verifyQuote("Employee", "\"Employee\"");
-		this.verifyQuote("123", "\"123\"");
-		this.verifyQuote("", "\"\"");
-		this.verifyQuote("Emp\"loyee", "\"Emp\"\"loyee\"");
-	}
-
-	private void verifyQuote(String string, String expectedString) {
-		assertEquals(expectedString, StringTools.quote(string));
-	}
-
-	public void testQuoteOnWriter() {
-		this.verifyQuoteOnWriter("Employee", "\"Employee\"");
-		this.verifyQuoteOnWriter("123", "\"123\"");
-		this.verifyQuoteOnWriter("", "\"\"");
-		this.verifyQuoteOnWriter("Emp\"loyee", "\"Emp\"\"loyee\"");
-	}
-
-	private void verifyQuoteOnWriter(String string, String expectedString) {
-		Writer writer = new StringWriter();
-		StringTools.quoteOn(string, writer);
-		assertEquals(expectedString, writer.toString());
-	}
-
-	public void testQuoteOnStringBuffer() {
-		this.verifyQuoteOnStringBuffer("Employee", "\"Employee\"");
-		this.verifyQuoteOnStringBuffer("123", "\"123\"");
-		this.verifyQuoteOnStringBuffer("", "\"\"");
-		this.verifyQuoteOnStringBuffer("Emp\"loyee", "\"Emp\"\"loyee\"");
-	}
-
-	private void verifyQuoteOnStringBuffer(String string, String expectedString) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.quoteOn(string, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-
-	public void testQuoteOnStringBuilder() {
-		this.verifyQuoteOnStringBuilder("Employee", "\"Employee\"");
-		this.verifyQuoteOnStringBuilder("123", "\"123\"");
-		this.verifyQuoteOnStringBuilder("", "\"\"");
-		this.verifyQuoteOnStringBuilder("Emp\"loyee", "\"Emp\"\"loyee\"");
-	}
-
-	private void verifyQuoteOnStringBuilder(String string, String expectedString) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.quoteOn(string, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-
-	// ********** removing characters **********
-
-	public void testRemoveFirstOccurrence() {
-		this.verifyRemoveFirstOccurrence("Emplo&yee", '&', "Employee");
-		this.verifyRemoveFirstOccurrence("Emplo&yee&", '&', "Employee&");
-		this.verifyRemoveFirstOccurrence("Employee &Foo", '&', "Employee Foo");
-		this.verifyRemoveFirstOccurrence("Employee&", '&', "Employee");
-		this.verifyRemoveFirstOccurrence("&Employee", '&', "Employee");
-	}
-
-	private void verifyRemoveFirstOccurrence(String string, char charToRemove, String expectedString) {
-		assertEquals(expectedString, StringTools.removeFirstOccurrence(string, charToRemove));
-	}
-
-	public void testRemoveFirstOccurrenceCharArray() {
-		this.verifyRemoveFirstOccurrenceCharArray("Emplo&yee", '&', "Employee");
-		this.verifyRemoveFirstOccurrenceCharArray("Emplo&yee&", '&', "Employee&");
-		this.verifyRemoveFirstOccurrenceCharArray("Employee &Foo", '&', "Employee Foo");
-		this.verifyRemoveFirstOccurrenceCharArray("Employee&", '&', "Employee");
-		this.verifyRemoveFirstOccurrenceCharArray("&Employee", '&', "Employee");
-	}
-
-	private void verifyRemoveFirstOccurrenceCharArray(String string, char charToRemove, String expectedString) {
-		assertEquals(expectedString, StringTools.removeFirstOccurrence(string.toCharArray(), charToRemove));
-	}
-
-	public void testRemoveFirstOccurrenceOnWriter() {
-		this.verifyRemoveFirstOccurrenceOnWriter("Emplo&yee", '&', "Employee");
-		this.verifyRemoveFirstOccurrenceOnWriter("Emplo&yee&", '&', "Employee&");
-		this.verifyRemoveFirstOccurrenceOnWriter("Employee &Foo", '&', "Employee Foo");
-		this.verifyRemoveFirstOccurrenceOnWriter("Employee&", '&', "Employee");
-		this.verifyRemoveFirstOccurrenceOnWriter("&Employee", '&', "Employee");
-	}
-
-	private void verifyRemoveFirstOccurrenceOnWriter(String string, char charToRemove, String expectedString) {
-		Writer writer = new StringWriter();
-		StringTools.removeFirstOccurrenceOn(string, charToRemove, writer);
-		assertEquals(expectedString, writer.toString());
-	}
-
-	public void testRemoveFirstOccurrenceOnStringBuffer() {
-		this.verifyRemoveFirstOccurrenceOnStringBuffer("Emplo&yee", '&', "Employee");
-		this.verifyRemoveFirstOccurrenceOnStringBuffer("Emplo&yee&", '&', "Employee&");
-		this.verifyRemoveFirstOccurrenceOnStringBuffer("Employee &Foo", '&', "Employee Foo");
-		this.verifyRemoveFirstOccurrenceOnStringBuffer("Employee&", '&', "Employee");
-		this.verifyRemoveFirstOccurrenceOnStringBuffer("&Employee", '&', "Employee");
-	}
-
-	private void verifyRemoveFirstOccurrenceOnStringBuffer(String string, char charToRemove, String expectedString) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.removeFirstOccurrenceOn(string, charToRemove, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-
-	public void testRemoveFirstOccurrenceOnStringBuilder() {
-		this.verifyRemoveFirstOccurrenceOnStringBuilder("Emplo&yee", '&', "Employee");
-		this.verifyRemoveFirstOccurrenceOnStringBuilder("Emplo&yee&", '&', "Employee&");
-		this.verifyRemoveFirstOccurrenceOnStringBuilder("Employee &Foo", '&', "Employee Foo");
-		this.verifyRemoveFirstOccurrenceOnStringBuilder("Employee&", '&', "Employee");
-		this.verifyRemoveFirstOccurrenceOnStringBuilder("&Employee", '&', "Employee");
-	}
-
-	private void verifyRemoveFirstOccurrenceOnStringBuilder(String string, char charToRemove, String expectedString) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.removeFirstOccurrenceOn(string, charToRemove, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-
-	public void testRemoveAllOccurrences() {
-		this.verifyRemoveAllOccurrences("Employee Fred", ' ', "EmployeeFred");
-		this.verifyRemoveAllOccurrences(" Employee ", ' ', "Employee");
-		this.verifyRemoveAllOccurrences("Employee   Foo", ' ', "EmployeeFoo");
-		this.verifyRemoveAllOccurrences(" Emp loyee   Foo", ' ', "EmployeeFoo");
-	}
-
-	private void verifyRemoveAllOccurrences(String string, char charToRemove, String expectedString) {
-		assertEquals(expectedString, StringTools.removeAllOccurrences(string, charToRemove));
-	}
-
-	public void testRemoveAllOccurrencesCharArray() {
-		this.verifyRemoveAllOccurrencesCharArray("Employee Fred", ' ', "EmployeeFred");
-		this.verifyRemoveAllOccurrencesCharArray(" Employee ", ' ', "Employee");
-		this.verifyRemoveAllOccurrencesCharArray("Employee   Foo", ' ', "EmployeeFoo");
-		this.verifyRemoveAllOccurrencesCharArray(" Emp loyee   Foo", ' ', "EmployeeFoo");
-	}
-
-	private void verifyRemoveAllOccurrencesCharArray(String string, char charToRemove, String expectedString) {
-		assertEquals(expectedString, StringTools.removeAllOccurrences(string.toCharArray(), charToRemove));
-	}
-
-	public void testRemoveAllOccurrencesOnWriter() {
-		this.verifyRemoveAllOccurrencesOnWriter("Employee Fred", ' ', "EmployeeFred");
-		this.verifyRemoveAllOccurrencesOnWriter(" Employee ", ' ', "Employee");
-		this.verifyRemoveAllOccurrencesOnWriter("Employee   Foo", ' ', "EmployeeFoo");
-		this.verifyRemoveAllOccurrencesOnWriter(" Emp loyee   Foo", ' ', "EmployeeFoo");
-	}
-
-	private void verifyRemoveAllOccurrencesOnWriter(String string, char charToRemove, String expectedString) {
-		Writer writer = new StringWriter();
-		StringTools.removeAllOccurrencesOn(string, charToRemove, writer);
-		assertEquals(expectedString, writer.toString());
-	}
-
-	public void testRemoveAllOccurrencesOnStringBuffer() {
-		this.verifyRemoveAllOccurrencesOnStringBuffer("Employee Fred", ' ', "EmployeeFred");
-		this.verifyRemoveAllOccurrencesOnStringBuffer(" Employee ", ' ', "Employee");
-		this.verifyRemoveAllOccurrencesOnStringBuffer("Employee   Foo", ' ', "EmployeeFoo");
-		this.verifyRemoveAllOccurrencesOnStringBuffer(" Emp loyee   Foo", ' ', "EmployeeFoo");
-	}
-
-	private void verifyRemoveAllOccurrencesOnStringBuffer(String string, char charToRemove, String expectedString) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.removeAllOccurrencesOn(string, charToRemove, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-
-	public void testRemoveAllOccurrencesOnStringBuilder() {
-		this.verifyRemoveAllOccurrencesOnStringBuilder("Employee Fred", ' ', "EmployeeFred");
-		this.verifyRemoveAllOccurrencesOnStringBuilder(" Employee ", ' ', "Employee");
-		this.verifyRemoveAllOccurrencesOnStringBuilder("Employee   Foo", ' ', "EmployeeFoo");
-		this.verifyRemoveAllOccurrencesOnStringBuilder(" Emp loyee   Foo", ' ', "EmployeeFoo");
-	}
-
-	private void verifyRemoveAllOccurrencesOnStringBuilder(String string, char charToRemove, String expectedString) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.removeAllOccurrencesOn(string, charToRemove, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-
-	public void testRemoveAllWhitespace() {
-		this.verifyRemoveAllWhitespace("Employee Fred\t", "EmployeeFred");
-		this.verifyRemoveAllWhitespace("\tEmployee\n", "Employee");
-		this.verifyRemoveAllWhitespace("Employee \t Foo", "EmployeeFoo");
-		this.verifyRemoveAllWhitespace(" Emp\tloyee \n Foo", "EmployeeFoo");
-	}
-
-	private void verifyRemoveAllWhitespace(String string, String expectedString) {
-		assertEquals(expectedString, StringTools.removeAllWhitespace(string));
-	}
-
-	public void testRemoveAllWhitespaceCharArray() {
-		this.verifyRemoveAllWhitespaceCharArray("Employee Fred\t", "EmployeeFred");
-		this.verifyRemoveAllWhitespaceCharArray("\tEmployee\n", "Employee");
-		this.verifyRemoveAllWhitespaceCharArray("Employee \t Foo", "EmployeeFoo");
-		this.verifyRemoveAllWhitespaceCharArray(" Emp\tloyee \n Foo", "EmployeeFoo");
-	}
-
-	private void verifyRemoveAllWhitespaceCharArray(String string, String expectedString) {
-		assertEquals(expectedString, StringTools.removeAllWhitespace(string.toCharArray()));
-	}
-
-	public void testRemoveAllWhitespaceOnWriter() {
-		this.verifyRemoveAllWhitespaceOnWriter("Employee Fred\t", "EmployeeFred");
-		this.verifyRemoveAllWhitespaceOnWriter("\tEmployee\n", "Employee");
-		this.verifyRemoveAllWhitespaceOnWriter("Employee \t Foo", "EmployeeFoo");
-		this.verifyRemoveAllWhitespaceOnWriter(" Emp\tloyee \n Foo", "EmployeeFoo");
-	}
-
-	private void verifyRemoveAllWhitespaceOnWriter(String string, String expectedString) {
-		Writer writer = new StringWriter();
-		StringTools.removeAllWhitespaceOn(string, writer);
-		assertEquals(expectedString, writer.toString());
-	}
-
-	public void testRemoveAllWhitespaceOnStringBuffer() {
-		this.verifyRemoveAllWhitespaceOnStringBuffer("Employee Fred\t", "EmployeeFred");
-		this.verifyRemoveAllWhitespaceOnStringBuffer("\tEmployee\n", "Employee");
-		this.verifyRemoveAllWhitespaceOnStringBuffer("Employee \t Foo", "EmployeeFoo");
-		this.verifyRemoveAllWhitespaceOnStringBuffer(" Emp\tloyee \n Foo", "EmployeeFoo");
-	}
-
-	private void verifyRemoveAllWhitespaceOnStringBuffer(String string, String expectedString) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.removeAllWhitespaceOn(string, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-
-	public void testRemoveAllWhitespaceOnStringBuilder() {
-		this.verifyRemoveAllWhitespaceOnStringBuilder("Employee Fred\t", "EmployeeFred");
-		this.verifyRemoveAllWhitespaceOnStringBuilder("\tEmployee\n", "Employee");
-		this.verifyRemoveAllWhitespaceOnStringBuilder("Employee \t Foo", "EmployeeFoo");
-		this.verifyRemoveAllWhitespaceOnStringBuilder(" Emp\tloyee \n Foo", "EmployeeFoo");
-	}
-
-	private void verifyRemoveAllWhitespaceOnStringBuilder(String string, String expectedString) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.removeAllWhitespaceOn(string, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-//////////////////////////////
-	public void testCompressWhitespace() {
-		this.verifyCompressWhitespace("Employee      Fred\t", "Employee Fred ");
-		this.verifyCompressWhitespace("\tEmployee  \n", " Employee ");
-		this.verifyCompressWhitespace("Employee \t Foo", "Employee Foo");
-		this.verifyCompressWhitespace(" Emp\tloyee \n Foo ", " Emp loyee Foo ");
-	}
-
-	private void verifyCompressWhitespace(String string, String expectedString) {
-		assertEquals(expectedString, StringTools.compressWhitespace(string));
-	}
-
-	public void testCompressWhitespaceCharArray() {
-		this.verifyCompressWhitespaceCharArray("Employee      Fred\t", "Employee Fred ");
-		this.verifyCompressWhitespaceCharArray("\tEmployee  \n", " Employee ");
-		this.verifyCompressWhitespaceCharArray("Employee \t Foo", "Employee Foo");
-		this.verifyCompressWhitespaceCharArray(" Emp\tloyee \n Foo ", " Emp loyee Foo ");
-	}
-
-	private void verifyCompressWhitespaceCharArray(String string, String expectedString) {
-		assertEquals(expectedString, StringTools.compressWhitespace(string.toCharArray()));
-	}
-
-	public void testCompressWhitespaceOnWriter() {
-		this.verifyCompressWhitespaceOnWriter("Employee      Fred\t", "Employee Fred ");
-		this.verifyCompressWhitespaceOnWriter("\tEmployee  \n", " Employee ");
-		this.verifyCompressWhitespaceOnWriter("Employee \t Foo", "Employee Foo");
-		this.verifyCompressWhitespaceOnWriter(" Emp\tloyee \n Foo ", " Emp loyee Foo ");
-	}
-
-	private void verifyCompressWhitespaceOnWriter(String string, String expectedString) {
-		Writer writer = new StringWriter();
-		StringTools.compressWhitespaceOn(string, writer);
-		assertEquals(expectedString, writer.toString());
-	}
-
-	public void testCompressWhitespaceOnStringBuffer() {
-		this.verifyCompressWhitespaceOnStringBuffer("Employee      Fred\t", "Employee Fred ");
-		this.verifyCompressWhitespaceOnStringBuffer("\tEmployee  \n", " Employee ");
-		this.verifyCompressWhitespaceOnStringBuffer("Employee \t Foo", "Employee Foo");
-		this.verifyCompressWhitespaceOnStringBuffer(" Emp\tloyee \n Foo ", " Emp loyee Foo ");
-	}
-
-	private void verifyCompressWhitespaceOnStringBuffer(String string, String expectedString) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.compressWhitespaceOn(string, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-
-	public void testCompressWhitespaceOnStringBuilder() {
-		this.verifyCompressWhitespaceOnStringBuilder("Employee      Fred\t", "Employee Fred ");
-		this.verifyCompressWhitespaceOnStringBuilder("\tEmployee  \n", " Employee ");
-		this.verifyCompressWhitespaceOnStringBuilder("Employee \t Foo", "Employee Foo");
-		this.verifyCompressWhitespaceOnStringBuilder(" Emp\tloyee \n Foo ", " Emp loyee Foo ");
-	}
-
-	private void verifyCompressWhitespaceOnStringBuilder(String string, String expectedString) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.compressWhitespaceOn(string, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-
-	// ********** common prefix **********
-
-	public void testCommonPrefixLength() {
-		assertEquals(3, StringTools.commonPrefixLength("fooZZZ", "fooBBB"));
-		assertEquals(3, StringTools.commonPrefixLength("foo", "fooBBB"));
-		assertEquals(3, StringTools.commonPrefixLength("fooZZZ", "foo"));
-		assertEquals(3, StringTools.commonPrefixLength("foo", "foo"));
-	}
-
-	public void testCommonPrefixLengthMax() {
-		assertEquals(2, StringTools.commonPrefixLength("fooZZZ", "fooBBB", 2));
-		assertEquals(2, StringTools.commonPrefixLength("foo", "fooBBB", 2));
-		assertEquals(2, StringTools.commonPrefixLength("fooZZZ", "foo", 2));
-		assertEquals(2, StringTools.commonPrefixLength("foo", "foo", 2));
-	}
-
-	// ********** capitalization **********
-
-	public void testCapitalizeCharArray() {
-		this.verifyCapitalizeCharArray("Oracle", new char[] { 'O', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyCapitalizeCharArray("Oracle", new char[] { 'o', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyCapitalizeCharArray("   ", new char[] { ' ', ' ', ' ' });
-		this.verifyCapitalizeCharArray("ORACLE", new char[] { 'O', 'R', 'A', 'C', 'L', 'E' });
-		this.verifyCapitalizeCharArray("", new char[0]);
-		this.verifyCapitalizeCharArray("A", new char[] { 'a' });
-		this.verifyCapitalizeCharArray("\u00C9cole", new char[] { '\u00E9', 'c', 'o', 'l', 'e' });
-	}
-
-	private void verifyCapitalizeCharArray(String expected, char[] string) {
-		assertEquals(expected, StringTools.capitalize(string));
-	}
-
-	public void testCapitalizeString() {
-		this.verifyCapitalizeString("Oracle", "Oracle");
-		this.verifyCapitalizeString("Oracle", "oracle");
-		this.verifyCapitalizeString("   ", "   ");
-		this.verifyCapitalizeString("ORACLE", "ORACLE");
-		this.verifyCapitalizeString("", "");
-		this.verifyCapitalizeString("A", "a");
-		this.verifyCapitalizeString("\u00C9cole", "\u00E9cole"); // �cole->�COLE
-	}
-
-	private void verifyCapitalizeString(String expected, String string) {
-		assertEquals(expected, StringTools.capitalize(string));
-	}
-
-	public void testCapitalizeOnCharArrayStringBuffer() {
-		this.verifyCapitalizeOnCharArrayStringBuffer("Oracle", new char[] { 'O', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyCapitalizeOnCharArrayStringBuffer("Oracle", new char[] { 'o', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyCapitalizeOnCharArrayStringBuffer("   ", new char[] { ' ', ' ', ' ' });
-		this.verifyCapitalizeOnCharArrayStringBuffer("ORACLE", new char[] { 'O', 'R', 'A', 'C', 'L', 'E' });
-		this.verifyCapitalizeOnCharArrayStringBuffer("", new char[0]);
-		this.verifyCapitalizeOnCharArrayStringBuffer("A", new char[] { 'a' });
-		this.verifyCapitalizeOnCharArrayStringBuffer("\u00C9cole", new char[] { '\u00E9', 'c', 'o', 'l', 'e' });
-	}
-
-	private void verifyCapitalizeOnCharArrayStringBuffer(String expected, char[] string) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.capitalizeOn(string, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testCapitalizeOnCharArrayStringBuilder() {
-		this.verifyCapitalizeOnCharArrayStringBuilder("Oracle", new char[] { 'O', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyCapitalizeOnCharArrayStringBuilder("Oracle", new char[] { 'o', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyCapitalizeOnCharArrayStringBuilder("   ", new char[] { ' ', ' ', ' ' });
-		this.verifyCapitalizeOnCharArrayStringBuilder("ORACLE", new char[] { 'O', 'R', 'A', 'C', 'L', 'E' });
-		this.verifyCapitalizeOnCharArrayStringBuilder("", new char[0]);
-		this.verifyCapitalizeOnCharArrayStringBuilder("A", new char[] { 'a' });
-		this.verifyCapitalizeOnCharArrayStringBuilder("\u00C9cole", new char[] { '\u00E9', 'c', 'o', 'l', 'e' });
-	}
-
-	private void verifyCapitalizeOnCharArrayStringBuilder(String expected, char[] string) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.capitalizeOn(string, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testCapitalizeOnStringStringBuffer() {
-		this.verifyCapitalizeOnStringStringBuffer("Oracle", "Oracle");
-		this.verifyCapitalizeOnStringStringBuffer("Oracle", "oracle");
-		this.verifyCapitalizeOnStringStringBuffer("   ", "   ");
-		this.verifyCapitalizeOnStringStringBuffer("ORACLE", "ORACLE");
-		this.verifyCapitalizeOnStringStringBuffer("", "");
-		this.verifyCapitalizeOnStringStringBuffer("A", "a");
-		this.verifyCapitalizeOnStringStringBuffer("\u00C9cole", "\u00E9cole"); // �cole->�COLE
-	}
-
-	private void verifyCapitalizeOnStringStringBuffer(String expected, String string) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.capitalizeOn(string, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testCapitalizeOnStringStringBuilder() {
-		this.verifyCapitalizeOnStringStringBuilder("Oracle", "Oracle");
-		this.verifyCapitalizeOnStringStringBuilder("Oracle", "oracle");
-		this.verifyCapitalizeOnStringStringBuilder("   ", "   ");
-		this.verifyCapitalizeOnStringStringBuilder("ORACLE", "ORACLE");
-		this.verifyCapitalizeOnStringStringBuilder("", "");
-		this.verifyCapitalizeOnStringStringBuilder("A", "a");
-		this.verifyCapitalizeOnStringStringBuilder("\u00C9cole", "\u00E9cole"); // �cole->�COLE
-	}
-
-	private void verifyCapitalizeOnStringStringBuilder(String expected, String string) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.capitalizeOn(string, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testCapitalizeOnCharArrayWriter() {
-		this.verifyCapitalizeOnCharArrayWriter("Oracle", new char[] { 'O', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyCapitalizeOnCharArrayWriter("Oracle", new char[] { 'o', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyCapitalizeOnCharArrayWriter("   ", new char[] { ' ', ' ', ' ' });
-		this.verifyCapitalizeOnCharArrayWriter("ORACLE", new char[] { 'O', 'R', 'A', 'C', 'L', 'E' });
-		this.verifyCapitalizeOnCharArrayWriter("", new char[0]);
-		this.verifyCapitalizeOnCharArrayWriter("A", new char[] { 'a' });
-		this.verifyCapitalizeOnCharArrayWriter("\u00C9cole", new char[] { '\u00E9', 'c', 'o', 'l', 'e' });
-	}
-
-	private void verifyCapitalizeOnCharArrayWriter(String expected, char[] string) {
-		Writer writer = new StringWriter();
-		StringTools.capitalizeOn(string, writer);
-		assertEquals(expected, writer.toString());
-	}
-
-	public void testCapitalizeOnStringWriter() {
-		this.verifyCapitalizeOnStringWriter("Oracle", "Oracle");
-		this.verifyCapitalizeOnStringWriter("Oracle", "oracle");
-		this.verifyCapitalizeOnStringWriter("   ", "   ");
-		this.verifyCapitalizeOnStringWriter("ORACLE", "ORACLE");
-		this.verifyCapitalizeOnStringWriter("", "");
-		this.verifyCapitalizeOnStringWriter("A", "a");
-		this.verifyCapitalizeOnStringWriter("\u00C9cole", "\u00E9cole"); // �cole->�COLE
-	}
-
-	private void verifyCapitalizeOnStringWriter(String expected, String string) {
-		Writer writer = new StringWriter();
-		StringTools.capitalizeOn(string, writer);
-		assertEquals(expected, writer.toString());
-	}
-
-	public void testUnapitalizeCharArray() {
-		this.verifyUncapitalizeCharArray("oracle", new char[] { 'O', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyUncapitalizeCharArray("oracle", new char[] { 'o', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyUncapitalizeCharArray("   ", new char[] { ' ', ' ', ' ' });
-		this.verifyUncapitalizeCharArray("ORACLE", new char[] { 'O', 'R', 'A', 'C', 'L', 'E' });
-		this.verifyUncapitalizeCharArray("", new char[0]);
-		this.verifyUncapitalizeCharArray("a", new char[] { 'A' });
-		this.verifyUncapitalizeCharArray("\u00E9cole", new char[] { '\u00C9', 'c', 'o', 'l', 'e' });
-	}
-
-	private void verifyUncapitalizeCharArray(String expected, char[] string) {
-		assertEquals(expected, StringTools.uncapitalize(string));
-	}
-
-	public void testUncapitalizeString() {
-		this.verifyUncapitalizeString("oracle", "Oracle");
-		this.verifyUncapitalizeString("oracle", "oracle");
-		this.verifyUncapitalizeString("   ", "   ");
-		this.verifyUncapitalizeString("ORACLE", "ORACLE");
-		this.verifyUncapitalizeString("", "");
-		this.verifyUncapitalizeString("a", "A");
-		this.verifyUncapitalizeString("\u00E9cole", "\u00C9cole"); // �cole->�COLE
-	}
-
-	private void verifyUncapitalizeString(String expected, String string) {
-		assertEquals(expected, StringTools.uncapitalize(string));
-	}
-
-	public void testUncapitalizeOnCharArrayStringBuffer() {
-		this.verifyUncapitalizeOnCharArrayStringBuffer("oracle", new char[] { 'O', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyUncapitalizeOnCharArrayStringBuffer("oracle", new char[] { 'o', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyUncapitalizeOnCharArrayStringBuffer("   ", new char[] { ' ', ' ', ' ' });
-		this.verifyUncapitalizeOnCharArrayStringBuffer("ORACLE", new char[] { 'O', 'R', 'A', 'C', 'L', 'E' });
-		this.verifyUncapitalizeOnCharArrayStringBuffer("", new char[0]);
-		this.verifyUncapitalizeOnCharArrayStringBuffer("a", new char[] { 'A' });
-		this.verifyUncapitalizeOnCharArrayStringBuffer("\u00E9cole", new char[] { '\u00C9', 'c', 'o', 'l', 'e' });
-	}
-
-	private void verifyUncapitalizeOnCharArrayStringBuffer(String expected, char[] string) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.uncapitalizeOn(string, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testUncapitalizeOnCharArrayStringBuilder() {
-		this.verifyUncapitalizeOnCharArrayStringBuilder("oracle", new char[] { 'O', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyUncapitalizeOnCharArrayStringBuilder("oracle", new char[] { 'o', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyUncapitalizeOnCharArrayStringBuilder("   ", new char[] { ' ', ' ', ' ' });
-		this.verifyUncapitalizeOnCharArrayStringBuilder("ORACLE", new char[] { 'O', 'R', 'A', 'C', 'L', 'E' });
-		this.verifyUncapitalizeOnCharArrayStringBuilder("", new char[0]);
-		this.verifyUncapitalizeOnCharArrayStringBuilder("a", new char[] { 'A' });
-		this.verifyUncapitalizeOnCharArrayStringBuilder("\u00E9cole", new char[] { '\u00C9', 'c', 'o', 'l', 'e' });
-	}
-
-	private void verifyUncapitalizeOnCharArrayStringBuilder(String expected, char[] string) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.uncapitalizeOn(string, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testUncapitalizeOnStringStringBuffer() {
-		this.verifyUncapitalizeOnStringStringBuffer("oracle", "Oracle");
-		this.verifyUncapitalizeOnStringStringBuffer("oracle", "oracle");
-		this.verifyUncapitalizeOnStringStringBuffer("   ", "   ");
-		this.verifyUncapitalizeOnStringStringBuffer("ORACLE", "ORACLE");
-		this.verifyUncapitalizeOnStringStringBuffer("", "");
-		this.verifyUncapitalizeOnStringStringBuffer("a", "A");
-		this.verifyUncapitalizeOnStringStringBuffer("\u00E9cole", "\u00C9cole"); // �cole->�COLE
-	}
-
-	private void verifyUncapitalizeOnStringStringBuffer(String expected, String string) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.uncapitalizeOn(string, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testUncapitalizeOnStringStringBuilder() {
-		this.verifyUncapitalizeOnStringStringBuilder("oracle", "Oracle");
-		this.verifyUncapitalizeOnStringStringBuilder("oracle", "oracle");
-		this.verifyUncapitalizeOnStringStringBuilder("   ", "   ");
-		this.verifyUncapitalizeOnStringStringBuilder("ORACLE", "ORACLE");
-		this.verifyUncapitalizeOnStringStringBuilder("", "");
-		this.verifyUncapitalizeOnStringStringBuilder("a", "A");
-		this.verifyUncapitalizeOnStringStringBuilder("\u00E9cole", "\u00C9cole"); // �cole->�COLE
-	}
-
-	private void verifyUncapitalizeOnStringStringBuilder(String expected, String string) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.uncapitalizeOn(string, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testUncapitalizeOnCharArrayWriter() {
-		this.verifyUncapitalizeOnCharArrayWriter("oracle", new char[] { 'O', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyUncapitalizeOnCharArrayWriter("oracle", new char[] { 'o', 'r', 'a', 'c', 'l', 'e' });
-		this.verifyUncapitalizeOnCharArrayWriter("   ", new char[] { ' ', ' ', ' ' });
-		this.verifyUncapitalizeOnCharArrayWriter("ORACLE", new char[] { 'O', 'R', 'A', 'C', 'L', 'E' });
-		this.verifyUncapitalizeOnCharArrayWriter("", new char[0]);
-		this.verifyUncapitalizeOnCharArrayWriter("a", new char[] { 'A' });
-		this.verifyUncapitalizeOnCharArrayWriter("\u00E9cole", new char[] { '\u00C9', 'c', 'o', 'l', 'e' });
-	}
-
-	private void verifyUncapitalizeOnCharArrayWriter(String expected, char[] string) {
-		Writer writer = new StringWriter();
-		StringTools.uncapitalizeOn(string, writer);
-		assertEquals(expected, writer.toString());
-	}
-
-	public void testUncapitalizeOnStringWriter() {
-		this.verifyUncapitalizeOnStringWriter("oracle", "Oracle");
-		this.verifyUncapitalizeOnStringWriter("oracle", "oracle");
-		this.verifyUncapitalizeOnStringWriter("   ", "   ");
-		this.verifyUncapitalizeOnStringWriter("ORACLE", "ORACLE");
-		this.verifyUncapitalizeOnStringWriter("", "");
-		this.verifyUncapitalizeOnStringWriter("a", "A");
-		this.verifyUncapitalizeOnStringWriter("\u00E9cole", "\u00C9cole"); // �cole->�COLE
-	}
-
-	private void verifyUncapitalizeOnStringWriter(String expected, String string) {
-		Writer writer = new StringWriter();
-		StringTools.uncapitalizeOn(string, writer);
-		assertEquals(expected, writer.toString());
-	}
-
-	// ********** #toString() **********
-
-	public void testBuildToStringClassName_anonymous() {
-		Object o = new Object(){/*anonymous subclass of Object*/};
-		assertEquals("Object", StringTools.buildToStringClassName(o.getClass()));
-	}
-
-	// ********** queries **********
-
-	public void testStringIsEmptyString() {
-		assertTrue(StringTools.stringIsEmpty((String) null));
-		assertTrue(StringTools.stringIsEmpty(""));
-		assertTrue(StringTools.stringIsEmpty("      "));
-		assertTrue(StringTools.stringIsEmpty("      \t\t   "));
-		assertTrue(StringTools.stringIsEmpty("      \t\t   " + StringTools.CR));
-	}
-
-	public void testStringIsEmptyCharArray() {
-		assertTrue(StringTools.stringIsEmpty((char[]) null));
-		this.verifyStringIsEmptyCharArray("");
-		this.verifyStringIsEmptyCharArray("      \t\t   ");
-		this.verifyStringIsEmptyCharArray("      ");
-		this.verifyStringIsEmptyCharArray("      \t\t   " + StringTools.CR);
-	}
-
-	private void verifyStringIsEmptyCharArray(String string) {
-		assertTrue(StringTools.stringIsEmpty(string.toCharArray()));
-	}
-	
-	public void testStringsAreEqualStringString() {
-		assertTrue(StringTools.stringsAreEqual((String) null, (String) null));
-		assertFalse(StringTools.stringsAreEqual(null, "asdf"));
-		assertFalse(StringTools.stringsAreEqual("asdf", null));
-		assertTrue(StringTools.stringsAreEqual("asdf", "asdf"));
-		assertFalse(StringTools.stringsAreEqual("asdf", "ASDF"));
-	}
-	
-	public void testStringsAreEqualCharArrayCharArray() {
-		assertTrue(StringTools.stringsAreEqual((char[]) null, (char[]) null));
-		assertFalse(StringTools.stringsAreEqual((char[]) null, "asdf".toCharArray()));
-		assertFalse(StringTools.stringsAreEqual("asdf".toCharArray(), (char[]) null));
-		assertTrue(StringTools.stringsAreEqual("asdf".toCharArray(), "asdf".toCharArray()));
-		assertFalse(StringTools.stringsAreEqual("asdf".toCharArray(), "ASDF".toCharArray()));
-	}
-	
-	public void testStringsAreEqualIgnoreCaseStringString() {
-		assertTrue(StringTools.stringsAreEqualIgnoreCase((String) null, (String) null));
-		assertFalse(StringTools.stringsAreEqualIgnoreCase(null, "asdf"));
-		assertFalse(StringTools.stringsAreEqualIgnoreCase("asdf", null));
-		assertTrue(StringTools.stringsAreEqualIgnoreCase("asdf", "asdf"));
-		assertTrue(StringTools.stringsAreEqualIgnoreCase("asdf", "ASDF"));
-	}
-
-	public void testStringsAreEqualIgnoreCaseCharArrayCharArray() {
-		assertTrue(StringTools.stringsAreEqualIgnoreCase((char[]) null, (char[]) null));
-		assertFalse(StringTools.stringsAreEqualIgnoreCase((char[]) null, "asdf".toCharArray()));
-		assertFalse(StringTools.stringsAreEqualIgnoreCase("asdf".toCharArray(), (char[]) null));
-		assertTrue(StringTools.stringsAreEqualIgnoreCase("asdf".toCharArray(), "asdf".toCharArray()));
-		assertTrue(StringTools.stringsAreEqualIgnoreCase("asdf".toCharArray(), "ASDF".toCharArray()));
-	}
-
-	public void testStringStartsWithIgnoreCaseStringString() {
-		assertTrue(StringTools.stringStartsWithIgnoreCase("asdf", "as"));
-		assertTrue(StringTools.stringStartsWithIgnoreCase("asdf", "aS"));
-		assertTrue(StringTools.stringStartsWithIgnoreCase("asdf", ""));
-		assertTrue(StringTools.stringStartsWithIgnoreCase("asdf", "A"));
-
-		assertFalse(StringTools.stringStartsWithIgnoreCase("asdf", "bsdf"));
-		assertFalse(StringTools.stringStartsWithIgnoreCase("asdf", "g"));
-		assertFalse(StringTools.stringStartsWithIgnoreCase("asdf", "asdg"));
-		assertFalse(StringTools.stringStartsWithIgnoreCase("asdf", "asdfg"));
-		assertFalse(StringTools.stringStartsWithIgnoreCase("asdf", "asdfgggggg"));
-	}
-
-	public void testStringStartsWithIgnoreCaseCharArrayCharArray() {
-		assertTrue(StringTools.stringStartsWithIgnoreCase("asdf".toCharArray(), "as".toCharArray()));
-		assertTrue(StringTools.stringStartsWithIgnoreCase("asdf".toCharArray(), "aS".toCharArray()));
-		assertTrue(StringTools.stringStartsWithIgnoreCase("asdf".toCharArray(), "".toCharArray()));
-		assertTrue(StringTools.stringStartsWithIgnoreCase("asdf".toCharArray(), "A".toCharArray()));
-		assertTrue(StringTools.stringStartsWithIgnoreCase("asdf".toCharArray(), "ASDF".toCharArray()));
-		assertTrue(StringTools.stringStartsWithIgnoreCase("asdf".toCharArray(), "asdf".toCharArray()));
-
-		assertFalse(StringTools.stringStartsWithIgnoreCase("asdf".toCharArray(), "bsdf".toCharArray()));
-		assertFalse(StringTools.stringStartsWithIgnoreCase("asdf".toCharArray(), "g".toCharArray()));
-		assertFalse(StringTools.stringStartsWithIgnoreCase("asdf".toCharArray(), "asdg".toCharArray()));
-		assertFalse(StringTools.stringStartsWithIgnoreCase("asdf".toCharArray(), "asdfg".toCharArray()));
-		assertFalse(StringTools.stringStartsWithIgnoreCase("asdf".toCharArray(), "asdfgggggg".toCharArray()));
-	}
-
-	public void testCharactersAreEqualIgnoreCase() {
-		assertTrue(StringTools.charactersAreEqualIgnoreCase('a', 'a'));
-		assertTrue(StringTools.charactersAreEqualIgnoreCase('a', 'A'));
-		assertTrue(StringTools.charactersAreEqualIgnoreCase('A', 'a'));
-		assertTrue(StringTools.charactersAreEqualIgnoreCase('A', 'A'));
-		
-		assertFalse(StringTools.charactersAreEqualIgnoreCase('a', 'b'));
-		assertFalse(StringTools.charactersAreEqualIgnoreCase('A', 'b'));
-	}
-
-	public void testStringIsUppercase() {
-		this.verifyStringIsUppercase("FOO");
-		this.verifyStringIsUppercase("FOO2");
-		this.verifyStringIsUppercase("F O O");
-		this.denyStringIsUppercase("Foo");
-		this.denyStringIsUppercase("");
-	}
-
-	private void verifyStringIsUppercase(String s) {
-		assertTrue(StringTools.stringIsUppercase(s));
-		assertTrue(StringTools.stringIsUppercase(s.toCharArray()));
-	}
-
-	private void denyStringIsUppercase(String s) {
-		assertFalse(StringTools.stringIsUppercase(s));
-		assertFalse(StringTools.stringIsUppercase(s.toCharArray()));
-	}
-
-	public void testStringIsLowercase() {
-		this.verifyStringIsLowercase("foo");
-		this.verifyStringIsLowercase("foo2");
-		this.verifyStringIsLowercase("f o o");
-		this.denyStringIsLowercase("Foo");
-		this.denyStringIsLowercase("");
-	}
-
-	private void verifyStringIsLowercase(String s) {
-		assertTrue(StringTools.stringIsLowercase(s));
-		assertTrue(StringTools.stringIsLowercase(s.toCharArray()));
-	}
-
-	private void denyStringIsLowercase(String s) {
-		assertFalse(StringTools.stringIsLowercase(s));
-		assertFalse(StringTools.stringIsLowercase(s.toCharArray()));
-	}
-
-	// ********** convert camel-case to all-caps **********
-
-	public void testConvertCamelCaseToAllCaps() {
-		assertEquals("TEST", StringTools.convertCamelCaseToAllCaps("test"));
-		assertEquals("TEST", StringTools.convertCamelCaseToAllCaps("TEST"));
-		assertEquals("TEST_TEST", StringTools.convertCamelCaseToAllCaps("testTest"));
-		assertEquals("TEST_TEST", StringTools.convertCamelCaseToAllCaps("TestTest"));
-		assertEquals("TEST_TEST_TEST", StringTools.convertCamelCaseToAllCaps("testTESTTest"));
-		assertEquals("TEST_TEST_TEST", StringTools.convertCamelCaseToAllCaps("TestTESTTest"));
-		assertEquals("TEST_TEST_TEST_T", StringTools.convertCamelCaseToAllCaps("TestTESTTestT"));
-	}
-
-	public void testConvertCamelCaseToAllCapsOnWriter() {
-		this.verifyConvertCamelCaseToAllCapsOnWriter("TEST", "test");
-		this.verifyConvertCamelCaseToAllCapsOnWriter("TEST", "TEST");
-		this.verifyConvertCamelCaseToAllCapsOnWriter("TEST_TEST", "testTest");
-		this.verifyConvertCamelCaseToAllCapsOnWriter("TEST_TEST", "TestTest");
-		this.verifyConvertCamelCaseToAllCapsOnWriter("TEST_TEST_TEST", "testTESTTest");
-		this.verifyConvertCamelCaseToAllCapsOnWriter("TEST_TEST_TEST", "TestTESTTest");
-		this.verifyConvertCamelCaseToAllCapsOnWriter("TEST_TEST_TEST_T", "TestTESTTestT");
-	}
-
-	private void verifyConvertCamelCaseToAllCapsOnWriter(String expected, String string) {
-		Writer writer = new StringWriter();
-		StringTools.convertCamelCaseToAllCapsOn(string, writer);
-		assertEquals(expected, writer.toString());
-	}
-
-	public void testConvertCamelCaseToAllCapsOnStringBuffer() {
-		this.verifyConvertCamelCaseToAllCapsOnStringBuffer("TEST", "test");
-		this.verifyConvertCamelCaseToAllCapsOnStringBuffer("TEST", "TEST");
-		this.verifyConvertCamelCaseToAllCapsOnStringBuffer("TEST_TEST", "testTest");
-		this.verifyConvertCamelCaseToAllCapsOnStringBuffer("TEST_TEST", "TestTest");
-		this.verifyConvertCamelCaseToAllCapsOnStringBuffer("TEST_TEST_TEST", "testTESTTest");
-		this.verifyConvertCamelCaseToAllCapsOnStringBuffer("TEST_TEST_TEST", "TestTESTTest");
-		this.verifyConvertCamelCaseToAllCapsOnStringBuffer("TEST_TEST_TEST_T", "TestTESTTestT");
-	}
-
-	private void verifyConvertCamelCaseToAllCapsOnStringBuffer(String expected, String string) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.convertCamelCaseToAllCapsOn(string, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testConvertCamelCaseToAllCapsOnStringBuilder() {
-		this.verifyConvertCamelCaseToAllCapsOnStringBuilder("TEST", "test");
-		this.verifyConvertCamelCaseToAllCapsOnStringBuilder("TEST", "TEST");
-		this.verifyConvertCamelCaseToAllCapsOnStringBuilder("TEST_TEST", "testTest");
-		this.verifyConvertCamelCaseToAllCapsOnStringBuilder("TEST_TEST", "TestTest");
-		this.verifyConvertCamelCaseToAllCapsOnStringBuilder("TEST_TEST_TEST", "testTESTTest");
-		this.verifyConvertCamelCaseToAllCapsOnStringBuilder("TEST_TEST_TEST", "TestTESTTest");
-		this.verifyConvertCamelCaseToAllCapsOnStringBuilder("TEST_TEST_TEST_T", "TestTESTTestT");
-	}
-
-	private void verifyConvertCamelCaseToAllCapsOnStringBuilder(String expected, String string) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.convertCamelCaseToAllCapsOn(string, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testConvertCamelCaseToAllCapsMaxLength() {
-		assertEquals("TEST", StringTools.convertCamelCaseToAllCaps("test", 44));
-		assertEquals("TEST", StringTools.convertCamelCaseToAllCaps("test", 4));
-		assertEquals("TES", StringTools.convertCamelCaseToAllCaps("test", 3));
-		assertEquals("TEST", StringTools.convertCamelCaseToAllCaps("TEST", 5));
-		assertEquals("TE", StringTools.convertCamelCaseToAllCaps("TEST", 2));
-		assertEquals("TEST_TEST", StringTools.convertCamelCaseToAllCaps("testTest", 9));
-		assertEquals("TEST_TES", StringTools.convertCamelCaseToAllCaps("testTest", 8));
-		assertEquals("TEST_T", StringTools.convertCamelCaseToAllCaps("testTest", 6));
-		assertEquals("TEST_", StringTools.convertCamelCaseToAllCaps("testTest", 5));
-		assertEquals("TEST", StringTools.convertCamelCaseToAllCaps("testTest", 4));
-		assertEquals("TEST_TEST", StringTools.convertCamelCaseToAllCaps("TestTest", 9));
-		assertEquals("TEST_TEST", StringTools.convertCamelCaseToAllCaps("TestTest", 1100));
-		assertEquals("TEST_TEST_", StringTools.convertCamelCaseToAllCaps("testTESTTest", 10));
-		assertEquals("TEST_TEST_TEST", StringTools.convertCamelCaseToAllCaps("TestTESTTest", 14));
-		assertEquals("TEST_TEST_TEST_T", StringTools.convertCamelCaseToAllCaps("TestTESTTestT", 16));
-		assertEquals("TEST_TEST_TEST_", StringTools.convertCamelCaseToAllCaps("TestTESTTestT", 15));
-	}
-
-	public void testConvertCamelCaseToAllCapsMaxLengthOnWriter() {
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST", "test", 44);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST", "test", 4);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TES", "test", 3);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST", "TEST", 5);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TE", "TEST", 2);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST_TEST", "testTest", 9);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST_TES", "testTest", 8);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST_T", "testTest", 6);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST_", "testTest", 5);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST", "testTest", 4);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST_TEST", "TestTest", 9);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST_TEST", "TestTest", 1100);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST_TEST_", "testTESTTest", 10);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST_TEST_TEST", "TestTESTTest", 14);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST_TEST_TEST_T", "TestTESTTestT", 16);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnWriter("TEST_TEST_TEST_", "TestTESTTestT", 15);
-	}
-
-	private void verifyConvertCamelCaseToAllCapsMaxLengthOnWriter(String expected, String string, int max) {
-		Writer writer = new StringWriter();
-		StringTools.convertCamelCaseToAllCapsOn(string, max, writer);
-		assertEquals(expected, writer.toString());
-	}
-
-	public void testConvertCamelCaseToAllCapsMaxLengthOnStringBuffer() {
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST", "test", 44);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST", "test", 4);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TES", "test", 3);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST", "TEST", 5);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TE", "TEST", 2);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST_TEST", "testTest", 9);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST_TES", "testTest", 8);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST_T", "testTest", 6);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST_", "testTest", 5);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST", "testTest", 4);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST_TEST", "TestTest", 9);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST_TEST", "TestTest", 1100);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST_TEST_", "testTESTTest", 10);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST_TEST_TEST", "TestTESTTest", 14);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST_TEST_TEST_T", "TestTESTTestT", 16);
-		this.verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer("TEST_TEST_TEST_", "TestTESTTestT", 15);
-	}
-
-	private void verifyConvertCamelCaseToAllCapsMaxLengthOnStringBuffer(String expected, String string, int max) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.convertCamelCaseToAllCapsOn(string, max, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	// ********** convert underscores to all-caps **********
-
-	public void testConvertUnderscoresToCamelCase() {
-		assertEquals("test", StringTools.convertUnderscoresToCamelCase("TEST", false));
-		assertEquals("test", StringTools.convertUnderscoresToCamelCase("TEST_", false));
-		assertEquals("test", StringTools.convertUnderscoresToCamelCase("TEST____", false));
-		assertEquals("Test", StringTools.convertUnderscoresToCamelCase("TEST", true));
-		assertEquals("test", StringTools.convertUnderscoresToCamelCase("TeST", false));
-		assertEquals("testTest", StringTools.convertUnderscoresToCamelCase("TEST_TEST", false));
-		assertEquals("testTest", StringTools.convertUnderscoresToCamelCase("TEST___TEST", false));
-		assertEquals("TestTest", StringTools.convertUnderscoresToCamelCase("TEST_TEST", true));
-		assertEquals("testTestTest", StringTools.convertUnderscoresToCamelCase("TEST_TEST_TEST", false));
-		assertEquals("TestTestTest", StringTools.convertUnderscoresToCamelCase("TEST_TEST_TEST", true));
-		assertEquals("testTestTestT", StringTools.convertUnderscoresToCamelCase("TEST_TEST_TEST_T", false));
-		assertEquals("testTestTestT", StringTools.convertUnderscoresToCamelCase("_TEST_TEST_TEST_T", false));
-		assertEquals("testTestTestT", StringTools.convertUnderscoresToCamelCase("__TEST_TEST_TEST_T", false));
-		assertEquals("TestTestTestT", StringTools.convertUnderscoresToCamelCase("TEST_TEST_TEST_T", true));
-		assertEquals("TestTestTestT", StringTools.convertUnderscoresToCamelCase("_TEST_TEST_TEST_T", true));
-		assertEquals("TestTestTestT", StringTools.convertUnderscoresToCamelCase("__TEST_TEST_TEST_T", true));
-	}
-
-	public void testConvertUnderscoresToCamelCaseLowercase() {
-		assertEquals("test", StringTools.convertUnderscoresToCamelCase("test", false));
-		assertEquals("test", StringTools.convertUnderscoresToCamelCase("test_", false));
-		assertEquals("test", StringTools.convertUnderscoresToCamelCase("test____", false));
-		assertEquals("Test", StringTools.convertUnderscoresToCamelCase("test", true));
-		assertEquals("test", StringTools.convertUnderscoresToCamelCase("test", false));
-		assertEquals("testTest", StringTools.convertUnderscoresToCamelCase("test_test", false));
-		assertEquals("testTest", StringTools.convertUnderscoresToCamelCase("test___test", false));
-		assertEquals("TestTest", StringTools.convertUnderscoresToCamelCase("test_test", true));
-		assertEquals("testTestTest", StringTools.convertUnderscoresToCamelCase("test_test_test", false));
-		assertEquals("TestTestTest", StringTools.convertUnderscoresToCamelCase("test_test_test", true));
-		assertEquals("testTestTestT", StringTools.convertUnderscoresToCamelCase("test_test_test_t", false));
-		assertEquals("testTestTestT", StringTools.convertUnderscoresToCamelCase("_test_test_test_t", false));
-		assertEquals("testTestTestT", StringTools.convertUnderscoresToCamelCase("__test_test_test_t", false));
-		assertEquals("TestTestTestT", StringTools.convertUnderscoresToCamelCase("test_test_test_t", true));
-		assertEquals("TestTestTestT", StringTools.convertUnderscoresToCamelCase("_test_test_test_t", true));
-		assertEquals("TestTestTestT", StringTools.convertUnderscoresToCamelCase("__test_test_test_t", true));
-	}
-
-	public void testConvertUnderscoresToCamelCaseOnWriter() {
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("test", "TEST", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("test", "TEST_", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("test", "TEST____", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("Test", "TEST", true);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("test", "TeST", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("testTest", "TEST_TEST", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("testTest", "TEST___TEST", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("TestTest", "TEST_TEST", true);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("testTestTest", "TEST_TEST_TEST", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("TestTestTest", "TEST_TEST_TEST", true);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("testTestTestT", "TEST_TEST_TEST_T", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("testTestTestT", "_TEST_TEST_TEST_T", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("testTestTestT", "__TEST_TEST_TEST_T", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("TestTestTestT", "TEST_TEST_TEST_T", true);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("TestTestTestT", "_TEST_TEST_TEST_T", true);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("TestTestTestT", "__TEST_TEST_TEST_T", true);
-	}
-
-	public void testConvertUnderscoresToCamelCaseOnWriterLowercase() {
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("test", "test", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("test", "test_", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("test", "test____", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("Test", "test", true);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("test", "test", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("testTest", "test_test", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("testTest", "test___test", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("TestTest", "test_test", true);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("testTestTest", "test_test_test", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("TestTestTest", "test_test_test", true);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("testTestTestT", "test_test_test_t", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("testTestTestT", "_test_test_test_t", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("testTestTestT", "__test_test_test_t", false);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("TestTestTestT", "test_test_test_t", true);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("TestTestTestT", "_test_test_test_t", true);
-		this.verifyConvertUnderscoresToCamelCaseOnWriter("TestTestTestT", "__test_test_test_t", true);
-	}
-
-	private void verifyConvertUnderscoresToCamelCaseOnWriter(String expected, String string, boolean capitalizeFirstLetter) {
-		Writer writer = new StringWriter();
-		StringTools.convertUnderscoresToCamelCaseOn(string, capitalizeFirstLetter, writer);
-		assertEquals(expected, writer.toString());
-	}
-
-	public void testConvertUnderscoresToCamelCaseOnStringBuffer() {
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("test", "TEST", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("test", "TEST_", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("test", "TEST____", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("Test", "TEST", true);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("test", "TeST", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("testTest", "TEST_TEST", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("testTest", "TEST___TEST", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("TestTest", "TEST_TEST", true);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("testTestTest", "TEST_TEST_TEST", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("TestTestTest", "TEST_TEST_TEST", true);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("testTestTestT", "TEST_TEST_TEST_T", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("testTestTestT", "_TEST_TEST_TEST_T", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("testTestTestT", "__TEST_TEST_TEST_T", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("TestTestTestT", "TEST_TEST_TEST_T", true);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("TestTestTestT", "_TEST_TEST_TEST_T", true);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("TestTestTestT", "__TEST_TEST_TEST_T", true);
-	}
-
-	public void testConvertUnderscoresToCamelCaseOnStringBufferLowercase() {
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("test", "test", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("test", "test_", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("test", "test____", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("Test", "test", true);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("test", "test", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("testTest", "test_test", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("testTest", "test___test", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("TestTest", "test_test", true);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("testTestTest", "test_test_test", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("TestTestTest", "test_test_test", true);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("testTestTestT", "test_test_test_t", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("testTestTestT", "_test_test_test_t", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("testTestTestT", "__test_test_test_t", false);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("TestTestTestT", "test_test_test_t", true);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("TestTestTestT", "_test_test_test_t", true);
-		this.verifyConvertUnderscoresToCamelCaseOnStringBuffer("TestTestTestT", "__test_test_test_t", true);
-	}
-
-	private void verifyConvertUnderscoresToCamelCaseOnStringBuffer(String expected, String string, boolean capitalizeFirstLetter) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.convertUnderscoresToCamelCaseOn(string, capitalizeFirstLetter, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	// ********** delimiting **********
-
-	public void testStringIsQuoted() {
-		this.denyStringIsQuoted("foo");
-		this.verifyStringIsQuoted("\"foo\"");
-
-		this.denyStringIsQuoted("");
-		this.verifyStringIsQuoted("\"\"");
-
-		this.denyStringIsQuoted("\"");
-		this.denyStringIsQuoted(" ");
-		this.denyStringIsQuoted("''");
-		this.denyStringIsQuoted("'foo'");
-	}
-
-	private void verifyStringIsQuoted(String s) {
-		assertTrue(StringTools.stringIsQuoted(s));
-		assertTrue(StringTools.stringIsQuoted(s.toCharArray()));
-	}
-
-	private void denyStringIsQuoted(String s) {
-		assertFalse(StringTools.stringIsQuoted(s));
-		assertFalse(StringTools.stringIsQuoted(s.toCharArray()));
-	}
-
-	public void testStringIsParenthetical() {
-		this.denyStringIsParenthetical("foo");
-		this.verifyStringIsParenthetical("(foo)");
-
-		this.denyStringIsParenthetical("");
-		this.verifyStringIsParenthetical("()");
-
-		this.denyStringIsParenthetical("(");
-		this.denyStringIsParenthetical(" ");
-		this.denyStringIsParenthetical("''");
-		this.denyStringIsParenthetical("'foo'");
-	}
-
-	private void verifyStringIsParenthetical(String s) {
-		assertTrue(StringTools.stringIsParenthetical(s));
-		assertTrue(StringTools.stringIsParenthetical(s.toCharArray()));
-	}
-
-	private void denyStringIsParenthetical(String s) {
-		assertFalse(StringTools.stringIsParenthetical(s));
-		assertFalse(StringTools.stringIsParenthetical(s.toCharArray()));
-	}
-
-	public void testStringIsBracketed() {
-		this.denyStringIsBracketed("foo");
-		this.verifyStringIsBracketed("[foo]");
-
-		this.denyStringIsBracketed("");
-		this.verifyStringIsBracketed("[]");
-
-		this.denyStringIsBracketed("[");
-		this.denyStringIsBracketed(" ");
-		this.denyStringIsBracketed("''");
-		this.denyStringIsBracketed("'foo'");
-	}
-
-	private void verifyStringIsBracketed(String s) {
-		assertTrue(StringTools.stringIsBracketed(s));
-		assertTrue(StringTools.stringIsBracketed(s.toCharArray()));
-	}
-
-	private void denyStringIsBracketed(String s) {
-		assertFalse(StringTools.stringIsBracketed(s));
-		assertFalse(StringTools.stringIsBracketed(s.toCharArray()));
-	}
-
-	public void testStringIsBraced() {
-		this.denyStringIsBraced("foo");
-		this.verifyStringIsBraced("{foo}");
-
-		this.denyStringIsBraced("");
-		this.verifyStringIsBraced("{}");
-
-		this.denyStringIsBraced("{");
-		this.denyStringIsBraced(" ");
-		this.denyStringIsBraced("''");
-		this.denyStringIsBraced("'foo'");
-	}
-
-	private void verifyStringIsBraced(String s) {
-		assertTrue(StringTools.stringIsBraced(s));
-		assertTrue(StringTools.stringIsBraced(s.toCharArray()));
-	}
-
-	private void denyStringIsBraced(String s) {
-		assertFalse(StringTools.stringIsBraced(s));
-		assertFalse(StringTools.stringIsBraced(s.toCharArray()));
-	}
-
-	public void testStringIsChevroned() {
-		this.denyStringIsChevroned("foo");
-		this.verifyStringIsChevroned("<foo>");
-
-		this.denyStringIsChevroned("");
-		this.verifyStringIsChevroned("<>");
-
-		this.denyStringIsChevroned("{");
-		this.denyStringIsChevroned(" ");
-		this.denyStringIsChevroned("''");
-		this.denyStringIsChevroned("'foo'");
-	}
-
-	private void verifyStringIsChevroned(String s) {
-		assertTrue(StringTools.stringIsChevroned(s));
-		assertTrue(StringTools.stringIsChevroned(s.toCharArray()));
-	}
-
-	private void denyStringIsChevroned(String s) {
-		assertFalse(StringTools.stringIsChevroned(s));
-		assertFalse(StringTools.stringIsChevroned(s.toCharArray()));
-	}
-
-	public void testStringIsDelimited() {
-		this.denyStringIsDelimited("foo", '?');
-		this.verifyStringIsDelimited("?foo?", '?');
-
-		this.denyStringIsDelimited("", '?');
-		this.verifyStringIsDelimited("\"\"", '"');
-		this.verifyStringIsDelimited("?xx?", '?');
-		this.denyStringIsDelimited("?xx]", '?');
-
-		this.denyStringIsDelimited("\"", '"');
-		this.denyStringIsDelimited(" ", ' ');
-		this.denyStringIsDelimited("''", '"');
-		this.denyStringIsDelimited("'foo'", '?');
-	}
-
-	private void verifyStringIsDelimited(String s, char c) {
-		assertTrue(StringTools.stringIsDelimited(s, c));
-		assertTrue(StringTools.stringIsDelimited(s.toCharArray(), c));
-	}
-
-	private void denyStringIsDelimited(String s, char c) {
-		assertFalse(StringTools.stringIsDelimited(s, c));
-		assertFalse(StringTools.stringIsDelimited(s.toCharArray(), c));
-	}
-
-	public void testStringIsDelimited2() {
-		this.denyStringIsDelimited2("foo", '[', ']');
-		this.verifyStringIsDelimited2("{foo}", '{', '}');
-
-		this.denyStringIsDelimited2("", '[', ']');
-		this.verifyStringIsDelimited2("[]", '[', ']');
-		this.verifyStringIsDelimited2("[xx]", '[', ']');
-		this.denyStringIsDelimited2("?xx]", '[', ']');
-
-		this.denyStringIsDelimited2("\"", '[', ']');
-		this.denyStringIsDelimited2(" ", '[', ']');
-		this.denyStringIsDelimited2("''", '[', ']');
-		this.denyStringIsDelimited2("'foo'", '[', ']');
-	}
-
-	private void verifyStringIsDelimited2(String s, char start, char end) {
-		assertTrue(StringTools.stringIsDelimited(s, start, end));
-		assertTrue(StringTools.stringIsDelimited(s.toCharArray(), start, end));
-	}
-
-	private void denyStringIsDelimited2(String s, char start, char end) {
-		assertFalse(StringTools.stringIsDelimited(s, start, end));
-		assertFalse(StringTools.stringIsDelimited(s.toCharArray(), start, end));
-	}
-
-	// ********** undelimiting **********
-
-	public void testUndelimit() {
-		this.verifyUndelimit("\"foo\"", "foo");
-		this.verifyUndelimit("\"\"", "");
-		this.verifyUndelimit("'foo'", "foo");
-		this.verifyUndelimit("\"fo\"\"o\"", "fo\"o");
-		this.verifyUndelimit("\"foo\"\"\"", "foo\"");
-		this.verifyUndelimit("\"\"\"foo\"", "\"foo");
-		this.verifyUndelimit("[foo]", "foo");
-		this.verifyUndelimit("\"\"\"", "\"");
-		this.verifyUndelimit("\"foo\"bar\"", "foo\"");
-		this.verifyUndelimit("\"foo\"\"", "foo\"");
-	}
-
-	private void verifyUndelimit(String s, String expected) {
-		assertEquals(expected, StringTools.undelimit(s));
-		assertEquals(expected, StringTools.undelimit(s.toCharArray()));
-	}
-
-	public void testUndelimitInt() {
-		this.verifyUndelimitInt("\"foo\"", 2, "o");
-		this.verifyUndelimitInt("\"\"foo\"\"", 2, "foo");
-		this.verifyUndelimitInt("'foo'", 2, "o");
-	}
-
-	private void verifyUndelimitInt(String s, int count, String expected) {
-		assertEquals(expected, StringTools.undelimit(s, count));
-		assertEquals(expected, StringTools.undelimit(s.toCharArray(), count));
-	}
-
-	public void testUndelimitIntException() {
-		this.denyUndelimitInt("\"\"", 2);
-		this.denyUndelimitInt("'o'", 2);
-	}
-
-	private void denyUndelimitInt(String s, int count) {
-		boolean exCaught = false;
-		try {
-			String bogus = StringTools.undelimit(s, count);
-			fail("invalid string: " + bogus);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		exCaught = false;
-		try {
-			char[] bogus = StringTools.undelimit(s.toCharArray(), count);
-			fail("invalid string: " + new String(bogus));
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testUndelimitOnWriter() {
-		this.verifyUndelimitOnWriter("\"foo\"", "foo");
-		this.verifyUndelimitOnWriter("\"\"", "");
-		this.verifyUndelimitOnWriter("'foo'", "foo");
-		this.verifyUndelimitOnWriter("\"fo\"\"o\"", "fo\"o");
-		this.verifyUndelimitOnWriter("\"foo\"\"\"", "foo\"");
-		this.verifyUndelimitOnWriter("\"\"\"foo\"", "\"foo");
-		this.verifyUndelimitOnWriter("[foo]", "foo");
-		this.verifyUndelimitOnWriter("\"\"\"", "\"");
-		this.verifyUndelimitOnWriter("\"foo\"bar\"", "foo\"");
-		this.verifyUndelimitOnWriter("\"foo\"\"", "foo\"");
-	}
-
-	private void verifyUndelimitOnWriter(String s, String expected) {
-		Writer writer = new StringWriter();
-		StringTools.undelimitOn(s, writer);
-		assertEquals(expected, writer.toString());
-
-		writer = new StringWriter();
-		StringTools.undelimitOn(s.toCharArray(), writer);
-		assertEquals(expected, writer.toString());
-	}
-
-	public void testUndelimitOnStringBuffer() {
-		this.verifyUndelimitOnStringBuffer("\"foo\"", "foo");
-		this.verifyUndelimitOnStringBuffer("\"\"", "");
-		this.verifyUndelimitOnStringBuffer("'foo'", "foo");
-		this.verifyUndelimitOnStringBuffer("\"fo\"\"o\"", "fo\"o");
-		this.verifyUndelimitOnStringBuffer("\"foo\"\"\"", "foo\"");
-		this.verifyUndelimitOnStringBuffer("\"\"\"foo\"", "\"foo");
-		this.verifyUndelimitOnStringBuffer("[foo]", "foo");
-		this.verifyUndelimitOnStringBuffer("\"\"\"", "\"");
-		this.verifyUndelimitOnStringBuffer("\"foo\"bar\"", "foo\"");
-		this.verifyUndelimitOnStringBuffer("\"foo\"\"", "foo\"");
-	}
-
-	private void verifyUndelimitOnStringBuffer(String s, String expected) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.undelimitOn(s, sb);
-		assertEquals(expected, sb.toString());
-
-		sb = new StringBuffer();
-		StringTools.undelimitOn(s.toCharArray(), sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testUndelimitOnStringBuilder() {
-		this.verifyUndelimitOnStringBuilder("\"foo\"", "foo");
-		this.verifyUndelimitOnStringBuilder("\"\"", "");
-		this.verifyUndelimitOnStringBuilder("'foo'", "foo");
-		this.verifyUndelimitOnStringBuilder("\"fo\"\"o\"", "fo\"o");
-		this.verifyUndelimitOnStringBuilder("\"foo\"\"\"", "foo\"");
-		this.verifyUndelimitOnStringBuilder("\"\"\"foo\"", "\"foo");
-		this.verifyUndelimitOnStringBuilder("[foo]", "foo");
-		this.verifyUndelimitOnStringBuilder("\"\"\"", "\"");
-		this.verifyUndelimitOnStringBuilder("\"foo\"bar\"", "foo\"");
-		this.verifyUndelimitOnStringBuilder("\"foo\"\"", "foo\"");
-	}
-
-	private void verifyUndelimitOnStringBuilder(String s, String expected) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.undelimitOn(s, sb);
-		assertEquals(expected, sb.toString());
-
-		sb = new StringBuilder();
-		StringTools.undelimitOn(s.toCharArray(), sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testUndelimitOnWriterCount() {
-		this.verifyUndelimitOnWriterCount("\"foo\"", 2, "o");
-		this.verifyUndelimitOnWriterCount("\"\"\"\"", 2, "");
-		this.verifyUndelimitOnWriterCount("XXfooXX", 2, "foo");
-	}
-
-	private void verifyUndelimitOnWriterCount(String s, int count, String expected) {
-		Writer writer = new StringWriter();
-		StringTools.undelimitOn(s, count, writer);
-		assertEquals(expected, writer.toString());
-
-		writer = new StringWriter();
-		StringTools.undelimitOn(s.toCharArray(), count, writer);
-		assertEquals(expected, writer.toString());
-	}
-
-	public void testUndelimitOnStringBufferCount() {
-		this.verifyUndelimitOnStringBufferCount("\"foo\"", 2, "o");
-		this.verifyUndelimitOnStringBufferCount("\"\"\"\"", 2, "");
-		this.verifyUndelimitOnStringBufferCount("XXfooXX", 2, "foo");
-	}
-
-	private void verifyUndelimitOnStringBufferCount(String s, int count, String expected) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.undelimitOn(s, count, sb);
-		assertEquals(expected, sb.toString());
-
-		sb = new StringBuffer();
-		StringTools.undelimitOn(s.toCharArray(), count, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testUndelimitOnStringBuilderCount() {
-		this.verifyUndelimitOnStringBuilderCount("\"foo\"", 2, "o");
-		this.verifyUndelimitOnStringBuilderCount("\"\"\"\"", 2, "");
-		this.verifyUndelimitOnStringBuilderCount("XXfooXX", 2, "foo");
-	}
-
-	private void verifyUndelimitOnStringBuilderCount(String s, int count, String expected) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.undelimitOn(s, count, sb);
-		assertEquals(expected, sb.toString());
-
-		sb = new StringBuilder();
-		StringTools.undelimitOn(s.toCharArray(), count, sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	// ********** converting to Java string literal **********
-
-	public void testConvertToJavaStringLiteral() {
-		this.verifyConvertToJavaStringLiteral("", "\"\"");
-		this.verifyConvertToJavaStringLiteral("\"\"", "\"\\\"\\\"\"");
-		this.verifyConvertToJavaStringLiteral("'foo'", "\"'foo'\"");
-		this.verifyConvertToJavaStringLiteral("foo\bbar", "\"foo\\bbar\"");
-		this.verifyConvertToJavaStringLiteral("foo\n\tbar", "\"foo\\n\\tbar\"");
-		this.verifyConvertToJavaStringLiteral("foo\"bar", "\"foo\\\"bar\"");
-		this.verifyConvertToJavaStringLiteral("foo\\bar", "\"foo\\\\bar\"");
-	}
-
-	private void verifyConvertToJavaStringLiteral(String s, String expected) {
-		assertEquals(expected, StringTools.convertToJavaStringLiteral(s));
-		assertEquals(expected, StringTools.convertToJavaStringLiteral(s.toCharArray()));
-	}
-
-	public void testConvertToJavaStringLiteralOnStringBuffer() {
-		this.verifyConvertToJavaStringLiteralOnStringBuffer("", "\"\"");
-		this.verifyConvertToJavaStringLiteralOnStringBuffer("\"\"", "\"\\\"\\\"\"");
-		this.verifyConvertToJavaStringLiteralOnStringBuffer("'foo'", "\"'foo'\"");
-		this.verifyConvertToJavaStringLiteralOnStringBuffer("foo\bbar", "\"foo\\bbar\"");
-		this.verifyConvertToJavaStringLiteralOnStringBuffer("foo\n\tbar", "\"foo\\n\\tbar\"");
-		this.verifyConvertToJavaStringLiteralOnStringBuffer("foo\"bar", "\"foo\\\"bar\"");
-		this.verifyConvertToJavaStringLiteralOnStringBuffer("foo\\bar", "\"foo\\\\bar\"");
-	}
-
-	private void verifyConvertToJavaStringLiteralOnStringBuffer(String s, String expected) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.convertToJavaStringLiteralOn(s, sb);
-		assertEquals(expected, sb.toString());
-
-		sb = new StringBuffer();
-		StringTools.convertToJavaStringLiteralOn(s.toCharArray(), sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testConvertToJavaStringLiteralOnStringBuilder() {
-		this.verifyConvertToJavaStringLiteralOnStringBuilder("", "\"\"");
-		this.verifyConvertToJavaStringLiteralOnStringBuilder("\"\"", "\"\\\"\\\"\"");
-		this.verifyConvertToJavaStringLiteralOnStringBuilder("'foo'", "\"'foo'\"");
-		this.verifyConvertToJavaStringLiteralOnStringBuilder("foo\bbar", "\"foo\\bbar\"");
-		this.verifyConvertToJavaStringLiteralOnStringBuilder("foo\n\tbar", "\"foo\\n\\tbar\"");
-		this.verifyConvertToJavaStringLiteralOnStringBuilder("foo\"bar", "\"foo\\\"bar\"");
-		this.verifyConvertToJavaStringLiteralOnStringBuilder("foo\\bar", "\"foo\\\\bar\"");
-	}
-
-	private void verifyConvertToJavaStringLiteralOnStringBuilder(String s, String expected) {
-		StringBuilder sb = new StringBuilder();
-		StringTools.convertToJavaStringLiteralOn(s, sb);
-		assertEquals(expected, sb.toString());
-
-		sb = new StringBuilder();
-		StringTools.convertToJavaStringLiteralOn(s.toCharArray(), sb);
-		assertEquals(expected, sb.toString());
-	}
-
-	public void testConvertToJavaStringLiteralOnWriter() {
-		this.verifyConvertToJavaStringLiteralOnWriter("", "\"\"");
-		this.verifyConvertToJavaStringLiteralOnWriter("\"\"", "\"\\\"\\\"\"");
-		this.verifyConvertToJavaStringLiteralOnWriter("'foo'", "\"'foo'\"");
-		this.verifyConvertToJavaStringLiteralOnWriter("foo\bbar", "\"foo\\bbar\"");
-		this.verifyConvertToJavaStringLiteralOnWriter("foo\n\tbar", "\"foo\\n\\tbar\"");
-		this.verifyConvertToJavaStringLiteralOnWriter("foo\"bar", "\"foo\\\"bar\"");
-		this.verifyConvertToJavaStringLiteralOnWriter("foo\\bar", "\"foo\\\\bar\"");
-	}
-
-	private void verifyConvertToJavaStringLiteralOnWriter(String s, String expected) {
-		Writer writer = new StringWriter();
-		StringTools.convertToJavaStringLiteralOn(s, writer);
-		assertEquals(expected, writer.toString());
-
-		writer = new StringWriter();
-		StringTools.convertToJavaStringLiteralOn(s.toCharArray(), writer);
-		assertEquals(expected, writer.toString());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedBooleanTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedBooleanTests.java
deleted file mode 100644
index 54f8657..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedBooleanTests.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import org.eclipse.jpt.utility.internal.SynchronizedBoolean;
-
-public class SynchronizedBooleanTests
-	extends MultiThreadedTestCase
-{
-	private volatile SynchronizedBoolean sb;
-	volatile boolean timeoutOccurred;
-	volatile long startTime;
-	volatile long endTime;
-
-
-	public SynchronizedBooleanTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.sb = new SynchronizedBoolean();
-		this.timeoutOccurred = false;
-		this.startTime = 0;
-		this.endTime = 0;
-	}
-
-	public void testGetValue() throws Exception {
-		assertFalse(this.sb.getValue());
-	}
-
-	public void testIs() throws Exception {
-		assertTrue(this.sb.is(false));
-	}
-
-	public void testIsNot() throws Exception {
-		assertTrue(this.sb.isNot(true));
-	}
-
-	public void testIsTrue() throws Exception {
-		assertFalse(this.sb.isTrue());
-	}
-
-	public void testIsFalse() throws Exception {
-		assertTrue(this.sb.isFalse());
-	}
-
-	public void testSetValueFalse() throws Exception {
-		this.sb.setValue(false);
-		assertFalse(this.sb.getValue());
-		assertFalse(this.sb.isTrue());
-		assertTrue(this.sb.isFalse());
-	}
-
-	public void testSetValueTrue() throws Exception {
-		this.sb.setValue(true);
-		assertTrue(this.sb.getValue());
-		assertTrue(this.sb.isTrue());
-		assertFalse(this.sb.isFalse());
-	}
-
-	public void testFlip() throws Exception {
-		assertTrue(this.sb.flip());
-		assertFalse(this.sb.flip());
-	}
-
-	public void testSetNotTrue() throws Exception {
-		this.sb.setNot(true);
-		assertFalse(this.sb.getValue());
-		assertFalse(this.sb.isTrue());
-		assertTrue(this.sb.isFalse());
-	}
-
-	public void testSetNotFalse() throws Exception {
-		this.sb.setNot(false);
-		assertTrue(this.sb.getValue());
-		assertTrue(this.sb.isTrue());
-		assertFalse(this.sb.isFalse());
-	}
-
-	public void testSetFalse() throws Exception {
-		this.sb.setFalse();
-		assertFalse(this.sb.getValue());
-		assertFalse(this.sb.isTrue());
-		assertTrue(this.sb.isFalse());
-	}
-
-	public void testSetTrue() throws Exception {
-		this.sb.setTrue();
-		assertTrue(this.sb.getValue());
-		assertTrue(this.sb.isTrue());
-		assertFalse(this.sb.isFalse());
-	}
-
-	public void testGetMutexThis() throws Exception {
-		assertSame(this.sb, this.sb.getMutex());
-	}
-
-	public void testGetMutexObject() throws Exception {
-		Object mutex = new Object();
-		SynchronizedBoolean syncBool = new SynchronizedBoolean(mutex);
-		assertSame(mutex, syncBool.getMutex());
-	}
-
-	public void testEquals() throws Exception {
-		this.sb.setValue(false);
-		SynchronizedBoolean sb2 = new SynchronizedBoolean(false);
-		assertEquals(this.sb, sb2);
-
-		this.sb.setValue(true);
-		assertFalse(this.sb.equals(sb2));
-
-		sb2.setValue(true);
-		assertEquals(this.sb, sb2);
-	}
-
-	public void testHashCode() {
-		this.sb.setValue(false);
-		assertEquals(0, this.sb.hashCode());
-
-		this.sb.setValue(true);
-		assertEquals(1, this.sb.hashCode());
-	}
-
-	/**
-	 * t2 will wait indefinitely until t1 sets the value to true
-	 */
-	public void testWaitUntilTrue() throws Exception {
-		this.verifyWaitUntilTrue(0);  // 0 = indefinite wait
-		// no timeout occurs...
-		assertFalse(this.timeoutOccurred);
-		// ...and the value should be set to true by t2
-		assertTrue(this.sb.getValue());
-		// make a reasonable guess about how long t2 took
-		assertTrue(this.calculateElapsedTime() > TICK);
-	}
-
-	/**
-	 * t2 will time out waiting for t1 to set the value to true
-	 */
-	public void testWaitUntilTrueTimeout() throws Exception {
-		this.verifyWaitUntilTrue(TICK);
-		// timeout occurs...
-		assertTrue(this.timeoutOccurred);
-		// ...and the value will eventually be set to true by t1
-		assertTrue(this.sb.getValue());
-		// make a reasonable guess about how long t2 took
-		assertTrue(this.calculateElapsedTime() < THREE_TICKS);
-	}
-
-	private void verifyWaitUntilTrue(long t2Timeout) throws Exception {
-		this.executeThreads(this.buildSetTrueCommand(), this.buildWaitUntilTrueCommand(t2Timeout));
-	}
-
-	/**
-	 * t2 will wait indefinitely until t1 sets the value to false
-	 */
-	public void testWaitToSetFalse() throws Exception {
-		this.verifyWaitToSetFalse(0);  // 0 = indefinite wait
-		// no timeout occurs...
-		assertFalse(this.timeoutOccurred);
-		// ...and the value should be set to false by t2
-		assertFalse(this.sb.getValue());
-		// make a reasonable guess about how long t2 took
-		assertTrue(this.calculateElapsedTime() > TICK);
-	}
-
-	/**
-	 * t2 will time out waiting for t1 to set the value to false
-	 */
-	public void testWaitToSetFalseTimeout() throws Exception {
-		this.verifyWaitToSetFalse(TICK);
-		// timeout occurs...
-		assertTrue(this.timeoutOccurred);
-		// ...and the value will eventually be set to true by t1
-		assertTrue(this.sb.getValue());
-		// make a reasonable guess about how long t2 took
-		assertTrue(this.calculateElapsedTime() < THREE_TICKS);
-	}
-
-	private void verifyWaitToSetFalse(long t2Timeout) throws Exception {
-		this.executeThreads(this.buildSetTrueCommand(), this.buildWaitToSetFalseCommand(t2Timeout));
-	}
-
-	private void executeThreads(Command t1Command, Command t2Command) throws Exception {
-		this.sb.setFalse();
-		Runnable r1 = this.buildRunnable(t1Command, this.sb, TWO_TICKS);
-		Runnable r2 = this.buildRunnable(t2Command, this.sb, 0);
-		Thread t1 = this.buildThread(r1);
-		Thread t2 = this.buildThread(r2);
-		t1.start();
-		t2.start();
-		t1.join();
-		t2.join();
-	}
-
-	private Command buildSetTrueCommand() {
-		return new Command() {
-			public void execute(SynchronizedBoolean syncBool) {
-				syncBool.setTrue();
-			}
-		};
-	}
-
-	private Command buildWaitUntilTrueCommand(final long timeout) {
-		return new Command() {
-			public void execute(SynchronizedBoolean syncBool) throws InterruptedException {
-				SynchronizedBooleanTests.this.startTime = System.currentTimeMillis();
-				SynchronizedBooleanTests.this.timeoutOccurred = ! syncBool.waitUntilTrue(timeout);
-				SynchronizedBooleanTests.this.endTime = System.currentTimeMillis();
-			}
-		};
-	}
-
-	private Command buildWaitToSetFalseCommand(final long timeout) {
-		return new Command() {
-			public void execute(SynchronizedBoolean syncBool) throws InterruptedException {
-				SynchronizedBooleanTests.this.startTime = System.currentTimeMillis();
-				SynchronizedBooleanTests.this.timeoutOccurred =  ! syncBool.waitToSetFalse(timeout);
-				SynchronizedBooleanTests.this.endTime = System.currentTimeMillis();
-			}
-		};
-	}
-
-	private Runnable buildRunnable(final Command command, final SynchronizedBoolean syncBool, final long delay) {
-		return new TestRunnable() {
-			@Override
-			public void run_() throws InterruptedException {
-				if (delay != 0) {
-					Thread.sleep(delay);
-				}
-				command.execute(syncBool);
-			}
-		};
-	}
-
-	long calculateElapsedTime() {
-		return this.endTime - this.startTime;
-	}
-
-
-	// ********** Command interface **********
-
-	private interface Command {
-		void execute(SynchronizedBoolean syncBool) throws InterruptedException;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedIntTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedIntTests.java
deleted file mode 100644
index 11e9b1b..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedIntTests.java
+++ /dev/null
@@ -1,385 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import org.eclipse.jpt.utility.internal.SynchronizedInt;
-
-@SuppressWarnings("nls")
-public class SynchronizedIntTests
-	extends MultiThreadedTestCase
-{
-	private volatile SynchronizedInt si;
-	volatile boolean timeoutOccurred;
-	volatile int value = 7;
-	volatile long startTime;
-	volatile long endTime;
-	volatile int sIntValue;
-
-
-	public SynchronizedIntTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.si = new SynchronizedInt();
-		this.timeoutOccurred = false;
-		this.startTime = 0;
-		this.endTime = 0;
-		this.sIntValue = 0;
-	}
-
-	public void testGetValue() throws Exception {
-		assertEquals(0, this.si.getValue());
-	}
-
-	public void testEqualsInt() throws Exception {
-		assertTrue(this.si.equals(0));
-		this.si.setValue(this.value);
-		assertTrue(this.si.equals(7));
-	}
-
-	public void testNotEqualsInt() throws Exception {
-		assertTrue(this.si.notEquals(7));
-		this.si.setValue(this.value);
-		assertTrue(this.si.notEquals(0));
-	}
-
-	public void testIsZero() throws Exception {
-		assertTrue(this.si.isZero());
-		this.si.setValue(this.value);
-		assertFalse(this.si.isZero());
-	}
-
-	public void testIsNotZero() throws Exception {
-		assertFalse(this.si.isNotZero());
-		this.si.setValue(this.value);
-		assertTrue(this.si.isNotZero());
-	}
-
-	public void testIsGreaterThan() throws Exception {
-		assertTrue(this.si.isGreaterThan(-1));
-		assertFalse(this.si.isGreaterThan(0));
-		assertFalse(this.si.isGreaterThan(1));
-		this.si.setValue(this.value);
-		assertTrue(this.si.isGreaterThan(-1));
-		assertFalse(this.si.isGreaterThan(7));
-		assertFalse(this.si.isGreaterThan(8));
-	}
-
-	public void testIsGreaterThanOrEqual() throws Exception {
-		assertTrue(this.si.isGreaterThanOrEqual(-1));
-		assertTrue(this.si.isGreaterThanOrEqual(0));
-		assertFalse(this.si.isGreaterThanOrEqual(1));
-		this.si.setValue(this.value);
-		assertTrue(this.si.isGreaterThanOrEqual(-1));
-		assertTrue(this.si.isGreaterThanOrEqual(7));
-		assertFalse(this.si.isGreaterThanOrEqual(8));
-	}
-
-	public void testIsLessThan() throws Exception {
-		assertFalse(this.si.isLessThan(-1));
-		assertFalse(this.si.isLessThan(0));
-		assertTrue(this.si.isLessThan(1));
-		this.si.setValue(this.value);
-		assertFalse(this.si.isLessThan(-1));
-		assertFalse(this.si.isLessThan(7));
-		assertTrue(this.si.isLessThan(8));
-	}
-
-	public void testIsLessThanOrEqual() throws Exception {
-		assertFalse(this.si.isLessThanOrEqual(-1));
-		assertTrue(this.si.isLessThanOrEqual(0));
-		assertTrue(this.si.isLessThanOrEqual(1));
-		this.si.setValue(this.value);
-		assertFalse(this.si.isLessThanOrEqual(-1));
-		assertTrue(this.si.isLessThanOrEqual(7));
-		assertTrue(this.si.isLessThanOrEqual(8));
-	}
-
-	public void testIsPositive() throws Exception {
-		assertFalse(this.si.isPositive());
-		this.si.setValue(this.value);
-		assertTrue(this.si.isPositive());
-		this.si.setValue(-3);
-		assertFalse(this.si.isPositive());
-	}
-
-	public void testIsNotPositive() throws Exception {
-		assertTrue(this.si.isNotPositive());
-		this.si.setValue(this.value);
-		assertFalse(this.si.isNotPositive());
-		this.si.setValue(-3);
-		assertTrue(this.si.isNotPositive());
-	}
-
-	public void testIsNegative() throws Exception {
-		assertFalse(this.si.isNegative());
-		this.si.setValue(this.value);
-		assertFalse(this.si.isNegative());
-		this.si.setValue(-3);
-		assertTrue(this.si.isNegative());
-	}
-
-	public void testIsNotNegative() throws Exception {
-		assertTrue(this.si.isNotNegative());
-		this.si.setValue(this.value);
-		assertTrue(this.si.isNotNegative());
-		this.si.setValue(-3);
-		assertFalse(this.si.isNotNegative());
-	}
-
-	public void testSetValue() throws Exception {
-		this.si.setValue(0);
-		assertEquals(0, this.si.getValue());
-		assertFalse(this.si.isNotZero());
-		assertTrue(this.si.isZero());
-
-		this.si.setValue(this.value);
-		assertEquals(this.value, this.si.getValue());
-		assertTrue(this.si.isNotZero());
-		assertFalse(this.si.isZero());
-	}
-
-	public void testAbs() throws Exception {
-		assertEquals(0, this.si.abs());
-		assertEquals(0, this.si.getValue());
-		this.si.setValue(this.value);
-		assertEquals(this.value, this.si.abs());
-		assertEquals(this.value, this.si.getValue());
-		this.si.setValue(-this.value);
-		assertEquals(this.value, this.si.abs());
-		assertEquals(this.value, this.si.getValue());
-	}
-
-	public void testNeg() throws Exception {
-		assertEquals(0, this.si.neg());
-		assertEquals(0, this.si.getValue());
-		this.si.setValue(this.value);
-		assertEquals(-this.value, this.si.neg());
-		assertEquals(-this.value, this.si.getValue());
-		this.si.setValue(-this.value);
-		assertEquals(this.value, this.si.neg());
-		assertEquals(this.value, this.si.getValue());
-	}
-
-	public void testSetZero() throws Exception {
-		this.si.setZero();
-		assertEquals(0, this.si.getValue());
-		assertFalse(this.si.isNotZero());
-		assertTrue(this.si.isZero());
-	}
-
-	public void testGetMutexThis() throws Exception {
-		assertSame(this.si, this.si.getMutex());
-	}
-
-	public void testEquals() throws Exception {
-		this.si.setValue(0);
-		SynchronizedInt so2 = new SynchronizedInt(0);
-		assertEquals(this.si, so2);
-
-		this.si.setValue(this.value);
-		assertFalse(this.si.equals(so2));
-
-		so2.setValue(this.value);
-		assertEquals(this.si, so2);
-	}
-
-	public void testHashCode() {
-		this.si.setValue(this.value);
-		assertEquals(this.value, this.si.hashCode());
-
-		this.si.setValue(0);
-		assertEquals(0, this.si.hashCode());
-	}
-
-	/**
-	 * t2 will wait indefinitely until t1 sets the value to 0
-	 */
-	public void testWaitUntilZero() throws Exception {
-		this.verifyWaitUntilZero(0);  // 0 = indefinite wait
-		// no timeout occurs...
-		assertFalse(this.timeoutOccurred);
-		// ...and the value should be set to 0 by t2
-		assertEquals(0, this.si.getValue());
-		// make a reasonable guess about how long t2 took
-		long time = this.calculateElapsedTime();
-		assertTrue("t2 finished a bit early (expected value should be > " + TICK + "): " + time, time > TICK);
-	}
-
-	/**
-	 * t2 will time out waiting for t1 to set the value to 0
-	 */
-	public void testWaitUntilZeroTimeout() throws Exception {
-		this.verifyWaitUntilZero(TICK);
-		// timeout occurs...
-		assertTrue(this.timeoutOccurred);
-		// ...and the value will eventually be set to 0 by t1
-		assertEquals(0, this.si.getValue());
-		// make a reasonable guess about how long t2 took
-		long time = this.calculateElapsedTime();
-		assertTrue("t2 finished a bit late (expected value should be < " + THREE_TICKS + "): " + time, time < THREE_TICKS);
-	}
-
-	private void verifyWaitUntilZero(long t2Timeout) throws Exception {
-		this.executeThreads(this.buildSetZeroCommand(), this.buildWaitUntilZeroCommand(t2Timeout));
-	}
-
-	/**
-	 * t2 will wait indefinitely until t1 sets the value to 0;
-	 * then t2 will set the value to 7
-	 */
-	public void testWaitToSetValue() throws Exception {
-		this.verifyWaitToSetValue(0);  // 0 = indefinite wait
-		// no timeout occurs...
-		assertFalse(this.timeoutOccurred);
-		// ...and the value should be set to an object by t2
-		assertTrue(this.si.isNotZero());
-		// make a reasonable guess about how long t2 took
-		long time = this.calculateElapsedTime();
-		assertTrue("t2 finished a bit early (expected value should be > " + TICK + "): " + time, time > TICK);
-	}
-
-	/**
-	 * t2 will time out waiting for t1 to set the value to 0
-	 */
-	public void testWaitToSetValueTimeout() throws Exception {
-		this.verifyWaitToSetValue(TICK);
-		// timeout occurs...
-		assertTrue(this.timeoutOccurred);
-		// ...and the value will eventually be set to zero by t1
-		assertTrue(this.si.isZero());
-		// make a reasonable guess about how long t2 took
-		long time = this.calculateElapsedTime();
-		assertTrue("t2 finished a bit late (expected value should be < " + THREE_TICKS + "): " + time, time < THREE_TICKS);
-	}
-
-	private void verifyWaitToSetValue(long t2Timeout) throws Exception {
-		this.executeThreads(this.buildSetZeroCommand(), this.buildWaitToSetValueCommand(t2Timeout));
-	}
-
-	/**
-	 * t2 will wait until t1 is finished "initializing" the value;
-	 * then t2 will get the newly-initialized value (42)
-	 */
-	public void testExecute() throws Exception {
-		this.si.setValue(0);
-		Runnable r1 = this.buildRunnable(this.buildInitializeValueCommand(), this.si, 0);
-		// give t1 a head start
-		Runnable r2 = this.buildRunnable(this.buildGetValueCommand(), this.si, TICK);
-		Thread t1 = this.buildThread(r1);
-		Thread t2 = this.buildThread(r2);
-		t1.start();
-		t2.start();
-		t1.join();
-		t2.join();
-		assertEquals(42, this.si.getValue());
-		assertEquals(42, this.sIntValue);
-		// make a reasonable guess about how long t2 took
-		long time = this.calculateElapsedTime();
-		assertTrue("t2 finished a bit early (expected value should be > " + TWO_TICKS + "): " + time, time > TWO_TICKS);
-	}
-
-	private void executeThreads(Command t1Command, Command t2Command) throws Exception {
-		this.si.setValue(this.value);
-		Runnable r1 = this.buildRunnable(t1Command, this.si, TWO_TICKS);
-		Runnable r2 = this.buildRunnable(t2Command, this.si, 0);
-		Thread t1 = this.buildThread(r1);
-		Thread t2 = this.buildThread(r2);
-		t1.start();
-		t2.start();
-		t1.join();
-		t2.join();
-	}
-
-	private Command buildSetZeroCommand() {
-		return new Command() {
-			public void execute(SynchronizedInt sInt) {
-				sInt.setZero();
-			}
-		};
-	}
-
-	private Command buildWaitUntilZeroCommand(final long timeout) {
-		return new Command() {
-			public void execute(SynchronizedInt sInt) throws InterruptedException {
-				SynchronizedIntTests.this.startTime = System.currentTimeMillis();
-				SynchronizedIntTests.this.timeoutOccurred = ! sInt.waitUntilZero(timeout);
-				SynchronizedIntTests.this.endTime = System.currentTimeMillis();
-			}
-		};
-	}
-
-	private Command buildWaitToSetValueCommand(final long timeout) {
-		return new Command() {
-			public void execute(SynchronizedInt sInt) throws InterruptedException {
-				SynchronizedIntTests.this.startTime = System.currentTimeMillis();
-				SynchronizedIntTests.this.timeoutOccurred = ! sInt.waitToSetValue(SynchronizedIntTests.this.value, timeout);
-				SynchronizedIntTests.this.endTime = System.currentTimeMillis();
-			}
-		};
-	}
-
-	private Command buildInitializeValueCommand() {
-		return new Command() {
-			public void execute(final SynchronizedInt sInt) throws InterruptedException {
-				sInt.execute(
-					new org.eclipse.jpt.utility.Command() {
-						public void execute() {
-							// pretend to perform some long initialization process
-							try {
-								Thread.sleep(5 * TICK);
-							} catch (InterruptedException ex) {
-								throw new RuntimeException(ex);
-							}
-							sInt.setValue(42);
-						}
-					}
-				);
-			}
-		};
-	}
-
-	private Command buildGetValueCommand() {
-		return new Command() {
-			public void execute(SynchronizedInt sInt) throws InterruptedException {
-				SynchronizedIntTests.this.startTime = System.currentTimeMillis();
-				SynchronizedIntTests.this.sIntValue = sInt.getValue();
-				SynchronizedIntTests.this.endTime = System.currentTimeMillis();
-			}
-		};
-	}
-
-	private Runnable buildRunnable(final Command command, final SynchronizedInt sInt, final long sleep) {
-		return new TestRunnable() {
-			@Override
-			protected void run_() throws InterruptedException {
-				if (sleep != 0) {
-					Thread.sleep(sleep);
-				}
-				command.execute(sInt);
-			}
-		};
-	}
-
-	private long calculateElapsedTime() {
-		return this.endTime - this.startTime;
-	}
-
-
-	// ********** Command interface **********
-
-	private interface Command {
-		void execute(SynchronizedInt sInt) throws InterruptedException;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedObjectTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedObjectTests.java
deleted file mode 100644
index 5c1aca4..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedObjectTests.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import org.eclipse.jpt.utility.internal.SynchronizedObject;
-
-@SuppressWarnings("nls")
-public class SynchronizedObjectTests
-	extends MultiThreadedTestCase
-{
-	private volatile SynchronizedObject<Object> so;
-	volatile boolean timeoutOccurred;
-	volatile Object value = new Object();
-	volatile long startTime;
-	volatile long endTime;
-	volatile Object soValue;
-
-
-	public SynchronizedObjectTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.so = new SynchronizedObject<Object>();
-		this.timeoutOccurred = false;
-		this.startTime = 0;
-		this.endTime = 0;
-		this.soValue = null;
-	}
-
-	public void testAccessors() throws Exception {
-		this.so.setValue(null);
-		assertNull(this.so.getValue());
-		assertFalse(this.so.isNotNull());
-		assertTrue(this.so.isNull());
-
-		this.so.setValue(this.value);
-		assertEquals(this.value, this.so.getValue());
-		assertTrue(this.so.isNotNull());
-		assertFalse(this.so.isNull());
-
-		this.so.setNull();
-		assertNull(this.so.getValue());
-		assertFalse(this.so.isNotNull());
-		assertTrue(this.so.isNull());
-
-		assertSame(this.so, this.so.getMutex());
-	}
-
-	public void testEquals() throws Exception {
-		this.so.setValue(null);
-		SynchronizedObject<Object> so2 = new SynchronizedObject<Object>(null);
-		assertEquals(this.so, so2);
-
-		this.so.setValue(this.value);
-		assertFalse(this.so.equals(so2));
-
-		so2.setValue(this.value);
-		assertEquals(this.so, so2);
-	}
-
-	public void testHashCode() {
-		this.so.setValue(this.value);
-		assertEquals(this.value.hashCode(), this.so.hashCode());
-
-		this.so.setValue(null);
-		assertEquals(0, this.so.hashCode());
-	}
-
-	/**
-	 * t2 will wait indefinitely until t1 sets the value to null
-	 */
-	public void testWaitUntilNull() throws Exception {
-		this.verifyWaitUntilNull(0);
-		// no timeout occurs...
-		assertFalse(this.timeoutOccurred);
-		// ...and the value should be set to null by t2
-		assertNull(this.so.getValue());
-		// make a reasonable guess about how long t2 took
-		long time = this.calculateElapsedTime();
-		assertTrue("t2 finished a bit early (expected value should be > " + TICK + "): " + time, time > TICK);
-	}
-
-	/**
-	 * t2 will time out waiting for t1 to set the value to null
-	 */
-	public void testWaitUntilNullTimeout() throws Exception {
-		this.verifyWaitUntilNull(TICK);
-		// timeout occurs...
-		assertTrue(this.timeoutOccurred);
-		// ...and the value will eventually be set to null by t1
-		assertNull(this.so.getValue());
-		// make a reasonable guess about how long t2 took
-		long time = this.calculateElapsedTime();
-		assertTrue("t2 finished a bit late (expected value should be < " + THREE_TICKS + "): " + time, time < THREE_TICKS);
-	}
-
-	private void verifyWaitUntilNull(long t2Timeout) throws Exception {
-		this.executeThreads(this.buildSetNullCommand(), this.buildWaitUntilNullCommand(t2Timeout));
-	}
-
-	/**
-	 * t2 will wait indefinitely until t1 sets the value to null;
-	 * then t2 will set the value to an object
-	 */
-	public void testWaitToSetValue() throws Exception {
-		this.verifyWaitToSetValue(0);
-		// no timeout occurs...
-		assertFalse(this.timeoutOccurred);
-		// ...and the value should be set to an object by t2
-		assertTrue(this.so.isNotNull());
-		// make a reasonable guess about how long t2 took
-		long time = this.calculateElapsedTime();
-		assertTrue("t2 finished a bit early (expected value should be > " + TICK + "): " + time, time > TICK);
-	}
-
-	/**
-	 * t2 will time out waiting for t1 to set the value to null
-	 */
-	public void testWaitToSetValueTimeout() throws Exception {
-		this.verifyWaitToSetValue(TICK);
-		// timeout occurs...
-		assertTrue(this.timeoutOccurred);
-		// ...and the value will eventually be set to null by t1
-		assertTrue(this.so.isNull());
-		// make a reasonable guess about how long t2 took
-		long time = this.calculateElapsedTime();
-		assertTrue("t2 finished a bit late (expected value should be < " + THREE_TICKS + "): " + time, time < THREE_TICKS);
-	}
-
-	private void verifyWaitToSetValue(long t2Timeout) throws Exception {
-		this.executeThreads(this.buildSetNullCommand(), this.buildWaitToSetValueCommand(t2Timeout));
-	}
-
-	/**
-	 * t2 will wait until t1 is finished "initializing" the value;
-	 * then t2 will get the newly-initialized value ("foo")
-	 */
-	public void testExecute() throws Exception {
-		this.so.setValue(null);
-		Runnable r1 = this.buildRunnable(this.buildInitializeValueCommand(), this.so, 0);
-		// give t1 a head start of 100 ms
-		Runnable r2 = this.buildRunnable(this.buildGetValueCommand(), this.so, TICK);
-		Thread t1 = this.buildThread(r1);
-		Thread t2 = this.buildThread(r2);
-		t1.start();
-		t2.start();
-		t1.join();
-		t2.join();
-		assertEquals("foo", this.so.getValue());
-		assertEquals("foo", this.soValue);
-		// make a reasonable guess about how long t2 took
-		long time = this.calculateElapsedTime();
-		assertTrue("t2 finished a bit early (expected value should be > " + TWO_TICKS + "): " + time, time > TWO_TICKS);
-	}
-
-	private void executeThreads(Command t1Command, Command t2Command) throws Exception {
-		this.so.setValue(this.value);
-		Runnable r1 = this.buildRunnable(t1Command, this.so, TWO_TICKS);
-		Runnable r2 = this.buildRunnable(t2Command, this.so, 0);
-		Thread t1 = this.buildThread(r1);
-		Thread t2 = this.buildThread(r2);
-		t1.start();
-		t2.start();
-		t1.join();
-		t2.join();
-	}
-
-	private Command buildSetNullCommand() {
-		return new Command() {
-			public void execute(SynchronizedObject<Object> sObject) {
-				sObject.setNull();
-			}
-		};
-	}
-
-	private Command buildWaitUntilNullCommand(final long timeout) {
-		return new Command() {
-			public void execute(SynchronizedObject<Object> sObject) throws InterruptedException {
-				SynchronizedObjectTests.this.startTime = System.currentTimeMillis();
-				SynchronizedObjectTests.this.timeoutOccurred = ! sObject.waitUntilNull(timeout);
-				SynchronizedObjectTests.this.endTime = System.currentTimeMillis();
-			}
-		};
-	}
-
-	private Command buildWaitToSetValueCommand(final long timeout) {
-		return new Command() {
-			public void execute(SynchronizedObject<Object> sObject) throws InterruptedException {
-				SynchronizedObjectTests.this.startTime = System.currentTimeMillis();
-				SynchronizedObjectTests.this.timeoutOccurred = ! sObject.waitToSetValue(SynchronizedObjectTests.this.value, timeout);
-				SynchronizedObjectTests.this.endTime = System.currentTimeMillis();
-			}
-		};
-	}
-
-	private Command buildInitializeValueCommand() {
-		return new Command() {
-			public void execute(final SynchronizedObject<Object> sObject) throws InterruptedException {
-				sObject.execute(
-					new org.eclipse.jpt.utility.Command() {
-						public void execute() {
-							// pretend to perform some long initialization process
-							try {
-								Thread.sleep(5 * TICK);
-							} catch (Exception ex) {
-								throw new RuntimeException(ex);
-							}
-							sObject.setValue("foo");
-						}
-					}
-				);
-			}
-		};
-	}
-
-	private Command buildGetValueCommand() {
-		return new Command() {
-			public void execute(SynchronizedObject<Object> sObject) throws InterruptedException {
-				SynchronizedObjectTests.this.startTime = System.currentTimeMillis();
-				SynchronizedObjectTests.this.soValue = sObject.getValue();
-				SynchronizedObjectTests.this.endTime = System.currentTimeMillis();
-			}
-		};
-	}
-
-	private Runnable buildRunnable(final Command command, final SynchronizedObject<Object> sObject, final long sleep) {
-		return new TestRunnable() {
-			@Override
-			protected void run_() throws InterruptedException {
-				if (sleep != 0) {
-					Thread.sleep(sleep);
-				}
-				command.execute(sObject);
-			}
-		};
-	}
-
-	private long calculateElapsedTime() {
-		return this.endTime - this.startTime;
-	}
-
-
-	// ********** Command interface **********
-
-	private interface Command {
-		void execute(SynchronizedObject<Object> so) throws InterruptedException;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedQueueTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedQueueTests.java
deleted file mode 100644
index 6473f5e..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedQueueTests.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.internal.Queue;
-import org.eclipse.jpt.utility.internal.SimpleQueue;
-import org.eclipse.jpt.utility.internal.SynchronizedQueue;
-
-@SuppressWarnings("nls")
-public class SynchronizedQueueTests extends SimpleQueueTests {
-	private volatile SynchronizedQueue<String> sq;
-	volatile boolean timeoutOccurred;
-	volatile long startTime;
-	volatile long endTime;
-	volatile Object dequeuedObject;
-
-	static final String ITEM_1 = new String();
-	static final String ITEM_2 = new String();
-
-	public SynchronizedQueueTests(String name) {
-		super(name);
-	}
-
-	@Override
-	Queue<String> buildQueue() {
-		return new SynchronizedQueue<String>();
-	}
-
-	@Override
-	public void testClone() {
-		// synchronized queue is not cloneable
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.sq = new SynchronizedQueue<String>();
-		this.timeoutOccurred = false;
-		this.startTime = 0;
-		this.endTime = 0;
-		this.dequeuedObject = null;
-	}
-
-	/**
-	 * test first with an unsynchronized queue,
-	 * then with a synchronized queue
-	 */
-	public void testConcurrentAccess() throws Exception {
-		this.verifyConcurrentAccess(new SlowSimpleQueue<String>(), "first");
-		this.verifyConcurrentAccess(new SlowSynchronizedQueue<String>(), "second");
-	}
-
-	private void verifyConcurrentAccess(SlowQueue<String> slowQueue, String expected) throws Exception {
-		slowQueue.enqueue("first");
-		slowQueue.enqueue("second");
-
-		Thread thread = this.buildThread(this.buildRunnable(slowQueue));
-		thread.start();
-		Thread.sleep(TWO_TICKS);
-
-		assertEquals(expected, slowQueue.dequeue());
-		thread.join();
-		assertTrue(slowQueue.isEmpty());
-	}
-
-	private Runnable buildRunnable(final SlowQueue<String> slowQueue) {
-		return new Runnable() {
-			public void run() {
-				slowQueue.slowDequeue();
-			}
-		};
-	}
-
-
-	private interface SlowQueue<E> extends Queue<E> {
-		Object slowDequeue();
-	}
-
-	private class SlowSimpleQueue<E> extends SimpleQueue<E> implements SlowQueue<E> {
-		SlowSimpleQueue() {
-			super();
-		}
-		public Object slowDequeue() {
-			try {
-				Thread.sleep(5 * TICK);
-			} catch (InterruptedException ex) {
-				throw new RuntimeException(ex);
-			}
-			return this.dequeue();
-		}
-
-	}
-
-	private class SlowSynchronizedQueue<E> extends SynchronizedQueue<E> implements SlowQueue<E> {
-		SlowSynchronizedQueue() {
-			super();
-		}
-		public synchronized Object slowDequeue() {
-			try {
-				Thread.sleep(5 * TICK);
-			} catch (InterruptedException ex) {
-				throw new RuntimeException(ex);
-			}
-			return this.dequeue();
-		}
-
-	}
-
-
-	// ********** waits **********
-
-	public void testWaitToDequeue() throws Exception {
-		this.verifyWaitToDequeue(0);
-		// no timeout occurs...
-		assertFalse(this.timeoutOccurred);
-		// ...and an item should have been dequeued by t2...
-		assertSame(ITEM_1, this.dequeuedObject);
-		// ...and the queue should be empty
-		assertTrue(this.sq.isEmpty());
-		// make a reasonable guess about how long t2 took
-		assertTrue(this.calculateElapsedTime() > TICK);
-	}
-
-	public void testWaitToDequeueTimeout() throws Exception {
-		this.verifyWaitToDequeue(TICK);
-		// timeout occurs...
-		assertTrue(this.timeoutOccurred);
-		// ...and the queue was never dequeued...
-		assertNull(this.dequeuedObject);
-		// ...and it still holds the item
-		assertSame(ITEM_1, this.sq.peek());
-		// make a reasonable guess about how long t2 took
-		assertTrue(this.calculateElapsedTime() < THREE_TICKS);
-	}
-
-	private void verifyWaitToDequeue(long timeout) throws Exception {
-		Runnable r1 = this.buildRunnable(this.buildEnqueueCommand(), this.sq, TWO_TICKS);
-		Runnable r2 = this.buildRunnable(this.buildWaitToDequeueCommand(timeout), this.sq, 0);
-		Thread t1 = this.buildThread(r1);
-		Thread t2 = this.buildThread(r2);
-		t1.start();
-		t2.start();
-		t1.join();
-		t2.join();
-	}
-
-	public void testWaitToEnqueue() throws Exception {
-		this.verifyWaitToEnqueue(0);
-		// no timeout occurs...
-		assertFalse(this.timeoutOccurred);
-		// ...and the queue gets dequeued by t1...
-		assertSame(ITEM_1, this.dequeuedObject);
-		// ...and an item is enqueued on to the queue by t2
-		assertFalse(this.sq.isEmpty());
-		assertSame(ITEM_2, this.sq.peek());
-		// make a reasonable guess about how long t2 took
-		assertTrue(this.calculateElapsedTime() > TICK);
-	}
-
-	public void testWaitToEnqueueTimeout() throws Exception {
-		this.verifyWaitToEnqueue(TICK);
-		// timeout occurs...
-		assertTrue(this.timeoutOccurred);
-		// ...and the queue is eventually dequeued by t1...
-		assertSame(ITEM_1, this.dequeuedObject);
-		// ...but nothing is enqueued on to the queue by t2
-		assertTrue(this.sq.isEmpty());
-		// make a reasonable guess about how long t2 took
-		assertTrue(this.calculateElapsedTime() < THREE_TICKS);
-	}
-
-	private void verifyWaitToEnqueue(long timeout) throws Exception {
-		this.sq.enqueue(ITEM_1);
-		Runnable r1 = this.buildRunnable(this.buildDequeueCommand(), this.sq, TWO_TICKS);
-		Runnable r2 = this.buildRunnable(this.buildWaitToEnqueueCommand(timeout), this.sq, 0);
-		Thread t1 = this.buildThread(r1);
-		Thread t2 = this.buildThread(r2);
-		t1.start();
-		t2.start();
-		t1.join();
-		t2.join();
-	}
-
-	private Command buildEnqueueCommand() {
-		return new Command() {
-			public void execute(SynchronizedQueue<String> synchronizedQueue) {
-				synchronizedQueue.enqueue(ITEM_1);
-			}
-		};
-	}
-
-	private Command buildWaitToDequeueCommand(final long timeout) {
-		return new Command() {
-			public void execute(SynchronizedQueue<String> synchronizedQueue) throws InterruptedException {
-				SynchronizedQueueTests.this.startTime = System.currentTimeMillis();
-				try {
-					SynchronizedQueueTests.this.dequeuedObject = synchronizedQueue.waitToDequeue(timeout);
-				} catch (NoSuchElementException ex) {
-					SynchronizedQueueTests.this.timeoutOccurred = true;
-				}
-				SynchronizedQueueTests.this.endTime = System.currentTimeMillis();
-			}
-		};
-	}
-
-	private Command buildDequeueCommand() {
-		return new Command() {
-			public void execute(SynchronizedQueue<String> synchronizedQueue) {
-				SynchronizedQueueTests.this.dequeuedObject = synchronizedQueue.dequeue();
-			}
-		};
-	}
-
-	private Command buildWaitToEnqueueCommand(final long timeout) {
-		return new Command() {
-			public void execute(SynchronizedQueue<String> synchronizedQueue) throws InterruptedException {
-				SynchronizedQueueTests.this.startTime = System.currentTimeMillis();
-				SynchronizedQueueTests.this.timeoutOccurred = ! synchronizedQueue.waitToEnqueue(ITEM_2, timeout);
-				SynchronizedQueueTests.this.endTime = System.currentTimeMillis();
-			}
-		};
-	}
-
-	private Runnable buildRunnable(final Command command, final SynchronizedQueue<String> synchronizedQueue, final long sleep) {
-		return new TestRunnable() {
-			@Override
-			protected void run_() throws Throwable {
-				if (sleep != 0) {
-					Thread.sleep(sleep);
-				}
-				command.execute(synchronizedQueue);
-			}
-		};
-	}
-
-	long calculateElapsedTime() {
-		return this.endTime - this.startTime;
-	}
-
-
-	// ********** Command interface **********
-
-	private interface Command {
-		void execute(SynchronizedQueue<String> synchronizedQueue) throws InterruptedException;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedStackTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedStackTests.java
deleted file mode 100644
index 6b0338f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/SynchronizedStackTests.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.util.EmptyStackException;
-import org.eclipse.jpt.utility.internal.SimpleStack;
-import org.eclipse.jpt.utility.internal.Stack;
-import org.eclipse.jpt.utility.internal.SynchronizedStack;
-
-@SuppressWarnings("nls")
-public class SynchronizedStackTests
-	extends SimpleStackTests
-{
-	private volatile SynchronizedStack<String> ss;
-	volatile boolean timeoutOccurred;
-	volatile long startTime;
-	volatile long endTime;
-	volatile Object poppedObject;
-
-	static final String ITEM_1 = new String();
-	static final String ITEM_2 = new String();
-
-	public SynchronizedStackTests(String name) {
-		super(name);
-	}
-
-	@Override
-	Stack<String> buildStack() {
-		return new SynchronizedStack<String>();
-	}
-
-	@Override
-	public void testClone() {
-		// synchronized stack is not cloneable
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.ss = new SynchronizedStack<String>();
-		this.timeoutOccurred = false;
-		this.startTime = 0;
-		this.endTime = 0;
-		this.poppedObject = null;
-	}
-
-	/**
-	 * test first with an unsynchronized stack,
-	 * then with a synchronized stack
-	 */
-	public void testConcurrentAccess() throws Exception {
-		this.verifyConcurrentAccess(new SlowSimpleStack<String>(), "second");
-		this.verifyConcurrentAccess(new SlowSynchronizedStack<String>(), "first");
-	}
-
-	private void verifyConcurrentAccess(SlowStack<String> slowStack, String expected) throws Exception {
-		slowStack.push("first");
-		slowStack.push("second");
-
-		Thread thread = this.buildThread(this.buildRunnable(slowStack));
-		thread.start();
-		Thread.sleep(TWO_TICKS);
-
-		assertEquals(expected, slowStack.pop());
-		thread.join();
-		assertTrue(slowStack.isEmpty());
-	}
-
-	private Runnable buildRunnable(final SlowStack<String> slowStack) {
-		return new Runnable() {
-			public void run() {
-				slowStack.slowPop();
-			}
-		};
-	}
-
-
-	private interface SlowStack<E> extends Stack<E> {
-		Object slowPop();
-	}
-
-	private class SlowSimpleStack<E> extends SimpleStack<E> implements SlowStack<E> {
-		SlowSimpleStack() {
-			super();
-		}
-		public Object slowPop() {
-			try {
-				Thread.sleep(5 * TICK);
-			} catch (InterruptedException ex) {
-				throw new RuntimeException(ex);
-			}
-			return this.pop();
-		}
-
-	}
-
-	private class SlowSynchronizedStack<E> extends SynchronizedStack<E> implements SlowStack<E> {
-		SlowSynchronizedStack() {
-			super();
-		}
-		public synchronized Object slowPop() {
-			try {
-				Thread.sleep(5 * TICK);
-			} catch (InterruptedException ex) {
-				throw new RuntimeException(ex);
-			}
-			return this.pop();
-		}
-
-	}
-
-
-	// ********** waits **********
-
-	public void testWaitToPop() throws Exception {
-		this.verifyWaitToPop(0);
-		// no timeout occurs...
-		assertFalse(this.timeoutOccurred);
-		// ...and an item should have been popped by t2...
-		assertSame(ITEM_1, this.poppedObject);
-		// ...and the stack should be empty
-		assertTrue(this.ss.isEmpty());
-		// make a reasonable guess about how long t2 took
-		assertTrue(this.calculateElapsedTime() > TICK);
-	}
-
-	public void testWaitToPopTimeout() throws Exception {
-		this.verifyWaitToPop(TICK);
-		// timeout occurs...
-		assertTrue(this.timeoutOccurred);
-		// ...and the stack was never popped...
-		assertNull(this.poppedObject);
-		// ...and it still holds the item
-		assertSame(ITEM_1, this.ss.peek());
-		// make a reasonable guess about how long t2 took
-		assertTrue(this.calculateElapsedTime() < THREE_TICKS);
-	}
-
-	private void verifyWaitToPop(long timeout) throws Exception {
-		Runnable r1 = this.buildRunnable(this.buildPushCommand(), this.ss, TWO_TICKS);
-		Runnable r2 = this.buildRunnable(this.buildWaitToPopCommand(timeout), this.ss, 0);
-		Thread t1 = this.buildThread(r1);
-		Thread t2 = this.buildThread(r2);
-		t1.start();
-		t2.start();
-		t1.join();
-		t2.join();
-	}
-
-	public void testWaitToPush() throws Exception {
-		this.verifyWaitToPush(0);
-		// no timeout occurs...
-		assertFalse(this.timeoutOccurred);
-		// ...and the stack gets popped by t1...
-		assertSame(ITEM_1, this.poppedObject);
-		// ...and an item is pushed on to the stack by t2
-		assertFalse(this.ss.isEmpty());
-		assertSame(ITEM_2, this.ss.peek());
-		// make a reasonable guess about how long t2 took
-		assertTrue(this.calculateElapsedTime() > TICK);
-	}
-
-	public void testWaitToPushTimeout() throws Exception {
-		this.verifyWaitToPush(TICK);
-		// timeout occurs...
-		assertTrue(this.timeoutOccurred);
-		// ...and the stack is eventually popped by t1...
-		assertSame(ITEM_1, this.poppedObject);
-		// ...but nothing is pushed on to the stack by t2
-		assertTrue(this.ss.isEmpty());
-		// make a reasonable guess about how long t2 took
-		assertTrue(this.calculateElapsedTime() < THREE_TICKS);
-	}
-
-	private void verifyWaitToPush(long timeout) throws Exception {
-		this.ss.push(ITEM_1);
-		Runnable r1 = this.buildRunnable(this.buildPopCommand(), this.ss, TWO_TICKS);
-		Runnable r2 = this.buildRunnable(this.buildWaitToPushCommand(timeout), this.ss, 0);
-		Thread t1 = this.buildThread(r1);
-		Thread t2 = this.buildThread(r2);
-		t1.start();
-		t2.start();
-		t1.join();
-		t2.join();
-	}
-
-	private Command buildPushCommand() {
-		return new Command() {
-			public void execute(SynchronizedStack<String> synchronizedStack) {
-				synchronizedStack.push(ITEM_1);
-			}
-		};
-	}
-
-	private Command buildWaitToPopCommand(final long timeout) {
-		return new Command() {
-			public void execute(SynchronizedStack<String> synchronizedStack) throws InterruptedException {
-				SynchronizedStackTests.this.startTime = System.currentTimeMillis();
-				try {
-					SynchronizedStackTests.this.poppedObject = synchronizedStack.waitToPop(timeout);
-				} catch (EmptyStackException ex) {
-					SynchronizedStackTests.this.timeoutOccurred = true;
-				}
-				SynchronizedStackTests.this.endTime = System.currentTimeMillis();
-			}
-		};
-	}
-
-	private Command buildPopCommand() {
-		return new Command() {
-			public void execute(SynchronizedStack<String> synchronizedStack) {
-				SynchronizedStackTests.this.poppedObject = synchronizedStack.pop();
-			}
-		};
-	}
-
-	private Command buildWaitToPushCommand(final long timeout) {
-		return new Command() {
-			public void execute(SynchronizedStack<String> synchronizedStack) throws InterruptedException {
-				SynchronizedStackTests.this.startTime = System.currentTimeMillis();
-				SynchronizedStackTests.this.timeoutOccurred = ! synchronizedStack.waitToPush(ITEM_2, timeout);
-				SynchronizedStackTests.this.endTime = System.currentTimeMillis();
-			}
-		};
-	}
-
-	private Runnable buildRunnable(final Command command, final SynchronizedStack<String> synchronizedStack, final long sleep) {
-		return new TestRunnable() {
-			@Override
-			protected void run_() throws Throwable {
-				if (sleep != 0) {
-					Thread.sleep(sleep);
-				}
-				command.execute(synchronizedStack);
-			}
-		};
-	}
-
-	long calculateElapsedTime() {
-		return this.endTime - this.startTime;
-	}
-
-
-	// ********** Command interface **********
-
-	private interface Command {
-		void execute(SynchronizedStack<String> synchronizedStack) throws InterruptedException;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/TestTools.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/TestTools.java
deleted file mode 100644
index 78b5c39..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/TestTools.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import junit.framework.TestCase;
-import junit.framework.TestFailure;
-import junit.framework.TestResult;
-
-/**
- * various tools that can be used by test cases
- */
-public final class TestTools {
-
-	/**
-	 * Convenience method that handles {@link InterruptedException}.
-	 */
-	public static void sleep(long millis) {
-		try {
-			Thread.sleep(millis);
-		} catch (InterruptedException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	/**
-	 * test an object's implementation of Serializable by serializing the
-	 * specified object to a byte array; then de-serializing the byte array and
-	 * returning the resultant object
-	 */
-	public static <T> T serialize(T o) throws IOException, ClassNotFoundException {
-		ByteArrayOutputStream baOutStream = new ByteArrayOutputStream(2000);
-		ObjectOutputStream outStream = new ObjectOutputStream(baOutStream);
-		outStream.writeObject(o);
-		outStream.close();
-
-		ByteArrayInputStream baInStream = new ByteArrayInputStream(baOutStream.toByteArray());
-		ObjectInputStream inStream = new ObjectInputStream(baInStream);
-		T o2 = readObject(inStream);
-		inStream.close();
-
-		return o2;
-	}
-
-	@SuppressWarnings("unchecked")
-	private static <T> T readObject(ObjectInput objectInput) throws IOException, ClassNotFoundException {
-		return (T) objectInput.readObject();
-	}
-
-	/**
-	 * redirect std out and std err to the specified stream
-	 */
-	public static void redirectSystemStreamsTo(OutputStream outputStream) {
-		redirectSystemStreamsTo(new PrintStream(outputStream));
-	}
-
-	/**
-	 * redirect std out and std err to the specified stream
-	 */
-	public static void redirectSystemStreamsTo(PrintStream printStream) {
-		System.setOut(printStream);
-		System.setErr(printStream);
-	}
-
-	/**
-	 * Sort and print out all the current Java System properties on the
-	 * console.
-	 */
-	public static void printSystemProperties() {
-		synchronized (System.out) {
-			printSystemPropertiesOn(System.out);
-		}
-	}
-
-	/**
-	 * Sort and print out all the current Java System properties on the
-	 * specified print stream.
-	 */
-	public static void printSystemPropertiesOn(PrintStream stream) {
-		SortedSet<String> sortedKeys = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
-		for (Object key : System.getProperties().keySet()) {
-			sortedKeys.add((String) key);
-		}
-		for (String key : sortedKeys) {
-			stream.print(key);
-			stream.print(" => "); //$NON-NLS-1$
-			stream.print(System.getProperty(key));
-			stream.println();
-		}
-	}
-
-	/**
-	 * execute the specified test and return a text output of its results
-	 */
-	public static String execute(TestCase testCase) {
-		long start = System.currentTimeMillis();
-		TestResult result = testCase.run();
-		long end = System.currentTimeMillis();
-
-		StringWriter stringWriter = new StringWriter();
-		PrintWriter writer = new PrintWriter(stringWriter);
-		writer.print(testCase.getName());
-		writer.print(": "); //$NON-NLS-1$
-		if (result.wasSuccessful()) {
-			writer.println("OK"); //$NON-NLS-1$
-		} else {
-			TestFailure failure = null;
-			if (result.failures().hasMoreElements()) {
-				failure = (TestFailure) result.failures().nextElement();
-			} else {
-				failure = (TestFailure) result.errors().nextElement();
-			}
-			failure.thrownException().printStackTrace(writer);
-		}
-		writer.print("elapsed time: "); //$NON-NLS-1$
-		long elapsed = end - start;
-		writer.print(elapsed / 1000L);
-		writer.println(" sec."); //$NON-NLS-1$
-		return stringWriter.toString();
-	}
-
-	/**
-	 * Clear out all the instance variable of the specified test case, allowing
-	 * the various test fixtures to be garbage-collected. Typically this is
-	 * called in the #tearDown() method.
-	 */
-	public static void clear(TestCase testCase) throws IllegalAccessException {
-		for (Class<?> clazz = testCase.getClass(); clazz != TestCase_class; clazz = clazz.getSuperclass()) {
-			for (Field field : clazz.getDeclaredFields()) {
-				// leave primitives alone - they don't get garbage-collected, and we can't set them to null...
-				if (field.getType().isPrimitive()) {
-					continue;
-				}
-				// leave static fields alone (?)
-				if (Modifier.isStatic(field.getModifiers())) {
-					continue;
-				}
-				field.setAccessible(true);
-				field.set(testCase, null);
-			}
-		}
-	}
-
-	private static final Class<TestCase> TestCase_class = TestCase.class;
-
-	/**
-	 * Workaround for a JUnit bug: JUnit does not configure the testing Thread
-	 * with a context class loader. This should probably happen in
-	 * TestRunner.doRunTest(Test), just before starting the thread.
-	 */
-	public static void setUpJUnitThreadContextClassLoader() {
-		Thread.currentThread().setContextClassLoader(TestTools.class.getClassLoader());
-	}
-
-	/**
-	 * suppressed constructor
-	 */
-	private TestTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/XMLStringEncoderTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/XMLStringEncoderTests.java
deleted file mode 100644
index eda0e7f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/XMLStringEncoderTests.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.FileTools;
-import org.eclipse.jpt.utility.internal.XMLStringEncoder;
-
-@SuppressWarnings("nls")
-public class XMLStringEncoderTests extends TestCase {
-
-	public XMLStringEncoderTests(String name) {
-		super(name);
-	}
-
-	public void testEncodeNoCharacterSequences() {
-		XMLStringEncoder encoder = new XMLStringEncoder(FileTools.INVALID_FILENAME_CHARACTERS);
-
-		String s = "foo";
-		assertEquals(s, encoder.encode(s));
-
-		s = "123foo123";
-		assertEquals(s, encoder.encode(s));
-	}
-
-	public void testEncodeCharacterSequences() {
-		XMLStringEncoder encoder = new XMLStringEncoder(FileTools.INVALID_FILENAME_CHARACTERS);
-
-		String s = "?foo?";
-		String expected = "&#x3f;foo&#x3f;";
-		assertEquals(expected, encoder.encode(s));
-
-		s = "?foo&123";
-		expected = "&#x3f;foo&#x26;123";
-		assertEquals(expected, encoder.encode(s));
-	}
-
-	public void testDenormalizeValidFileName() {
-		XMLStringEncoder encoder = new XMLStringEncoder(FileTools.INVALID_FILENAME_CHARACTERS);
-
-		String s = "foo";
-		assertEquals(s, encoder.decode(s));
-
-		s = "123foo123";
-		assertEquals(s, encoder.decode(s));
-	}
-
-	public void testDenormalizeInvalidFileName() {
-		XMLStringEncoder encoder = new XMLStringEncoder(FileTools.INVALID_FILENAME_CHARACTERS);
-
-		String s = "&#x3f;foo&#x3f;";
-		String expected = "?foo?";
-		assertEquals(expected, encoder.decode(s));
-
-		s = "&#x3f;foo&#x26;123";
-		expected = "?foo&123";
-		assertEquals(expected, encoder.decode(s));
-	}
-
-	public void testRoundTripNoCharacterSequences() {
-		this.verifyRoundTrip("foo");
-		this.verifyRoundTrip("123foo456");
-	}
-
-	public void testRoundTripCharacterSequences() {
-		this.verifyRoundTrip("?foo?");
-		this.verifyRoundTrip("?foo&123&&&&&&>>>>");
-	}
-
-	private void verifyRoundTrip(String s) {
-		XMLStringEncoder encoder = new XMLStringEncoder(FileTools.INVALID_FILENAME_CHARACTERS);
-		String actual = encoder.encode(s);
-		assertEquals(s, encoder.decode(actual));
-	}
-
-	public void testInvalidCharacterSequence1() {
-		this.verifyIllegalStateException("foo&");
-	}
-
-	public void testInvalidCharacterSequence2() {
-		this.verifyIllegalStateException("foo&#");
-	}
-
-	public void testInvalidCharacterSequence3() {
-		this.verifyIllegalStateException("foo&#x");
-	}
-
-	public void testInvalidCharacterSequence4() {
-		this.verifyIllegalStateException("foo&#x3");
-	}
-
-	public void testInvalidCharacterSequence5() {
-		this.verifyIllegalStateException("foo&#x;");
-	}
-
-	public void testInvalidCharacterSequence6() {
-		this.verifyIllegalStateException("foo&A");
-	}
-
-	public void testInvalidCharacterSequence7() {
-		this.verifyIllegalStateException("foo&#A");
-	}
-
-	private void verifyIllegalStateException(String s) {
-		XMLStringEncoder encoder = new XMLStringEncoder(FileTools.INVALID_FILENAME_CHARACTERS);
-		boolean exCaught = false;
-		try {
-			s = encoder.decode(s);
-			fail(s);
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidCharacterSequence8() {
-		String s = "foo&#xZZZZ;";
-		XMLStringEncoder encoder = new XMLStringEncoder(FileTools.INVALID_FILENAME_CHARACTERS);
-		boolean exCaught = false;
-		try {
-			s = encoder.decode(s);
-			fail(s);
-		} catch (NumberFormatException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/enumerations/EmptyEnumerationTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/enumerations/EmptyEnumerationTests.java
deleted file mode 100644
index 0bda77f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/enumerations/EmptyEnumerationTests.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.enumerations;
-
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.enumerations.EmptyEnumeration;
-
-@SuppressWarnings("nls")
-public class EmptyEnumerationTests extends TestCase {
-
-	public EmptyEnumerationTests(String name) {
-		super(name);
-	}
-
-	public void testHasMoreElements() {
-		int i = 0;
-		for (Enumeration<Object> stream = EmptyEnumeration.instance(); stream.hasMoreElements();) {
-			stream.nextElement();
-			i++;
-		}
-		assertEquals(0, i);
-	}
-
-	public void testNextElement() {
-		for (Enumeration<Object> stream = EmptyEnumeration.instance(); stream.hasMoreElements();) {
-			fail("bogus element: " + stream.nextElement());
-		}
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Enumeration<Object> stream = EmptyEnumeration.instance();
-		Object element = null;
-		while (stream.hasMoreElements()) {
-			element = stream.nextElement();
-		}
-		try {
-			element = stream.nextElement();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + element, exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/enumerations/IteratorEnumerationTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/enumerations/IteratorEnumerationTests.java
deleted file mode 100644
index 545b349..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/enumerations/IteratorEnumerationTests.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.enumerations;
-
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Vector;
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.enumerations.IteratorEnumeration;
-
-@SuppressWarnings("nls")
-public class IteratorEnumerationTests extends TestCase {
-
-	public IteratorEnumerationTests(String name) {
-		super(name);
-	}
-
-	public void testHasMoreElements() {
-		int i = 0;
-		for (Enumeration<String> stream = this.buildEnumeration(); stream.hasMoreElements();) {
-			stream.nextElement();
-			i++;
-		}
-		assertEquals(this.buildVector().size(), i);
-	}
-
-	public void testHasMoreElementsUpcast() {
-		int i = 0;
-		for (Enumeration<Object> stream = this.buildEnumerationUpcast(); stream.hasMoreElements();) {
-			stream.nextElement();
-			i++;
-		}
-		assertEquals(this.buildVector().size(), i);
-	}
-
-	public void testNextElement() {
-		Iterator<String> iterator = this.buildIterator();
-		for (Enumeration<String> stream = this.buildEnumeration(); stream.hasMoreElements();) {
-			assertEquals("bogus element", iterator.next(), stream.nextElement());
-		}
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Enumeration<String> stream = this.buildEnumeration();
-		String string = null;
-		while (stream.hasMoreElements()) {
-			string = stream.nextElement();
-		}
-		try {
-			string = stream.nextElement();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	private Enumeration<String> buildEnumeration() {
-		return this.buildEnumeration(this.buildIterator());
-	}
-
-	private Enumeration<Object> buildEnumerationUpcast() {
-		return this.buildEnumerationUpcast(this.buildIterator());
-	}
-
-	private Enumeration<String> buildEnumeration(Iterator<String> iterator) {
-		return new IteratorEnumeration<String>(iterator);
-	}
-
-	private Enumeration<Object> buildEnumerationUpcast(Iterator<String> iterator) {
-		return new IteratorEnumeration<Object>(iterator);
-	}
-
-	private Iterator<String> buildIterator() {
-		return this.buildVector().iterator();
-	}
-
-	private Vector<String> buildVector() {
-		Vector<String> v = new Vector<String>();
-		v.addElement("one");
-		v.addElement("two");
-		v.addElement("three");
-		v.addElement("four");
-		v.addElement("five");
-		v.addElement("six");
-		v.addElement("seven");
-		v.addElement("eight");
-		return v;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/enumerations/JptUtilityEnumerationsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/enumerations/JptUtilityEnumerationsTests.java
deleted file mode 100644
index 8fd14c3..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/enumerations/JptUtilityEnumerationsTests.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.enumerations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * decentralize test creation code
- */
-public class JptUtilityEnumerationsTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUtilityEnumerationsTests.class.getPackage().getName());
-
-		suite.addTestSuite(EmptyEnumerationTests.class);
-		suite.addTestSuite(IteratorEnumerationTests.class);
-
-		return suite;
-	}
-
-	private JptUtilityEnumerationsTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ArrayIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ArrayIterableTests.java
deleted file mode 100644
index 0cd9451..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ArrayIterableTests.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-
-@SuppressWarnings("nls")
-public class ArrayIterableTests extends TestCase {
-
-	public ArrayIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		int i = 1;
-		for (String string : this.buildIterable()) {
-			assertEquals(i++, Integer.parseInt(string));
-		}
-	}
-
-	public void testSubIterator() {
-		int i = 3;
-		for (String string : this.buildIterable(2)) {
-			assertEquals(i++, Integer.parseInt(string));
-		}
-	}
-
-	public void testIllegalArgumentException() {
-		this.triggerIllegalArgumentException(-1, 1);
-		this.triggerIllegalArgumentException(8, 1);
-		this.triggerIllegalArgumentException(0, -1);
-		this.triggerIllegalArgumentException(0, 9);
-	}
-
-	private void triggerIllegalArgumentException(int start, int length) {
-		boolean exCaught = false;
-		try {
-			Iterable<String> iterable = this.buildIterable(start, length);
-			fail("bogus iterable: " + iterable);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	private Iterable<String> buildIterable() {
-		return this.buildIterable(0);
-	}
-
-	private Iterable<String> buildIterable(int start) {
-		return this.buildIterable(this.buildArray(), start);
-	}
-
-	private Iterable<String> buildIterable(String[] array, int start) {
-		return new ArrayIterable<String>(array, start);
-	}
-
-	private Iterable<String> buildIterable(int start, int length) {
-		return this.buildIterable(this.buildArray(), start, length);
-	}
-
-	private Iterable<String> buildIterable(String[] array, int start, int length) {
-		return new ArrayIterable<String>(array, start, length);
-	}
-
-	private String[] buildArray() {
-		return new String[] { "1", "2", "3", "4", "5", "6", "7", "8" };
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ArrayListIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ArrayListIterableTests.java
deleted file mode 100644
index e810e83..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ArrayListIterableTests.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.ListIterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.ArrayListIterable;
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-
-@SuppressWarnings("nls")
-public class ArrayListIterableTests extends TestCase {
-
-	public ArrayListIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		int i = 1;
-		ListIterable<String> iterable = this.buildIterable();
-		for (String string : iterable) {
-			assertEquals(i++, Integer.parseInt(string));
-		}
-		ListIterator<String> stream = iterable.iterator();
-		while (stream.hasNext()) {
-			stream.next();
-		}
-		while (stream.hasPrevious()) {
-			assertEquals(--i, Integer.parseInt(stream.previous()));
-		}
-	}
-
-	public void testSubIterator() {
-		int i = 3;
-		for (String string : this.buildIterable(2)) {
-			assertEquals(i++, Integer.parseInt(string));
-		}
-	}
-
-	public void testIllegalArgumentException() {
-		this.triggerIllegalArgumentException(-1, 1);
-		this.triggerIllegalArgumentException(8, 1);
-		this.triggerIllegalArgumentException(0, -1);
-		this.triggerIllegalArgumentException(0, 9);
-	}
-
-	private void triggerIllegalArgumentException(int start, int length) {
-		boolean exCaught = false;
-		try {
-			Iterable<String> iterable = this.buildIterable(start, length);
-			fail("bogus iterable: " + iterable);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	private ListIterable<String> buildIterable() {
-		return this.buildIterable(0);
-	}
-
-	private ListIterable<String> buildIterable(int start) {
-		return this.buildIterable(this.buildArray(), start);
-	}
-
-	private ListIterable<String> buildIterable(String[] array, int start) {
-		return (start == 0) ?
-				new ArrayListIterable<String>(array) :
-				new ArrayListIterable<String>(array, start);
-	}
-
-	private ListIterable<String> buildIterable(int start, int length) {
-		return this.buildIterable(this.buildArray(), start, length);
-	}
-
-	private ListIterable<String> buildIterable(String[] array, int start, int length) {
-		return new ArrayListIterable<String>(array, start, length);
-	}
-
-	private String[] buildArray() {
-		return new String[] { "1", "2", "3", "4", "5", "6", "7", "8" };
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ChainIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ChainIterableTests.java
deleted file mode 100644
index 67255da..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ChainIterableTests.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.AbstractCollection;
-import java.util.AbstractList;
-import java.util.Iterator;
-import java.util.Vector;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.ChainIterable;
-import org.eclipse.jpt.utility.internal.iterators.ChainIterator;
-
-@SuppressWarnings("nls")
-public class ChainIterableTests extends TestCase {
-	private final static Class<?>[] VECTOR_HIERARCHY = { Vector.class, AbstractList.class, AbstractCollection.class, Object.class };
-
-	public ChainIterableTests(String name) {
-		super(name);
-	}
-
-
-	public void testNextLink() {
-		int i = 0;
-		for (Class<?> clazz : this.buildIterable()) {
-			assertEquals(VECTOR_HIERARCHY[i++], clazz);
-		}
-	}
-
-	public void testLinker() {
-		int i = 0;
-		for (Class<?> clazz : new ChainIterable<Class<?>>(Vector.class, this.buildLinker())) {
-			assertEquals(VECTOR_HIERARCHY[i++], clazz);
-		}
-	}
-
-	public void testException() {
-		Iterable<Class<?>> iterable = new ChainIterable<Class<?>>(Vector.class);
-		Iterator<Class<?>> iterator = iterable.iterator();
-		boolean exCaught = false;
-		try {
-			Class<?> clazz = iterator.next();
-			fail("bogus class: " + clazz);
-		} catch (RuntimeException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testToString() {
-		assertNotNull(this.buildIterable().toString());
-	}
-
-	private Iterable<Class<?>> buildIterable() {
-		return this.buildChainIterable(Vector.class);
-	}
-
-	private Iterable<Class<?>> buildChainIterable(Class<?> startLink) {
-		// chain up the class's hierarchy
-		return new ChainIterable<Class<?>>(startLink) {
-			@Override
-			protected Class<?> nextLink(Class<?> currentLink) {
-				return currentLink.getSuperclass();
-			}
-		};
-	}
-
-	private ChainIterator.Linker<Class<?>> buildLinker() {
-		return new ChainIterator.Linker<Class<?>>() {
-			public Class<?> nextLink(Class<?> currentLink) {
-				return currentLink.getSuperclass();
-			}
-		};
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/CloneIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/CloneIterableTests.java
deleted file mode 100644
index f8eff94..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/CloneIterableTests.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
-import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
-
-@SuppressWarnings("nls")
-public abstract class CloneIterableTests extends TestCase {
-	Iterable<String> iterable;
-
-	public CloneIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		List<String> c = new ArrayList<String>();
-		c.add("0");
-		c.add("1");
-		c.add("2");
-		c.add("3");
-		assertEquals(4, c.size());
-		this.iterable = this.buildIterable(c);
-		int i = 0;
-		for (String s : this.iterable) {
-			assertEquals(String.valueOf(i++), s);
-			c.remove("3");
-		}
-		assertEquals(4, i);
-		assertEquals(3, c.size());
-	}
-
-	public void testRemove() {
-		final List<String> collection = this.buildCollection();
-		this.iterable = this.buildRemovingIterable(collection);
-
-		Object removed = "three";
-		assertTrue(CollectionTools.contains(this.iterable, removed));
-		for (Iterator<String> iterator = this.iterable.iterator(); iterator.hasNext(); ) {
-			if (iterator.next().equals(removed)) {
-				iterator.remove();
-			}
-		}
-		assertFalse(collection.contains(removed));
-	}
-
-	public void testRemover() {
-		final List<String> collection = this.buildCollection();
-		this.iterable = this.buildIterableWithRemover(collection);
-
-		Object removed = "three";
-		assertTrue(CollectionTools.contains(this.iterable, removed));
-		for (Iterator<String> iterator = this.iterable.iterator(); iterator.hasNext(); ) {
-			if (iterator.next().equals(removed)) {
-				iterator.remove();
-			}
-		}
-		assertFalse(collection.contains(removed));
-	}
-
-	public void testMissingRemover() {
-		final List<String> collection = this.buildCollection();
-		this.iterable = this.buildIterable(collection);
-		assertNotNull(this.iterable.toString());
-
-		Object removed = "three";
-		assertTrue(CollectionTools.contains(this.iterable, removed));
-		boolean exCaught = false;
-		for (Iterator<String> iterator = this.iterable.iterator(); iterator.hasNext(); ) {
-			if (iterator.next().equals(removed)) {
-				try {
-					iterator.remove();
-					fail();
-				} catch (RuntimeException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testToString() {
-		final List<String> collection = this.buildCollection();
-		this.iterable = this.buildIterable(collection);
-		assertNotNull(iterable.toString());
-	}
-
-	abstract Iterable<String> buildIterable(List<String> c);
-
-	abstract Iterable<String> buildRemovingIterable(List<String> c);
-
-	abstract Iterable<String> buildIterableWithRemover(List<String> c);
-
-	CloneIterator.Remover<String> buildRemover(final Collection<String> c) {
-		return new CloneIterator.Remover<String>() {
-			public void remove(String current) {
-				c.remove(current);
-			}
-		};
-	}
-
-	CloneListIterator.Mutator<String> buildMutator(final List<String> list) {
-		return new CloneListIterator.Mutator<String>() {
-			public void add(int index, String string) {
-				list.add(index, string);
-			}
-			public void set(int index, String string) {
-				list.set(index, string);
-			}
-			public void remove(int index) {
-				list.remove(index);
-			}
-		};
-	}
-
-	List<String> buildCollection() {
-		List<String> c = new ArrayList<String>();
-		c.add("one");
-		c.add("two");
-		c.add("three");
-		c.add("four");
-		c.add("five");
-		c.add("six");
-		c.add("seven");
-		c.add("eight");
-		return c;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/CompositeIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/CompositeIterableTests.java
deleted file mode 100644
index b59857e..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/CompositeIterableTests.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.CompositeIterable;
-
-@SuppressWarnings("nls")
-public class CompositeIterableTests extends TestCase {
-
-	public CompositeIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		Collection<String> c1 = new ArrayList<String>();
-		c1.add("0");
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-
-		Collection<String> c2 = new ArrayList<String>();
-		c2.add("4");
-		c2.add("5");
-		c2.add("6");
-		c2.add("7");
-
-		@SuppressWarnings("unchecked")
-		Iterable<String> composite = new CompositeIterable<String>(c1, c2);
-		int i = 0;
-		for (String s : composite) {
-			assertEquals(String.valueOf(i++), s);
-		}
-	}
-
-	public void testExtraElement1() {
-		Collection<String> c1 = new ArrayList<String>();
-		c1.add("0");
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-
-		Iterable<String> composite = new CompositeIterable<String>(c1, "4");
-		int i = 0;
-		for (String s : composite) {
-			assertEquals(String.valueOf(i++), s);
-		}
-	}
-
-	public void testExtraElement2() {
-		Collection<String> c1 = new ArrayList<String>();
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-
-		Iterable<String> composite = new CompositeIterable<String>("0", c1);
-		int i = 0;
-		for (String s : composite) {
-			assertEquals(String.valueOf(i++), s);
-		}
-	}
-
-	public void testCollectionOfIterables() {
-		Collection<String> c1 = new ArrayList<String>();
-		c1.add("0");
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-
-		Collection<String> c2 = new ArrayList<String>();
-		c2.add("4");
-		c2.add("5");
-		c2.add("6");
-		c2.add("7");
-
-		Collection<Iterable<String>> collection = new ArrayList<Iterable<String>>();
-		collection.add(c1);
-		collection.add(c2);
-		Iterable<String> composite = new CompositeIterable<String>(collection);
-		int i = 0;
-		for (String s : composite) {
-			assertEquals(String.valueOf(i++), s);
-		}
-	}
-
-	public void testToString() {
-		Collection<String> c1 = new ArrayList<String>();
-		c1.add("0");
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-
-		Collection<String> c2 = new ArrayList<String>();
-		c2.add("4");
-		c2.add("5");
-		c2.add("6");
-		c2.add("7");
-
-		@SuppressWarnings("unchecked")
-		Iterable<String> composite = new CompositeIterable<String>(c1, c2);
-		assertNotNull(composite.toString());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/CompositeListIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/CompositeListIterableTests.java
deleted file mode 100644
index aca4d95..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/CompositeListIterableTests.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.CompositeListIterable;
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-import org.eclipse.jpt.utility.internal.iterables.ListListIterable;
-
-@SuppressWarnings("nls")
-public class CompositeListIterableTests extends TestCase {
-
-	public CompositeListIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		List<String> c1 = new ArrayList<String>();
-		c1.add("0");
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-
-		List<String> c2 = new ArrayList<String>();
-		c2.add("4");
-		c2.add("5");
-		c2.add("6");
-		c2.add("7");
-
-		@SuppressWarnings("unchecked")
-		Iterable<String> composite = new CompositeListIterable<String>(c1, c2);
-		int i = 0;
-		for (String s : composite) {
-			assertEquals(String.valueOf(i++), s);
-		}
-	}
-
-	public void testExtraElement1() {
-		List<String> c1 = new ArrayList<String>();
-		c1.add("0");
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-
-		Iterable<String> composite = new CompositeListIterable<String>(c1, "4");
-		int i = 0;
-		for (String s : composite) {
-			assertEquals(String.valueOf(i++), s);
-		}
-	}
-
-	public void testExtraElement2() {
-		List<String> c1 = new ArrayList<String>();
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-
-		Iterable<String> composite = new CompositeListIterable<String>("0", c1);
-		int i = 0;
-		for (String s : composite) {
-			assertEquals(String.valueOf(i++), s);
-		}
-	}
-
-	public void testCollectionOfIterables() {
-		List<String> c1 = new ArrayList<String>();
-		c1.add("0");
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-
-		List<String> c2 = new ArrayList<String>();
-		c2.add("4");
-		c2.add("5");
-		c2.add("6");
-		c2.add("7");
-
-		List<ListIterable<String>> collection = new ArrayList<ListIterable<String>>();
-		collection.add(new ListListIterable<String>(c1));
-		collection.add(new ListListIterable<String>(c2));
-		Iterable<String> composite = new CompositeListIterable<String>(collection);
-		int i = 0;
-		for (String s : composite) {
-			assertEquals(String.valueOf(i++), s);
-		}
-	}
-
-	public void testToString() {
-		List<String> c1 = new ArrayList<String>();
-		c1.add("0");
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-
-		List<String> c2 = new ArrayList<String>();
-		c2.add("4");
-		c2.add("5");
-		c2.add("6");
-		c2.add("7");
-
-		@SuppressWarnings("unchecked")
-		Iterable<String> composite = new CompositeListIterable<String>(c1, c2);
-		assertNotNull(composite.toString());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/EmptyIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/EmptyIterableTests.java
deleted file mode 100644
index ae269e9..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/EmptyIterableTests.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class EmptyIterableTests extends TestCase {
-
-	public EmptyIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		for (String s : EmptyIterable.<String>instance()) {
-			fail("bogus element: " + s);
-		}
-	}
-
-	public void testToString() {
-		assertNotNull(EmptyIterable.instance().toString());
-	}
-
-	public void testSerialization() throws Exception {
-		Iterable<String> iterable = EmptyIterable.instance();
-		assertSame(iterable, TestTools.serialize(iterable));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/EmptyListIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/EmptyListIterableTests.java
deleted file mode 100644
index b037ace..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/EmptyListIterableTests.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.EmptyListIterable;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class EmptyListIterableTests extends TestCase {
-
-	public EmptyListIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		for (String s : EmptyListIterable.<String>instance()) {
-			fail("bogus element: " + s);
-		}
-	}
-
-	public void testToString() {
-		assertNotNull(EmptyListIterable.instance().toString());
-	}
-
-	public void testSerialization() throws Exception {
-		Iterable<String> iterable = EmptyListIterable.instance();
-		assertSame(iterable, TestTools.serialize(iterable));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/FilteringIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/FilteringIterableTests.java
deleted file mode 100644
index 713163e..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/FilteringIterableTests.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.Filter;
-import org.eclipse.jpt.utility.internal.iterables.FilteringIterable;
-
-@SuppressWarnings("nls")
-public class FilteringIterableTests extends TestCase {
-	private static final String PREFIX = "prefix";
-
-	public FilteringIterableTests(String name) {
-		super(name);
-	}
-
-	public void testAccept() {
-		int i = 0;
-		for (String s : this.buildIterable()) {
-			assertTrue(s.contains(PREFIX));
-			i++;
-		}
-		assertEquals(6, i);
-	}
-
-	public void testFilter() {
-		Filter<String> filter = this.buildFilter();
-		int i = 0;
-		for (String s : new FilteringIterable<String>(this.buildNestedIterable(), filter)) {
-			assertTrue(s.contains(PREFIX));
-			i++;
-		}
-		assertEquals(6, i);
-	}
-
-	public void testToString() {
-		assertNotNull(this.buildIterable().toString());
-	}
-
-	public void testMissingFilter() {
-		boolean exCaught = false;
-		Iterable<String> iterable = new FilteringIterable<String>(this.buildNestedIterable());
-		try {
-			Iterator<String> iterator = iterable.iterator();
-			fail("bogus iterator: " + iterator);
-		} catch (RuntimeException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	private Iterable<String> buildIterable() {
-		return this.buildFilteringIterable(this.buildNestedIterable());
-	}
-
-	private Iterable<String> buildFilteringIterable(Iterable<String> nestedIterable) {
-		return new FilteringIterable<String>(nestedIterable) {
-			@Override
-			protected boolean accept(String s) {
-				return s.startsWith(PREFIX);
-			}
-		};
-	}
-
-	private Filter<String> buildFilter() {
-		return new Filter<String>() {
-			public boolean accept(String s) {
-				return s.startsWith(PREFIX);
-			}
-		};
-	}
-
-	private Iterable<String> buildNestedIterable() {
-		Collection<String> c = new ArrayList<String>();
-		c.add(PREFIX + "1");
-		c.add(PREFIX + "2");
-		c.add(PREFIX + "3");
-		c.add("4");
-		c.add(PREFIX + "5");
-		c.add(PREFIX + "6");
-		c.add(PREFIX + "7");
-		c.add("8");
-		return c;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/GraphIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/GraphIterableTests.java
deleted file mode 100644
index e1b74ca..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/GraphIterableTests.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterables.GraphIterable;
-import org.eclipse.jpt.utility.internal.iterators.GraphIterator;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class GraphIterableTests extends TestCase {
-	/** this will be populated with all the nodes created for the test */
-	Collection<GraphNode> nodes = new ArrayList<GraphNode>();
-
-	public GraphIterableTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testNeighbors1() {
-		for (GraphNode gn : this.buildGraphIterable1()) {
-			assertTrue(this.nodes.contains(gn));
-		}
-	}
-
-	private Iterable<GraphNode> buildGraphIterable1() {
-		return new GraphIterable<GraphNode>(this.buildGraphRoot()) {
-			@Override
-			public Iterator<GraphNode> neighbors(GraphNode next) {
-				return next.neighbors();
-			}
-		};
-	}
-
-	public void testNeighbors2() {
-		for (GraphNode gn : this.buildGraphIterable2()) {
-			assertTrue(this.nodes.contains(gn));
-		}
-	}
-
-	private Iterable<GraphNode> buildGraphIterable2() {
-		return new GraphIterable<GraphNode>(this.buildGraphRoot(), this.buildMisterRogers());
-	}
-
-	public void testNeighbors3() {
-		for (GraphNode gn : this.buildGraphIterable3()) {
-			assertTrue(this.nodes.contains(gn));
-		}
-	}
-
-	private Iterable<GraphNode> buildGraphIterable3() {
-		return new GraphIterable<GraphNode>(new GraphNode[] { this.buildGraphRoot() }) {
-			@Override
-			public Iterator<GraphNode> neighbors(GraphNode next) {
-				return next.neighbors();
-			}
-		};
-	}
-
-	public void testNeighbors4() {
-		for (GraphNode gn : this.buildGraphIterable4()) {
-			assertTrue(this.nodes.contains(gn));
-		}
-	}
-
-	private Iterable<GraphNode> buildGraphIterable4() {
-		return new GraphIterable<GraphNode>(new GraphNode[] { this.buildGraphRoot() }, this.buildMisterRogers());
-	}
-
-	public void testToString() {
-		assertNotNull(this.buildGraphIterable1().toString());
-	}
-
-	public void testMissingMisterRogers() {
-		boolean exCaught = false;
-		try {
-			for (GraphNode gn : new GraphIterable<GraphNode>(this.buildGraphRoot())) {
-				assertTrue(this.nodes.contains(gn));
-			}
-			fail();
-		} catch (RuntimeException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	private GraphIterator.MisterRogers<GraphNode> buildMisterRogers() {
-		return new GraphIterator.MisterRogers<GraphNode>() {
-			public Iterator<GraphNode> neighbors(GraphNode next) {
-				return next.neighbors();
-			}
-		};
-	}
-
-	private GraphNode buildGraphRoot() {
-		GraphNode ncNode = new GraphNode("North Carolina");
-		GraphNode vaNode = new GraphNode("Virginia");
-		GraphNode scNode = new GraphNode("South Carolina");
-		GraphNode gaNode = new GraphNode("Georgia");
-		GraphNode flNode = new GraphNode("Florida");
-		GraphNode alNode = new GraphNode("Alabama");
-		GraphNode msNode = new GraphNode("Mississippi");
-		GraphNode tnNode = new GraphNode("Tennessee");
-
-		ncNode.setNeighbors(new GraphNode[] { vaNode, scNode, gaNode, tnNode });
-		vaNode.setNeighbors(new GraphNode[] { ncNode, tnNode });
-		scNode.setNeighbors(new GraphNode[] { ncNode, gaNode });
-		gaNode.setNeighbors(new GraphNode[] { ncNode, scNode, flNode, alNode, tnNode });
-		flNode.setNeighbors(new GraphNode[] { gaNode });
-		alNode.setNeighbors(new GraphNode[] { gaNode, msNode, tnNode });
-		msNode.setNeighbors(new GraphNode[] { alNode, tnNode });
-		tnNode.setNeighbors(new GraphNode[] { vaNode, ncNode, gaNode, alNode, msNode });
-
-		return ncNode;
-	}
-
-	public class GraphNode {
-		private String name;
-
-		private Collection<GraphNode> neighbors = new ArrayList<GraphNode>();
-
-		public GraphNode(String name) {
-			super();
-			GraphIterableTests.this.nodes.add(this); // log node
-			this.name = name;
-		}
-
-		public String getName() {
-			return this.name;
-		}
-
-		void setNeighbors(GraphNode[] neighbors) {
-			this.neighbors = CollectionTools.list(neighbors);
-		}
-
-		public Iterator<GraphNode> neighbors() {
-			return this.neighbors.iterator();
-		}
-
-		public int neighborsSize() {
-			return this.neighbors.size();
-		}
-
-		@Override
-		public String toString() {
-			return "GraphNode(" + this.name + ")";
-		}
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/JptUtilityIterablesTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/JptUtilityIterablesTests.java
deleted file mode 100644
index 9394bd0..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/JptUtilityIterablesTests.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * decentralize test creation code
- */
-public class JptUtilityIterablesTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUtilityIterablesTests.class.getPackage().getName());
-
-		suite.addTestSuite(ArrayIterableTests.class);
-		suite.addTestSuite(ArrayListIterableTests.class);
-		suite.addTestSuite(ChainIterableTests.class);
-		suite.addTestSuite(CompositeIterableTests.class);
-		suite.addTestSuite(CompositeListIterableTests.class);
-		suite.addTestSuite(EmptyIterableTests.class);
-		suite.addTestSuite(EmptyListIterableTests.class);
-		suite.addTestSuite(FilteringIterableTests.class);
-		suite.addTestSuite(SuperIterableWrapperTests.class);
-		suite.addTestSuite(GraphIterableTests.class);
-		suite.addTestSuite(LiveCloneIterableTests.class);
-		suite.addTestSuite(LiveCloneListIterableTests.class);
-		suite.addTestSuite(PeekableIterableTests.class);
-		suite.addTestSuite(QueueIterableTests.class);
-		suite.addTestSuite(ReadOnlyCompositeListIterableTests.class);
-		suite.addTestSuite(ReadOnlyIterableTests.class);
-		suite.addTestSuite(ReadOnlyListIterableTests.class);
-		suite.addTestSuite(SingleElementIterableTests.class);
-		suite.addTestSuite(SingleElementListIterableTests.class);
-		suite.addTestSuite(SnapshotCloneIterableTests.class);
-		suite.addTestSuite(SnapshotCloneListIterableTests.class);
-		suite.addTestSuite(StackIterableTests.class);
-		suite.addTestSuite(TransformationIterableTests.class);
-		suite.addTestSuite(TransformationListIterableTests.class);
-		suite.addTestSuite(TreeIterableTests.class);
-
-		return suite;
-	}
-
-	private JptUtilityIterablesTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/LiveCloneIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/LiveCloneIterableTests.java
deleted file mode 100644
index 466d421..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/LiveCloneIterableTests.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.List;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterables.LiveCloneIterable;
-
-@SuppressWarnings("nls")
-public class LiveCloneIterableTests extends CloneIterableTests {
-
-	public LiveCloneIterableTests(String name) {
-		super(name);
-	}
-
-	@Override
-	public void testIterator() {
-		super.testIterator();
-		// iterable should now return only 3 strings (since it's "live")
-		int i = 0;
-		for (String s : this.iterable) {
-			assertEquals(String.valueOf(i++), s);
-		}
-		assertEquals(3, i);
-	}
-
-	@Override
-	public void testRemove() {
-		super.testRemove();
-		// "live" clone iterable will no longer contain the element removed from the
-		// original collection
-		assertFalse(CollectionTools.contains(this.iterable, "three"));
-	}
-
-	@Override
-	public void testRemover() {
-		super.testRemover();
-		// "live" clone iterable will no longer contain the element removed from the
-		// original collection
-		assertFalse(CollectionTools.contains(this.iterable, "three"));
-	}
-
-	@Override
-	Iterable<String> buildIterable(List<String> c) {
-		return new LiveCloneIterable<String>(c);
-	}
-
-	@Override
-	Iterable<String> buildRemovingIterable(final List<String> c) {
-		return new LiveCloneIterable<String>(c) {
-				@Override
-				protected void remove(String current) {
-					c.remove(current);
-				}
-			};
-	}
-
-	@Override
-	Iterable<String> buildIterableWithRemover(List<String> c) {
-		return new LiveCloneIterable<String>(c, this.buildRemover(c));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/LiveCloneListIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/LiveCloneListIterableTests.java
deleted file mode 100644
index 47ba2ed..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/LiveCloneListIterableTests.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterables.LiveCloneListIterable;
-
-@SuppressWarnings("nls")
-public class LiveCloneListIterableTests extends LiveCloneIterableTests {
-
-	public LiveCloneListIterableTests(String name) {
-		super(name);
-	}
-
-	public void testAdd() {
-		final List<String> collection = this.buildCollection();
-		this.iterable = this.buildRemovingIterable(collection);
-
-		String added = "xxxx";
-		assertFalse(CollectionTools.contains(this.iterable, added));
-		for (ListIterator<String> iterator = (ListIterator<String>) this.iterable.iterator(); iterator.hasNext(); ) {
-			if (iterator.next().equals("two")) {
-				iterator.add(added);
-			}
-		}
-		assertTrue(collection.contains(added));
-		// "live" clone iterable will contain the element added to the
-		// original collection
-		assertTrue(CollectionTools.contains(this.iterable, added));
-	}
-
-	public void testMissingMutatorAdd() {
-		final List<String> collection = this.buildCollection();
-		this.iterable = this.buildIterable(collection);
-		assertNotNull(this.iterable.toString());
-
-		String added = "xxxx";
-		assertFalse(CollectionTools.contains(this.iterable, added));
-		boolean exCaught = false;
-		for (ListIterator<String> iterator = (ListIterator<String>) this.iterable.iterator(); iterator.hasNext(); ) {
-			if (iterator.next().equals("three")) {
-				try {
-					iterator.add(added);
-					fail();
-				} catch (RuntimeException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testSet() {
-		final List<String> collection = this.buildCollection();
-		this.iterable = this.buildRemovingIterable(collection);
-
-		String added = "xxxx";
-		assertFalse(CollectionTools.contains(this.iterable, added));
-		for (ListIterator<String> iterator = (ListIterator<String>) this.iterable.iterator(); iterator.hasNext(); ) {
-			if (iterator.next().equals("two")) {
-				iterator.set(added);
-			}
-		}
-		assertTrue(collection.contains(added));
-		assertFalse(collection.contains("two"));
-		// "live" clone iterable will contain the element added to the
-		// original collection
-		assertTrue(CollectionTools.contains(this.iterable, added));
-		assertFalse(CollectionTools.contains(this.iterable, "two"));
-	}
-
-	public void testMissingMutatorSet() {
-		final List<String> collection = this.buildCollection();
-		this.iterable = this.buildIterable(collection);
-		assertNotNull(this.iterable.toString());
-
-		String added = "xxxx";
-		assertFalse(CollectionTools.contains(this.iterable, added));
-		boolean exCaught = false;
-		for (ListIterator<String> iterator = (ListIterator<String>) this.iterable.iterator(); iterator.hasNext(); ) {
-			if (iterator.next().equals("three")) {
-				try {
-					iterator.set(added);
-					fail();
-				} catch (RuntimeException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	@Override
-	Iterable<String> buildIterable(List<String> c) {
-		return new LiveCloneListIterable<String>(c);
-	}
-
-	@Override
-	Iterable<String> buildRemovingIterable(final List<String> c) {
-		return new LiveCloneListIterable<String>(c) {
-				@Override
-				protected void add(int index, String element) {
-					c.add(index, element);
-				}
-				@Override
-				protected void remove(int index) {
-					c.remove(index);
-				}
-				@Override
-				protected void set(int index, String element) {
-					c.set(index, element);
-				}
-			};
-	}
-
-	@Override
-	Iterable<String> buildIterableWithRemover(List<String> c) {
-		return new LiveCloneListIterable<String>(c, this.buildMutator(c));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/PeekableIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/PeekableIterableTests.java
deleted file mode 100644
index 118184f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/PeekableIterableTests.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.ArrayIterable;
-import org.eclipse.jpt.utility.internal.iterables.PeekableIterable;
-import org.eclipse.jpt.utility.internal.iterators.PeekableIterator;
-
-@SuppressWarnings("nls")
-public class PeekableIterableTests extends TestCase {
-
-	public PeekableIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		PeekableIterable<String> iterable = this.buildIterable();
-		PeekableIterator<String> iterator = iterable.iterator();
-		assertEquals("one", iterator.peek());
-	}
-
-	public void testToString() {
-		assertNotNull(this.buildIterable().toString());
-	}
-
-	private PeekableIterable<String> buildIterable() {
-		return new PeekableIterable<String>(this.buildNestedIterable());
-	}
-
-	private Iterable<String> buildNestedIterable() {
-		return new ArrayIterable<String>(this.buildArray());
-	}
-
-	private String[] buildArray() {
-		return new String[] {"one", "two", "three"};
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/QueueIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/QueueIterableTests.java
deleted file mode 100644
index 42fbb19..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/QueueIterableTests.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Queue;
-import org.eclipse.jpt.utility.internal.SimpleQueue;
-import org.eclipse.jpt.utility.internal.iterables.QueueIterable;
-
-@SuppressWarnings("nls")
-public class QueueIterableTests extends TestCase {
-
-	public QueueIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		Iterable<String> iterable = this.buildIterable();
-		for (String s : iterable) {
-			assertNotNull(s);
-		}
-	}
-
-	public void testToString() {
-		assertNotNull(this.buildIterable().toString());
-	}
-
-	private Iterable<String> buildIterable() {
-		return new QueueIterable<String>(this.buildQueue());
-	}
-
-	private Queue<String> buildQueue() {
-		Queue<String> q = new SimpleQueue<String>();
-		q.enqueue("foo");
-		q.enqueue("bar");
-		q.enqueue("baz");
-		return q;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ReadOnlyCompositeListIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ReadOnlyCompositeListIterableTests.java
deleted file mode 100644
index 5e18ab9..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ReadOnlyCompositeListIterableTests.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.ReadOnlyCompositeListIterable;
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-import org.eclipse.jpt.utility.internal.iterables.ListListIterable;
-
-@SuppressWarnings("nls")
-public class ReadOnlyCompositeListIterableTests extends TestCase {
-
-	public ReadOnlyCompositeListIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		List<String> c1 = new ArrayList<String>();
-		c1.add("0");
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-		ListIterable<String> li1 = new ListListIterable<String>(c1);
-
-		List<String> c2 = new ArrayList<String>();
-		c2.add("4");
-		c2.add("5");
-		c2.add("6");
-		c2.add("7");
-		ListIterable<String> li2 = new ListListIterable<String>(c2);
-
-		@SuppressWarnings("unchecked")
-		Iterable<String> composite = new ReadOnlyCompositeListIterable<String>(li1, li2);
-		int i = 0;
-		for (String s : composite) {
-			assertEquals(String.valueOf(i++), s);
-		}
-	}
-
-	public void testExtraElement1() {
-		List<String> c1 = new ArrayList<String>();
-		c1.add("0");
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-		ListIterable<String> li1 = new ListListIterable<String>(c1);
-
-		Iterable<String> composite = new ReadOnlyCompositeListIterable<String>(li1, "4");
-		int i = 0;
-		for (String s : composite) {
-			assertEquals(String.valueOf(i++), s);
-		}
-	}
-
-	public void testExtraElement2() {
-		List<String> c1 = new ArrayList<String>();
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-		ListIterable<String> li1 = new ListListIterable<String>(c1);
-
-		Iterable<String> composite = new ReadOnlyCompositeListIterable<String>("0", li1);
-		int i = 0;
-		for (String s : composite) {
-			assertEquals(String.valueOf(i++), s);
-		}
-	}
-
-	public void testCollectionOfIterables() {
-		List<String> c1 = new ArrayList<String>();
-		c1.add("0");
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-		ListIterable<String> li1 = new ListListIterable<String>(c1);
-
-		List<String> c2 = new ArrayList<String>();
-		c2.add("4");
-		c2.add("5");
-		c2.add("6");
-		c2.add("7");
-		ListIterable<String> li2 = new ListListIterable<String>(c2);
-
-		List<ListIterable<String>> collection = new ArrayList<ListIterable<String>>();
-		collection.add(li1);
-		collection.add(li2);
-		ListIterable<ListIterable<String>> li = new ListListIterable<ListIterable<String>>(collection);
-		
-		Iterable<String> composite = new ReadOnlyCompositeListIterable<String>(li);
-		int i = 0;
-		for (String s : composite) {
-			assertEquals(String.valueOf(i++), s);
-		}
-	}
-
-	public void testToString() {
-		List<String> c1 = new ArrayList<String>();
-		c1.add("0");
-		c1.add("1");
-		c1.add("2");
-		c1.add("3");
-		ListIterable<String> li1 = new ListListIterable<String>(c1);
-
-		List<String> c2 = new ArrayList<String>();
-		c2.add("4");
-		c2.add("5");
-		c2.add("6");
-		c2.add("7");
-		ListIterable<String> li2 = new ListListIterable<String>(c2);
-
-		@SuppressWarnings("unchecked")
-		Iterable<String> composite = new ReadOnlyCompositeListIterable<String>(li1, li2);
-		assertNotNull(composite.toString());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ReadOnlyIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ReadOnlyIterableTests.java
deleted file mode 100644
index 8bf2b79..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ReadOnlyIterableTests.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.Iterator;
-import java.util.Vector;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.ReadOnlyIterable;
-
-@SuppressWarnings("nls")
-public class ReadOnlyIterableTests extends TestCase {
-
-	public ReadOnlyIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		Iterator<String> nestedIterator = this.buildVector().iterator();
-		for (String s : this.buildReadOnlyIterable()) {
-			assertEquals(nestedIterator.next(), s);
-		}
-	}
-
-	public void testRemove() {
-		boolean exCaught = false;
-		for (Iterator<String> stream = this.buildReadOnlyIterable().iterator(); stream.hasNext();) {
-			if (stream.next().equals("three")) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testToString() {
-		assertNotNull(this.buildReadOnlyIterable().toString());
-	}
-
-	private Iterable<String> buildReadOnlyIterable() {
-		return new ReadOnlyIterable<String>(this.buildVector());
-	}
-
-	private Vector<String> buildVector() {
-		Vector<String> v = new Vector<String>();
-		v.addElement("one");
-		v.addElement("two");
-		v.addElement("three");
-		v.addElement("four");
-		v.addElement("five");
-		v.addElement("six");
-		v.addElement("seven");
-		v.addElement("eight");
-		return v;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ReadOnlyListIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ReadOnlyListIterableTests.java
deleted file mode 100644
index 20bb6e7..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/ReadOnlyListIterableTests.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.Iterator;
-import java.util.Vector;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-import org.eclipse.jpt.utility.internal.iterables.ListListIterable;
-import org.eclipse.jpt.utility.internal.iterables.ReadOnlyListIterable;
-
-@SuppressWarnings("nls")
-public class ReadOnlyListIterableTests extends TestCase {
-
-	public ReadOnlyListIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		Iterator<String> nestedIterator = this.buildVector().iterator();
-		for (String s : this.buildReadOnlyListIterable()) {
-			assertEquals(nestedIterator.next(), s);
-		}
-	}
-
-	public void testRemove() {
-		boolean exCaught = false;
-		for (Iterator<String> stream = this.buildReadOnlyListIterable().iterator(); stream.hasNext();) {
-			if (stream.next().equals("three")) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testToString() {
-		assertNotNull(this.buildReadOnlyListIterable().toString());
-	}
-
-	private Iterable<String> buildReadOnlyListIterable() {
-		return new ReadOnlyListIterable<String>(this.buildNestedListIterable());
-	}
-
-	private ListIterable<String> buildNestedListIterable() {
-		return new ListListIterable<String>(this.buildVector());
-	}
-
-	private Vector<String> buildVector() {
-		Vector<String> v = new Vector<String>();
-		v.addElement("one");
-		v.addElement("two");
-		v.addElement("three");
-		v.addElement("four");
-		v.addElement("five");
-		v.addElement("six");
-		v.addElement("seven");
-		v.addElement("eight");
-		return v;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SingleElementIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SingleElementIterableTests.java
deleted file mode 100644
index 138737e..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SingleElementIterableTests.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.SingleElementIterable;
-
-@SuppressWarnings("nls")
-public class SingleElementIterableTests extends TestCase {
-
-	public SingleElementIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		for (String s : this.buildSingleElementIterable()) {
-			assertEquals(this.singleElement(), s);
-		}
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Iterator<String> stream = this.buildSingleElementIterable().iterator();
-		String string = stream.next();
-		try {
-			string = stream.next();
-			fail("bogus element: " + string);
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testRemove() {
-		boolean exCaught = false;
-		for (Iterator<String> stream = this.buildSingleElementIterable().iterator(); stream.hasNext(); ) {
-			if (stream.next().equals(this.singleElement())) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	protected Iterable<String> buildSingleElementIterable() {
-		return new SingleElementIterable<String>(this.singleElement());
-	}
-
-	protected String singleElement() {
-		return "single element";
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SingleElementListIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SingleElementListIterableTests.java
deleted file mode 100644
index b3e19f9..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SingleElementListIterableTests.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.SingleElementListIterable;
-
-@SuppressWarnings("nls")
-public class SingleElementListIterableTests extends TestCase {
-
-	public SingleElementListIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		for (String s : this.buildSingleElementListIterable()) {
-			assertEquals(this.singleElement(), s);
-		}
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Iterator<String> stream = this.buildSingleElementListIterable().iterator();
-		String string = stream.next();
-		try {
-			string = stream.next();
-			fail("bogus element: " + string);
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testRemove() {
-		boolean exCaught = false;
-		for (Iterator<String> stream = this.buildSingleElementListIterable().iterator(); stream.hasNext(); ) {
-			if (stream.next().equals(this.singleElement())) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testToString() {
-		assertNotNull(this.buildSingleElementListIterable().toString());
-	}
-
-	protected Iterable<String> buildSingleElementListIterable() {
-		return new SingleElementListIterable<String>(this.singleElement());
-	}
-
-	protected String singleElement() {
-		return "single element";
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SnapshotCloneIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SnapshotCloneIterableTests.java
deleted file mode 100644
index fd187a8..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SnapshotCloneIterableTests.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.List;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterables.SnapshotCloneIterable;
-
-@SuppressWarnings("nls")
-public class SnapshotCloneIterableTests extends CloneIterableTests {
-
-	public SnapshotCloneIterableTests(String name) {
-		super(name);
-	}
-
-	@Override
-	public void testIterator() {
-		super.testIterator();
-		// "snapshot" iterable should still return 4 strings (since the original collection was cloned)
-		int i = 0;
-		for (String s : this.iterable) {
-			assertEquals(String.valueOf(i++), s);
-		}
-		assertEquals(4, i);
-	}
-
-	@Override
-	public void testRemove() {
-		super.testRemove();
-		// "snapshot" clone iterable will still contain the element removed from the
-		// original collection
-		assertTrue(CollectionTools.contains(this.iterable, "three"));
-	}
-
-	@Override
-	public void testRemover() {
-		super.testRemover();
-		// "snapshot" clone iterable will still contain the element removed from the
-		// original collection
-		assertTrue(CollectionTools.contains(this.iterable, "three"));
-	}
-
-	@Override
-	Iterable<String> buildIterable(List<String> c) {
-		return new SnapshotCloneIterable<String>(c);
-	}
-
-	@Override
-	Iterable<String> buildRemovingIterable(final List<String> c) {
-		return new SnapshotCloneIterable<String>(c) {
-				@Override
-				protected void remove(String current) {
-					c.remove(current);
-				}
-			};
-	}
-
-	@Override
-	Iterable<String> buildIterableWithRemover(List<String> c) {
-		return new SnapshotCloneIterable<String>(c, this.buildRemover(c));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SnapshotCloneListIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SnapshotCloneListIterableTests.java
deleted file mode 100644
index 426670f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SnapshotCloneListIterableTests.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterables.SnapshotCloneListIterable;
-
-@SuppressWarnings("nls")
-public class SnapshotCloneListIterableTests extends SnapshotCloneIterableTests {
-
-	public SnapshotCloneListIterableTests(String name) {
-		super(name);
-	}
-
-	public void testAdd() {
-		final List<String> collection = this.buildCollection();
-		this.iterable = this.buildRemovingIterable(collection);
-
-		String added = "xxxx";
-		assertFalse(CollectionTools.contains(this.iterable, added));
-		for (ListIterator<String> iterator = (ListIterator<String>) this.iterable.iterator(); iterator.hasNext(); ) {
-			if (iterator.next().equals("two")) {
-				iterator.add(added);
-			}
-		}
-		assertTrue(collection.contains(added));
-		// "snapshot" clone iterable not will contain the element added to the
-		// original collection
-		assertFalse(CollectionTools.contains(this.iterable, added));
-	}
-
-	public void testMissingMutatorAdd() {
-		final List<String> collection = this.buildCollection();
-		this.iterable = this.buildIterable(collection);
-		assertNotNull(this.iterable.toString());
-
-		String added = "xxxx";
-		assertFalse(CollectionTools.contains(this.iterable, added));
-		boolean exCaught = false;
-		for (ListIterator<String> iterator = (ListIterator<String>) this.iterable.iterator(); iterator.hasNext(); ) {
-			if (iterator.next().equals("three")) {
-				try {
-					iterator.add(added);
-					fail();
-				} catch (RuntimeException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testSet() {
-		final List<String> collection = this.buildCollection();
-		this.iterable = this.buildRemovingIterable(collection);
-
-		String added = "xxxx";
-		assertFalse(CollectionTools.contains(this.iterable, added));
-		assertTrue(CollectionTools.contains(this.iterable, "two"));
-		for (ListIterator<String> iterator = (ListIterator<String>) this.iterable.iterator(); iterator.hasNext(); ) {
-			if (iterator.next().equals("two")) {
-				iterator.set(added);
-			}
-		}
-		assertTrue(collection.contains(added));
-		assertFalse(collection.contains("two"));
-		// "snapshot" clone iterable will not be changed
-		assertFalse(CollectionTools.contains(this.iterable, added));
-		assertTrue(CollectionTools.contains(this.iterable, "two"));
-	}
-
-	public void testMissingMutatorSet() {
-		final List<String> collection = this.buildCollection();
-		this.iterable = this.buildIterable(collection);
-		assertNotNull(this.iterable.toString());
-
-		String added = "xxxx";
-		assertFalse(CollectionTools.contains(this.iterable, added));
-		boolean exCaught = false;
-		for (ListIterator<String> iterator = (ListIterator<String>) this.iterable.iterator(); iterator.hasNext(); ) {
-			if (iterator.next().equals("three")) {
-				try {
-					iterator.set(added);
-					fail();
-				} catch (RuntimeException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	@Override
-	Iterable<String> buildIterable(List<String> c) {
-		return new SnapshotCloneListIterable<String>(c);
-	}
-
-	@Override
-	Iterable<String> buildRemovingIterable(final List<String> c) {
-		return new SnapshotCloneListIterable<String>(c) {
-				@Override
-				protected void add(int index, String element) {
-					c.add(index, element);
-				}
-				@Override
-				protected void remove(int index) {
-					c.remove(index);
-				}
-				@Override
-				protected void set(int index, String element) {
-					c.set(index, element);
-				}
-			};
-	}
-
-	@Override
-	Iterable<String> buildIterableWithRemover(List<String> c) {
-		return new SnapshotCloneListIterable<String>(c, this.buildMutator(c));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/StackIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/StackIterableTests.java
deleted file mode 100644
index 7508950..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/StackIterableTests.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.SimpleStack;
-import org.eclipse.jpt.utility.internal.Stack;
-import org.eclipse.jpt.utility.internal.iterables.StackIterable;
-
-@SuppressWarnings("nls")
-public class StackIterableTests extends TestCase {
-
-	public StackIterableTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		Iterator<String> iterator = this.buildIterable().iterator();
-		assertEquals("three", iterator.next());
-		assertEquals("two", iterator.next());
-		assertEquals("one", iterator.next());
-	}
-
-	public void testToString() {
-		assertNotNull(this.buildIterable().toString());
-	}
-
-	private Iterable<String> buildIterable() {
-		return new StackIterable<String>(this.buildStack());
-	}
-
-	private Stack<String> buildStack() {
-		Stack<String> stack = new SimpleStack<String>();
-		stack.push("one");
-		stack.push("two");
-		stack.push("three");
-		return stack;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SuperIterableWrapperTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SuperIterableWrapperTests.java
deleted file mode 100644
index f56b76b..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/SuperIterableWrapperTests.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.ArrayList;
-import java.util.Collections;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.SuperIterableWrapper;
-
-@SuppressWarnings("nls")
-public class SuperIterableWrapperTests extends TestCase {
-
-	public SuperIterableWrapperTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("foo");
-		list.add("bar");
-		list.add("baz");
-		String concat = "";
-		for (String s : list) {
-			concat += s;
-		}
-		assertEquals("foobarbaz", concat);
-
-		Iterable<Object> iterable = new SuperIterableWrapper<Object>(list);
-		concat = "";
-		for (Object s : iterable) {
-			concat += s;
-		}
-		assertEquals("foobarbaz", concat);
-	}
-
-	public void testToString() {
-		Iterable<Object> iterable = new SuperIterableWrapper<Object>(Collections.emptyList());
-		assertNotNull(iterable.toString());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/TransformationIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/TransformationIterableTests.java
deleted file mode 100644
index 011942d..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/TransformationIterableTests.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
-
-@SuppressWarnings("nls")
-public class TransformationIterableTests extends TestCase {
-
-	public TransformationIterableTests(String name) {
-		super(name);
-	}
-
-	public void testTransform1() {
-		int i = 1;
-		for (Integer integer : this.buildIterable1()) {
-			assertEquals(i++, integer.intValue());
-		}
-	}
-
-	private Iterable<Integer> buildIterable1() {
-		return this.buildTransformationIterable1(this.buildNestedIterable());
-	}
-
-	private Iterable<Integer> buildTransformationIterable1(Iterable<String> nestedIterable) {
-		// transform each string into an integer with a value of the string's length
-		return new TransformationIterable<String, Integer>(nestedIterable) {
-			@Override
-			protected Integer transform(String next) {
-				return new Integer(next.length());
-			}
-		};
-	}
-
-	public void testTransform2() {
-		int i = 1;
-		for (Integer integer : this.buildIterable2()) {
-			assertEquals(i++, integer.intValue());
-		}
-	}
-
-	private Iterable<Integer> buildIterable2() {
-		return this.buildTransformationIterable2(this.buildNestedIterable());
-	}
-
-	private Iterable<Integer> buildTransformationIterable2(Iterable<String> nestedIterable) {
-		// transform each string into an integer with a value of the string's length
-		return new TransformationIterable<String, Integer>(nestedIterable, this.buildTransformer());
-	}
-
-	private Transformer<String, Integer> buildTransformer() {
-		// transform each string into an integer with a value of the string's length
-		return new Transformer<String, Integer>() {
-			public Integer transform(String next) {
-				return new Integer(next.length());
-			}
-		};
-	}
-
-	private Iterable<String> buildNestedIterable() {
-		Collection<String> c = new ArrayList<String>();
-		c.add("1");
-		c.add("22");
-		c.add("333");
-		c.add("4444");
-		c.add("55555");
-		c.add("666666");
-		c.add("7777777");
-		c.add("88888888");
-		return c;
-	}
-
-	public void testToString() {
-		assertNotNull(this.buildIterable1().toString());
-	}
-
-	public void testMissingTransformer() {
-		Iterable<Integer> iterable = new TransformationIterable<String, Integer>(this.buildNestedIterable());
-		boolean exCaught = false;
-		try {
-			int i = 1;
-			for (Integer integer : iterable) {
-				assertEquals(i++, integer.intValue());
-			}
-		} catch (RuntimeException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/TransformationListIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/TransformationListIterableTests.java
deleted file mode 100644
index 684bcc8..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/TransformationListIterableTests.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.iterables.TransformationListIterable;
-
-@SuppressWarnings("nls")
-public class TransformationListIterableTests extends TestCase {
-
-	public TransformationListIterableTests(String name) {
-		super(name);
-	}
-
-	public void testTransform1() {
-		int i = 1;
-		for (Integer integer : this.buildIterable1()) {
-			assertEquals(i++, integer.intValue());
-		}
-	}
-
-	private Iterable<Integer> buildIterable1() {
-		return this.buildTransformationListIterable1(this.buildNestedList());
-	}
-
-	private Iterable<Integer> buildTransformationListIterable1(List<String> nestedList) {
-		// transform each string into an integer with a value of the string's length
-		return new TransformationListIterable<String, Integer>(nestedList) {
-			@Override
-			protected Integer transform(String next) {
-				return new Integer(next.length());
-			}
-		};
-	}
-
-	public void testTransform2() {
-		int i = 1;
-		for (Integer integer : this.buildIterable2()) {
-			assertEquals(i++, integer.intValue());
-		}
-	}
-
-	private Iterable<Integer> buildIterable2() {
-		return this.buildTransformationListIterable2(this.buildNestedList());
-	}
-
-	private Iterable<Integer> buildTransformationListIterable2(List<String> nestedList) {
-		// transform each string into an integer with a value of the string's length
-		return new TransformationListIterable<String, Integer>(nestedList, this.buildTransformer());
-	}
-
-	private Transformer<String, Integer> buildTransformer() {
-		// transform each string into an integer with a value of the string's length
-		return new Transformer<String, Integer>() {
-			public Integer transform(String next) {
-				return new Integer(next.length());
-			}
-		};
-	}
-
-	private List<String> buildNestedList() {
-		List<String> c = new ArrayList<String>();
-		c.add("1");
-		c.add("22");
-		c.add("333");
-		c.add("4444");
-		c.add("55555");
-		c.add("666666");
-		c.add("7777777");
-		c.add("88888888");
-		return c;
-	}
-
-	public void testToString() {
-		assertNotNull(this.buildIterable1().toString());
-	}
-
-	public void testMissingTransformer() {
-		Iterable<Integer> iterable = new TransformationListIterable<String, Integer>(this.buildNestedList());
-		boolean exCaught = false;
-		try {
-			int i = 1;
-			for (Integer integer : iterable) {
-				assertEquals(i++, integer.intValue());
-			}
-		} catch (RuntimeException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/TreeIterableTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/TreeIterableTests.java
deleted file mode 100644
index e01c440..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterables/TreeIterableTests.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterables;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterables.TreeIterable;
-import org.eclipse.jpt.utility.internal.iterators.TreeIterator;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class TreeIterableTests extends TestCase {
-	/** this will be populated with all the nodes created for the test */
-	Collection<TreeNode> nodes = new ArrayList<TreeNode>();
-
-	public TreeIterableTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIterator1() {
-		for (TreeNode tn : this.buildTreeIterable1()) {
-			assertTrue(this.nodes.contains(tn));
-		}
-	}
-
-	public void testIterator2() {
-		for (TreeNode tn : this.buildTreeIterable2()) {
-			assertTrue(this.nodes.contains(tn));
-		}
-	}
-
-	public void testMidwife1() {
-		for (TreeNode tn : new TreeIterable<TreeNode>(this.buildTree(), this.buildMidwife())) {
-			assertTrue(this.nodes.contains(tn));
-		}
-	}
-
-	public void testMidwife2() {
-		for (TreeNode tn : new TreeIterable<TreeNode>(new TreeNode[] { this.buildTree() }, this.buildMidwife())) {
-			assertTrue(this.nodes.contains(tn));
-		}
-	}
-
-	public void testToString() {
-		assertNotNull(this.buildTreeIterable1().toString());
-	}
-
-	public void testMissingMidwife() {
-		boolean exCaught = false;
-		try {
-			for (TreeNode tn : new TreeIterable<TreeNode>(this.buildTree())) {
-				assertTrue(this.nodes.contains(tn));
-			}
-		} catch (RuntimeException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	private Iterable<TreeNode> buildTreeIterable1() {
-		return new TreeIterable<TreeNode>(this.buildTree()) {
-			@Override
-			public Iterator<TreeNode> children(TreeNode next) {
-				return next.children();
-			}
-		};
-	}
-
-	private Iterable<TreeNode> buildTreeIterable2() {
-		return new TreeIterable<TreeNode>(new TreeNode[] { this.buildTree() }) {
-			@Override
-			public Iterator<TreeNode> children(TreeNode next) {
-				return next.children();
-			}
-		};
-	}
-
-	private TreeIterator.Midwife<TreeNode> buildMidwife() {
-		return new TreeIterator.Midwife<TreeNode>() {
-			public Iterator<TreeNode> children(TreeNode next) {
-				return next.children();
-			}
-		};
-	}
-
-	private TreeNode buildTree() {
-		TreeNode root = new TreeNode("root");
-		TreeNode child1 = new TreeNode(root, "child 1");
-		new TreeNode(child1, "grandchild 1A");
-		TreeNode child2 = new TreeNode(root, "child 2");
-		new TreeNode(child2, "grandchild 2A");
-		TreeNode grandchild2B = new TreeNode(child2, "grandchild 2B");
-		new TreeNode(grandchild2B, "great-grandchild 2B1");
-		new TreeNode(grandchild2B, "great-grandchild 2B2");
-		TreeNode grandchild2C = new TreeNode(child2, "grandchild 2C");
-		new TreeNode(grandchild2C, "great-grandchild 2C1");
-		new TreeNode(root, "child 3");
-		return root;
-	}
-
-	public class TreeNode {
-		private String name;
-		private Collection<TreeNode> children = new ArrayList<TreeNode>();
-
-		public TreeNode(String name) {
-			super();
-			TreeIterableTests.this.nodes.add(this); // log node
-			this.name = name;
-		}
-
-		public TreeNode(TreeNode parent, String name) {
-			this(name);
-			parent.addChild(this);
-		}
-
-		public String getName() {
-			return this.name;
-		}
-
-		private void addChild(TreeNode child) {
-			this.children.add(child);
-		}
-
-		public Iterator<TreeNode> children() {
-			return this.children.iterator();
-		}
-
-		public int childrenSize() {
-			return this.children.size();
-		}
-
-		@Override
-		public String toString() {
-			return "TreeNode(" + this.name + ")";
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ArrayIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ArrayIteratorTests.java
deleted file mode 100644
index a99d88d..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ArrayIteratorTests.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-
-@SuppressWarnings("nls")
-public class ArrayIteratorTests extends TestCase {
-
-	public ArrayIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testHasNext() {
-		int i = 0;
-		for (Iterator<String> stream = this.buildIterator(); stream.hasNext(); ) {
-			stream.next();
-			i++;
-		}
-		assertEquals(this.buildArray().length, i);
-	}
-
-	public void testNext() {
-		int i = 1;
-		for (Iterator<String> stream = this.buildIterator(); stream.hasNext(); ) {
-			assertEquals("bogus element", i++, Integer.parseInt(stream.next()));
-		}
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Iterator<String> stream = this.buildIterator();
-		String string = null;
-		while (stream.hasNext()) {
-			string = stream.next();
-		}
-		try {
-			string = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	public void testUnsupportedOperationException() {
-		boolean exCaught = false;
-		for (Iterator<String> stream = this.buildIterator(); stream.hasNext(); ) {
-			if (stream.next().equals("3")) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testIllegalArgumentException() {
-		this.triggerIllegalArgumentException(-1, 1);
-		this.triggerIllegalArgumentException(8, 1);
-		this.triggerIllegalArgumentException(0, -1);
-		this.triggerIllegalArgumentException(0, 9);
-	}
-
-	public void testGenerics() {
-		Integer[] integers = new Integer[3];
-		integers[0] = new Integer(0);
-		integers[1] = new Integer(1);
-		integers[2] = new Integer(2);
-		int i = 0;
-		for (Iterator<Number> stream = this.buildGenericIterator(integers); stream.hasNext();) {
-			assertEquals(i++, stream.next().intValue());
-		}
-		assertEquals(integers.length, i);
-	}
-
-	Iterator<Number> buildGenericIterator(Integer[] integers) {
-		return new ArrayIterator<Number>(integers);
-	}
-
-	public void testVarargs() {
-		int i = 0;
-		for (Iterator<Number> stream = this.buildVarArgIterator(); stream.hasNext();) {
-			assertEquals(i++, stream.next().intValue());
-		}
-		assertEquals(3, i);
-	}
-
-	Iterator<Number> buildVarArgIterator() {
-		return new ArrayIterator<Number>(new Integer(0), new Integer(1), new Integer(2));
-	}
-
-	void triggerIllegalArgumentException(int start, int length) {
-		boolean exCaught = false;
-		Iterator<String> stream = null;
-		try {
-			stream = this.buildIterator(start, length);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalArgumentException not thrown: " + stream, exCaught);
-	}
-
-	Iterator<String> buildIterator() {
-		return this.buildIterator(this.buildArray());
-	}
-
-	Iterator<String> buildIterator(String[] array) {
-		return new ArrayIterator<String>(array);
-	}
-
-	Iterator<String> buildIterator(int start, int length) {
-		return this.buildIterator(this.buildArray(), start, length);
-	}
-
-	Iterator<String> buildIterator(String[] array, int start, int length) {
-		return new ArrayIterator<String>(array, start, length);
-	}
-
-	String[] buildArray() {
-		return new String[] { "1", "2", "3", "4", "5", "6", "7", "8" };
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ArrayListIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ArrayListIteratorTests.java
deleted file mode 100644
index 9685b6f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ArrayListIteratorTests.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.internal.iterators.ArrayListIterator;
-
-@SuppressWarnings("nls")
-public class ArrayListIteratorTests extends ArrayIteratorTests {
-
-	public ArrayListIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testHasPrevious() {
-		ListIterator<String> stream = this.buildListIterator();
-		while (stream.hasNext()) {
-			stream.next();
-		}
-		int i = 0;
-		while (stream.hasPrevious()) {
-			stream.previous();
-			i++;
-		}
-		assertEquals(this.buildArray().length, i);
-	}
-
-	public void testPrevious() {
-		ListIterator<String> stream = this.buildListIterator();
-		while (stream.hasNext()) {
-			stream.next();
-		}
-		int i = this.buildArray().length;
-		while (stream.hasPrevious()) {
-			assertEquals("bogus element", i--, Integer.parseInt(stream.previous()));
-		}
-	}
-
-	public void testNextIndex() {
-		int i = 0;
-		ListIterator<String> stream = this.buildListIterator();
-		while (stream.hasNext()) {
-			assertEquals(i, stream.nextIndex());
-			stream.next();
-			i++;
-		}
-		assertEquals(i, stream.nextIndex());
-	}
-
-	public void testPreviousIndex() {
-		int i = 0;
-		ListIterator<String> stream = this.buildListIterator();
-		while (stream.hasNext()) {
-			assertEquals(i - 1, stream.previousIndex());
-			stream.next();
-			i++;
-		}
-		assertEquals(i - 1, stream.previousIndex());
-	}
-
-	@Override
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		ListIterator<String> stream = this.buildListIterator();
-		String string = null;
-		try {
-			string = stream.previous();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	public void testUnsupportedOperationExceptionAdd() {
-		boolean exCaught = false;
-		for (ListIterator<String> stream = this.buildListIterator(); stream.hasNext();) {
-			if (stream.next().equals("3")) {
-				try {
-					stream.add("3.5");
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testUnsupportedOperationExceptionSet() {
-		boolean exCaught = false;
-		for (ListIterator<String> stream = this.buildListIterator(); stream.hasNext();) {
-			if (stream.next().equals("3")) {
-				try {
-					stream.set("three");
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	@Override
-	Iterator<Number> buildGenericIterator(Integer[] integers) {
-		return new ArrayListIterator<Number>(integers);
-	}
-
-	@Override
-	Iterator<Number> buildVarArgIterator() {
-		return new ArrayListIterator<Number>(new Integer(0), new Integer(1), new Integer(2));
-	}
-
-	private ListIterator<String> buildListIterator() {
-		return this.buildListIterator(this.buildArray());
-	}
-
-	private ListIterator<String> buildListIterator(String[] array) {
-		return new ArrayListIterator<String>(array);
-	}
-
-	@Override
-	Iterator<String> buildIterator(String[] array) {
-		return new ArrayListIterator<String>(array);
-	}
-
-	@Override
-	Iterator<String> buildIterator(String[] array, int start, int length) {
-		return new ArrayListIterator<String>(array, start, length);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ChainIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ChainIteratorTests.java
deleted file mode 100644
index 97d6cee..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ChainIteratorTests.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.AbstractCollection;
-import java.util.AbstractList;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Vector;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.ChainIterator;
-
-@SuppressWarnings("nls")
-public class ChainIteratorTests extends TestCase {
-	private final static Class<?>[] VECTOR_HIERARCHY = { Vector.class, AbstractList.class, AbstractCollection.class, Object.class };
-
-	public ChainIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testHasNext() {
-		int i = 0;
-		for (Iterator<Class<?>> stream = this.buildIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(VECTOR_HIERARCHY.length, i);
-	}
-
-	public void testInnerHasNext() {
-		int i = 0;
-		for (Iterator<Class<?>> stream = this.buildInnerIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(VECTOR_HIERARCHY.length, i);
-	}
-
-	public void testNext() {
-		int i = 0;
-		for (Iterator<Class<?>> stream = this.buildIterator(); stream.hasNext(); i++) {
-			assertEquals("bogus link", VECTOR_HIERARCHY[i], stream.next());
-		}
-	}
-
-	public void testInnerNext() {
-		int i = 0;
-		for (Iterator<Class<?>> stream = this.buildInnerIterator(); stream.hasNext(); i++) {
-			assertEquals("bogus link", VECTOR_HIERARCHY[i], stream.next());
-		}
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Iterator<Class<?>> stream = this.buildIterator();
-		Class<?> javaClass = null;
-		while (stream.hasNext()) {
-			javaClass = stream.next();
-		}
-		try {
-			javaClass = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + javaClass, exCaught);
-	}
-
-	public void testUnsupportedOperationException() {
-		boolean exCaught = false;
-		for (Iterator<Class<?>> stream = this.buildIterator(); stream.hasNext();) {
-			if (stream.next() == AbstractCollection.class) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	private Iterator<Class<?>> buildIterator() {
-		return this.buildChainIterator(Vector.class, this.buildLinker());
-	}
-
-	private Iterator<Class<?>> buildInnerIterator() {
-		return this.buildInnerChainIterator(Vector.class);
-	}
-
-	private Iterator<Class<?>> buildChainIterator(Class<?> startLink, ChainIterator.Linker<Class<?>> linker) {
-		return new ChainIterator<Class<?>>(startLink, linker);
-	}
-
-	private ChainIterator.Linker<Class<?>> buildLinker() {
-		// chain up the class's hierarchy
-		return new ChainIterator.Linker<Class<?>>() {
-			public Class<?> nextLink(Class<?> currentLink) {
-				return currentLink.getSuperclass();
-			}
-		};
-	}
-
-	private Iterator<Class<?>> buildInnerChainIterator(Class<?> startLink) {
-		// chain up the class's hierarchy
-		return new ChainIterator<Class<?>>(startLink) {
-			@Override
-			protected Class<?> nextLink(Class<?> currentLink) {
-				return currentLink.getSuperclass();
-			}
-		};
-	}
-
-	public void testInvalidChainIterator() {
-		// missing method override
-		Iterator<Class<?>> iterator = new ChainIterator<Class<?>>(Vector.class);
-		boolean exCaught = false;
-		try {
-			Class<?> c = iterator.next();
-			fail("invalid class: " + c.getName());
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown", exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CloneIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CloneIteratorTests.java
deleted file mode 100644
index a548cc7..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CloneIteratorTests.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
-import org.eclipse.jpt.utility.tests.internal.MultiThreadedTestCase;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class CloneIteratorTests
-	extends MultiThreadedTestCase
-{
-	Collection<String> originalCollection;
-
-	private Collection<String> concurrentCollection;
-
-	public CloneIteratorTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.originalCollection = this.buildCollection();
-	}
-
-	public void testHasNext() {
-		int originalSize = this.originalCollection.size();
-		int i = 0;
-		for (Iterator<String> stream = this.buildCloneIterator(); stream.hasNext();) {
-			stream.next();
-			// should allow concurrent modification
-			this.originalCollection.add("foo");
-			i++;
-		}
-		assertTrue(originalSize != this.originalCollection.size());
-		assertEquals(originalSize, i);
-	}
-
-	public void testNext() {
-		Iterator<String> nestedIterator = this.originalCollection.iterator();
-		for (Iterator<String> stream = this.buildCloneIterator(); stream.hasNext();) {
-			assertEquals("bogus element", nestedIterator.next(), stream.next());
-		}
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Iterator<String> stream = this.buildCloneIterator();
-		String string = null;
-		while (stream.hasNext()) {
-			string = stream.next();
-		}
-		try {
-			string = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	public void testRemoveDefault() {
-		boolean exCaught = false;
-		for (Iterator<String> stream = this.buildCloneIterator(); stream.hasNext();) {
-			if (stream.next().equals("three")) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testRemoveEliminator() {
-		CloneIterator.Remover<String> eliminator = new CloneIterator.Remover<String>() {
-			public void remove(String element) {
-				CloneIteratorTests.this.originalCollection.remove(element);
-			}
-		};
-		this.verifyRemove(new CloneIterator<String>(this.originalCollection, eliminator));
-	}
-
-	public void testRemoveSubclass() {
-		this.verifyRemove(new CloneIterator<String>(this.originalCollection) {
-			@Override
-			protected void remove(String current) {
-				CloneIteratorTests.this.originalCollection.remove(current);
-			}
-		});
-	}
-
-	/**
-	 * Test concurrent access: First build a clone iterator in a separate thread
-	 * that hangs momentarily during its construction; then modify the shared
-	 * collection in this thread. This would cause a
-	 * ConcurrentModificationException in the other thread if the clone iterator
-	 * were not synchronized on the original collection.
-	 */
-	public void testConcurrentAccess() throws Exception {
-		SlowCollection<String> slow = new SlowCollection<String>();
-		this.populateCollection(slow);
-		// using the unsynchronized collection will cause the test to fail
-		//		this.originalCollection = slow;
-		this.originalCollection = Collections.synchronizedCollection(slow);
-
-		this.concurrentCollection = new ArrayList<String>();
-		Thread thread = this.buildThread(this.buildRunnable());
-		thread.start();
-		while ( ! slow.hasStartedClone()) {
-			// wait for the other thread to start the clone...
-			Thread.yield();
-		}
-		// ...then sneak in an extra element
-		this.originalCollection.add("seventeen");
-		thread.join();
-		Collection<String> expected = new ArrayList<String>();
-		this.populateCollection(expected);
-		assertEquals(expected, this.concurrentCollection);
-	}
-
-	private Runnable buildRunnable() {
-		return new TestRunnable() {
-			@Override
-			protected void run_() throws Throwable {
-				CloneIteratorTests.this.loopWithCloneIterator();
-			}
-		};
-	}
-
-	/**
-	 * use a clone iterator to loop over the "slow" collection and copy its
-	 * contents to the concurrent collection
-	 */
-	void loopWithCloneIterator() {
-		for (Iterator<String> stream = this.buildCloneIterator(); stream.hasNext();) {
-			this.concurrentCollection.add(stream.next());
-		}
-	}
-
-	private void verifyRemove(Iterator<String> iterator) {
-		Object removed = "three";
-		assertTrue(this.originalCollection.contains(removed));
-		// try to remove before calling #next()
-		boolean exCaught = false;
-		try {
-			iterator.remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalStateException not thrown", exCaught);
-		while (iterator.hasNext()) {
-			if (iterator.next().equals(removed)) {
-				iterator.remove();
-				// try to remove twice
-				exCaught = false;
-				try {
-					iterator.remove();
-				} catch (IllegalStateException ex) {
-					exCaught = true;
-				}
-				assertTrue("IllegalStateException not thrown", exCaught);
-			}
-		}
-		assertFalse(this.originalCollection.contains(removed));
-	}
-
-	private Iterator<String> buildCloneIterator() {
-		return this.buildCloneIterator(this.originalCollection);
-	}
-
-	private Iterator<String> buildCloneIterator(Collection<String> c) {
-		return new CloneIterator<String>(c);
-	}
-
-	private Collection<String> buildCollection() {
-		Collection<String> c = this.buildEmptyCollection();
-		this.populateCollection(c);
-		return c;
-	}
-
-	protected Collection<String> buildEmptyCollection() {
-		return new ArrayList<String>();
-	}
-
-	private void populateCollection(Collection<String> c) {
-		c.add("one");
-		c.add("two");
-		c.add("three");
-		c.add("four");
-		c.add("five");
-		c.add("six");
-		c.add("seven");
-		c.add("eight");
-	}
-
-	// ********** custom collection **********
-	static class SlowCollection<E> extends ArrayList<E> {
-		private static final long serialVersionUID = 1L;
-		private boolean hasStartedClone = false;
-
-		public SlowCollection() {
-			super();
-		}
-
-		@Override
-		public Object[] toArray() {
-			this.setHasStartedClone(true);
-			// take a little snooze before returning the array
-			TestTools.sleep(100);
-			return super.toArray();
-		}
-
-		synchronized void setHasStartedClone(boolean hasStartedClone) {
-			this.hasStartedClone = hasStartedClone;
-		}
-
-		synchronized boolean hasStartedClone() {
-			return this.hasStartedClone;
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CloneListIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CloneListIteratorTests.java
deleted file mode 100644
index 69c1cd8..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CloneListIteratorTests.java
+++ /dev/null
@@ -1,397 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
-import org.eclipse.jpt.utility.tests.internal.MultiThreadedTestCase;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class CloneListIteratorTests
-	extends MultiThreadedTestCase
-{
-	List<String> originalList;
-
-	private List<String> concurrentList;
-
-	public CloneListIteratorTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.originalList = this.buildList();
-	}
-
-	public void testHasNext() {
-		int originalSize = this.originalList.size();
-		int i = 0;
-		for (ListIterator<String> stream = this.buildCloneListIterator(); stream.hasNext();) {
-			stream.next();
-			// should allow concurrent modification
-			this.originalList.add("foo");
-			i++;
-		}
-		assertTrue(originalSize != this.originalList.size());
-		assertEquals(originalSize, i);
-	}
-
-	public void testNext() {
-		ListIterator<String> nestedListIterator = this.buildNestedListIterator();
-		for (ListIterator<String> stream = this.buildCloneListIterator(); stream.hasNext();) {
-			assertEquals("bogus element", nestedListIterator.next(), stream.next());
-		}
-	}
-
-	public void testIndex() {
-		ListIterator<String> cloneListIterator = this.buildCloneListIterator();
-		ListIterator<String> nestedListIterator = this.buildNestedListIterator();
-		for (int i = 0; i < 7; i++) {
-			nestedListIterator.next();
-			cloneListIterator.next();
-			assertEquals("bogus index", nestedListIterator.nextIndex(), cloneListIterator.nextIndex());
-			assertEquals("bogus index", nestedListIterator.previousIndex(), cloneListIterator.previousIndex());
-		}
-
-		for (int i = 0; i < 3; i++) {
-			nestedListIterator.previous();
-			cloneListIterator.previous();
-			assertEquals("bogus index", nestedListIterator.nextIndex(), cloneListIterator.nextIndex());
-			assertEquals("bogus index", nestedListIterator.previousIndex(), cloneListIterator.previousIndex());
-		}
-
-		while (nestedListIterator.hasNext()) {
-			nestedListIterator.next();
-			cloneListIterator.next();
-			assertEquals("bogus index", nestedListIterator.nextIndex(), cloneListIterator.nextIndex());
-			assertEquals("bogus index", nestedListIterator.previousIndex(), cloneListIterator.previousIndex());
-		}
-	}
-
-	public void testHasPrevious() {
-		int originalSize = this.originalList.size();
-		int i = 0;
-		ListIterator<String> stream = this.buildCloneListIterator();
-		while (stream.hasNext()) {
-			stream.next();
-			this.originalList.add("foo");
-			i++;
-		}
-		assertTrue(originalSize != this.originalList.size());
-		originalSize = this.originalList.size();
-		while (stream.hasPrevious()) {
-			stream.previous();
-			// should allow concurrent modification
-			this.originalList.add("bar");
-			i--;
-		}
-		assertTrue(originalSize != this.originalList.size());
-		assertEquals(0, i);
-	}
-
-	public void testPrevious() {
-		ListIterator<String> nestedListIterator = this.buildNestedListIterator();
-		ListIterator<String> stream = this.buildCloneListIterator();
-		while (stream.hasNext()) {
-			nestedListIterator.next();
-			stream.next();
-		}
-		while (stream.hasPrevious()) {
-			assertEquals("bogus element", nestedListIterator.previous(), stream.previous());
-		}
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		ListIterator<String> stream = this.buildCloneListIterator();
-		String string = null;
-		while (stream.hasNext()) {
-			string = stream.next();
-		}
-		try {
-			string = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-
-		exCaught = false;
-		while (stream.hasPrevious()) {
-			string = stream.previous();
-		}
-		try {
-			string = stream.previous();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	public void testModifyDefault() {
-		boolean exCaught = false;
-		for (ListIterator<String> stream = this.buildCloneListIterator(); stream.hasNext();) {
-			if (stream.next().equals("three")) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-
-		exCaught = false;
-		for (ListIterator<String> stream = this.buildCloneListIterator(); stream.hasNext();) {
-			if (stream.next().equals("three")) {
-				try {
-					stream.add("three and a half");
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-
-		exCaught = false;
-		for (ListIterator<String> stream = this.buildCloneListIterator(); stream.hasNext();) {
-			if (stream.next().equals("three")) {
-				try {
-					stream.set("another three");
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testModifyMutatorNext() {
-		this.verifyModifyNext(new CloneListIterator<String>(this.originalList, this.buildMutator()));
-	}
-
-	public void testModifyMutatorPrevious() {
-		this.verifyModifyPrevious(new CloneListIterator<String>(this.originalList, this.buildMutator()));
-	}
-
-	private CloneListIterator.Mutator<String> buildMutator() {
-		return new CloneListIterator.Mutator<String>() {
-			public void add(int index, String o) {
-				CloneListIteratorTests.this.originalList.add(index, o);
-			}
-
-			public void remove(int index) {
-				CloneListIteratorTests.this.originalList.remove(index);
-			}
-
-			public void set(int index, String o) {
-				CloneListIteratorTests.this.originalList.set(index, o);
-			}
-		};
-	}
-
-	public void testModifySubclassNext() {
-		this.verifyModifyNext(this.buildSubclass());
-	}
-
-	public void testModifySubclassPrevious() {
-		this.verifyModifyPrevious(this.buildSubclass());
-	}
-
-	private ListIterator<String> buildSubclass() {
-		return new CloneListIterator<String>(this.originalList) {
-			@Override
-			protected void add(int currentIndex, String o) {
-				CloneListIteratorTests.this.originalList.add(currentIndex, o);
-			}
-
-			@Override
-			protected void remove(int currentIndex) {
-				CloneListIteratorTests.this.originalList.remove(currentIndex);
-			}
-
-			@Override
-			protected void set(int currentIndex, String o) {
-				CloneListIteratorTests.this.originalList.set(currentIndex, o);
-			}
-		};
-	}
-
-	private void verifyModifyNext(ListIterator<String> iterator) {
-		String removed = "three";
-		String addedAfter = "five";
-		String added = "five and a half";
-		String replaced = "seven";
-		String replacement = "another seven";
-		assertTrue(this.originalList.contains(removed));
-		assertTrue(this.originalList.contains(addedAfter));
-		assertTrue(this.originalList.contains(replaced));
-		// try to remove before calling #next()
-		boolean exCaught = false;
-		try {
-			iterator.remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-		while (iterator.hasNext()) {
-			String next = iterator.next();
-			if (next.equals(addedAfter)) {
-				iterator.add(added);
-			}
-			if (next.equals(removed)) {
-				iterator.remove();
-				// try to remove twice
-				exCaught = false;
-				try {
-					iterator.remove();
-				} catch (IllegalStateException ex) {
-					exCaught = true;
-				}
-				assertTrue(exCaught);
-			}
-			if (next.equals(replaced)) {
-				iterator.set(replacement);
-			}
-		}
-		assertTrue(this.originalList.contains(added));
-		assertFalse(this.originalList.contains(removed));
-		assertFalse(this.originalList.contains(replaced));
-		assertTrue(this.originalList.contains(replacement));
-	}
-
-	private void verifyModifyPrevious(ListIterator<String> iterator) {
-		String removed = "three";
-		String addedBefore = "five";
-		String added = "four and a half";
-		String replaced = "seven";
-		String replacement = "another seven";
-		assertTrue(this.originalList.contains(removed));
-		assertTrue(this.originalList.contains(addedBefore));
-		assertTrue(this.originalList.contains(replaced));
-		while (iterator.hasNext()) {
-			iterator.next();
-		}
-		while (iterator.hasPrevious()) {
-			Object previous = iterator.previous();
-			if (previous.equals(addedBefore)) {
-				iterator.add(added);
-			}
-			if (previous.equals(removed)) {
-				iterator.remove();
-				// try to remove twice
-				boolean exCaught = false;
-				try {
-					iterator.remove();
-				} catch (IllegalStateException ex) {
-					exCaught = true;
-				}
-				assertTrue("IllegalStateException not thrown", exCaught);
-			}
-			if (previous.equals(replaced)) {
-				iterator.set(replacement);
-			}
-		}
-		assertTrue(this.originalList.contains(added));
-		assertFalse(this.originalList.contains(removed));
-		assertFalse(this.originalList.contains(replaced));
-		assertTrue(this.originalList.contains(replacement));
-	}
-
-	private ListIterator<String> buildCloneListIterator() {
-		return this.buildCloneListIterator(this.originalList);
-	}
-
-	private ListIterator<String> buildCloneListIterator(List<String> list) {
-		return new CloneListIterator<String>(list);
-	}
-
-	private ListIterator<String> buildNestedListIterator() {
-		return this.originalList.listIterator();
-	}
-
-	private List<String> buildList() {
-		List<String> list = this.buildEmptyList();
-		this.populateList(list);
-		return list;
-	}
-
-	private void populateList(List<String> list) {
-		list.add("zero");
-		list.add("one");
-		list.add("two");
-		list.add("three");
-		list.add("four");
-		list.add("five");
-		list.add("six");
-		list.add("seven");
-		list.add("eight");
-		list.add("nine");
-	}
-
-	protected List<String> buildEmptyList() {
-		return new ArrayList<String>();
-	}
-
-	/**
-	 * Test concurrent access: First build a clone iterator in a separate thread
-	 * that hangs momentarily during its construction; then modify the shared
-	 * collection in this thread. This would cause a
-	 * ConcurrentModificationException in the other thread if the clone iterator
-	 * were not synchronized on the original collection.
-	 */
-	public void testConcurrentAccess() throws Exception {
-		CloneIteratorTests.SlowCollection<String> slow = new CloneIteratorTests.SlowCollection<String>();
-		this.populateList(slow);
-		// using the unsynchronized list will cause the test to fail
-		// this.originalList = slow;
-		this.originalList = Collections.synchronizedList(slow);
-
-		this.concurrentList = new ArrayList<String>();
-		Thread thread = this.buildThread(this.buildRunnable());
-		thread.start();
-		while ( ! slow.hasStartedClone()) {
-			// wait for the other thread to start the clone...
-			Thread.yield();
-		}
-		// ...then sneak in an extra element
-		this.originalList.add("seventeen");
-		thread.join();
-		List<String> expected = new ArrayList<String>();
-		this.populateList(expected);
-		assertEquals(expected, this.concurrentList);
-	}
-
-	private Runnable buildRunnable() {
-		return new TestRunnable() {
-			@Override
-			protected void run_() throws Throwable {
-				CloneListIteratorTests.this.loopWithCloneListIterator();
-			}
-		};
-	}
-
-	/**
-	 * use a clone iterator to loop over the "slow" collection and copy its
-	 * contents to the concurrent collection
-	 */
-	void loopWithCloneListIterator() {
-		for (ListIterator<String> stream = this.buildCloneListIterator(); stream.hasNext();) {
-			this.concurrentList.add(stream.next());
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CompositeIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CompositeIteratorTests.java
deleted file mode 100644
index 573c1d9..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CompositeIteratorTests.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
-
-@SuppressWarnings("nls")
-public class CompositeIteratorTests extends TestCase {
-
-	public CompositeIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testHasAnother() {
-		this.verifyHasAnother(this.buildCompositeIterator());
-	}
-
-	public void testHasAnother2() {
-		this.verifyHasAnother(this.buildCompositeIterator2());
-	}
-
-	public void testHasAnother3() {
-		this.verifyHasAnother(this.buildCompositeIterator3());
-	}
-
-	void verifyHasAnother(Iterator<String> stream) {
-		this.verifyHasAnother(8, stream);
-	}
-
-	void verifyHasAnother(int expected, Iterator<String> stream) {
-		int i = 0;
-		while (stream.hasNext()) {
-			stream.next();
-			i++;
-		}
-		assertEquals(expected, i);
-	}
-
-	public void testAnother() {
-		this.verifyAnother(this.buildCompositeIterator());
-	}
-
-	public void testAnother2() {
-		this.verifyAnother(this.buildCompositeIterator2());
-	}
-
-	public void testAnother3() {
-		this.verifyAnother(this.buildCompositeIterator3());
-	}
-
-	void verifyAnother(Iterator<String> stream) {
-		this.verifyAnother(1, stream);
-	}
-
-	void verifyAnother(int start, Iterator<String> stream) {
-		int index = start;
-		while (stream.hasNext()) {
-			assertEquals("bogus element", String.valueOf(index++), stream.next().substring(0, 1));
-		}
-	}
-
-	public void testRemove() {
-		this.verifyRemove();
-	}
-
-	protected void verifyRemove() {
-		List<String> list1 = this.buildList1();
-		Object lastElement1 = list1.get(list1.size() - 1);
-		List<String> list2 = this.buildList2();
-		List<String> list3 = this.buildList3();
-
-		List<Iterator<String>> list = new ArrayList<Iterator<String>>();
-		list.add(list1.listIterator());
-		list.add(list2.listIterator());
-		list.add(list3.listIterator());
-
-		Iterator<String> stream = this.buildCompositeIterator(list.listIterator());
-		while (stream.hasNext()) {
-			Object next = stream.next();
-			if (next.equals("333")) {
-				stream.remove();
-			}
-			// test special case - where we are between iterators
-			if (next.equals(lastElement1)) {
-				// this will trigger the next iterator to be loaded
-				stream.hasNext();
-				// now try to remove from the previous iterator
-				stream.remove();
-			}
-		}
-		stream.remove();
-
-		assertEquals("nothing removed from collection 1", this.buildList1().size() - 2, list1.size());
-		assertFalse("element still in collection 1", list1.contains("333"));
-		assertFalse("last element still in collection 1", list1.contains(lastElement1));
-		assertTrue("wrong element removed from collection 1", list1.contains("22"));
-
-		assertEquals("nothing removed from collection 3", this.buildList3().size() - 1, list3.size());
-		assertFalse("element still in collection 3", list3.contains("88888888"));
-		assertTrue("wrong element removed from collection 3", list3.contains("666666"));
-	}
-
-	public void testSingleElement() {
-		String item = "0";
-		this.verifyHasAnother(9, this.buildCompositeIterator(item, this.buildCompositeIterator()));
-		this.verifyAnother(0, this.buildCompositeIterator(item, this.buildCompositeIterator()));
-	}
-
-	public void testNoSuchElementException() {
-		this.verifyNoSuchElementException(this.buildCompositeIterator());
-	}
-
-	void verifyNoSuchElementException(Iterator<String> stream) {
-		boolean exCaught = false;
-		String string = null;
-		while (stream.hasNext()) {
-			string = stream.next();
-		}
-		try {
-			string = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	public void testUnsupportedOperationException() {
-		this.verifyUnsupportedOperationException(this.buildUnmodifiableCompositeIterator());
-	}
-
-	void verifyUnsupportedOperationException(Iterator<String> stream) {
-		boolean exCaught = false;
-		while (stream.hasNext()) {
-			Object string = stream.next();
-			if (string.equals("333")) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testIllegalStateException() {
-		this.verifyIllegalStateException();
-	}
-
-	void verifyIllegalStateException() {
-		this.verifyIllegalStateException(this.buildCompositeIterator());
-	}
-
-	void verifyIllegalStateException(Iterator<String> stream) {
-		boolean exCaught = false;
-		try {
-			stream.remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalStateException not thrown", exCaught);
-	}
-
-	public void testEmptyHasAnother1() {
-		this.verifyEmptyHasAnother(this.buildEmptyCompositeIterator1());
-	}
-
-	void verifyEmptyHasAnother(Iterator<String> stream) {
-		int i = 0;
-		while (stream.hasNext()) {
-			stream.next();
-			i++;
-		}
-		assertEquals(0, i);
-	}
-
-	public void testEmptyNoSuchElementException1() {
-		this.verifyNoSuchElementException(this.buildEmptyCompositeIterator1());
-	}
-
-	public void testEmptyIllegalStateException1() {
-		this.verifyEmptyIllegalStateException1();
-	}
-
-	void verifyEmptyIllegalStateException1() {
-		this.verifyIllegalStateException(this.buildEmptyCompositeIterator1());
-	}
-
-	public void testEmptyHasAnother2() {
-		this.verifyEmptyHasAnother(this.buildEmptyCompositeIterator2());
-	}
-
-	public void testEmptyNoSuchElementException2() {
-		this.verifyNoSuchElementException(this.buildEmptyCompositeIterator2());
-	}
-
-	public void testEmptyIllegalStateException2() {
-		this.verifyEmptyIllegalStateException2();
-	}
-
-	void verifyEmptyIllegalStateException2() {
-		this.verifyIllegalStateException(this.buildEmptyCompositeIterator2());
-	}
-
-	Iterator<String> buildCompositeIterator() {
-		return this.buildCompositeIterator(this.buildIterators());
-	}
-
-	Iterator<String> buildEmptyCompositeIterator1() {
-		return this.buildCompositeIterator(this.buildEmptyIterators1());
-	}
-
-	Iterator<String> buildEmptyCompositeIterator2() {
-		return this.buildCompositeIterator(this.buildEmptyIterators2());
-	}
-
-	Iterator<String> buildUnmodifiableCompositeIterator() {
-		return this.buildCompositeIterator(this.buildUnmodifiableIterators());
-	}
-
-	// leave unchecked so we can override in subclass
-	@SuppressWarnings("unchecked")
-	Iterator<String> buildCompositeIterator(Iterator iterators) {
-		return new CompositeIterator<String>(iterators);
-	}
-
-	// use vararg constructor
-	@SuppressWarnings("unchecked")
-	Iterator<String> buildCompositeIterator2() {
-		return new CompositeIterator<String>(this.buildIterator1(), this.buildIterator2(), this.buildIterator3());
-	}
-
-	// use vararg constructor
-	@SuppressWarnings("unchecked")
-	Iterator<String> buildCompositeIterator3() {
-		return new CompositeIterator<String>(new Iterator[] { this.buildIterator1(), this.buildIterator2(), this.buildIterator3() });
-	}
-
-	Iterator<String> buildCompositeIterator(String string, Iterator<String> iterator) {
-		return new CompositeIterator<String>(string, iterator);
-	}
-
-	ListIterator<Iterator<String>> buildIterators() {
-		List<Iterator<String>> list = new ArrayList<Iterator<String>>();
-		list.add(this.buildIterator1());
-		list.add(this.buildIterator2());
-		list.add(this.buildIterator3());
-		return list.listIterator();
-	}
-
-	ListIterator<Iterator<String>> buildEmptyIterators1() {
-		return this.buildEmptyIteratorIterator();
-	}
-
-	ListIterator<Iterator<String>> buildEmptyIterators2() {
-		List<Iterator<String>> list = new ArrayList<Iterator<String>>();
-		list.add(this.buildEmptyStringIterator());
-		list.add(this.buildEmptyStringIterator());
-		list.add(this.buildEmptyStringIterator());
-		return list.listIterator();
-	}
-
-	ListIterator<Iterator<String>> buildUnmodifiableIterators() {
-		List<Iterator<String>> list = new ArrayList<Iterator<String>>();
-		list.add(this.buildUnmodifiableIterator1());
-		list.add(this.buildUnmodifiableIterator2());
-		list.add(this.buildUnmodifiableIterator3());
-		return list.listIterator();
-	}
-
-	ListIterator<String> buildIterator1() {
-		return this.buildList1().listIterator();
-	}
-
-	ListIterator<String> buildIterator2() {
-		return this.buildList2().listIterator();
-	}
-
-	ListIterator<String> buildIterator3() {
-		return this.buildList3().listIterator();
-	}
-
-	ListIterator<String> buildUnmodifiableIterator1() {
-		return this.buildUnmodifiableList1().listIterator();
-	}
-
-	ListIterator<String> buildUnmodifiableIterator2() {
-		return this.buildUnmodifiableList2().listIterator();
-	}
-
-	ListIterator<String> buildUnmodifiableIterator3() {
-		return this.buildUnmodifiableList3().listIterator();
-	}
-
-	ListIterator<Iterator<String>> buildEmptyIteratorIterator() {
-		return (new ArrayList<Iterator<String>>()).listIterator();
-	}
-
-	ListIterator<String> buildEmptyStringIterator() {
-		return (new ArrayList<String>()).listIterator();
-	}
-
-	List<String> buildList1() {
-		List<String> list = new ArrayList<String>();
-		list.add("1");
-		list.add("22");
-		list.add("333");
-		list.add("4444");
-		return list;
-	}
-
-	List<String> buildList2() {
-		return new ArrayList<String>();
-	}
-
-	List<String> buildList3() {
-		List<String> list = new ArrayList<String>();
-		list.add("55555");
-		list.add("666666");
-		list.add("7777777");
-		list.add("88888888");
-		return list;
-	}
-
-	List<String> buildUnmodifiableList1() {
-		return Collections.unmodifiableList(this.buildList1());
-	}
-
-	List<String> buildUnmodifiableList2() {
-		return Collections.unmodifiableList(this.buildList2());
-	}
-
-	List<String> buildUnmodifiableList3() {
-		return Collections.unmodifiableList(this.buildList3());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CompositeListIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CompositeListIteratorTests.java
deleted file mode 100644
index 3da104a..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CompositeListIteratorTests.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import org.eclipse.jpt.utility.internal.iterators.CompositeListIterator;
-
-@SuppressWarnings("nls")
-public class CompositeListIteratorTests extends ReadOnlyCompositeListIteratorTests {
-
-	public CompositeListIteratorTests(String name) {
-		super(name);
-	}
-
-	@Override
-	public void testRemove() {
-		super.testRemove();
-		List<String> list1 = this.buildList1();
-		List<String> list2 = this.buildList2();
-		List<String> list3 = this.buildList3();
-		Object firstElement3 = list3.get(0);
-
-		List<Iterator<String>> list = new ArrayList<Iterator<String>>();
-		list.add(list1.listIterator());
-		list.add(list2.listIterator());
-		list.add(list3.listIterator());
-
-		ListIterator<String> stream = (ListIterator<String>) this.buildCompositeIterator(list.listIterator());
-		// position to end of stream
-		while (stream.hasNext()) {
-			stream.next();
-		}
-		while (stream.hasPrevious()) {
-			Object previous = stream.previous();
-			if (previous.equals("333")) {
-				stream.remove();
-			}
-			// test special case - where we are between iterators
-			if (previous.equals(firstElement3)) {
-				// this will trigger the next iterator to be loaded
-				stream.hasPrevious();
-				// now try to remove from the previous iterator
-				stream.remove();
-			}
-		}
-		stream.remove();
-
-		assertEquals("nothing removed from collection 1", this.buildList1().size() - 2, list1.size());
-		assertFalse("element still in collection 1", list1.contains("1"));
-		assertFalse("element still in collection 1", list1.contains("333"));
-
-		assertEquals("nothing removed from collection 3", this.buildList3().size() - 1, list3.size());
-		assertFalse("first element still in collection 3", list3.contains(firstElement3));
-		assertTrue("wrong element removed from collection 3", list3.contains("666666"));
-	}
-
-	public void testAdd() {
-		List<String> list1 = this.buildList1();
-		Object lastElement1 = list1.get(list1.size() - 1);
-		List<String> list2 = this.buildList2();
-		List<String> list3 = this.buildList3();
-		Object firstElement3 = list3.get(0);
-
-		List<Iterator<String>> list = new ArrayList<Iterator<String>>();
-		list.add(list1.listIterator());
-		list.add(list2.listIterator());
-		list.add(list3.listIterator());
-
-		ListIterator<String> stream = (ListIterator<String>) this.buildCompositeIterator(list.listIterator());
-		while (stream.hasNext()) {
-			Object next = stream.next();
-			if (next.equals("333")) {
-				stream.add("3.5");
-			}
-			// test special case - where we are between iterators
-			if (next.equals(lastElement1)) {
-				// this will trigger the next iterator to be loaded
-				stream.hasNext();
-				// now try to add to the iterator
-				stream.add("something in 3");
-			}
-		}
-		stream.add("finale");
-		boolean checkForFinale = true;
-		while (stream.hasPrevious()) {
-			Object previous = stream.previous();
-			if (checkForFinale) {
-				checkForFinale = false;
-				assertEquals("added element dropped", "finale", previous);
-			}
-			if (previous.equals("333")) {
-				stream.add("2.5");
-			}
-			// test special case - where we are between iterators
-			if (previous.equals(firstElement3)) {
-				// this will trigger the next iterator to be loaded
-				stream.hasPrevious();
-				// now try to remove from the previous iterator
-				stream.add("old start of 3");
-			}
-		}
-		stream.add("prelude");
-		assertEquals("added element dropped", "prelude", stream.previous());
-
-		assertEquals("elements not added to collection 1", this.buildList1().size() + 3, list1.size());
-		assertEquals("element not added to collection 1", "prelude", list1.get(0));
-		assertEquals("element not added to collection 1", "2.5", list1.get(3));
-		assertEquals("element not added to collection 1", "3.5", list1.get(5));
-
-		assertEquals("elements not added to collection 3", this.buildList3().size() + 3, list3.size());
-		assertEquals("element not added to collection 3", "something in 3", list3.get(0));
-		assertEquals("element not added to collection 3", "old start of 3", list3.get(1));
-		assertEquals("element not added to collection 3", "finale", list3.get(list3.size() - 1));
-
-		// add to the front
-		stream = (ListIterator<String>) this.buildCompositeIterator();
-		stream.add("blah");
-		assertFalse("added element should be placed BEFORE the \"cursor\"", stream.next().equals("blah"));
-
-		stream = (ListIterator<String>) this.buildCompositeIterator();
-		stream.add("blah");
-		assertTrue("added element should be placed BEFORE the \"cursor\"", stream.previous().equals("blah"));
-
-		stream = (ListIterator<String>) this.buildCompositeIterator();
-		while (stream.hasNext()) {
-			stream.next();
-		}
-		while (stream.hasPrevious()) {
-			stream.previous();
-		}
-		stream.add("blah");
-		assertFalse("added element should be placed BEFORE the \"cursor\"", stream.next().equals("blah"));
-
-		stream = (ListIterator<String>) this.buildCompositeIterator();
-		while (stream.hasNext()) {
-			stream.next();
-		}
-		while (stream.hasPrevious()) {
-			stream.previous();
-		}
-		stream.add("blah");
-		assertTrue("added element should be placed BEFORE the \"cursor\"", stream.previous().equals("blah"));
-
-		// add to the middle
-		stream = (ListIterator<String>) this.buildCompositeIterator();
-		stream.next();
-		stream.add("blah");
-		assertFalse("added element should be placed BEFORE the \"cursor\"", stream.next().equals("blah"));
-
-		stream = (ListIterator<String>) this.buildCompositeIterator();
-		stream.next();
-		stream.add("blah");
-		assertTrue("added element should be placed BEFORE the \"cursor\"", stream.previous().equals("blah"));
-
-		stream = (ListIterator<String>) this.buildCompositeIterator();
-		while (stream.hasNext()) {
-			stream.next();
-		}
-		stream.previous();
-		stream.add("blah");
-		assertFalse("added element should be placed BEFORE the \"cursor\"", stream.next().equals("blah"));
-
-		stream = (ListIterator<String>) this.buildCompositeIterator();
-		while (stream.hasNext()) {
-			stream.next();
-		}
-		stream.previous();
-		stream.add("blah");
-		assertTrue("added element should be placed BEFORE the \"cursor\"", stream.previous().equals("blah"));
-
-		// add to the end
-		stream = (ListIterator<String>) this.buildCompositeIterator();
-		while (stream.hasNext()) {
-			stream.next();
-		}
-		stream.add("blah");
-		assertFalse("added element should be placed BEFORE the \"cursor\"", stream.hasNext());
-
-		stream = (ListIterator<String>) this.buildCompositeIterator();
-		while (stream.hasNext()) {
-			stream.next();
-		}
-		stream.add("blah");
-		assertTrue("added element should be placed BEFORE the \"cursor\"", stream.previous().equals("blah"));
-	}
-
-	public void testSet() {
-		List<String> list1 = this.buildList1();
-		Object lastElement1 = list1.get(list1.size() - 1);
-		List<String> list2 = this.buildList2();
-		List<String> list3 = this.buildList3();
-		Object firstElement3 = list3.get(0);
-
-		List<Iterator<String>> list = new ArrayList<Iterator<String>>();
-		list.add(list1.listIterator());
-		list.add(list2.listIterator());
-		list.add(list3.listIterator());
-
-		ListIterator<String> stream = (ListIterator<String>) this.buildCompositeIterator(list.listIterator());
-		// position to end of stream
-		while (stream.hasNext()) {
-			Object next = stream.next();
-			if (next.equals("333")) {
-				stream.set("333a");
-			}
-			// test special case - where we are between iterators
-			if (next.equals(lastElement1)) {
-				// this will trigger the next iterator to be loaded
-				stream.hasNext();
-				// now try to remove from the previous iterator
-				stream.set("end of 1");
-			}
-		}
-		while (stream.hasPrevious()) {
-			Object previous = stream.previous();
-			if (previous.equals("22")) {
-				stream.set("22a");
-			}
-			// test special case - where we are between iterators
-			if (previous.equals(firstElement3)) {
-				// this will trigger the next iterator to be loaded
-				stream.hasPrevious();
-				// now try to remove from the previous iterator
-				stream.set("start of 3");
-			}
-		}
-
-		assertEquals("element(s) added to collection 1", this.buildList1().size(), list1.size());
-		assertEquals("element not set in collection 1", "22a", list1.get(1));
-		assertFalse("element not set in collection 1", list1.contains("22"));
-		assertEquals("element not set in collection 1", "333a", list1.get(2));
-		assertFalse("element not set in collection 1", list1.contains("333"));
-		assertEquals("element not set in collection 1", "end of 1", list1.get(list1.size() - 1));
-		assertFalse("element not set in collection 1", list1.contains(lastElement1));
-
-		assertEquals("element(s) added to collection 3", this.buildList3().size(), list3.size());
-		assertEquals("element not set in collection 3", "start of 3", list3.get(0));
-		assertFalse("element not set in collection 3", list3.contains(firstElement3));
-	}
-
-	@Override
-	public void testNextIndexPreviousIndex() {
-		int i = 0;
-		ListIterator<String> stream = (ListIterator<String>) this.buildCompositeIterator();
-		assertEquals(i, stream.nextIndex());
-		assertEquals(i - 1, stream.previousIndex());
-		while (stream.hasNext()) {
-			Object next = stream.next();
-			i++;
-			if (next.equals("333")) {
-				stream.remove();
-				i--;
-			}
-			if (next.equals("7777777")) {
-				stream.add("7.5");
-				i++;
-			}
-			assertEquals(i, stream.nextIndex());
-			assertEquals(i - 1, stream.previousIndex());
-		}
-		assertEquals("index is corrupt", 8, i);
-
-		assertEquals(i, stream.nextIndex());
-		assertEquals(i - 1, stream.previousIndex());
-		while (stream.hasPrevious()) {
-			Object previous = stream.previous();
-			i--;
-			if (previous.equals("666666")) {
-				stream.remove();
-				// removing a previous element, does not change the cursor
-			}
-			if (previous.equals("22")) {
-				stream.add("1.5");
-				i++;
-			}
-			assertEquals(i, stream.nextIndex());
-			assertEquals(i - 1, stream.previousIndex());
-		}
-		assertEquals("index is corrupt", 0, i);
-	}
-
-	@Override
-	public void testIllegalStateException() {
-		this.verifyIllegalStateException();
-	}
-
-	@Override
-	public void testEmptyIllegalStateException1() {
-		this.verifyEmptyIllegalStateException1();
-	}
-
-	@Override
-	public void testEmptyIllegalStateException2() {
-		this.verifyEmptyIllegalStateException2();
-	}
-
-	// unchecked so we can override the unchecked method in superclass
-	@Override
-	@SuppressWarnings("unchecked")
-	Iterator<String> buildCompositeIterator(Iterator iterators) {
-		return new CompositeListIterator<String>((ListIterator<ListIterator<String>>) iterators);
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	Iterator<String> buildCompositeIterator2() {
-		return new CompositeListIterator<String>(this.buildIterator1(), this.buildIterator2(), this.buildIterator3());
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	Iterator<String> buildCompositeIterator3() {
-		return new CompositeListIterator<String>(new ListIterator[] { this.buildIterator1(), this.buildIterator2(), this.buildIterator3() });
-	}
-
-	@Override
-	ListIterator<String> buildCompositeListIterator(String string, ListIterator<String> iterator) {
-		return new CompositeListIterator<String>(string, iterator);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EmptyIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EmptyIteratorTests.java
deleted file mode 100644
index d54ccd0..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EmptyIteratorTests.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-
-@SuppressWarnings("nls")
-public class EmptyIteratorTests extends TestCase {
-
-	public EmptyIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testHasNext() {
-		int i = 0;
-		for (Iterator<Object> stream = EmptyIterator.instance(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(0, i);
-	}
-
-	public void testNext() {
-		for (Iterator<String> stream = EmptyIterator.instance(); stream.hasNext();) {
-			fail("bogus element: " + stream.next());
-		}
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Iterator<Number> stream = EmptyIterator.instance();
-		Object element = null;
-		while (stream.hasNext()) {
-			element = stream.next();
-		}
-		try {
-			element = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + element, exCaught);
-	}
-
-	public void testUnsupportedOperationException() {
-		boolean exCaught = false;
-		try {
-			EmptyIterator.instance().remove();
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EmptyListIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EmptyListIteratorTests.java
deleted file mode 100644
index b4ac671..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EmptyListIteratorTests.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.EmptyListIterator;
-
-@SuppressWarnings("nls")
-public class EmptyListIteratorTests extends TestCase {
-
-	public EmptyListIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testHasNext() {
-		int i = 0;
-		for (ListIterator<Object> stream = EmptyListIterator.instance(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(0, i);
-	}
-
-	public void testNext() {
-		for (ListIterator<Object> stream = EmptyListIterator.instance(); stream.hasNext();) {
-			fail("bogus element: " + stream.next());
-		}
-	}
-
-	public void testNextIndex() {
-		ListIterator<Object> stream = EmptyListIterator.instance();
-		assertEquals(0, stream.nextIndex());
-	}
-
-	public void testHasPrevious() {
-		ListIterator<Object> stream = EmptyListIterator.instance();
-		int i = 0;
-		while (stream.hasPrevious()) {
-			stream.previous();
-			i++;
-		}
-		assertEquals(0, i);
-
-		while (stream.hasNext()) {
-			stream.next();
-		}
-		i = 0;
-		while (stream.hasPrevious()) {
-			stream.previous();
-			i++;
-		}
-		assertEquals(0, i);
-	}
-
-	public void testPrevious() {
-		ListIterator<Object> stream = EmptyListIterator.instance();
-		while (stream.hasPrevious()) {
-			fail("bogus element: " + stream.previous());
-		}
-		while (stream.hasNext()) {
-			stream.next();
-		}
-		while (stream.hasPrevious()) {
-			fail("bogus element: " + stream.previous());
-		}
-	}
-
-	public void testPreviousIndex() {
-		ListIterator<Object> stream = EmptyListIterator.instance();
-		assertEquals(-1, stream.previousIndex());
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		ListIterator<Object> stream = EmptyListIterator.instance();
-		Object element = null;
-		while (stream.hasNext()) {
-			element = stream.next();
-		}
-		try {
-			element = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown (next): " + element, exCaught);
-		while (stream.hasPrevious()) {
-			element = stream.previous();
-		}
-		try {
-			element = stream.previous();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown (previous): " + element, exCaught);
-	}
-
-	public void testUnsupportedOperationException() {
-		boolean exCaught = false;
-		try {
-			EmptyListIterator.instance().remove();
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue("UnsupportedOperationException not thrown (remove)", exCaught);
-		try {
-			EmptyListIterator.instance().set(new Object());
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue("UnsupportedOperationException not thrown (set)", exCaught);
-		try {
-			EmptyListIterator.instance().add(new Object());
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue("UnsupportedOperationException not thrown (add)", exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EnumerationIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EnumerationIteratorTests.java
deleted file mode 100644
index cd34295..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EnumerationIteratorTests.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Vector;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.EnumerationIterator;
-
-@SuppressWarnings("nls")
-public class EnumerationIteratorTests extends TestCase {
-
-	public EnumerationIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testHasNext() {
-		int i = 0;
-		for (Iterator<String> stream = this.buildIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(this.buildVector().size(), i);
-	}
-
-	public void testHasNextUpcast() {
-		int i = 0;
-		for (Iterator<Object> stream = this.buildIteratorUpcast(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(this.buildVector().size(), i);
-	}
-
-	public void testNext() {
-		Enumeration<String> enumeration = this.buildEnumeration();
-		for (Iterator<String> stream = this.buildIterator(); stream.hasNext();) {
-			assertEquals("bogus element", enumeration.nextElement(), stream.next());
-		}
-	}
-
-	public void testNextUpcast() {
-		Enumeration<String> enumeration = this.buildEnumeration();
-		for (Iterator<Object> stream = this.buildIteratorUpcast(); stream.hasNext();) {
-			assertEquals("bogus element", enumeration.nextElement(), stream.next());
-		}
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Iterator<String> stream = this.buildIterator();
-		String string = null;
-		while (stream.hasNext()) {
-			string = stream.next();
-		}
-		try {
-			string = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	public void testUnsupportedOperationException() {
-		boolean exCaught = false;
-		for (Iterator<String> stream = this.buildIterator(); stream.hasNext();) {
-			if (stream.next().equals("three")) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	private Iterator<String> buildIterator() {
-		return this.buildIterator(this.buildEnumeration());
-	}
-
-	private Iterator<String> buildIterator(Enumeration<String> enumeration) {
-		return new EnumerationIterator<String>(enumeration);
-	}
-
-	private Enumeration<String> buildEnumeration() {
-		return this.buildVector().elements();
-	}
-
-	private Vector<String> buildVector() {
-		Vector<String> v = new Vector<String>();
-		v.addElement("one");
-		v.addElement("two");
-		v.addElement("three");
-		v.addElement("four");
-		v.addElement("five");
-		v.addElement("six");
-		v.addElement("seven");
-		v.addElement("eight");
-		return v;
-	}
-
-	private Iterator<Object> buildIteratorUpcast() {
-		return this.buildIteratorUpcast(this.buildEnumeration());
-	}
-
-	private Iterator<Object> buildIteratorUpcast(Enumeration<String> enumeration) {
-		return new EnumerationIterator<Object>(enumeration);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/FilteringIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/FilteringIteratorTests.java
deleted file mode 100644
index 8e1fe4c..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/FilteringIteratorTests.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.Filter;
-import org.eclipse.jpt.utility.internal.SimpleFilter;
-import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
-
-@SuppressWarnings("nls")
-public class FilteringIteratorTests extends TestCase {
-
-	private static final String PREFIX = "prefix";
-
-	public FilteringIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testUnsupportedOperationException() {
-		boolean exCaught = false;
-		for (Iterator<String> stream = this.buildAcceptIterator(); stream.hasNext();) {
-			String string = stream.next();
-			if (string.equals(PREFIX + "3")) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Iterator<String> stream = this.buildAcceptIterator();
-		String string = null;
-		while (stream.hasNext()) {
-			string = stream.next();
-		}
-		try {
-			string = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	public void testAcceptHasNext() {
-		int i = 0;
-		for (Iterator<String> stream = this.buildAcceptIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(6, i);
-	}
-
-	public void testAcceptNext() {
-		for (Iterator<String> stream = this.buildAcceptIterator(); stream.hasNext();) {
-			assertTrue("bogus accept", stream.next().startsWith(PREFIX));
-		}
-	}
-
-	public void testInnerHasNext() {
-		int i = 0;
-		for (Iterator<String> stream = this.buildInnerIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(6, i);
-	}
-
-	public void testInnerNext() {
-		for (Iterator<String> stream = this.buildInnerIterator(); stream.hasNext();) {
-			assertTrue("bogus accept", stream.next().startsWith(PREFIX));
-		}
-	}
-
-	public void testRejectHasNext() {
-		int i = 0;
-		for (Iterator<String> stream = this.buildRejectIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(2, i);
-	}
-
-	public void testRejectNext() {
-		for (Iterator<String> stream = this.buildRejectIterator(); stream.hasNext();) {
-			assertFalse("bogus reject", stream.next().startsWith(PREFIX));
-		}
-	}
-
-	public void testBothHasNext() {
-		// if both accept() and reject() are overridden, accept() is used
-		int i = 0;
-		for (Iterator<String> stream = this.buildBothIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(6, i);
-	}
-
-	public void testLoadNext() {
-		// loadNext() used to cause a NPE when executing during the
-		// constructor because the "outer" class is not bound until completion
-		// of the constructor
-		for (Iterator<String> stream = this.buildInnerIterator2(); stream.hasNext();) {
-			assertTrue("bogus accept", stream.next().startsWith(PREFIX));
-		}
-	}
-
-	public void testFilterHasNext() {
-		int i = 0;
-		for (Iterator<String> stream = this.buildFilterIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(6, i);
-	}
-
-	public void testFilterNext() {
-		for (Iterator<String> stream = this.buildFilterIterator(); stream.hasNext();) {
-			assertTrue("bogus accept", stream.next().startsWith(PREFIX));
-		}
-	}
-
-	private Iterator<String> buildFilteredIterator(Iterator<String> nestedIterator, Filter<String> filter) {
-		return new FilteringIterator<String>(nestedIterator, filter);
-	}
-
-	private Iterator<String> buildInnerFilteredIterator(Iterator<String> nestedIterator) {
-		return new FilteringIterator<String>(nestedIterator) {
-			@Override
-			protected boolean accept(String s) {
-				return s.startsWith(PREFIX);
-			}
-		};
-	}
-
-	String getPrefix() {
-		return PREFIX;
-	}
-
-	// this inner iterator will call the "outer" object
-	private Iterator<String> buildInnerFilteredIterator2(Iterator<String> nestedIterator) {
-		return new FilteringIterator<String>(nestedIterator) {
-			@Override
-			protected boolean accept(String s) {
-				return s.startsWith(FilteringIteratorTests.this.getPrefix());
-			}
-		};
-	}
-
-	private Iterator<String> buildNestedIterator() {
-		Collection<String> c = new ArrayList<String>();
-		c.add(PREFIX + "1");
-		c.add(PREFIX + "2");
-		c.add(PREFIX + "3");
-		c.add("4");
-		c.add(PREFIX + "5");
-		c.add(PREFIX + "6");
-		c.add(PREFIX + "7");
-		c.add("8");
-		return c.iterator();
-	}
-
-	private Iterator<String> buildAcceptIterator() {
-		return this.buildFilteredIterator(this.buildNestedIterator(), this.buildAcceptFilter(PREFIX));
-	}
-
-	private Iterator<String> buildInnerIterator() {
-		return this.buildInnerFilteredIterator(this.buildNestedIterator());
-	}
-
-	// this inner iterator will call the "outer" object
-	private Iterator<String> buildInnerIterator2() {
-		return this.buildInnerFilteredIterator2(this.buildNestedIterator());
-	}
-
-	private Iterator<String> buildFilterIterator() {
-		return this.buildFilteredIterator(this.buildNestedIterator(), this.buildFilterFilter(PREFIX));
-	}
-
-	private Filter<String> buildAcceptFilter(String prefix) {
-		return new SimpleFilter<String, String>(prefix) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public boolean accept(String s) {
-				return s.startsWith(this.criterion);
-			}
-		};
-	}
-
-	private Iterator<String> buildRejectIterator() {
-		return this.buildFilteredIterator(this.buildNestedIterator(), this.buildRejectFilter(PREFIX));
-	}
-
-	private Filter<String> buildRejectFilter(String prefix) {
-		return new SimpleFilter<String, String>(prefix) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public boolean reject(String s) {
-				return s.startsWith(this.criterion);
-			}
-		};
-	}
-
-	// use anonymous inner Filter
-	private Filter<String> buildFilterFilter(final String prefix) {
-		return new Filter<String>() {
-			public boolean accept(String s) {
-				return s.startsWith(prefix);
-			}
-		};
-	}
-
-	private Iterator<String> buildBothIterator() {
-		return this.buildFilteredIterator(this.buildNestedIterator(), this.buildBothFilter(PREFIX));
-	}
-
-	private Filter<String> buildBothFilter(String prefix) {
-		return new SimpleFilter<String, String>(prefix) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public boolean reject(String s) {
-				return s.startsWith(this.criterion);
-			}
-
-			@Override
-			public boolean accept(String s) {
-				return s.startsWith(this.criterion);
-			}
-		};
-	}
-
-	public void testInvalidFilteringIterator() {
-		boolean exCaught = false;
-		try {
-			// missing method override
-			Iterator<String> iterator = new FilteringIterator<String>(this.buildNestedIterator());
-			String s = iterator.next();
-			fail("invalid string: " + s);
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown", exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/GraphIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/GraphIteratorTests.java
deleted file mode 100644
index b0e7ebd..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/GraphIteratorTests.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.GraphIterator;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class GraphIteratorTests extends TestCase {
-	/** this will be populated with all the nodes created for the test */
-	Collection<GraphNode> nodes = new ArrayList<GraphNode>();
-
-	public GraphIteratorTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testHasNext1() {
-		this.verifyHasNext(this.buildGraphIterator1());
-	}
-
-	public void testHasNext2() {
-		this.verifyHasNext(this.buildGraphIterator2());
-	}
-
-	private void verifyHasNext(Iterator<GraphNode> iterator) {
-		int i = 0;
-		while (iterator.hasNext()) {
-			iterator.next();
-			i++;
-		}
-		assertEquals(this.nodes.size(), i);
-	}
-
-	public void testNext1() {
-		this.verifyNext(this.buildGraphIterator1());
-	}
-
-	public void testNext2() {
-		this.verifyNext(this.buildGraphIterator2());
-	}
-
-	private void verifyNext(Iterator<GraphNode> iterator) {
-		while (iterator.hasNext()) {
-			assertTrue("bogus element", this.nodes.contains(iterator.next()));
-		}
-	}
-
-	public void testNoSuchElementException1() {
-		this.verifyNoSuchElementException(this.buildGraphIterator1());
-	}
-
-	public void testNoSuchElementException2() {
-		this.verifyNoSuchElementException(this.buildGraphIterator2());
-	}
-
-	private void verifyNoSuchElementException(Iterator<GraphNode> iterator) {
-		boolean exCaught = false;
-		while (iterator.hasNext()) {
-			iterator.next();
-		}
-		try {
-			iterator.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown", exCaught);
-	}
-
-	public void testSize1() {
-		this.verifySize(this.buildGraphIterator1());
-	}
-
-	public void testSize2() {
-		this.verifySize(this.buildGraphIterator2());
-	}
-
-	private void verifySize(Iterator<GraphNode> iterator) {
-		int iteratorSize = CollectionTools.size(iterator);
-		int actualSize = this.nodes.size();
-		assertTrue("Too few items in iterator.", iteratorSize >= actualSize);
-		assertTrue("Too many items in iterator.", iteratorSize <= actualSize);
-	}
-
-	public void testInvalidGraphIterator() {
-		boolean exCaught = false;
-		try {
-			// missing method override
-			Iterator<GraphNode> iterator = new GraphIterator<GraphNode>(this.buildGraphRoot());
-			GraphNode gn = iterator.next();
-			fail("invalid graph node: " + gn);
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown", exCaught);
-	}
-
-	/**
-	 * build a graph iterator with an explicit misterRogers
-	 */
-	private Iterator<GraphNode> buildGraphIterator1() {
-		return new GraphIterator<GraphNode>(this.buildGraphRoot(), this.buildMisterRogers());
-	}
-
-	private GraphIterator.MisterRogers<GraphNode> buildMisterRogers() {
-		return new GraphIterator.MisterRogers<GraphNode>() {
-			public Iterator<GraphNode> neighbors(GraphNode next) {
-				return next.neighbors();
-			}
-		};
-	}
-
-	/**
-	 * build a graph iterator with an override
-	 */
-	private Iterator<GraphNode> buildGraphIterator2() {
-		return new GraphIterator<GraphNode>(this.buildGraphRoot()) {
-			@Override
-			public Iterator<GraphNode> neighbors(GraphNode next) {
-				return next.neighbors();
-			}
-		};
-	}
-
-	private GraphNode buildGraphRoot() {
-		GraphNode ncNode = new GraphNode("North Carolina");
-		GraphNode vaNode = new GraphNode("Virginia");
-		GraphNode scNode = new GraphNode("South Carolina");
-		GraphNode gaNode = new GraphNode("Georgia");
-		GraphNode flNode = new GraphNode("Florida");
-		GraphNode alNode = new GraphNode("Alabama");
-		GraphNode msNode = new GraphNode("Mississippi");
-		GraphNode tnNode = new GraphNode("Tennessee");
-
-		ncNode.setNeighbors(new GraphNode[] { vaNode, scNode, gaNode, tnNode });
-		vaNode.setNeighbors(new GraphNode[] { ncNode, tnNode });
-		scNode.setNeighbors(new GraphNode[] { ncNode, gaNode });
-		gaNode.setNeighbors(new GraphNode[] { ncNode, scNode, flNode, alNode, tnNode });
-		flNode.setNeighbors(new GraphNode[] { gaNode });
-		alNode.setNeighbors(new GraphNode[] { gaNode, msNode, tnNode });
-		msNode.setNeighbors(new GraphNode[] { alNode, tnNode });
-		tnNode.setNeighbors(new GraphNode[] { vaNode, ncNode, gaNode, alNode, msNode });
-
-		return ncNode;
-	}
-
-	public class GraphNode {
-		private String name;
-
-		private Collection<GraphNode> neighbors = new ArrayList<GraphNode>();
-
-		public GraphNode(String name) {
-			super();
-			GraphIteratorTests.this.nodes.add(this); // log node
-			this.name = name;
-		}
-
-		public String getName() {
-			return this.name;
-		}
-
-		void setNeighbors(GraphNode[] neighbors) {
-			this.neighbors = CollectionTools.list(neighbors);
-		}
-
-		public Iterator<GraphNode> neighbors() {
-			return this.neighbors.iterator();
-		}
-
-		public int neighborsSize() {
-			return this.neighbors.size();
-		}
-
-		@Override
-		public String toString() {
-			return "GraphNode(" + this.name + ")";
-		}
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/JptUtilityIteratorsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/JptUtilityIteratorsTests.java
deleted file mode 100644
index 0cd247c..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/JptUtilityIteratorsTests.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * decentralize test creation code
- */
-public class JptUtilityIteratorsTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUtilityIteratorsTests.class.getPackage().getName());
-
-		suite.addTestSuite(ArrayIteratorTests.class);
-		suite.addTestSuite(ArrayListIteratorTests.class);
-		suite.addTestSuite(ChainIteratorTests.class);
-		suite.addTestSuite(CloneIteratorTests.class);
-		suite.addTestSuite(CloneListIteratorTests.class);
-		suite.addTestSuite(CompositeIteratorTests.class);
-		suite.addTestSuite(CompositeListIteratorTests.class);
-		suite.addTestSuite(EmptyIteratorTests.class);
-		suite.addTestSuite(EmptyListIteratorTests.class);
-		suite.addTestSuite(EnumerationIteratorTests.class);
-		suite.addTestSuite(FilteringIteratorTests.class);
-		suite.addTestSuite(SuperIteratorWrapperTests.class);
-		suite.addTestSuite(GraphIteratorTests.class);
-		suite.addTestSuite(PeekableIteratorTests.class);
-		suite.addTestSuite(ReadOnlyCompositeListIteratorTests.class);
-		suite.addTestSuite(ReadOnlyIteratorTests.class);
-		suite.addTestSuite(ReadOnlyListIteratorTests.class);
-		suite.addTestSuite(SingleElementIteratorTests.class);
-		suite.addTestSuite(SingleElementListIteratorTests.class);
-		suite.addTestSuite(SynchronizedIteratorTests.class);
-		suite.addTestSuite(SynchronizedListIteratorTests.class);
-		suite.addTestSuite(TransformationIteratorTests.class);
-		suite.addTestSuite(TransformationListIteratorTests.class);
-		suite.addTestSuite(TreeIteratorTests.class);
-
-		return suite;
-	}
-
-	private JptUtilityIteratorsTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/PeekableIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/PeekableIteratorTests.java
deleted file mode 100644
index 9fcea76..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/PeekableIteratorTests.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.PeekableIterator;
-
-@SuppressWarnings("nls")
-public class PeekableIteratorTests extends TestCase {
-
-	public PeekableIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testUnsupportedOperationException() {
-		boolean exCaught = false;
-		for (Iterator<String> stream = this.buildPeekableIterator(); stream.hasNext();) {
-			String string = stream.next();
-			if (string.equals("three")) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Iterator<String> stream = this.buildPeekableIterator();
-		String string = null;
-		while (stream.hasNext()) {
-			string = stream.next();
-		}
-		try {
-			string = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	public void testHasNext() {
-		int i = 0;
-		for (Iterator<String> stream = this.buildPeekableIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(6, i);
-	}
-
-	public void testHasNextUpcast() {
-		int i = 0;
-		for (Iterator<Object> stream = this.buildPeekableIteratorUpcast(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(6, i);
-	}
-
-	public void testNext() {
-		Iterator<String> stream = this.buildPeekableIterator();
-		assertEquals("zero", stream.next());
-		assertEquals("one", stream.next());
-		assertEquals("two", stream.next());
-		assertEquals("three", stream.next());
-		assertEquals("four", stream.next());
-		assertEquals("five", stream.next());
-	}
-
-	public void testNextUpcast() {
-		Iterator<Object> stream = this.buildPeekableIteratorUpcast();
-		assertEquals("zero", stream.next());
-		assertEquals("one", stream.next());
-		assertEquals("two", stream.next());
-		assertEquals("three", stream.next());
-		assertEquals("four", stream.next());
-		assertEquals("five", stream.next());
-	}
-
-	public void testPeek() {
-		Object next = null;
-		for (PeekableIterator<String> stream = this.buildPeekableIterator(); stream.hasNext();) {
-			Object peek = stream.peek();
-			assertTrue("peek and next are prematurely identical", peek != next);
-			next = stream.next();
-			assertTrue("peek and next are not identical", peek == next);
-		}
-	}
-
-	public void testPeekUpcast() {
-		Object next = null;
-		for (PeekableIterator<Object> stream = this.buildPeekableIteratorUpcast(); stream.hasNext();) {
-			Object peek = stream.peek();
-			assertTrue("peek and next are prematurely identical", peek != next);
-			next = stream.next();
-			assertTrue("peek and next are not identical", peek == next);
-		}
-	}
-
-	private PeekableIterator<String> buildPeekableIterator() {
-		return this.buildPeekableIterator(this.buildNestedIterator());
-	}
-
-	private PeekableIterator<Object> buildPeekableIteratorUpcast() {
-		return this.buildPeekableIteratorUpcast(this.buildNestedIterator());
-	}
-
-	private PeekableIterator<String> buildPeekableIterator(Iterator<String> nestedIterator) {
-		return new PeekableIterator<String>(nestedIterator);
-	}
-
-	private PeekableIterator<Object> buildPeekableIteratorUpcast(Iterator<String> nestedIterator) {
-		return new PeekableIterator<Object>(nestedIterator);
-	}
-
-	private Iterator<String> buildNestedIterator() {
-		Collection<String> c = new ArrayList<String>();
-		c.add("zero");
-		c.add("one");
-		c.add("two");
-		c.add("three");
-		c.add("four");
-		c.add("five");
-		return c.iterator();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ReadOnlyCompositeListIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ReadOnlyCompositeListIteratorTests.java
deleted file mode 100644
index 30cbfe9..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ReadOnlyCompositeListIteratorTests.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyCompositeListIterator;
-
-@SuppressWarnings("nls")
-public class ReadOnlyCompositeListIteratorTests extends CompositeIteratorTests {
-
-	public ReadOnlyCompositeListIteratorTests(String name) {
-		super(name);
-	}
-
-	@Override
-	void verifyHasAnother(Iterator<String> stream) {
-		super.verifyHasAnother(stream);
-		ListIterator<String> stream2 = (ListIterator<String>) stream;
-		int i = 0;
-		while (stream2.hasPrevious()) {
-			stream2.previous();
-			i++;
-		}
-		assertEquals(8, i);
-	}
-
-	@Override
-	void verifyAnother(Iterator<String> stream) {
-		super.verifyAnother(stream);
-		int i = 8;
-		ListIterator<String> stream2 = (ListIterator<String>) stream;
-		while (stream2.hasPrevious()) {
-			assertEquals("bogus element", String.valueOf(i--), stream2.previous().substring(0, 1));
-		}
-	}
-
-	public void testNextIndexPreviousIndex() {
-		int i = 0;
-		ListIterator<String> stream = (ListIterator<String>) this.buildCompositeIterator();
-		assertEquals(i, stream.nextIndex());
-		assertEquals(i - 1, stream.previousIndex());
-		while (stream.hasNext()) {
-			stream.next();
-			i++;
-			assertEquals(i, stream.nextIndex());
-			assertEquals(i - 1, stream.previousIndex());
-		}
-		assertEquals("index is corrupt", 8, i);
-
-		assertEquals(i, stream.nextIndex());
-		assertEquals(i - 1, stream.previousIndex());
-		while (stream.hasPrevious()) {
-			stream.previous();
-			i--;
-			assertEquals(i, stream.nextIndex());
-			assertEquals(i - 1, stream.previousIndex());
-		}
-		assertEquals("index is corrupt", 0, i);
-	}
-
-	public void testPreviousIndex() {
-		// TODO
-	}
-
-	@Override
-	public void testRemove() {
-		// #remove() is not supported
-	}
-
-	@Override
-	public void testIllegalStateException() {
-		// #remove() is not supported
-	}
-
-	@Override
-	public void testEmptyIllegalStateException1() {
-		// #remove() is not supported
-	}
-
-	@Override
-	public void testEmptyIllegalStateException2() {
-		// #remove() is not supported
-	}
-
-	@Override
-	void verifyNoSuchElementException(Iterator<String> stream) {
-		super.verifyNoSuchElementException(stream);
-		ListIterator<String> stream2 = (ListIterator<String>) stream;
-		boolean exCaught = false;
-		String string = null;
-		while (stream2.hasPrevious()) {
-			string = stream2.previous();
-		}
-		try {
-			string = stream2.previous();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	@Override
-	void verifyUnsupportedOperationException(Iterator<String> stream) {
-		super.verifyUnsupportedOperationException(stream);
-		boolean exCaught = false;
-		ListIterator<String> stream2 = (ListIterator<String>) stream;
-		while (stream2.hasPrevious()) {
-			Object string = stream2.previous();
-			if (string.equals("333")) {
-				try {
-					stream2.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	@Override
-	void verifyIllegalStateException(Iterator<String> stream) {
-		super.verifyIllegalStateException(stream);
-		ListIterator<String> stream2 = (ListIterator<String>) stream;
-		boolean exCaught = false;
-		try {
-			stream2.set("junk");
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalStateException not thrown", exCaught);
-	}
-
-	@Override
-	void verifyEmptyHasAnother(Iterator<String> stream) {
-		super.verifyEmptyHasAnother(stream);
-		ListIterator<String> stream2 = (ListIterator<String>) stream;
-		int i = 0;
-		while (stream2.hasPrevious()) {
-			stream2.previous();
-			i++;
-		}
-		assertEquals(0, i);
-	}
-
-	// unchecked so we can override the unchecked method in superclass
-	@Override
-	@SuppressWarnings("unchecked")
-	Iterator<String> buildCompositeIterator(Iterator iterators) {
-		return new ReadOnlyCompositeListIterator<String>((ListIterator<ListIterator<String>>) iterators);
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	Iterator<String> buildCompositeIterator2() {
-		return new ReadOnlyCompositeListIterator<String>(this.buildIterator1(), this.buildIterator2(), this.buildIterator3());
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	Iterator<String> buildCompositeIterator3() {
-		return new ReadOnlyCompositeListIterator<String>(new ListIterator[] { this.buildIterator1(), this.buildIterator2(), this.buildIterator3() });
-	}
-
-	Iterator<String> buildCompositeIterator(String string, ListIterator<String> iterator) {
-		return this.buildCompositeListIterator(string, iterator);
-	}
-
-	ListIterator<String> buildCompositeListIterator(String string, ListIterator<String> iterator) {
-		return new ReadOnlyCompositeListIterator<String>(string, iterator);
-	}
-
-	public void testVariedNestedIterators() {
-		List<Integer> integerList = new ArrayList<Integer>();
-		integerList.add(new Integer(42));
-		integerList.add(new Integer(42));
-		integerList.add(new Integer(111));
-		integerList.add(new Integer(77));
-
-		List<Float> floatList = new ArrayList<Float>();
-		floatList.add(new Float(42.42f));
-		floatList.add(new Float(22.22f));
-		floatList.add(new Float(111.111f));
-		floatList.add(new Float(77.77f));
-
-		List<List<? extends Number>> list = new ArrayList<List<? extends Number>>();
-		list.add(integerList);
-		list.add(floatList);
-		ListIterator<Number> li = new ReadOnlyCompositeListIterator<Number>(list);
-		while (li.hasNext()) {
-			assertTrue(li.next().intValue() > 0);
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ReadOnlyIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ReadOnlyIteratorTests.java
deleted file mode 100644
index c6351b7..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ReadOnlyIteratorTests.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Vector;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyIterator;
-
-@SuppressWarnings("nls")
-public class ReadOnlyIteratorTests extends TestCase {
-
-	public ReadOnlyIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testHasNext() {
-		int i = 0;
-		for (Iterator<String> stream = this.buildReadOnlyIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(this.buildVector().size(), i);
-	}
-
-	public void testHasNextUpcast() {
-		int i = 0;
-		for (Iterator<Object> stream = this.buildReadOnlyIteratorUpcast(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(this.buildVector().size(), i);
-	}
-
-	public void testNext() {
-		Iterator<String> nestedIterator = this.buildNestedIterator();
-		for (Iterator<String> stream = this.buildReadOnlyIterator(); stream.hasNext();) {
-			assertEquals("bogus element", nestedIterator.next(), stream.next());
-		}
-	}
-
-	public void testNextUpcast() {
-		Iterator<String> nestedIterator = this.buildNestedIterator();
-		for (Iterator<Object> stream = this.buildReadOnlyIteratorUpcast(); stream.hasNext();) {
-			assertEquals("bogus element", nestedIterator.next(), stream.next());
-		}
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Iterator<String> stream = this.buildReadOnlyIterator();
-		String string = null;
-		while (stream.hasNext()) {
-			string = stream.next();
-		}
-		try {
-			string = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	public void testRemove() {
-		boolean exCaught = false;
-		for (Iterator<String> stream = this.buildReadOnlyIterator(); stream.hasNext();) {
-			if (stream.next().equals("three")) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	private Iterator<String> buildReadOnlyIterator() {
-		return this.buildReadOnlyIterator(this.buildNestedIterator());
-	}
-
-	private Iterator<Object> buildReadOnlyIteratorUpcast() {
-		return this.buildReadOnlyIteratorUpcast(this.buildNestedIterator());
-	}
-
-	private Iterator<String> buildReadOnlyIterator(Iterator<String> nestedIterator) {
-		return new ReadOnlyIterator<String>(nestedIterator);
-	}
-
-	private Iterator<Object> buildReadOnlyIteratorUpcast(Iterator<String> nestedIterator) {
-		return new ReadOnlyIterator<Object>(nestedIterator);
-	}
-
-	private Iterator<String> buildNestedIterator() {
-		return this.buildVector().iterator();
-	}
-
-	private Vector<String> buildVector() {
-		Vector<String> v = new Vector<String>();
-		v.addElement("one");
-		v.addElement("two");
-		v.addElement("three");
-		v.addElement("four");
-		v.addElement("five");
-		v.addElement("six");
-		v.addElement("seven");
-		v.addElement("eight");
-		return v;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ReadOnlyListIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ReadOnlyListIteratorTests.java
deleted file mode 100644
index c5a1548..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ReadOnlyListIteratorTests.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyListIterator;
-
-@SuppressWarnings("nls")
-public class ReadOnlyListIteratorTests extends TestCase {
-
-	public ReadOnlyListIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testHasNextAndHasPrevious() {
-		int i = 0;
-		ListIterator<String> stream = this.buildReadOnlyListIterator();
-		while (stream.hasNext()) {
-			stream.next();
-			i++;
-		}
-		assertEquals(this.buildList().size(), i);
-
-		while (stream.hasPrevious()) {
-			stream.previous();
-			i--;
-		}
-		assertEquals(0, i);
-	}
-
-	public void testHasNextAndHasPreviousUpcast() {
-		int i = 0;
-		ListIterator<Object> stream = this.buildReadOnlyListIteratorUpcast();
-		while (stream.hasNext()) {
-			stream.next();
-			i++;
-		}
-		assertEquals(this.buildList().size(), i);
-
-		while (stream.hasPrevious()) {
-			stream.previous();
-			i--;
-		}
-		assertEquals(0, i);
-	}
-
-	public void testNextAndPrevious() {
-		ListIterator<String> nestedListIterator = this.buildNestedListIterator();
-		ListIterator<String> stream = this.buildReadOnlyListIterator();
-		while (stream.hasNext()) {
-			assertEquals("bogus element", nestedListIterator.next(), stream.next());
-		}
-		while (stream.hasPrevious()) {
-			assertEquals("bogus element", nestedListIterator.previous(), stream.previous());
-		}
-	}
-
-	public void testNextAndPreviousUpcast() {
-		ListIterator<String> nestedListIterator = this.buildNestedListIterator();
-		ListIterator<Object> stream = this.buildReadOnlyListIteratorUpcast();
-		while (stream.hasNext()) {
-			assertEquals("bogus element", nestedListIterator.next(), stream.next());
-		}
-		while (stream.hasPrevious()) {
-			assertEquals("bogus element", nestedListIterator.previous(), stream.previous());
-		}
-	}
-
-	public void testNextIndexAndPreviousIndex() {
-		ListIterator<String> nestedListIterator = this.buildNestedListIterator();
-		ListIterator<String> stream = this.buildReadOnlyListIterator();
-		while (stream.hasNext()) {
-			assertEquals("bogus index", nestedListIterator.nextIndex(), stream.nextIndex());
-			nestedListIterator.next();
-			stream.next();
-		}
-		assertEquals("bogus index", this.buildList().size(), stream.nextIndex());
-		while (stream.hasPrevious()) {
-			assertEquals("bogus element", nestedListIterator.previousIndex(), stream.previousIndex());
-			nestedListIterator.previous();
-			stream.previous();
-		}
-		assertEquals("bogus index", -1, stream.previousIndex());
-	}
-
-	public void testNextIndexAndPreviousIndexUpcast() {
-		ListIterator<String> nestedListIterator = this.buildNestedListIterator();
-		ListIterator<Object> stream = this.buildReadOnlyListIteratorUpcast();
-		while (stream.hasNext()) {
-			assertEquals("bogus index", nestedListIterator.nextIndex(), stream.nextIndex());
-			nestedListIterator.next();
-			stream.next();
-		}
-		assertEquals("bogus index", this.buildList().size(), stream.nextIndex());
-		while (stream.hasPrevious()) {
-			assertEquals("bogus element", nestedListIterator.previousIndex(), stream.previousIndex());
-			nestedListIterator.previous();
-			stream.previous();
-		}
-		assertEquals("bogus index", -1, stream.previousIndex());
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		ListIterator<String> stream = this.buildReadOnlyListIterator();
-		String string = null;
-		while (stream.hasNext()) {
-			string = stream.next();
-		}
-		try {
-			string = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	public void testRemove() {
-		boolean exCaught = false;
-		for (ListIterator<String> stream = this.buildReadOnlyListIterator(); stream.hasNext();) {
-			if (stream.next().equals("three")) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testSet() {
-		boolean exCaught = false;
-		for (ListIterator<String> stream = this.buildReadOnlyListIterator(); stream.hasNext();) {
-			if (stream.next().equals("three")) {
-				try {
-					stream.set("bogus");
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testAdd() {
-		boolean exCaught = false;
-		for (ListIterator<String> stream = this.buildReadOnlyListIterator(); stream.hasNext();) {
-			if (stream.next().equals("three")) {
-				try {
-					stream.add("bogus");
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	private ListIterator<String> buildReadOnlyListIterator() {
-		return this.buildReadOnlyListIterator(this.buildNestedListIterator());
-	}
-
-	private ListIterator<Object> buildReadOnlyListIteratorUpcast() {
-		return this.buildReadOnlyListIteratorUpcast(this.buildNestedListIterator());
-	}
-
-	private ListIterator<String> buildReadOnlyListIterator(ListIterator<String> nestedListIterator) {
-		return new ReadOnlyListIterator<String>(nestedListIterator);
-	}
-
-	private ListIterator<Object> buildReadOnlyListIteratorUpcast(ListIterator<String> nestedListIterator) {
-		return new ReadOnlyListIterator<Object>(nestedListIterator);
-	}
-
-	private ListIterator<String> buildNestedListIterator() {
-		return this.buildList().listIterator();
-	}
-
-	private List<String> buildList() {
-		List<String> l = new ArrayList<String>();
-		l.add("one");
-		l.add("two");
-		l.add("three");
-		l.add("four");
-		l.add("five");
-		l.add("six");
-		l.add("seven");
-		l.add("eight");
-		return l;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SingleElementIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SingleElementIteratorTests.java
deleted file mode 100644
index b7e2269..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SingleElementIteratorTests.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementIterator;
-
-@SuppressWarnings("nls")
-public class SingleElementIteratorTests extends TestCase {
-
-	public SingleElementIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testHasNext() {
-		int i = 0;
-		for (Iterator<String> stream = this.buildSingleElementIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(1, i);
-	}
-
-	public void testNext() {
-		for (Iterator<String> stream = this.buildSingleElementIterator(); stream.hasNext();) {
-			assertEquals("bogus element", this.singleElement(), stream.next());
-		}
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Iterator<String> stream = this.buildSingleElementIterator();
-		String string = stream.next();
-		try {
-			string = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + string, exCaught);
-	}
-
-	public void testRemove() {
-		boolean exCaught = false;
-		for (Iterator<String> stream = this.buildSingleElementIterator(); stream.hasNext();) {
-			if (stream.next().equals(this.singleElement())) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	protected Iterator<String> buildSingleElementIterator() {
-		return new SingleElementIterator<String>(this.singleElement());
-	}
-
-	protected String singleElement() {
-		return "single element";
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SingleElementListIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SingleElementListIteratorTests.java
deleted file mode 100644
index 1ad48b2..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SingleElementListIteratorTests.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.Iterator;
-import java.util.ListIterator;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementListIterator;
-
-@SuppressWarnings("nls")
-public class SingleElementListIteratorTests extends SingleElementIteratorTests {
-
-	public SingleElementListIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testNextIndex() {
-		ListIterator<String> stream = this.buildSingleElementListIterator();
-		while (stream.hasNext()) {
-			assertEquals("bogus index", 0, stream.nextIndex());
-			stream.next();
-		}
-		assertEquals("bogus index", 1, stream.nextIndex());
-	}
-
-	public void testHasPrevious() {
-		int i = 0;
-		ListIterator<String> stream = this.buildSingleElementListIterator();
-		while (stream.hasNext()) {
-			stream.next();
-			i++;
-		}
-		assertEquals(1, i);
-
-		while (stream.hasPrevious()) {
-			stream.previous();
-			i++;
-		}
-		assertEquals(2, i);
-	}
-
-	public void testPrevious() {
-		ListIterator<String> stream = this.buildSingleElementListIterator();
-
-		while (stream.hasNext()) {
-			assertEquals("bogus element", this.singleElement(), stream.next());
-		}
-
-		while (stream.hasPrevious()) {
-			assertEquals("bogus element", this.singleElement(), stream.previous());
-		}
-	}
-
-	public void testPreviousIndex() {
-		ListIterator<String> stream = this.buildSingleElementListIterator();
-
-		while (stream.hasNext()) {
-			assertEquals("bogus index", 0, stream.nextIndex());
-			stream.next();
-		}
-
-		while (stream.hasPrevious()) {
-			assertEquals("bogus index", 0, stream.previousIndex());
-			stream.previous();
-		}
-
-		assertEquals("bogus index", -1, stream.previousIndex());
-	}
-
-	public void testAdd() {
-		boolean exCaught = false;
-		ListIterator<String> stream = this.buildSingleElementListIterator();
-
-		try {
-			stream.add("foo");
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testSet() {
-		boolean exCaught = false;
-		for (ListIterator<String> stream = this.buildSingleElementListIterator(); stream.hasNext();) {
-			if (stream.next().equals(this.singleElement())) {
-				try {
-					stream.set("foo");
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	@Override
-	protected Iterator<String> buildSingleElementIterator() {
-		return new SingleElementListIterator<String>(this.singleElement());
-	}
-
-	protected ListIterator<String> buildSingleElementListIterator() {
-		return (ListIterator<String>) this.buildSingleElementIterator();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SuperIteratorWrapperTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SuperIteratorWrapperTests.java
deleted file mode 100644
index 080062f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SuperIteratorWrapperTests.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.iterators.SuperIteratorWrapper;
-
-@SuppressWarnings("nls")
-public class SuperIteratorWrapperTests extends TestCase {
-
-	public SuperIteratorWrapperTests(String name) {
-		super(name);
-	}
-
-	public void testIterator() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("foo");
-		list.add("bar");
-		list.add("baz");
-		String concat = "";
-		for (Iterator<String> stream = list.iterator(); stream.hasNext(); ) {
-			concat += stream.next();
-		}
-		assertEquals("foobarbaz", concat);
-
-		Iterator<Object> iterator = new SuperIteratorWrapper<Object>(list);
-		concat = "";
-		while (iterator.hasNext()) {
-			Object next = iterator.next();
-			if (next.equals("bar")) {
-				iterator.remove();
-			} else {
-				concat += next;
-			}
-		}
-		assertEquals("foobaz", concat);
-		assertEquals(2, list.size());
-		assertFalse(list.contains("bar"));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SynchronizedIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SynchronizedIteratorTests.java
deleted file mode 100644
index e44e72e..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SynchronizedIteratorTests.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.SynchronizedIterator;
-import org.eclipse.jpt.utility.tests.internal.MultiThreadedTestCase;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class SynchronizedIteratorTests
-	extends MultiThreadedTestCase
-{
-	public SynchronizedIteratorTests(String name) {
-		super(name);
-	}
-
-	/**
-	 * test that an unsynchronized iterator will produce corrupt output;
-	 * thread 1 will read the first element from the iterator
-	 * and then sleep for a bit, allowing thread 2 to sneak in and
-	 * read the same element from the iterator
-	 */
-	public void testUnsynchronizedNext() throws Exception {
-		TestIterator<String> iterator = this.buildTestIterator(TWO_TICKS);
-
-		NextTestRunnable<String> runnable1 = new NextTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		NextTestRunnable<String> runnable2 = new NextTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		iterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// both threads should have read the same element from the iterator :-(
-		assertEquals("foo", runnable1.next);
-		assertEquals("foo", runnable2.next);
-	}
-
-	/**
-	 * test that a synchronized iterator will produce valid output;
-	 * thread 1 will read the first element from the iterator
-	 * and then sleep for a bit, but thread 2 will be locked out and
-	 * wait to read the second element from the iterator
-	 */
-	public void testSynchronizedNext() throws Exception {
-		TestIterator<String> nestedIterator = this.buildTestIterator(TWO_TICKS);
-		Iterator<String> iterator = this.buildSynchronizedIterator(nestedIterator);
-
-		NextTestRunnable<String> runnable1 = new NextTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		NextTestRunnable<String> runnable2 = new NextTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		nestedIterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// the threads should have read the correct elements from the iterator :-)
-		assertEquals("foo", runnable1.next);
-		assertEquals("bar", runnable2.next);
-	}
-
-	public void testUnsynchronizedHasNext() throws Exception {
-		TestIterator<String> iterator = this.buildTestIterator(TWO_TICKS);
-		iterator.next();
-		iterator.next();
-
-		NextTestRunnable<String> runnable1 = new NextTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		HasNextTestRunnable<String> runnable2 = new HasNextTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		iterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// thread 1 will have the last element,
-		// but thread 2 will think there are more elements on the iterator :-(
-		assertEquals("baz", runnable1.next);
-		assertEquals(true, runnable2.hasNext);
-	}
-
-	public void testSynchronizedHasNext() throws Exception {
-		TestIterator<String> nestedIterator = this.buildTestIterator(TWO_TICKS);
-		Iterator<String> iterator = this.buildSynchronizedIterator(nestedIterator);
-		iterator.next();
-		iterator.next();
-
-		NextTestRunnable<String> runnable1 = new NextTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		HasNextTestRunnable<String> runnable2 = new HasNextTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		nestedIterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// thread 1 will have the last element,
-		// and thread 2 will think there are no more elements on the iterator :-)
-		assertEquals("baz", runnable1.next);
-		assertEquals(false, runnable2.hasNext);
-	}
-
-	public void testUnsynchronizedRemove() throws Exception {
-		TestIterator<String> iterator = this.buildTestIterator(TWO_TICKS);
-		iterator.next();
-
-		NextTestRunnable<String> runnable1 = new NextTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		RemoveTestRunnable<String> runnable2 = new RemoveTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		iterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// the wrong element was removed :-(
-		assertEquals("bar", runnable1.next);
-		assertFalse(iterator.list.contains("foo"));
-		assertTrue(iterator.list.contains("bar"));
-		assertTrue(iterator.list.contains("baz"));
-	}
-
-	public void testSynchronizedRemove() throws Exception {
-		TestIterator<String> nestedIterator = this.buildTestIterator(TWO_TICKS);
-		Iterator<String> iterator = this.buildSynchronizedIterator(nestedIterator);
-		iterator.next();
-
-		NextTestRunnable<String> runnable1 = new NextTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		RemoveTestRunnable<String> runnable2 = new RemoveTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		nestedIterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// the correct element was removed :-)
-		assertEquals("bar", runnable1.next);
-		assertTrue(nestedIterator.list.contains("foo"));
-		assertFalse(nestedIterator.list.contains("bar"));
-		assertTrue(nestedIterator.list.contains("baz"));
-	}
-
-	TestIterator<String> buildTestIterator(long delay) {
-		return new TestIterator<String>(delay, this.buildArray());
-	}
-
-	String[] buildArray() {
-		return new String[] {"foo", "bar", "baz"};
-	}
-
-	Iterator<String> buildSynchronizedIterator(Iterator<String> nestedIterator) {
-		return new SynchronizedIterator<String>(nestedIterator);
-	}
-
-
-	/**
-	 * next runnable
-	 */
-	class NextTestRunnable<E> implements Runnable {
-		final Iterator<E> iterator;
-		E next;
-
-		NextTestRunnable(Iterator<E> iterator) {
-			super();
-			this.iterator = iterator;
-		}
-
-		public void run() {
-			this.next = this.iterator.next();
-		}
-
-	}
-
-	/**
-	 * has next runnable
-	 */
-	class HasNextTestRunnable<E> implements Runnable {
-		final Iterator<E> iterator;
-		boolean hasNext;
-
-		HasNextTestRunnable(Iterator<E> iterator) {
-			super();
-			this.iterator = iterator;
-		}
-
-		public void run() {
-			this.hasNext = this.iterator.hasNext();
-		}
-
-	}
-
-	/**
-	 * remove runnable
-	 */
-	class RemoveTestRunnable<E> implements Runnable {
-		final Iterator<E> iterator;
-
-		RemoveTestRunnable(Iterator<E> iterator) {
-			super();
-			this.iterator = iterator;
-		}
-
-		public void run() {
-			this.iterator.remove();
-		}
-
-	}
-
-	/**
-	 * Test iterator: If {@link #next()} is called while executing on the
-	 * {@link slowThread}, the iterator will delay for the configured time.
-	 */
-	static class TestIterator<E> implements Iterator<E> {
-		final long delay;
-		final ArrayList<E> list = new ArrayList<E>();
-		int nextIndex = 0;
-		int lastIndex = -1;
-		Thread slowThread;
-
-		TestIterator(long delay, E... array) {
-			super();
-			this.delay = delay;
-			CollectionTools.addAll(this.list, array);
-		}
-
-		public boolean hasNext() {
-			return this.nextIndex != this.list.size();
-		}
-
-		public E next() {
-			if (this.hasNext()) {
-				E next = this.list.get(this.nextIndex);
-				if (Thread.currentThread() == this.slowThread) {
-					TestTools.sleep(this.delay);
-				}
-				this.lastIndex = this.nextIndex++;
-				return next;
-			}
-			throw new NoSuchElementException();
-		}
-
-		public void remove() {
-			if (this.lastIndex == -1) {
-				throw new IllegalStateException();
-			}
-			this.list.remove(this.lastIndex);
-			if (this.lastIndex < this.nextIndex) {  // check necessary for ListIterator
-				this.nextIndex--;
-			}
-			this.lastIndex = -1;
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SynchronizedListIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SynchronizedListIteratorTests.java
deleted file mode 100644
index 727da0c..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SynchronizedListIteratorTests.java
+++ /dev/null
@@ -1,524 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-
-import org.eclipse.jpt.utility.internal.iterators.SynchronizedListIterator;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class SynchronizedListIteratorTests
-	extends SynchronizedIteratorTests
-{
-	public SynchronizedListIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testUnsynchronizedPrevious() throws Exception {
-		TestListIterator<String> iterator = this.buildTestIterator(TWO_TICKS);
-		iterator.next();
-		iterator.next();
-
-		PreviousTestRunnable<String> runnable1 = new PreviousTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		PreviousTestRunnable<String> runnable2 = new PreviousTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		iterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// both threads should have read the same element from the iterator :-(
-		assertEquals("bar", runnable1.previous);
-		assertEquals("bar", runnable2.previous);
-	}
-
-	public void testSynchronizedPrevious() throws Exception {
-		TestListIterator<String> nestedIterator = this.buildTestIterator(TWO_TICKS);
-		ListIterator<String> iterator = this.buildSynchronizedIterator(nestedIterator);
-		iterator.next();
-		iterator.next();
-
-		PreviousTestRunnable<String> runnable1 = new PreviousTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		PreviousTestRunnable<String> runnable2 = new PreviousTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		nestedIterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// the threads should have read the correct elements from the iterator :-)
-		assertEquals("bar", runnable1.previous);
-		assertEquals("foo", runnable2.previous);
-	}
-
-	public void testUnsynchronizedHasPrevious() throws Exception {
-		TestListIterator<String> iterator = this.buildTestIterator(TWO_TICKS);
-		iterator.next();
-
-		PreviousTestRunnable<String> runnable1 = new PreviousTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		HasPreviousTestRunnable<String> runnable2 = new HasPreviousTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		iterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// thread 1 will have the first element,
-		// but thread 2 will think there are more "previous" elements on the iterator :-(
-		assertEquals("foo", runnable1.previous);
-		assertEquals(true, runnable2.hasPrevious);
-	}
-
-	public void testSynchronizedHasPrevious() throws Exception {
-		TestListIterator<String> nestedIterator = this.buildTestIterator(TWO_TICKS);
-		ListIterator<String> iterator = this.buildSynchronizedIterator(nestedIterator);
-		iterator.next();
-
-		PreviousTestRunnable<String> runnable1 = new PreviousTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		HasPreviousTestRunnable<String> runnable2 = new HasPreviousTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		nestedIterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// thread 1 will have the first element,
-		// and thread 2 will think there are no more "previous" elements on the iterator :-)
-		assertEquals("foo", runnable1.previous);
-		assertEquals(false, runnable2.hasPrevious);
-	}
-
-	public void testUnsynchronizedNextIndex() throws Exception {
-		TestListIterator<String> iterator = this.buildTestIterator(TWO_TICKS);
-
-		NextTestRunnable<String> runnable1 = new NextTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		NextIndexTestRunnable<String> runnable2 = new NextIndexTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		iterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// thread 1 will have the first element,
-		// but thread 2 will think the next index is still 0 :-(
-		assertEquals("foo", runnable1.next);
-		assertEquals(0, runnable2.nextIndex);
-	}
-
-	public void testSynchronizedNextIndex() throws Exception {
-		TestListIterator<String> nestedIterator = this.buildTestIterator(TWO_TICKS);
-		ListIterator<String> iterator = this.buildSynchronizedIterator(nestedIterator);
-
-		NextTestRunnable<String> runnable1 = new NextTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		NextIndexTestRunnable<String> runnable2 = new NextIndexTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		nestedIterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// thread 1 will have the first element,
-		// and thread 2 will think the next index is 1 :-)
-		assertEquals("foo", runnable1.next);
-		assertEquals(1, runnable2.nextIndex);
-	}
-
-	public void testUnsynchronizedPreviousIndex() throws Exception {
-		TestListIterator<String> iterator = this.buildTestIterator(TWO_TICKS);
-		iterator.next();
-
-		PreviousTestRunnable<String> runnable1 = new PreviousTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		PreviousIndexTestRunnable<String> runnable2 = new PreviousIndexTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		iterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// thread 1 will have the first element,
-		// but thread 2 will think the next index is still 0 :-(
-		assertEquals("foo", runnable1.previous);
-		assertEquals(0, runnable2.previousIndex);
-	}
-
-	public void testSynchronizedPreviousIndex() throws Exception {
-		TestListIterator<String> nestedIterator = this.buildTestIterator(TWO_TICKS);
-		ListIterator<String> iterator = this.buildSynchronizedIterator(nestedIterator);
-		iterator.next();
-
-		PreviousTestRunnable<String> runnable1 = new PreviousTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		PreviousIndexTestRunnable<String> runnable2 = new PreviousIndexTestRunnable<String>(iterator);
-		Thread thread2 = this.buildThread(runnable2);
-		nestedIterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// thread 1 will have the first element,
-		// and thread 2 will think the next index is -1 :-)
-		assertEquals("foo", runnable1.previous);
-		assertEquals(-1, runnable2.previousIndex);
-	}
-
-	public void testUnsynchronizedSet() throws Exception {
-		TestListIterator<String> iterator = this.buildTestIterator(TWO_TICKS);
-		iterator.next();
-
-		NextTestRunnable<String> runnable1 = new NextTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		SetTestRunnable<String> runnable2 = new SetTestRunnable<String>(iterator, "xxx");
-		Thread thread2 = this.buildThread(runnable2);
-		iterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// the wrong element was set :-(
-		assertEquals("bar", runnable1.next);
-		assertFalse(iterator.list.contains("foo"));
-		assertTrue(iterator.list.contains("xxx"));
-		assertTrue(iterator.list.contains("bar"));
-		assertTrue(iterator.list.contains("baz"));
-	}
-
-	public void testSynchronizedSet() throws Exception {
-		TestListIterator<String> nestedIterator = this.buildTestIterator(TWO_TICKS);
-		ListIterator<String> iterator = this.buildSynchronizedIterator(nestedIterator);
-		iterator.next();
-
-		NextTestRunnable<String> runnable1 = new NextTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		SetTestRunnable<String> runnable2 = new SetTestRunnable<String>(iterator, "xxx");
-		Thread thread2 = this.buildThread(runnable2);
-		nestedIterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// the right element was set :-)
-		assertEquals("bar", runnable1.next);
-		assertTrue(nestedIterator.list.contains("foo"));
-		assertFalse(nestedIterator.list.contains("bar"));
-		assertTrue(nestedIterator.list.contains("xxx"));
-		assertTrue(nestedIterator.list.contains("baz"));
-	}
-
-	public void testUnsynchronizedAdd() throws Exception {
-		TestListIterator<String> iterator = this.buildTestIterator(TWO_TICKS);
-		iterator.next();
-
-		NextTestRunnable<String> runnable1 = new NextTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		AddTestRunnable<String> runnable2 = new AddTestRunnable<String>(iterator, "xxx");
-		Thread thread2 = this.buildThread(runnable2);
-		iterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// the element was added at the wrong index :-(
-		assertEquals("bar", runnable1.next);
-		assertTrue(iterator.list.contains("foo"));
-		assertEquals(0, iterator.list.indexOf("xxx"));
-		assertTrue(iterator.list.contains("xxx"));
-		assertTrue(iterator.list.contains("bar"));
-		assertTrue(iterator.list.contains("baz"));
-	}
-
-	public void testSynchronizedAdd() throws Exception {
-		TestListIterator<String> nestedIterator = this.buildTestIterator(TWO_TICKS);
-		ListIterator<String> iterator = this.buildSynchronizedIterator(nestedIterator);
-		iterator.next();
-
-		NextTestRunnable<String> runnable1 = new NextTestRunnable<String>(iterator);
-		Thread thread1 = this.buildThread(runnable1);
-		AddTestRunnable<String> runnable2 = new AddTestRunnable<String>(iterator, "xxx");
-		Thread thread2 = this.buildThread(runnable2);
-		nestedIterator.slowThread = thread1;
-
-		thread1.start();
-
-		// allow thread 1 to read the first element and get bogged down
-		this.sleep(TICK);
-		thread2.start();
-
-		// wait for the threads to finish
-		thread1.join();
-		thread2.join();
-
-		// the element was added at the correct index :-)
-		assertEquals("bar", runnable1.next);
-		assertTrue(nestedIterator.list.contains("foo"));
-		assertEquals(1, nestedIterator.list.indexOf("xxx"));
-		assertTrue(nestedIterator.list.contains("xxx"));
-		assertTrue(nestedIterator.list.contains("bar"));
-		assertTrue(nestedIterator.list.contains("baz"));
-	}
-
-	@Override
-	ListIterator<String> buildSynchronizedIterator(Iterator<String> nestedIterator) {
-		return new SynchronizedListIterator<String>((ListIterator<String>) nestedIterator);
-	}
-
-	@Override
-	TestListIterator<String> buildTestIterator(long delay) {
-		return new TestListIterator<String>(delay, this.buildArray());
-	}
-
-	/**
-	 * previous runnable
-	 */
-	class PreviousTestRunnable<E> implements Runnable {
-		final ListIterator<E> iterator;
-		E previous;
-
-		PreviousTestRunnable(ListIterator<E> iterator) {
-			super();
-			this.iterator = iterator;
-		}
-
-		public void run() {
-			this.previous = this.iterator.previous();
-		}
-
-	}
-
-	/**
-	 * has previous runnable
-	 */
-	class HasPreviousTestRunnable<E> implements Runnable {
-		final ListIterator<E> iterator;
-		boolean hasPrevious;
-
-		HasPreviousTestRunnable(ListIterator<E> iterator) {
-			super();
-			this.iterator = iterator;
-		}
-
-		public void run() {
-			this.hasPrevious = this.iterator.hasPrevious();
-		}
-
-	}
-
-	/**
-	 * next index runnable
-	 */
-	class NextIndexTestRunnable<E> implements Runnable {
-		final ListIterator<E> iterator;
-		int nextIndex;
-
-		NextIndexTestRunnable(ListIterator<E> iterator) {
-			super();
-			this.iterator = iterator;
-		}
-
-		public void run() {
-			this.nextIndex = this.iterator.nextIndex();
-		}
-
-	}
-
-	/**
-	 * previous index runnable
-	 */
-	class PreviousIndexTestRunnable<E> implements Runnable {
-		final ListIterator<E> iterator;
-		int previousIndex;
-
-		PreviousIndexTestRunnable(ListIterator<E> iterator) {
-			super();
-			this.iterator = iterator;
-		}
-
-		public void run() {
-			this.previousIndex = this.iterator.previousIndex();
-		}
-
-	}
-
-	/**
-	 * set runnable
-	 */
-	class SetTestRunnable<E> implements Runnable {
-		final ListIterator<E> iterator;
-		final E element;
-
-		SetTestRunnable(ListIterator<E> iterator, E element) {
-			super();
-			this.iterator = iterator;
-			this.element = element;
-		}
-
-		public void run() {
-			this.iterator.set(this.element);
-		}
-
-	}
-
-	/**
-	 * add runnable
-	 */
-	class AddTestRunnable<E> implements Runnable {
-		final ListIterator<E> iterator;
-		final E element;
-
-		AddTestRunnable(ListIterator<E> iterator, E element) {
-			super();
-			this.iterator = iterator;
-			this.element = element;
-		}
-
-		public void run() {
-			this.iterator.add(this.element);
-		}
-
-	}
-
-	/**
-	 * Test iterator: If {@link #next()} or {@link #previous()} is called
-	 * while executing on the {@link slowThread}, the iterator will delay
-	 * for the configured time.
-	 */
-	static class TestListIterator<E> extends TestIterator<E> implements ListIterator<E> {
-
-		TestListIterator(long delay, E... array) {
-			super(delay, array);
-		}
-
-		public int nextIndex() {
-			return this.nextIndex;
-		}
-
-		public boolean hasPrevious() {
-			return this.nextIndex != 0;
-		}
-
-		public E previous() {
-			if (this.hasPrevious()) {
-				E previous = this.list.get(this.previousIndex());
-				if (Thread.currentThread() == this.slowThread) {
-					TestTools.sleep(this.delay);
-				}
-				this.nextIndex--;
-				this.lastIndex = this.nextIndex;
-				return previous;
-			}
-			throw new NoSuchElementException();
-		}
-
-		public int previousIndex() {
-			return this.nextIndex - 1;
-		}
-
-		public void set(E e) {
-			if (this.lastIndex == -1) {
-				throw new IllegalStateException();
-			}
-			this.list.set(this.lastIndex, e);
-		}
-
-		public void add(E e) {
-			this.list.add(this.lastIndex, e);
-			this.lastIndex++;
-			this.lastIndex = -1;
-		}
-
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/TransformationIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/TransformationIteratorTests.java
deleted file mode 100644
index 0cfa7fa..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/TransformationIteratorTests.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-@SuppressWarnings("nls")
-public class TransformationIteratorTests extends TestCase {
-
-	public TransformationIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testHasNext() {
-		int i = 0;
-		for (Iterator<Integer> stream = this.buildIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(8, i);
-	}
-
-	public void testHasNextUpcast() {
-		int i = 0;
-		for (Iterator<Object> stream = this.buildIteratorUpcast(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(8, i);
-	}
-
-	public void testInnerHasNext() {
-		int i = 0;
-		for (Iterator<Integer> stream = this.buildInnerIterator(); stream.hasNext();) {
-			stream.next();
-			i++;
-		}
-		assertEquals(8, i);
-	}
-
-	public void testNext() {
-		int i = 0;
-		for (Iterator<Integer> stream = this.buildIterator(); stream.hasNext();) {
-			assertEquals("bogus transformation", ++i, stream.next().intValue());
-		}
-	}
-
-	public void testNextUpcast() {
-		int i = 0;
-		for (Iterator<Object> stream = this.buildIteratorUpcast(); stream.hasNext();) {
-			assertEquals("bogus transformation", ++i, ((Integer) stream.next()).intValue());
-		}
-	}
-
-	public void testInnerNext() {
-		int i = 0;
-		for (Iterator<Integer> stream = this.buildInnerIterator(); stream.hasNext();) {
-			assertEquals("bogus transformation", ++i, stream.next().intValue());
-		}
-	}
-
-	public void testRemove() {
-		Collection<String> c = this.buildCollection();
-		for (Iterator<Integer> stream = this.buildInnerTransformationIterator(c.iterator()); stream.hasNext();) {
-			if (stream.next().intValue() == 3) {
-				stream.remove();
-			}
-		}
-		assertEquals("nothing removed", this.buildCollection().size() - 1, c.size());
-		assertFalse("element still in collection", c.contains("333"));
-		assertTrue("wrong element removed", c.contains("22"));
-	}
-
-	public void testInnerRemove() {
-		Collection<String> c = this.buildCollection();
-		for (Iterator<Integer> stream = this.buildTransformationIterator(c.iterator(), this.buildTransformer()); stream.hasNext();) {
-			if (stream.next().intValue() == 3) {
-				stream.remove();
-			}
-		}
-		assertEquals("nothing removed", this.buildCollection().size() - 1, c.size());
-		assertFalse("element still in collection", c.contains("333"));
-		assertTrue("wrong element removed", c.contains("22"));
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		Iterator<Integer> stream = this.buildIterator();
-		Integer integer = null;
-		while (stream.hasNext()) {
-			integer = stream.next();
-		}
-		try {
-			integer = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + integer, exCaught);
-	}
-
-	public void testUnsupportedOperationException() {
-		boolean exCaught = false;
-		for (Iterator<Integer> stream = this.buildUnmodifiableIterator(); stream.hasNext();) {
-			int i = stream.next().intValue();
-			if (i == 3) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testIllegalStateException() {
-		boolean exCaught = false;
-		try {
-			this.buildIterator().remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalStateException not thrown", exCaught);
-	}
-
-	private Iterator<Integer> buildIterator() {
-		return this.buildTransformationIterator(this.buildNestedIterator(), this.buildTransformer());
-	}
-
-	private Iterator<Object> buildIteratorUpcast() {
-		return this.buildTransformationIteratorUpcast(this.buildNestedIterator(), this.buildTransformerUpcast());
-	}
-
-	private Iterator<Integer> buildInnerIterator() {
-		return this.buildInnerTransformationIterator(this.buildNestedIterator());
-	}
-
-	private Iterator<Integer> buildUnmodifiableIterator() {
-		return this.buildTransformationIterator(this.buildUnmodifiableNestedIterator(), this.buildTransformer());
-	}
-
-	private Iterator<Integer> buildTransformationIterator(Iterator<String> nestedIterator, Transformer<String, Integer> transformer) {
-		return new TransformationIterator<String, Integer>(nestedIterator, transformer);
-	}
-
-	private Iterator<Object> buildTransformationIteratorUpcast(Iterator<String> nestedIterator, Transformer<Object, Integer> transformer) {
-		return new TransformationIterator<Object, Object>(nestedIterator, transformer);
-	}
-
-	private Transformer<String, Integer> buildTransformer() {
-		// transform each string into an integer with a value of the string's length
-		return new Transformer<String, Integer>() {
-			public Integer transform(String next) {
-				return new Integer(next.length());
-			}
-		};
-	}
-
-	private Transformer<Object, Integer> buildTransformerUpcast() {
-		// transform each string into an integer with a value of the string's length
-		return new Transformer<Object, Integer>() {
-			public Integer transform(Object next) {
-				return new Integer(((String) next).length());
-			}
-		};
-	}
-
-	private Iterator<Integer> buildInnerTransformationIterator(Iterator<String> nestedIterator) {
-		// transform each string into an integer with a value of the string's length
-		return new TransformationIterator<String, Integer>(nestedIterator) {
-			@Override
-			protected Integer transform(String next) {
-				return new Integer(next.length());
-			}
-		};
-	}
-
-	private Iterator<String> buildNestedIterator() {
-		return this.buildCollection().iterator();
-	}
-
-	private Iterator<String> buildUnmodifiableNestedIterator() {
-		return this.buildUnmodifiableCollection().iterator();
-	}
-
-	private Collection<String> buildCollection() {
-		Collection<String> c = new ArrayList<String>();
-		c.add("1");
-		c.add("22");
-		c.add("333");
-		c.add("4444");
-		c.add("55555");
-		c.add("666666");
-		c.add("7777777");
-		c.add("88888888");
-		return c;
-	}
-
-	private Collection<String> buildUnmodifiableCollection() {
-		return Collections.unmodifiableCollection(this.buildCollection());
-	}
-
-	public void testInvalidTransformationIterator() {
-		// missing method override
-		Iterator<Integer> iterator = new TransformationIterator<String, Integer>(this.buildCollection().iterator());
-		boolean exCaught = false;
-		try {
-			Integer integer = iterator.next();
-			fail("invalid integer: " + integer);
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown", exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/TransformationListIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/TransformationListIteratorTests.java
deleted file mode 100644
index 28863e7..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/TransformationListIteratorTests.java
+++ /dev/null
@@ -1,322 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.iterators.TransformationListIterator;
-
-@SuppressWarnings("nls")
-public class TransformationListIteratorTests extends TestCase {
-
-	public TransformationListIteratorTests(String name) {
-		super(name);
-	}
-
-	public void testHasNextAndHasPrevious() {
-		int i = 0;
-		ListIterator<Integer> stream = this.buildIterator();
-
-		while (stream.hasNext()) {
-			stream.next();
-			i++;
-		}
-		assertEquals(8, i);
-
-		while (stream.hasPrevious()) {
-			stream.previous();
-			i--;
-		}
-		assertEquals(0, i);
-	}
-
-	public void testHasNextAndHasPreviousUpcast() {
-		int i = 0;
-		ListIterator<Object> stream = this.buildIteratorUpcast();
-
-		while (stream.hasNext()) {
-			stream.next();
-			i++;
-		}
-		assertEquals(8, i);
-
-		while (stream.hasPrevious()) {
-			stream.previous();
-			i--;
-		}
-		assertEquals(0, i);
-	}
-
-	public void testInnerHasNextAndHasPrevious() {
-		int i = 0;
-		ListIterator<Integer> stream = this.buildInnerIterator();
-
-		while (stream.hasNext()) {
-			stream.next();
-			i++;
-		}
-		assertEquals(8, i);
-
-		while (stream.hasPrevious()) {
-			stream.previous();
-			i--;
-		}
-		assertEquals(0, i);
-	}
-
-	public void testNextAndPrevious() {
-		int i = 0;
-		ListIterator<Integer> stream = this.buildIterator();
-
-		while (stream.hasNext()) {
-			assertEquals(++i, stream.next().intValue());
-		}
-
-		++i;
-
-		while (stream.hasPrevious()) {
-			assertEquals(--i, stream.previous().intValue());
-		}
-	}
-
-	public void testInnerNextAndPrevious() {
-		int i = 0;
-		ListIterator<Integer> stream = this.buildInnerIterator();
-
-		while (stream.hasNext()) {
-			assertEquals(++i, stream.next().intValue());
-		}
-
-		++i;
-
-		while (stream.hasPrevious()) {
-			assertEquals(--i, stream.previous().intValue());
-		}
-	}
-
-	public void testNextIndexAndPreviousIndex() {
-		int i = -1;
-		ListIterator<Integer> stream = this.buildIterator();
-
-		while (stream.hasNext()) {
-			assertEquals(++i, stream.nextIndex());
-			stream.next();
-		}
-
-		++i;
-
-		while (stream.hasPrevious()) {
-			assertEquals(--i, stream.previousIndex());
-			stream.previous();
-		}
-	}
-
-	public void testInnerNextIndexAndPreviousIndex() {
-		int i = -1;
-		ListIterator<Integer> stream = this.buildInnerIterator();
-
-		while (stream.hasNext()) {
-			assertEquals(++i, stream.nextIndex());
-			stream.next();
-		}
-
-		++i;
-
-		while (stream.hasPrevious()) {
-			assertEquals(--i, stream.previousIndex());
-			stream.previous();
-		}
-	}
-
-	public void testRemove() {
-		List<String> l = this.buildList();
-		for (ListIterator<Integer> stream = this.buildInnerTransformationListIterator(l.listIterator()); stream.hasNext();) {
-			if (stream.next().intValue() == 3) {
-				stream.remove();
-			}
-		}
-		assertEquals("nothing removed", this.buildList().size() - 1, l.size());
-		assertFalse("element still in list", l.contains("333"));
-		assertTrue("wrong element removed", l.contains("22"));
-	}
-
-	public void testInnerRemove() {
-		List<String> l = this.buildList();
-		for (ListIterator<Integer> stream = this.buildTransformationListIterator(l.listIterator(), this.buildTransformer()); stream.hasNext();) {
-			if (stream.next().intValue() == 3) {
-				stream.remove();
-			}
-		}
-		assertEquals("nothing removed", this.buildList().size() - 1, l.size());
-		assertFalse("element still in list", l.contains("333"));
-		assertTrue("wrong element removed", l.contains("22"));
-	}
-
-	public void testUnsupportedOperationExceptionOnAdd() {
-		ListIterator<Integer> stream = this.buildIterator();
-		boolean exCaught = false;
-		try {
-			stream.add(new Integer(0));
-			fail("exception not thrown");
-		} catch (UnsupportedOperationException e) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testUnsupportedOperationExceptionOnSet() {
-		ListIterator<Integer> stream = this.buildIterator();
-		boolean exCaught = false;
-		try {
-			stream.set(new Integer(0));
-			fail("exception not thrown");
-		} catch (UnsupportedOperationException e) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testNoSuchElementException() {
-		boolean exCaught = false;
-		ListIterator<Integer> stream = this.buildIterator();
-		Integer integer = null;
-		while (stream.hasNext()) {
-			integer = stream.next();
-		}
-		try {
-			integer = stream.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + integer, exCaught);
-	}
-
-	public void testUnsupportedOperationException() {
-		boolean exCaught = false;
-		for (Iterator<Integer> stream = this.buildUnmodifiableIterator(); stream.hasNext();) {
-			int i = stream.next().intValue();
-			if (i == 3) {
-				try {
-					stream.remove();
-				} catch (UnsupportedOperationException ex) {
-					exCaught = true;
-				}
-			}
-		}
-		assertTrue("UnsupportedOperationException not thrown", exCaught);
-	}
-
-	public void testIllegalStateException() {
-		boolean exCaught = false;
-		try {
-			this.buildIterator().remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalStateException not thrown", exCaught);
-	}
-
-	private ListIterator<Integer> buildIterator() {
-		return this.buildTransformationListIterator(this.buildNestedIterator(), this.buildTransformer());
-	}
-
-	private ListIterator<Object> buildIteratorUpcast() {
-		return this.buildTransformationListIteratorUpcast(this.buildNestedIterator(), this.buildTransformerUpcast());
-	}
-
-	private ListIterator<Integer> buildInnerIterator() {
-		return this.buildInnerTransformationListIterator(this.buildNestedIterator());
-	}
-
-	private ListIterator<Integer> buildUnmodifiableIterator() {
-		return this.buildTransformationListIterator(this.buildUnmodifiableNestedIterator(), this.buildTransformer());
-	}
-
-	private ListIterator<Integer> buildTransformationListIterator(ListIterator<String> nestedIterator, Transformer<String, Integer> transformer) {
-		return new TransformationListIterator<String, Integer>(nestedIterator, transformer);
-	}
-
-	private ListIterator<Object> buildTransformationListIteratorUpcast(ListIterator<String> nestedIterator, Transformer<Object, Integer> transformer) {
-		return new TransformationListIterator<Object, Object>(nestedIterator, transformer);
-	}
-
-	private Transformer<String, Integer> buildTransformer() {
-		// transform each string into an integer with a value of the string's length
-		return new Transformer<String, Integer>() {
-			public Integer transform(String next) {
-				return new Integer(next.length());
-			}
-		};
-	}
-
-	private Transformer<Object, Integer> buildTransformerUpcast() {
-		// transform each string into an integer with a value of the string's length
-		return new Transformer<Object, Integer>() {
-			public Integer transform(Object next) {
-				return new Integer(((String) next).length());
-			}
-		};
-	}
-
-	private ListIterator<Integer> buildInnerTransformationListIterator(ListIterator<String> nestedIterator) {
-		// transform each string into an integer with a value of the string's length
-		return new TransformationListIterator<String, Integer>(nestedIterator) {
-			@Override
-			protected Integer transform(String next) {
-				return new Integer(next.length());
-			}
-		};
-	}
-
-	private ListIterator<String> buildNestedIterator() {
-		return this.buildList().listIterator();
-	}
-
-	private ListIterator<String> buildUnmodifiableNestedIterator() {
-		return this.buildUnmodifiableList().listIterator();
-	}
-
-	private List<String> buildList() {
-		List<String> l = new ArrayList<String>();
-		l.add("1");
-		l.add("22");
-		l.add("333");
-		l.add("4444");
-		l.add("55555");
-		l.add("666666");
-		l.add("7777777");
-		l.add("88888888");
-		return l;
-	}
-
-	private List<String> buildUnmodifiableList() {
-		return Collections.unmodifiableList(this.buildList());
-	}
-
-	public void testInvalidTransformationListIterator() {
-		// missing method override
-		Iterator<Integer> iterator = new TransformationListIterator<String, Integer>(this.buildList().listIterator());
-		boolean exCaught = false;
-		try {
-			Integer integer = iterator.next();
-			fail("invalid integer: " + integer);
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown", exCaught);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/TreeIteratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/TreeIteratorTests.java
deleted file mode 100644
index cd658d2..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/TreeIteratorTests.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.iterators;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.TreeIterator;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class TreeIteratorTests extends TestCase {
-	/** this will be populated with all the nodes created for the test */
-	Collection<TreeNode> nodes = new ArrayList<TreeNode>();
-
-	public TreeIteratorTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testHasNext1() {
-		this.verifyHasNext(this.buildTreeIterator1());
-	}
-
-	public void testHasNext2() {
-		this.verifyHasNext(this.buildTreeIterator2());
-	}
-
-	private void verifyHasNext(Iterator<TreeNode> iterator) {
-		int i = 0;
-		while (iterator.hasNext()) {
-			iterator.next();
-			i++;
-		}
-		assertEquals(this.nodes.size(), i);
-	}
-
-	public void testNext1() {
-		this.verifyNext(this.buildTreeIterator1());
-	}
-
-	public void testNext2() {
-		this.verifyNext(this.buildTreeIterator2());
-	}
-
-	private void verifyNext(Iterator<TreeNode> iterator) {
-		while (iterator.hasNext()) {
-			assertTrue("bogus element", this.nodes.contains(iterator.next()));
-		}
-	}
-
-	public void testNoSuchElementException1() {
-		this.verifyNoSuchElementException(this.buildTreeIterator1());
-	}
-
-	public void testNoSuchElementException2() {
-		this.verifyNoSuchElementException(this.buildTreeIterator2());
-	}
-
-	private void verifyNoSuchElementException(Iterator<TreeNode> iterator) {
-		boolean exCaught = false;
-		while (iterator.hasNext()) {
-			iterator.next();
-		}
-		try {
-			iterator.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown", exCaught);
-	}
-
-	public void testRemove1() {
-		this.verifyRemove(this.buildTreeIterator1());
-	}
-
-	public void testRemove2() {
-		this.verifyRemove(this.buildTreeIterator2());
-	}
-
-	private void verifyRemove(Iterator<TreeNode> iterator) {
-		String parentName = "child 2";
-		String childName = "grandchild 2A";
-		int startSize = this.childrenSize(parentName);
-		while (iterator.hasNext()) {
-			TreeNode node = iterator.next();
-			if (node.getName().equals(childName)) {
-				iterator.remove();
-			}
-		}
-		int endSize = this.childrenSize(parentName);
-		assertEquals(startSize - 1, endSize);
-	}
-
-	private int childrenSize(String nodeName) {
-		for (Iterator<TreeNode> stream = this.nodes.iterator(); stream.hasNext();) {
-			TreeNode node = stream.next();
-			if (node.getName().equals(nodeName)) {
-				return node.childrenSize();
-			}
-		}
-		throw new IllegalArgumentException(nodeName);
-	}
-
-	/**
-	 * build a tree iterator with an explicit midwife
-	 */
-	private Iterator<TreeNode> buildTreeIterator1() {
-		return new TreeIterator<TreeNode>(this.buildTree(), this.buildMidwife());
-	}
-
-	private TreeIterator.Midwife<TreeNode> buildMidwife() {
-		return new TreeIterator.Midwife<TreeNode>() {
-			public Iterator<TreeNode> children(TreeNode next) {
-				return next.children();
-			}
-		};
-	}
-
-	/**
-	 * build a tree iterator with an override
-	 */
-	private Iterator<TreeNode> buildTreeIterator2() {
-		return new TreeIterator<TreeNode>(this.buildTree()) {
-			@Override
-			public Iterator<TreeNode> children(TreeNode next) {
-				return next.children();
-			}
-		};
-	}
-
-	public void testInvalidTreeIterator() {
-		// missing method override
-		Iterator<TreeNode> iterator = new TreeIterator<TreeNode>(this.buildTree());
-		boolean exCaught = false;
-		try {
-			TreeNode tn = iterator.next();
-			fail("invalid tree node: " + tn);
-		} catch (UnsupportedOperationException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown", exCaught);
-	}
-
-	private TreeNode buildTree() {
-		TreeNode root = new TreeNode("root");
-		TreeNode child1 = new TreeNode(root, "child 1");
-		new TreeNode(child1, "grandchild 1A");
-		TreeNode child2 = new TreeNode(root, "child 2");
-		new TreeNode(child2, "grandchild 2A");
-		TreeNode grandchild2B = new TreeNode(child2, "grandchild 2B");
-		new TreeNode(grandchild2B, "great-grandchild 2B1");
-		new TreeNode(grandchild2B, "great-grandchild 2B2");
-		TreeNode grandchild2C = new TreeNode(child2, "grandchild 2C");
-		new TreeNode(grandchild2C, "great-grandchild 2C1");
-		new TreeNode(root, "child 3");
-		return root;
-	}
-
-	private class TreeNode {
-		private String name;
-		private Collection<TreeNode> children = new ArrayList<TreeNode>();
-
-		public TreeNode(String name) {
-			super();
-			TreeIteratorTests.this.nodes.add(this); // log node
-			this.name = name;
-		}
-
-		public TreeNode(TreeNode parent, String name) {
-			this(name);
-			parent.addChild(this);
-		}
-
-		public String getName() {
-			return this.name;
-		}
-
-		private void addChild(TreeNode child) {
-			this.children.add(child);
-		}
-
-		public Iterator<TreeNode> children() {
-			return this.children.iterator();
-		}
-
-		public int childrenSize() {
-			return this.children.size();
-		}
-
-		@Override
-		public String toString() {
-			return "TreeNode(" + this.name + ")";
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/ChangeSupportTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/ChangeSupportTests.java
deleted file mode 100644
index b7f430b..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/ChangeSupportTests.java
+++ /dev/null
@@ -1,4575 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EventListener;
-import java.util.HashSet;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.ListenerList;
-import org.eclipse.jpt.utility.internal.Tools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ListChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.StateChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-import org.eclipse.jpt.utility.model.listener.TreeChangeAdapter;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ChangeSupportTests
-	extends TestCase
-{
-	TestModel testModel;
-	static final String TEST_TO_STRING = "this is a test";
-
-	ChangeListener changeListener = new Adapter();
-
-	StateChangeEvent stateChangeEvent;
-	boolean stateChangedCalled = false;
-
-	PropertyChangeEvent propertyChangeEvent;
-	boolean propertyChangeCalled = false;
-	static final String PROPERTY_NAME = "propertyName";
-	static final Object OLD_OBJECT_VALUE = new Object();
-	static final Object NEW_OBJECT_VALUE = new Object();
-	static final Integer OLD_INT_VALUE = new Integer(27);
-	static final Boolean OLD_BOOLEAN_VALUE = Boolean.TRUE;
-	static final Integer NEW_INT_VALUE = new Integer(42);
-	static final Boolean NEW_BOOLEAN_VALUE = Boolean.FALSE;
-
-	CollectionEvent collectionEvent;
-	boolean itemsAddedCollectionCalled = false;
-	boolean itemsRemovedCollectionCalled = false;
-	boolean collectionChangedCalled = false;
-	boolean collectionClearedCalled = false;
-	static final String COLLECTION_NAME = "collectionName";
-	static final Object ADDED_OBJECT_VALUE = new Object();
-	static final Object ADDED_OBJECT_VALUE_2 = new Object();
-	static final Object REMOVED_OBJECT_VALUE = new Object();
-	static final int TARGET_INDEX = 7;
-	static final int SOURCE_INDEX = 22;
-
-	ListEvent listEvent;
-	boolean itemsAddedListCalled = false;
-	boolean itemsRemovedListCalled = false;
-	boolean itemsReplacedListCalled = false;
-	boolean itemsMovedListCalled = false;
-	boolean listChangedCalled = false;
-	boolean listClearedCalled = false;
-	static final String LIST_NAME = "listName";
-	static final int ADD_INDEX = 3;
-	static final int REMOVE_INDEX = 5;
-	static final int REPLACE_INDEX = 2;
-
-	TreeEvent treeEvent;
-	boolean nodeAddedCalled = false;
-	boolean nodeRemovedCalled = false;
-	boolean treeChangedCalled = false;
-	boolean treeClearedCalled = false;
-	static final String TREE_NAME = "treeName";
-	static final List<Object> OBJECT_PATH = Arrays.asList(new Object[] {new Object(), new Object(), new String()});
-
-
-	public ChangeSupportTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.testModel = new TestModel();
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-
-	// ********** general tests **********
-
-	public void testNullSource() {
-		boolean exCaught = false;
-		try {
-			ChangeSupport cs = new ChangeSupport(null);
-			fail("bogus change support: " + cs);
-		} catch (NullPointerException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	// ********** state change tests **********
-
-	public void testFireStateChange() {
-		this.stateChangeEvent = null;
-		this.stateChangedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireStateChange();
-		assertNotNull(this.stateChangeEvent);
-		assertEquals(this.testModel, this.stateChangeEvent.getSource());
-		assertTrue(this.stateChangedCalled);
-	}
-
-	public void testHasAnyStateChangeListeners() {
-		assertTrue(this.testModel.hasNoStateChangeListeners());
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.hasAnyStateChangeListeners());
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.hasNoStateChangeListeners());
-	}
-
-	public void testHasAnyStateChangeListenersDuplicate() {
-		assertTrue(this.testModel.hasNoStateChangeListeners());
-		this.testModel.addChangeListener(this.changeListener);
-		boolean exCaught = false;
-		try {
-			this.testModel.addChangeListener(this.changeListener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-		assertTrue(this.testModel.hasAnyStateChangeListeners());
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.hasNoStateChangeListeners());
-
-		exCaught = false;
-		try {
-			this.testModel.removeChangeListener(this.changeListener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(this.testModel.hasNoStateChangeListeners());
-	}
-
-	public void testAddNullStateListener() {
-		boolean exCaught = false;
-		try {
-			this.testModel.addStateChangeListener(null);
-		} catch (NullPointerException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testRemoveBogusStateListener() {
-		boolean exCaught = false;
-		try {
-			this.testModel.removeChangeListener(this.changeListener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		this.testModel.addPropertyChangeListener("foo", this.changeListener);
-		exCaught = false;
-		try {
-			this.testModel.removeChangeListener(this.changeListener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		this.testModel.addChangeListener(this.changeListener);
-		exCaught = false;
-		try {
-			this.testModel.removeStateChangeListener(new Adapter());
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		exCaught = false;
-		try {
-			this.testModel.removeStateChangeListener(new StateChangeAdapter());
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-
-	// ********** property change tests **********
-
-	public void testFirePropertyChangedEvent() {
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedEvent();
-		this.verifyPropertyChangeEvent(OLD_OBJECT_VALUE, NEW_OBJECT_VALUE);
-		assertTrue(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedEvent();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addPropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedEvent();
-		this.verifyPropertyChangeEvent(OLD_OBJECT_VALUE, NEW_OBJECT_VALUE);
-		assertTrue(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removePropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedEvent();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-	}
-
-	public void testFirePropertyChangedEventNoChange() {
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedEventNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedEventNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addPropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedEventNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removePropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedEventNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-	}
-
-	public void testFirePropertyChangedObjectObject() {
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedObjectObject();
-		this.verifyPropertyChangeEvent(OLD_OBJECT_VALUE, NEW_OBJECT_VALUE);
-		assertTrue(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedObjectObject();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addPropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedObjectObject();
-		this.verifyPropertyChangeEvent(OLD_OBJECT_VALUE, NEW_OBJECT_VALUE);
-		assertTrue(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removePropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedObjectObject();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-	}
-
-	public void testFirePropertyChangedObjectObjectNoChange() {
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedObjectObjectNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedObjectObjectNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addPropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedObjectObjectNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removePropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedObjectObjectNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-	}
-
-	public void testFirePropertyChangedObject() {
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedObject();
-		this.verifyPropertyChangeEvent(null, NEW_OBJECT_VALUE);
-		assertTrue(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedObject();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addPropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedObject();
-		this.verifyPropertyChangeEvent(null, NEW_OBJECT_VALUE);
-		assertTrue(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removePropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedObject();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-	}
-
-	public void testFirePropertyChangedObjectNoChange() {
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedObjectNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedObjectNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addPropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedObjectNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removePropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedObjectNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-	}
-
-	public void testFirePropertyChangedIntInt() {
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedIntInt();
-		this.verifyPropertyChangeEvent(OLD_INT_VALUE, NEW_INT_VALUE);
-		assertTrue(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedIntInt();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addPropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedIntInt();
-		this.verifyPropertyChangeEvent(OLD_INT_VALUE, NEW_INT_VALUE);
-		assertTrue(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removePropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedIntInt();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-	}
-
-	public void testFirePropertyChangedIntIntNoChange() {
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedIntIntNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedIntIntNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addPropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedIntIntNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removePropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedIntIntNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-	}
-
-	public void testFirePropertyChangedBooleanBoolean() {
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedBooleanBoolean();
-		this.verifyPropertyChangeEvent(OLD_BOOLEAN_VALUE, NEW_BOOLEAN_VALUE);
-		assertTrue(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedBooleanBoolean();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addPropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedBooleanBoolean();
-		this.verifyPropertyChangeEvent(OLD_BOOLEAN_VALUE, NEW_BOOLEAN_VALUE);
-		assertTrue(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removePropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedBooleanBoolean();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-	}
-
-	public void testFirePropertyChangedBooleanBooleanNoChange() {
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedBooleanBooleanNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFirePropertyChangedBooleanBooleanNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.addPropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedBooleanBooleanNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.removePropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		this.testModel.testFirePropertyChangedBooleanBooleanNoChange();
-		assertNull(this.propertyChangeEvent);
-		assertFalse(this.propertyChangeCalled);
-	}
-
-	public void testHasAnyPropertyChangeListeners() {
-		assertTrue(this.testModel.hasNoPropertyChangeListeners(PROPERTY_NAME));
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.hasAnyPropertyChangeListeners(PROPERTY_NAME));
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.hasNoPropertyChangeListeners(PROPERTY_NAME));
-
-		assertTrue(this.testModel.hasNoPropertyChangeListeners(PROPERTY_NAME));
-		this.testModel.addPropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		assertTrue(this.testModel.hasAnyPropertyChangeListeners(PROPERTY_NAME));
-		this.testModel.removePropertyChangeListener(PROPERTY_NAME, this.changeListener);
-		assertTrue(this.testModel.hasNoPropertyChangeListeners(PROPERTY_NAME));
-	}
-
-	public void testAddNullPropertyListener() {
-		boolean exCaught = false;
-		try {
-			this.testModel.addChangeListener(null);
-		} catch (NullPointerException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAddNullPropertyListenerName() {
-		boolean exCaught = false;
-		try {
-			this.testModel.addPropertyChangeListener("foo", null);
-		} catch (NullPointerException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testRemoveBogusPropertyListener() {
-		boolean exCaught = false;
-		try {
-			this.testModel.removePropertyChangeListener("foo", new PropertyChangeAdapter());
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		this.testModel.addCollectionChangeListener("foo", this.changeListener);
-		exCaught = false;
-		try {
-			this.testModel.removePropertyChangeListener("foo", this.changeListener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		this.testModel.addPropertyChangeListener("foo", this.changeListener);
-		exCaught = false;
-		try {
-			this.testModel.removePropertyChangeListener("foo", new PropertyChangeAdapter());
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		exCaught = false;
-		try {
-			this.testModel.removePropertyChangeListener("foo", new PropertyChangeAdapter());
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	private void verifyPropertyChangeEvent(Object oldValue, Object newValue) {
-		this.verifyPropertyChangeEvent(this.testModel, oldValue, newValue);
-	}
-
-	private void verifyPropertyChangeEvent(Object source, Object oldValue, Object newValue) {
-		assertNotNull(this.propertyChangeEvent);
-		assertEquals(source, this.propertyChangeEvent.getSource());
-		assertEquals(PROPERTY_NAME, this.propertyChangeEvent.getPropertyName());
-		assertEquals(oldValue, this.propertyChangeEvent.getOldValue());
-		assertEquals(newValue, this.propertyChangeEvent.getNewValue());
-	}
-
-
-	// ********** collection change tests **********
-
-	public void testFireItemsAddedCollectionEvent() {
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedCollectionEvent();
-		this.verifyCollectionEvent(ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedCollectionEvent();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedCollectionEvent();
-		this.verifyCollectionEvent(ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedCollectionEvent();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-	}
-
-	public void testFireItemsAddedCollectionEventNoChange() {
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedCollectionEventNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedCollectionEventNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedCollectionEventNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedCollectionEventNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-	}
-
-	public void testFireItemsAddedCollection() {
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedCollection();
-		this.verifyCollectionEvent(ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedCollection();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedCollection();
-		this.verifyCollectionEvent(ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedCollection();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-	}
-
-	public void testFireItemsAddedCollectionNoChange() {
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedCollectionNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedCollectionNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedCollectionNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedCollectionNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-	}
-
-	public void testFireItemAddedCollection() {
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemAddedCollection();
-		this.verifyCollectionEvent(ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemAddedCollection();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemAddedCollection();
-		this.verifyCollectionEvent(ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemAddedCollection();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-	}
-
-	public void testFireItemsRemovedCollectionEvent() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedCollectionEvent();
-		this.verifyCollectionEvent(REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedCollectionEvent();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedCollectionEvent();
-		this.verifyCollectionEvent(REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedCollectionEvent();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testFireItemsRemovedCollectionEventNoChange() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedCollectionEventNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedCollectionEventNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedCollectionEventNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedCollectionEventNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testFireItemsRemovedCollection() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedCollection();
-		this.verifyCollectionEvent(REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedCollection();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedCollection();
-		this.verifyCollectionEvent(REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedCollection();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testFireItemsRemovedCollectionNoChange() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedCollectionNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedCollectionNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedCollectionNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedCollectionNoChange();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testFireItemRemovedCollection() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemRemovedCollection();
-		this.verifyCollectionEvent(REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemRemovedCollection();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemRemovedCollection();
-		this.verifyCollectionEvent(REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireItemRemovedCollection();
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testFireCollectionCleared() {
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireCollectionCleared();
-		this.verifyCollectionEvent(null);
-		assertTrue(this.collectionClearedCalled);
-
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireCollectionCleared();
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionClearedCalled);
-
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireCollectionCleared();
-		this.verifyCollectionEvent(null);
-		assertTrue(this.collectionClearedCalled);
-
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireCollectionCleared();
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionClearedCalled);
-	}
-
-	public void testFireCollectionChangedEvent() {
-		this.collectionEvent = null;
-		this.collectionChangedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireCollectionChangedEvent();
-		this.verifyCollectionEvent(null);
-		assertTrue(this.collectionChangedCalled);
-
-		this.collectionEvent = null;
-		this.collectionChangedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireCollectionChangedEvent();
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionChangedCalled);
-
-		this.collectionEvent = null;
-		this.collectionChangedCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireCollectionChangedEvent();
-		this.verifyCollectionEvent(null);
-		assertTrue(this.collectionChangedCalled);
-
-		this.collectionEvent = null;
-		this.collectionChangedCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireCollectionChangedEvent();
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionChangedCalled);
-	}
-
-	public void testFireCollectionChanged() {
-		this.collectionEvent = null;
-		this.collectionChangedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireCollectionChanged();
-		this.verifyCollectionEvent(null);
-		assertTrue(this.collectionChangedCalled);
-
-		this.collectionEvent = null;
-		this.collectionChangedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireCollectionChanged();
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionChangedCalled);
-
-		this.collectionEvent = null;
-		this.collectionChangedCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireCollectionChanged();
-		this.verifyCollectionEvent(null);
-		assertTrue(this.collectionChangedCalled);
-
-		this.collectionEvent = null;
-		this.collectionChangedCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		this.testModel.testFireCollectionChanged();
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionChangedCalled);
-	}
-
-	public void testAddItemToCollection() {
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.testAddItemToCollection());
-		this.verifyCollectionEvent(ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.testAddItemToCollection());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testAddItemToCollection());
-		this.verifyCollectionEvent(ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testAddItemToCollection());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-	}
-
-	public void testAddItemToCollectionNoChange() {
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertFalse(this.testModel.testAddItemToCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertFalse(this.testModel.testAddItemToCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testAddItemToCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testAddItemToCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-	}
-
-	public void testAddItemsToCollection() {
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.testAddItemsToCollection());
-		this.verifyCollectionEvent(ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.testAddItemsToCollection());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testAddItemsToCollection());
-		this.verifyCollectionEvent(ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testAddItemsToCollection());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-	}
-
-	public void testAddItemsToCollectionNoChange() {
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertFalse(this.testModel.testAddItemsToCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertFalse(this.testModel.testAddItemsToCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testAddItemsToCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testAddItemsToCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-	}
-
-	public void testAddItemsToCollectionMixed() {
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.testAddItemsToCollectionMixed());
-		this.verifyCollectionEvent(ADDED_OBJECT_VALUE_2);
-		assertTrue(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.testAddItemsToCollectionMixed());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testAddItemsToCollectionMixed());
-		this.verifyCollectionEvent(ADDED_OBJECT_VALUE_2);
-		assertTrue(this.itemsAddedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsAddedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testAddItemsToCollectionMixed());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsAddedCollectionCalled);
-	}
-
-	public void testRemoveItemFromCollection() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.testRemoveItemFromCollection());
-		this.verifyCollectionEvent(REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.testRemoveItemFromCollection());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testRemoveItemFromCollection());
-		this.verifyCollectionEvent(REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testRemoveItemFromCollection());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testRemoveItemFromCollectionNoChange() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertFalse(this.testModel.testRemoveItemFromCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertFalse(this.testModel.testRemoveItemFromCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testRemoveItemFromCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testRemoveItemFromCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testRemoveItemsFromCollection() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.testRemoveItemsFromCollection());
-		this.verifyCollectionChangeEvent2(REMOVED_OBJECT_VALUE, "foo", "bar");
-		assertTrue(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.testRemoveItemsFromCollection());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testRemoveItemsFromCollection());
-		this.verifyCollectionChangeEvent2(REMOVED_OBJECT_VALUE, "foo", "bar");
-		assertTrue(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testRemoveItemsFromCollection());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testRemoveItemsFromCollectionNoChange1() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertFalse(this.testModel.testRemoveItemsFromCollectionNoChange1());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertFalse(this.testModel.testRemoveItemsFromCollectionNoChange1());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testRemoveItemsFromCollectionNoChange1());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testRemoveItemsFromCollectionNoChange1());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testRemoveItemsFromCollectionNoChange2() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertFalse(this.testModel.testRemoveItemsFromCollectionNoChange2());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertFalse(this.testModel.testRemoveItemsFromCollectionNoChange2());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testRemoveItemsFromCollectionNoChange2());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testRemoveItemsFromCollectionNoChange2());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testRemoveItemsFromCollectionNoChange3() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertFalse(this.testModel.testRemoveItemsFromCollectionNoChange3());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertFalse(this.testModel.testRemoveItemsFromCollectionNoChange3());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testRemoveItemsFromCollectionNoChange3());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testRemoveItemsFromCollectionNoChange3());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testRetainItemsInCollection1() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.testRetainItemsInCollection1());
-		this.verifyCollectionEvent(REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.testRetainItemsInCollection1());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testRetainItemsInCollection1());
-		this.verifyCollectionEvent(REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testRetainItemsInCollection1());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	// collection cleared...
-	public void testRetainItemsInCollection2() {
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.testRetainItemsInCollection2());
-		this.verifyCollectionEvent(null);
-		assertTrue(this.collectionClearedCalled);
-
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.testRetainItemsInCollection2());
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionClearedCalled);
-
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testRetainItemsInCollection2());
-		this.verifyCollectionEvent(null);
-		assertTrue(this.collectionClearedCalled);
-
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testRetainItemsInCollection2());
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionClearedCalled);
-	}
-
-	public void testRetainItemsInCollectionNoChange1() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertFalse(this.testModel.testRetainItemsInCollectionNoChange1());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertFalse(this.testModel.testRetainItemsInCollectionNoChange1());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testRetainItemsInCollectionNoChange1());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testRetainItemsInCollectionNoChange1());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testRetainItemsInCollectionNoChange2() {
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertFalse(this.testModel.testRetainItemsInCollectionNoChange2());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertFalse(this.testModel.testRetainItemsInCollectionNoChange2());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testRetainItemsInCollectionNoChange2());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-
-		this.collectionEvent = null;
-		this.itemsRemovedCollectionCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testRetainItemsInCollectionNoChange2());
-		assertNull(this.collectionEvent);
-		assertFalse(this.itemsRemovedCollectionCalled);
-	}
-
-	public void testClearCollection() {
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.testClearCollection());
-		this.verifyCollectionEvent(null);
-		assertTrue(this.collectionClearedCalled);
-
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.testClearCollection());
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionClearedCalled);
-
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testClearCollection());
-		this.verifyCollectionEvent(null);
-		assertTrue(this.collectionClearedCalled);
-
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.testClearCollection());
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionClearedCalled);
-	}
-
-	public void testClearCollectionNoChange() {
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		assertFalse(this.testModel.testClearCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionClearedCalled);
-
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		assertFalse(this.testModel.testClearCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionClearedCalled);
-
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testClearCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionClearedCalled);
-
-		this.collectionEvent = null;
-		this.collectionClearedCalled = false;
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertFalse(this.testModel.testClearCollectionNoChange());
-		assertNull(this.collectionEvent);
-		assertFalse(this.collectionClearedCalled);
-	}
-
-	public void testSynchronizeCollection1() {
-		CollectionSynchListener csl = new CollectionSynchListener();
-		this.testModel.addChangeListener(csl);
-		assertTrue(this.testModel.testSynchronizeCollection1());
-		assertTrue(csl.itemsAdded);
-		assertTrue(csl.itemsRemoved);
-		assertFalse(csl.collectionChanged);
-		assertFalse(csl.collectionCleared);
-		assertEquals(2, csl.addedItems.size());
-		assertTrue(CollectionTools.containsAll(csl.addedItems, new Object[] {"joo", "jar"}));
-		assertEquals(2, csl.removedItems.size());
-		assertTrue(CollectionTools.containsAll(csl.removedItems, new Object[] {"foo", "bar"}));
-	}
-
-	public void testSynchronizeCollection2() {
-		CollectionSynchListener csl = new CollectionSynchListener();
-		this.testModel.addChangeListener(csl);
-		assertTrue(this.testModel.testSynchronizeCollection2());
-		assertFalse(csl.itemsAdded);
-		assertFalse(csl.itemsRemoved);
-		assertFalse(csl.collectionChanged);
-		assertTrue(csl.collectionCleared);
-		assertTrue(csl.addedItems.isEmpty());
-		assertTrue(csl.removedItems.isEmpty());
-	}
-
-	public void testSynchronizeCollection3() {
-		CollectionSynchListener csl = new CollectionSynchListener();
-		this.testModel.addChangeListener(csl);
-		assertTrue(this.testModel.testSynchronizeCollection3());
-		assertTrue(csl.itemsAdded);
-		assertFalse(csl.itemsRemoved);
-		assertFalse(csl.collectionChanged);
-		assertFalse(csl.collectionCleared);
-		assertEquals(3, csl.addedItems.size());
-		assertTrue(CollectionTools.containsAll(csl.addedItems, new Object[] {"joo", "jar", "baz"}));
-		assertTrue(csl.removedItems.isEmpty());
-	}
-
-	class CollectionSynchListener extends ChangeAdapter {
-		boolean itemsAdded = false;
-		boolean itemsRemoved = false;
-		boolean collectionChanged = false;
-		boolean collectionCleared = false;
-		Collection<Object> addedItems = new ArrayList<Object>();
-		Collection<Object> removedItems = new ArrayList<Object>();
-		@Override
-		public void collectionChanged(CollectionChangeEvent event) {
-			this.collectionChanged = true;
-		}
-		@Override
-		public void collectionCleared(CollectionClearEvent event) {
-			this.collectionCleared = true;
-		}
-		@Override
-		public void itemsAdded(CollectionAddEvent event) {
-			this.itemsAdded = true;
-			CollectionTools.addAll(this.addedItems, event.getItems());
-		}
-		@Override
-		public void itemsRemoved(CollectionRemoveEvent event) {
-			this.itemsRemoved = true;
-			CollectionTools.addAll(this.removedItems, event.getItems());
-		}
-	}
-
-	public void testHasAnyCollectionChangeListeners() {
-		assertTrue(this.testModel.hasNoCollectionChangeListeners(COLLECTION_NAME));
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.hasAnyCollectionChangeListeners(COLLECTION_NAME));
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.hasNoCollectionChangeListeners(COLLECTION_NAME));
-
-		assertTrue(this.testModel.hasNoCollectionChangeListeners(COLLECTION_NAME));
-		this.testModel.addCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.hasAnyCollectionChangeListeners(COLLECTION_NAME));
-		this.testModel.removeCollectionChangeListener(COLLECTION_NAME, this.changeListener);
-		assertTrue(this.testModel.hasNoCollectionChangeListeners(COLLECTION_NAME));
-	}
-
-	public void testAddNullCollectionListener() {
-		boolean exCaught = false;
-		try {
-			this.testModel.addCollectionChangeListener("foo", null);
-		} catch (NullPointerException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testRemoveBogusCollectionListener() {
-		boolean exCaught = false;
-		try {
-			this.testModel.removeCollectionChangeListener("foo", this.changeListener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		this.testModel.addPropertyChangeListener("foo", this.changeListener);
-		exCaught = false;
-		try {
-			this.testModel.removeCollectionChangeListener("foo", this.changeListener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		this.testModel.addCollectionChangeListener("foo", this.changeListener);
-		exCaught = false;
-		try {
-			this.testModel.removeCollectionChangeListener("foo", new CollectionChangeAdapter());
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		exCaught = false;
-		try {
-			this.testModel.removeCollectionChangeListener("foo", new CollectionChangeAdapter());
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	private void verifyCollectionEvent(Object item) {
-		assertNotNull(this.collectionEvent);
-		assertEquals(this.testModel, this.collectionEvent.getSource());
-		assertEquals(COLLECTION_NAME, this.collectionEvent.getCollectionName());
-		if (item != null) {
-			assertEquals(item, this.getCollectionEventItems().iterator().next());
-		}
-	}
-
-	private Iterable<?> getCollectionEventItems() {
-		if (this.collectionEvent instanceof CollectionAddEvent) {
-			return ((CollectionAddEvent) this.collectionEvent).getItems();
-		} else if (this.collectionEvent instanceof CollectionRemoveEvent) {
-			return ((CollectionRemoveEvent) this.collectionEvent).getItems();
-		}
-		throw new IllegalStateException();
-	}
-
-	private void verifyCollectionChangeEvent2(Object... items) {
-		assertNotNull(this.collectionEvent);
-		assertEquals(this.testModel, this.collectionEvent.getSource());
-		assertEquals(COLLECTION_NAME, this.collectionEvent.getCollectionName());
-		assertEquals(items.length, this.getCollectionEventItemsSize());
-		for (Object item : items) {
-			assertTrue(CollectionTools.contains(this.getCollectionEventItems(), item));
-		}
-	}
-
-	private int getCollectionEventItemsSize() {
-		if (this.collectionEvent instanceof CollectionAddEvent) {
-			return ((CollectionAddEvent) this.collectionEvent).getItemsSize();
-		} else if (this.collectionEvent instanceof CollectionRemoveEvent) {
-			return ((CollectionRemoveEvent) this.collectionEvent).getItemsSize();
-		}
-		throw new IllegalStateException();
-	}
-
-
-	// ********** list change tests **********
-
-	public void testFireItemsAddedListEvent() {
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedListEvent();
-		this.verifyListAddEvent(ADD_INDEX, ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedListEvent();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedListEvent();
-		this.verifyListAddEvent(ADD_INDEX, ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedListEvent();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-	}
-
-	public void testFireItemsAddedListEventNoChange() {
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-	}
-
-	public void testFireItemsAddedList() {
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedList();
-		this.verifyListAddEvent(ADD_INDEX, ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedList();
-		this.verifyListAddEvent(ADD_INDEX, ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-	}
-
-	public void testFireItemsAddedListNoChange() {
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsAddedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsAddedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-	}
-
-	public void testFireItemAddedList() {
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemAddedList();
-		this.verifyListAddEvent(ADD_INDEX, ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemAddedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemAddedList();
-		this.verifyListAddEvent(ADD_INDEX, ADDED_OBJECT_VALUE);
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemAddedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-	}
-
-	public void testFireItemsRemovedListEvent() {
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedListEvent();
-		this.verifyListRemoveEvent(REMOVE_INDEX, REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedListEvent();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedListEvent();
-		this.verifyListRemoveEvent(REMOVE_INDEX, REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedListEvent();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testFireItemsRemovedListEventNoChange() {
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testFireItemsRemovedList() {
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedList();
-		this.verifyListRemoveEvent(REMOVE_INDEX, REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedList();
-		this.verifyListRemoveEvent(REMOVE_INDEX, REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testFireItemsRemovedListNoChange() {
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsRemovedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsRemovedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testFireItemRemovedList() {
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemRemovedList();
-		this.verifyListRemoveEvent(REMOVE_INDEX, REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemRemovedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemRemovedList();
-		this.verifyListRemoveEvent(REMOVE_INDEX, REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemRemovedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testFireItemsReplacedListEvent() {
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsReplacedListEvent();
-		this.verifyListReplaceEvent(REPLACE_INDEX, ADDED_OBJECT_VALUE, REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsReplacedListEvent();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsReplacedListEvent();
-		this.verifyListReplaceEvent(REPLACE_INDEX, ADDED_OBJECT_VALUE, REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsReplacedListEvent();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-	}
-
-	public void testFireItemsReplacedListEventNoChange() {
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsReplacedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsReplacedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsReplacedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsReplacedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-	}
-
-	public void testFireItemsReplacedList() {
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsReplacedList();
-		this.verifyListReplaceEvent(REPLACE_INDEX, ADDED_OBJECT_VALUE, REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsReplacedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsReplacedList();
-		this.verifyListReplaceEvent(REPLACE_INDEX, ADDED_OBJECT_VALUE, REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsReplacedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-	}
-
-	public void testFireItemsReplacedListNoChange() {
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsReplacedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsReplacedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsReplacedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsReplacedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-	}
-
-	public void testFireItemReplacedList() {
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemReplacedList();
-		this.verifyListReplaceEvent(REPLACE_INDEX, ADDED_OBJECT_VALUE, REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemReplacedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemReplacedList();
-		this.verifyListReplaceEvent(REPLACE_INDEX, ADDED_OBJECT_VALUE, REMOVED_OBJECT_VALUE);
-		assertTrue(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemReplacedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-	}
-
-	public void testFireItemsMovedListEvent() {
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsMovedListEvent();
-		this.verifyListMoveEvent(TARGET_INDEX, SOURCE_INDEX);
-		assertTrue(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsMovedListEvent();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsMovedListEvent();
-		this.verifyListMoveEvent(TARGET_INDEX, SOURCE_INDEX);
-		assertTrue(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsMovedListEvent();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-	}
-
-	public void testFireItemsMovedListEventNoChange() {
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsMovedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsMovedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsMovedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsMovedListEventNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-	}
-
-	public void testFireItemsMovedList() {
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsMovedList();
-		this.verifyListMoveEvent(TARGET_INDEX, SOURCE_INDEX);
-		assertTrue(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsMovedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsMovedList();
-		this.verifyListMoveEvent(TARGET_INDEX, SOURCE_INDEX);
-		assertTrue(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsMovedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-	}
-
-	public void testFireItemsMovedListNoChange() {
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemsMovedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemsMovedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsMovedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemsMovedListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-	}
-
-	public void testFireItemMovedList() {
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireItemMovedList();
-		this.verifyListMoveEvent(TARGET_INDEX, SOURCE_INDEX);
-		assertTrue(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireItemMovedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemMovedList();
-		this.verifyListMoveEvent(TARGET_INDEX, SOURCE_INDEX);
-		assertTrue(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireItemMovedList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-	}
-
-	public void testFireListClearedEvent() {
-		this.listEvent = null;
-		this.listClearedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireListClearedEvent();
-		this.verifyListClearEvent();
-		assertTrue(this.listClearedCalled);
-
-		this.listEvent = null;
-		this.listClearedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireListClearedEvent();
-		assertNull(this.listEvent);
-		assertFalse(this.listClearedCalled);
-
-		this.listEvent = null;
-		this.listClearedCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireListClearedEvent();
-		this.verifyListClearEvent();
-		assertTrue(this.listClearedCalled);
-
-		this.listEvent = null;
-		this.listClearedCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireListClearedEvent();
-		assertNull(this.listEvent);
-		assertFalse(this.listClearedCalled);
-	}
-
-	public void testFireListCleared() {
-		this.listEvent = null;
-		this.listClearedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireListCleared();
-		this.verifyListClearEvent();
-		assertTrue(this.listClearedCalled);
-
-		this.listEvent = null;
-		this.listClearedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireListCleared();
-		assertNull(this.listEvent);
-		assertFalse(this.listClearedCalled);
-
-		this.listEvent = null;
-		this.listClearedCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireListCleared();
-		this.verifyListClearEvent();
-		assertTrue(this.listClearedCalled);
-
-		this.listEvent = null;
-		this.listClearedCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireListCleared();
-		assertNull(this.listEvent);
-		assertFalse(this.listClearedCalled);
-	}
-
-	public void testFireListChangedEvent() {
-		this.listEvent = null;
-		this.listChangedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireListChangedEvent();
-		this.verifyListChangeEvent();
-		assertTrue(this.listChangedCalled);
-
-		this.listEvent = null;
-		this.listChangedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireListChangedEvent();
-		assertNull(this.listEvent);
-		assertFalse(this.listChangedCalled);
-
-		this.listEvent = null;
-		this.listChangedCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireListChangedEvent();
-		this.verifyListChangeEvent();
-		assertTrue(this.listChangedCalled);
-
-		this.listEvent = null;
-		this.listChangedCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireListChangedEvent();
-		assertNull(this.listEvent);
-		assertFalse(this.listChangedCalled);
-	}
-
-	public void testFireListChanged() {
-		this.listEvent = null;
-		this.listChangedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireListChanged();
-		this.verifyListChangeEvent();
-		assertTrue(this.listChangedCalled);
-
-		this.listEvent = null;
-		this.listChangedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireListChanged();
-		assertNull(this.listEvent);
-		assertFalse(this.listChangedCalled);
-
-		this.listEvent = null;
-		this.listChangedCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireListChanged();
-		this.verifyListChangeEvent();
-		assertTrue(this.listChangedCalled);
-
-		this.listEvent = null;
-		this.listChangedCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testFireListChanged();
-		assertNull(this.listEvent);
-		assertFalse(this.listChangedCalled);
-	}
-
-	public void testAddItemToListIndex() {
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testAddItemToListIndex();
-		this.verifyListAddEvent(2, "joo");
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testAddItemToListIndex();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testAddItemToListIndex();
-		this.verifyListAddEvent(2, "joo");
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testAddItemToListIndex();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-	}
-
-	public void testAddItemToList() {
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testAddItemToList();
-		this.verifyListAddEvent(3, "joo");
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testAddItemToList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testAddItemToList();
-		this.verifyListAddEvent(3, "joo");
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testAddItemToList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-	}
-
-	public void testAddItemsToListIndex() {
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testAddItemsToListIndex();
-		this.verifyListAddEvent(2, "joo");
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testAddItemsToListIndex();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testAddItemsToListIndex();
-		this.verifyListAddEvent(2, "joo");
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testAddItemsToListIndex();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-	}
-
-	public void testAddItemsToListIndexNoChange() {
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testAddItemsToListIndexNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testAddItemsToListIndexNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testAddItemsToListIndexNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testAddItemsToListIndexNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-	}
-
-	public void testAddItemsToList() {
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testAddItemsToList();
-		this.verifyListAddEvent(3, "joo");
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testAddItemsToList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testAddItemsToList();
-		this.verifyListAddEvent(3, "joo");
-		assertTrue(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testAddItemsToList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-	}
-
-	public void testAddItemsToListNoChange() {
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testAddItemsToListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testAddItemsToListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testAddItemsToListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-
-		this.listEvent = null;
-		this.itemsAddedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testAddItemsToListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsAddedListCalled);
-	}
-
-	public void testRemoveItemFromListIndex() {
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testRemoveItemFromListIndex();
-		this.verifyListRemoveEvent(1, "bar");
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testRemoveItemFromListIndex();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRemoveItemFromListIndex();
-		this.verifyListRemoveEvent(1, "bar");
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRemoveItemFromListIndex();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testRemoveItemFromList() {
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testRemoveItemFromList();
-		this.verifyListRemoveEvent(1, "bar");
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testRemoveItemFromList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRemoveItemFromList();
-		this.verifyListRemoveEvent(1, "bar");
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRemoveItemFromList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testRemoveItemsFromListIndex() {
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testRemoveItemsFromListIndex();
-		this.verifyListRemoveEvent(1, "bar");
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testRemoveItemsFromListIndex();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRemoveItemsFromListIndex();
-		this.verifyListRemoveEvent(1, "bar");
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRemoveItemsFromListIndex();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testRemoveItemsFromListIndexNoChange() {
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testRemoveItemsFromListIndexNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testRemoveItemsFromListIndexNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRemoveItemsFromListIndexNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRemoveItemsFromListIndexNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testRemoveItemsFromList() {
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testRemoveItemsFromList();
-		this.verifyListRemoveEvent(1, "bar");
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testRemoveItemsFromList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRemoveItemsFromList();
-		this.verifyListRemoveEvent(1, "bar");
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRemoveItemsFromList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testRemoveItemsFromListNoChange() {
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testRemoveItemsFromListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testRemoveItemsFromListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRemoveItemsFromListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRemoveItemsFromListNoChange();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testRetainItemsInList() {
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testRetainItemsInList();
-		this.verifyListRemoveEvent(0, "foo");
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testRetainItemsInList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRetainItemsInList();
-		this.verifyListRemoveEvent(0, "foo");
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testRetainItemsInList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testReplaceItemInList() {
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testReplaceItemInList();
-		this.verifyListReplaceEvent(1, "xxx", "bar");
-		assertTrue(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testReplaceItemInList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testReplaceItemInList();
-		this.verifyListReplaceEvent(1, "xxx", "bar");
-		assertTrue(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testReplaceItemInList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-	}
-
-	public void testSetItemsInList() {
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testSetItemsInList();
-		this.verifyListReplaceEvent(1, "xxx", "bar");
-		assertTrue(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testSetItemsInList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testSetItemsInList();
-		this.verifyListReplaceEvent(1, "xxx", "bar");
-		assertTrue(this.itemsReplacedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testSetItemsInList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-	}
-
-	public void testMoveItemsInList() {
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testMoveItemsInList();
-		this.verifyListMoveEvent(2, 4, 2);
-		assertTrue(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testMoveItemsInList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testMoveItemsInList();
-		this.verifyListMoveEvent(2, 4, 2);
-		assertTrue(this.itemsMovedListCalled);
-
-		this.listEvent = null;
-		this.itemsMovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testMoveItemsInList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsMovedListCalled);
-	}
-
-	public void testClearList() {
-		this.listEvent = null;
-		this.listClearedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testClearList();
-		this.verifyListClearEvent();
-		assertTrue(this.listClearedCalled);
-
-		this.listEvent = null;
-		this.listClearedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testClearList();
-		assertNull(this.listEvent);
-		assertFalse(this.listClearedCalled);
-
-		this.listEvent = null;
-		this.listClearedCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testClearList();
-		this.verifyListClearEvent();
-		assertTrue(this.listClearedCalled);
-
-		this.listEvent = null;
-		this.listClearedCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testClearList();
-		assertNull(this.listEvent);
-		assertFalse(this.listClearedCalled);
-	}
-
-	public void testSynchronizeList() {
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testSynchronizeList();
-		assertNotNull(this.listEvent);
-		assertTrue(this.itemsReplacedListCalled);
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testSynchronizeList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-		assertFalse(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.itemsRemovedListCalled = false;
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testSynchronizeList();
-		assertNotNull(this.listEvent);
-		assertTrue(this.itemsReplacedListCalled);
-		assertTrue(this.itemsRemovedListCalled);
-
-		this.listEvent = null;
-		this.itemsReplacedListCalled = false;
-		this.itemsRemovedListCalled = false;
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		this.testModel.testSynchronizeList();
-		assertNull(this.listEvent);
-		assertFalse(this.itemsReplacedListCalled);
-		assertFalse(this.itemsRemovedListCalled);
-	}
-
-	public void testHasAnyListChangeListeners() {
-		assertTrue(this.testModel.hasNoListChangeListeners(LIST_NAME));
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.hasAnyListChangeListeners(LIST_NAME));
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.hasNoListChangeListeners(LIST_NAME));
-
-		assertTrue(this.testModel.hasNoListChangeListeners(LIST_NAME));
-		this.testModel.addListChangeListener(LIST_NAME, this.changeListener);
-		assertTrue(this.testModel.hasAnyListChangeListeners(LIST_NAME));
-		this.testModel.removeListChangeListener(LIST_NAME, this.changeListener);
-		assertTrue(this.testModel.hasNoListChangeListeners(LIST_NAME));
-	}
-
-	public void testAddNullListListener() {
-		boolean exCaught = false;
-		try {
-			this.testModel.addListChangeListener("foo", null);
-		} catch (NullPointerException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testRemoveBogusListListener() {
-		boolean exCaught = false;
-		try {
-			this.testModel.removeListChangeListener("foo", this.changeListener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		this.testModel.addPropertyChangeListener("foo", this.changeListener);
-		exCaught = false;
-		try {
-			this.testModel.removeListChangeListener("foo", this.changeListener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		this.testModel.addListChangeListener("foo", this.changeListener);
-		exCaught = false;
-		try {
-			this.testModel.removeListChangeListener("foo", new ListChangeAdapter());
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		exCaught = false;
-		try {
-			this.testModel.removeListChangeListener("foo", new ListChangeAdapter());
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	private void verifyListAddEvent(int index, Object item) {
-		assertNotNull(this.listEvent);
-		assertEquals(this.testModel, this.listEvent.getSource());
-		assertEquals(LIST_NAME, this.listEvent.getListName());
-		assertEquals(index, ((ListAddEvent) this.listEvent).getIndex());
-		assertEquals(item, ((ListAddEvent) this.listEvent).getItems().iterator().next());
-	}
-
-	private void verifyListRemoveEvent(int index, Object item) {
-		assertNotNull(this.listEvent);
-		assertEquals(this.testModel, this.listEvent.getSource());
-		assertEquals(LIST_NAME, this.listEvent.getListName());
-		assertEquals(index, ((ListRemoveEvent) this.listEvent).getIndex());
-		assertEquals(item, ((ListRemoveEvent) this.listEvent).getItems().iterator().next());
-	}
-
-	private void verifyListReplaceEvent(int index, Object newItem, Object oldItem) {
-		assertNotNull(this.listEvent);
-		assertEquals(this.testModel, this.listEvent.getSource());
-		assertEquals(LIST_NAME, this.listEvent.getListName());
-		assertEquals(index, ((ListReplaceEvent) this.listEvent).getIndex());
-		assertEquals(newItem, ((ListReplaceEvent) this.listEvent).getNewItems().iterator().next());
-		assertEquals(oldItem, ((ListReplaceEvent) this.listEvent).getOldItems().iterator().next());
-	}
-
-	private void verifyListMoveEvent(int targetIndex, int sourceIndex) {
-		this.verifyListMoveEvent(targetIndex, sourceIndex, 1);
-	}
-
-	private void verifyListMoveEvent(int targetIndex, int sourceIndex, int length) {
-		assertNotNull(this.listEvent);
-		assertEquals(this.testModel, this.listEvent.getSource());
-		assertEquals(LIST_NAME, this.listEvent.getListName());
-		assertEquals(targetIndex, ((ListMoveEvent) this.listEvent).getTargetIndex());
-		assertEquals(sourceIndex, ((ListMoveEvent) this.listEvent).getSourceIndex());
-		assertEquals(length, ((ListMoveEvent) this.listEvent).getLength());
-	}
-
-	private void verifyListClearEvent() {
-		assertNotNull(this.listEvent);
-		assertEquals(this.testModel, this.listEvent.getSource());
-		assertEquals(LIST_NAME, this.listEvent.getListName());
-		assertEquals(ListClearEvent.class, this.listEvent.getClass());
-	}
-
-	private void verifyListChangeEvent() {
-		assertNotNull(this.listEvent);
-		assertEquals(this.testModel, this.listEvent.getSource());
-		assertEquals(LIST_NAME, this.listEvent.getListName());
-		assertEquals(ListChangeEvent.class, this.listEvent.getClass());
-	}
-
-
-	// ********** tree change tests **********
-
-	public void testFireNodeAddedTree() {
-		this.treeEvent = null;
-		this.nodeAddedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireNodeAddedTree();
-		this.verifyTreeEvent(OBJECT_PATH);
-		assertTrue(this.nodeAddedCalled);
-
-		this.treeEvent = null;
-		this.nodeAddedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireNodeAddedTree();
-		assertNull(this.treeEvent);
-		assertFalse(this.nodeAddedCalled);
-
-		this.treeEvent = null;
-		this.nodeAddedCalled = false;
-		this.testModel.addTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireNodeAddedTree();
-		this.verifyTreeEvent(OBJECT_PATH);
-		assertTrue(this.nodeAddedCalled);
-
-		this.treeEvent = null;
-		this.nodeAddedCalled = false;
-		this.testModel.removeTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireNodeAddedTree();
-		assertNull(this.treeEvent);
-		assertFalse(this.nodeAddedCalled);
-	}
-
-	public void testFireNodeAddedTreeEvent() {
-		this.treeEvent = null;
-		this.nodeAddedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireNodeAddedTreeEvent();
-		this.verifyTreeEvent(OBJECT_PATH);
-		assertTrue(this.nodeAddedCalled);
-
-		this.treeEvent = null;
-		this.nodeAddedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireNodeAddedTreeEvent();
-		assertNull(this.treeEvent);
-		assertFalse(this.nodeAddedCalled);
-
-		this.treeEvent = null;
-		this.nodeAddedCalled = false;
-		this.testModel.addTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireNodeAddedTreeEvent();
-		this.verifyTreeEvent(OBJECT_PATH);
-		assertTrue(this.nodeAddedCalled);
-
-		this.treeEvent = null;
-		this.nodeAddedCalled = false;
-		this.testModel.removeTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireNodeAddedTreeEvent();
-		assertNull(this.treeEvent);
-		assertFalse(this.nodeAddedCalled);
-	}
-
-	public void testFireNodeRemovedTreeEvent() {
-		this.treeEvent = null;
-		this.nodeRemovedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireNodeRemovedTreeEvent();
-		this.verifyTreeEvent(OBJECT_PATH);
-		assertTrue(this.nodeRemovedCalled);
-
-		this.treeEvent = null;
-		this.nodeRemovedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireNodeRemovedTreeEvent();
-		assertNull(this.treeEvent);
-		assertFalse(this.nodeRemovedCalled);
-
-		this.treeEvent = null;
-		this.nodeRemovedCalled = false;
-		this.testModel.addTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireNodeRemovedTreeEvent();
-		this.verifyTreeEvent(OBJECT_PATH);
-		assertTrue(this.nodeRemovedCalled);
-
-		this.treeEvent = null;
-		this.nodeRemovedCalled = false;
-		this.testModel.removeTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireNodeRemovedTreeEvent();
-		assertNull(this.treeEvent);
-		assertFalse(this.nodeRemovedCalled);
-	}
-
-	public void testFireNodeRemovedTree() {
-		this.treeEvent = null;
-		this.nodeRemovedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireNodeRemovedTree();
-		this.verifyTreeEvent(OBJECT_PATH);
-		assertTrue(this.nodeRemovedCalled);
-
-		this.treeEvent = null;
-		this.nodeRemovedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireNodeRemovedTree();
-		assertNull(this.treeEvent);
-		assertFalse(this.nodeRemovedCalled);
-
-		this.treeEvent = null;
-		this.nodeRemovedCalled = false;
-		this.testModel.addTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireNodeRemovedTree();
-		this.verifyTreeEvent(OBJECT_PATH);
-		assertTrue(this.nodeRemovedCalled);
-
-		this.treeEvent = null;
-		this.nodeRemovedCalled = false;
-		this.testModel.removeTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireNodeRemovedTree();
-		assertNull(this.treeEvent);
-		assertFalse(this.nodeRemovedCalled);
-	}
-
-	public void testFireTreeClearedEvent() {
-		this.treeEvent = null;
-		this.treeClearedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireTreeClearedEvent();
-		this.verifyTreeEvent(null);
-		assertTrue(this.treeClearedCalled);
-
-		this.treeEvent = null;
-		this.treeClearedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireTreeClearedEvent();
-		assertNull(this.treeEvent);
-		assertFalse(this.treeClearedCalled);
-
-		this.treeEvent = null;
-		this.treeClearedCalled = false;
-		this.testModel.addTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireTreeClearedEvent();
-		this.verifyTreeEvent(null);
-		assertTrue(this.treeClearedCalled);
-
-		this.treeEvent = null;
-		this.treeClearedCalled = false;
-		this.testModel.removeTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireTreeClearedEvent();
-		assertNull(this.treeEvent);
-		assertFalse(this.treeClearedCalled);
-	}
-
-	public void testFireTreeCleared() {
-		this.treeEvent = null;
-		this.treeClearedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireTreeCleared();
-		this.verifyTreeEvent(null);
-		assertTrue(this.treeClearedCalled);
-
-		this.treeEvent = null;
-		this.treeClearedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireTreeCleared();
-		assertNull(this.treeEvent);
-		assertFalse(this.treeClearedCalled);
-
-		this.treeEvent = null;
-		this.treeClearedCalled = false;
-		this.testModel.addTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireTreeCleared();
-		this.verifyTreeEvent(null);
-		assertTrue(this.treeClearedCalled);
-
-		this.treeEvent = null;
-		this.treeClearedCalled = false;
-		this.testModel.removeTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireTreeCleared();
-		assertNull(this.treeEvent);
-		assertFalse(this.treeClearedCalled);
-	}
-
-	public void testFireTreeChangedEvent() {
-		this.treeEvent = null;
-		this.treeChangedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireTreeChangedEvent();
-		this.verifyTreeEvent(null);
-		assertTrue(this.treeChangedCalled);
-
-		this.treeEvent = null;
-		this.treeChangedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireTreeChangedEvent();
-		assertNull(this.treeEvent);
-		assertFalse(this.treeChangedCalled);
-
-		this.treeEvent = null;
-		this.treeChangedCalled = false;
-		this.testModel.addTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireTreeChangedEvent();
-		this.verifyTreeEvent(null);
-		assertTrue(this.treeChangedCalled);
-
-		this.treeEvent = null;
-		this.treeChangedCalled = false;
-		this.testModel.removeTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireTreeChangedEvent();
-		assertNull(this.treeEvent);
-		assertFalse(this.treeChangedCalled);
-	}
-
-	public void testFireTreeChanged() {
-		this.treeEvent = null;
-		this.treeChangedCalled = false;
-		this.testModel.addChangeListener(this.changeListener);
-		this.testModel.testFireTreeChanged();
-		this.verifyTreeEvent(null);
-		assertTrue(this.treeChangedCalled);
-
-		this.treeEvent = null;
-		this.treeChangedCalled = false;
-		this.testModel.removeChangeListener(this.changeListener);
-		this.testModel.testFireTreeChanged();
-		assertNull(this.treeEvent);
-		assertFalse(this.treeChangedCalled);
-
-		this.treeEvent = null;
-		this.treeChangedCalled = false;
-		this.testModel.addTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireTreeChanged();
-		this.verifyTreeEvent(null);
-		assertTrue(this.treeChangedCalled);
-
-		this.treeEvent = null;
-		this.treeChangedCalled = false;
-		this.testModel.removeTreeChangeListener(TREE_NAME, this.changeListener);
-		this.testModel.testFireTreeChanged();
-		assertNull(this.treeEvent);
-		assertFalse(this.treeChangedCalled);
-	}
-
-	public void testHasAnyTreeChangeListeners() {
-		assertTrue(this.testModel.hasNoTreeChangeListeners(TREE_NAME));
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.hasAnyTreeChangeListeners(TREE_NAME));
-		this.testModel.removeChangeListener(this.changeListener);
-		assertTrue(this.testModel.hasNoTreeChangeListeners(TREE_NAME));
-
-		assertTrue(this.testModel.hasNoTreeChangeListeners(TREE_NAME));
-		this.testModel.addTreeChangeListener(TREE_NAME, this.changeListener);
-		assertTrue(this.testModel.hasAnyTreeChangeListeners(TREE_NAME));
-		this.testModel.removeTreeChangeListener(TREE_NAME, this.changeListener);
-		assertTrue(this.testModel.hasNoTreeChangeListeners(TREE_NAME));
-	}
-
-	public void testAddNullTreeListener() {
-		boolean exCaught = false;
-		try {
-			this.testModel.addTreeChangeListener("foo", null);
-		} catch (NullPointerException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testRemoveBogusTreeListener() {
-		boolean exCaught = false;
-		try {
-			this.testModel.removeTreeChangeListener("foo", this.changeListener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		this.testModel.addPropertyChangeListener("foo", this.changeListener);
-		exCaught = false;
-		try {
-			this.testModel.removeTreeChangeListener("foo", this.changeListener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		this.testModel.addTreeChangeListener("foo", this.changeListener);
-		exCaught = false;
-		try {
-			this.testModel.removeTreeChangeListener("foo", new TreeChangeAdapter());
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-
-		exCaught = false;
-		try {
-			this.testModel.removeTreeChangeListener("foo", new TreeChangeAdapter());
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	private void verifyTreeEvent(List<?> path) {
-		assertNotNull(this.treeEvent);
-		assertEquals(this.testModel, this.treeEvent.getSource());
-		assertEquals(TREE_NAME, this.treeEvent.getTreeName());
-		assertEquals(path, this.getListPath());
-	}
-
-	private List<?> getListPath() {
-		Iterable<?> iterable = this.getPath();
-		return (iterable == null)  ? null : CollectionTools.list(iterable);
-	}
-
-	private Iterable<?> getPath() {
-		if (this.treeEvent instanceof TreeAddEvent) {
-			return ((TreeAddEvent) this.treeEvent).getPath();
-		}
-		if (this.treeEvent instanceof TreeRemoveEvent) {
-			return ((TreeRemoveEvent) this.treeEvent).getPath();
-		}
-		return null;
-	}
-	
-
-
-	// ********** convenience method tests **********
-
-	public void testElementsAreEqual() {
-		Collection<String> c1 = new ArrayList<String>();
-		c1.add("foo");
-		c1.add("bar");
-		c1.add("baz");
-		Collection<String> c2 = new ArrayList<String>();
-		c2.add("foo");
-		c2.add("bar");
-		c2.add("baz");
-		assertTrue(this.testModel.testElementsAreEqual(c1, c2));
-	}
-
-	public void testElementsAreDifferent() {
-		Collection<String> c1 = new ArrayList<String>();
-		c1.add("foo");
-		c1.add("bar");
-		c1.add("baz");
-		Collection<String> c2 = new ArrayList<String>();
-		c2.add("baz");
-		c2.add("bar");
-		c2.add("foo");
-		assertTrue(this.testModel.testElementsAreDifferent(c1, c2));
-	}
-
-
-	// ********** AbstractModel tests **********
-
-	public void testAbstractModelValuesAreEqual1() {
-		assertTrue(this.testModel.testValuesAreEqual(null, null));
-	}
-
-	public void testAbstractModelValuesAreEqual2() {
-		assertTrue(this.testModel.testValuesAreEqual("foo", "foo"));
-	}
-
-	public void testAbstractModelValuesAreEqual3() {
-		assertFalse(this.testModel.testValuesAreEqual("foo", null));
-	}
-
-	public void testAbstractModelValuesAreEqual4() {
-		assertFalse(this.testModel.testValuesAreEqual(null, "foo"));
-	}
-
-	public void testAbstractModelValuesAreEqual5() {
-		assertFalse(this.testModel.testValuesAreEqual("bar", "foo"));
-	}
-
-	public void testAbstractModelValuesAreDifferent1() {
-		assertFalse(this.testModel.testValuesAreDifferent(null, null));
-	}
-
-	public void testAbstractModelValuesAreDifferent2() {
-		assertFalse(this.testModel.testValuesAreDifferent("foo", "foo"));
-	}
-
-	public void testAbstractModelValuesAreDifferent3() {
-		assertTrue(this.testModel.testValuesAreDifferent("foo", null));
-	}
-
-	public void testAbstractModelValuesAreDifferent4() {
-		assertTrue(this.testModel.testValuesAreDifferent(null, "foo"));
-	}
-
-	public void testAbstractModelValuesAreDifferent5() {
-		assertTrue(this.testModel.testValuesAreDifferent("bar", "foo"));
-	}
-
-	public void testAbstractModelAttributeValueHasChanged1() {
-		assertFalse(this.testModel.testAttributeValueHasChanged(null, null));
-	}
-
-	public void testAbstractModelAttributeValueHasChanged2() {
-		assertFalse(this.testModel.testAttributeValueHasChanged("foo", "foo"));
-	}
-
-	public void testAbstractModelAttributeValueHasChanged3() {
-		assertTrue(this.testModel.testAttributeValueHasChanged("foo", null));
-	}
-
-	public void testAbstractModelAttributeValueHasChanged4() {
-		assertTrue(this.testModel.testAttributeValueHasChanged(null, "foo"));
-	}
-
-	public void testAbstractModelAttributeValueHasChanged5() {
-		assertTrue(this.testModel.testAttributeValueHasChanged("bar", "foo"));
-	}
-
-	public void testAbstractModelAttributeValueHasNotChanged1() {
-		assertTrue(this.testModel.testAttributeValueHasNotChanged(null, null));
-	}
-
-	public void testAbstractModelAttributeValueHasNotChanged2() {
-		assertTrue(this.testModel.testAttributeValueHasNotChanged("foo", "foo"));
-	}
-
-	public void testAbstractModelAttributeValueHasNotChanged3() {
-		assertFalse(this.testModel.testAttributeValueHasNotChanged("foo", null));
-	}
-
-	public void testAbstractModelAttributeValueHasNotChanged4() {
-		assertFalse(this.testModel.testAttributeValueHasNotChanged(null, "foo"));
-	}
-
-	public void testAbstractModelAttributeValueHasNotChanged5() {
-		assertFalse(this.testModel.testAttributeValueHasNotChanged("bar", "foo"));
-	}
-
-	public void testAbstractModelClone() {
-		assertFalse(this.testModel.hasAnyPropertyChangeListeners(PROPERTY_NAME));
-		this.testModel.addChangeListener(this.changeListener);
-		assertTrue(this.testModel.hasAnyPropertyChangeListeners(PROPERTY_NAME));
-
-		// verify that the clone does not have any listeners
-		TestModel clone = this.testModel.clone();
-		assertFalse(clone.hasAnyPropertyChangeListeners(PROPERTY_NAME));
-		clone.addChangeListener(this.changeListener);
-		assertTrue(clone.hasAnyPropertyChangeListeners(PROPERTY_NAME));
-		// check original
-		assertTrue(this.testModel.hasAnyPropertyChangeListeners(PROPERTY_NAME));
-
-		// now test events fired by original
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		this.testModel.testFirePropertyChangedObjectObject();
-		this.verifyPropertyChangeEvent(OLD_OBJECT_VALUE, NEW_OBJECT_VALUE);
-		assertTrue(this.propertyChangeCalled);
-
-		// now test events fired by clone
-		this.propertyChangeEvent = null;
-		this.propertyChangeCalled = false;
-		clone.testFirePropertyChangedObjectObject();
-		this.verifyPropertyChangeEvent(clone, OLD_OBJECT_VALUE, NEW_OBJECT_VALUE);
-		assertTrue(this.propertyChangeCalled);
-	}
-
-	public void testAbstractModelToString() {
-		assertTrue(this.testModel.toString().contains('(' + TEST_TO_STRING + ')'));
-	}
-
-
-	// ********** listener implementations **********
-
-	class Adapter implements ChangeListener {
-		public void stateChanged(StateChangeEvent e) {
-			ChangeSupportTests.this.stateChangedCalled = true;
-			ChangeSupportTests.this.stateChangeEvent = e;
-		}
-	
-		public void propertyChanged(PropertyChangeEvent e) {
-			ChangeSupportTests.this.propertyChangeCalled = true;
-			ChangeSupportTests.this.propertyChangeEvent = e;
-		}
-	
-	
-		public void itemsAdded(CollectionAddEvent e) {
-			ChangeSupportTests.this.itemsAddedCollectionCalled = true;
-			ChangeSupportTests.this.collectionEvent = e;
-		}
-		public void itemsRemoved(CollectionRemoveEvent e) {
-			ChangeSupportTests.this.itemsRemovedCollectionCalled = true;
-			ChangeSupportTests.this.collectionEvent = e;
-		}
-		public void collectionCleared(CollectionClearEvent e) {
-			ChangeSupportTests.this.collectionClearedCalled = true;
-			ChangeSupportTests.this.collectionEvent = e;
-		}
-		public void collectionChanged(CollectionChangeEvent e) {
-			ChangeSupportTests.this.collectionChangedCalled = true;
-			ChangeSupportTests.this.collectionEvent = e;
-		}
-	
-		public void itemsAdded(ListAddEvent e) {
-			ChangeSupportTests.this.itemsAddedListCalled = true;
-			ChangeSupportTests.this.listEvent = e;
-		}
-		public void itemsRemoved(ListRemoveEvent e) {
-			ChangeSupportTests.this.itemsRemovedListCalled = true;
-			ChangeSupportTests.this.listEvent = e;
-		}
-		public void itemsReplaced(ListReplaceEvent e) {
-			ChangeSupportTests.this.itemsReplacedListCalled = true;
-			ChangeSupportTests.this.listEvent = e;
-		}
-		public void itemsMoved(ListMoveEvent e) {
-			ChangeSupportTests.this.itemsMovedListCalled = true;
-			ChangeSupportTests.this.listEvent = e;
-		}
-		public void listCleared(ListClearEvent e) {
-			ChangeSupportTests.this.listClearedCalled = true;
-			ChangeSupportTests.this.listEvent = e;
-		}
-		public void listChanged(ListChangeEvent e) {
-			ChangeSupportTests.this.listChangedCalled = true;
-			ChangeSupportTests.this.listEvent = e;
-		}
-	
-		public void nodeAdded(TreeAddEvent e) {
-			ChangeSupportTests.this.nodeAddedCalled = true;
-			ChangeSupportTests.this.treeEvent = e;
-		}
-		public void nodeRemoved(TreeRemoveEvent e) {
-			ChangeSupportTests.this.nodeRemovedCalled = true;
-			ChangeSupportTests.this.treeEvent = e;
-		}
-		public void treeCleared(TreeClearEvent e) {
-			ChangeSupportTests.this.treeClearedCalled = true;
-			ChangeSupportTests.this.treeEvent = e;
-		}
-		public void treeChanged(TreeChangeEvent e) {
-			ChangeSupportTests.this.treeChangedCalled = true;
-			ChangeSupportTests.this.treeEvent = e;
-		}
-	}
-
-
-	// ********** inner class **********
-
-	private static class TestModel extends AbstractModel implements Cloneable {
-		TestModel() {
-			super();
-		}
-
-		// ***** state
-		public void testFireStateChange() {
-			this.fireStateChanged();
-		}
-
-		// ***** property
-		public void testFirePropertyChangedEvent() {
-			this.firePropertyChanged(new PropertyChangeEvent(this, PROPERTY_NAME, OLD_OBJECT_VALUE, NEW_OBJECT_VALUE));
-		}
-
-		public void testFirePropertyChangedEventNoChange() {
-			this.firePropertyChanged(new PropertyChangeEvent(this, PROPERTY_NAME, OLD_OBJECT_VALUE, OLD_OBJECT_VALUE));
-		}
-
-		public void testFirePropertyChangedObjectObject() {
-			this.firePropertyChanged(PROPERTY_NAME, OLD_OBJECT_VALUE, NEW_OBJECT_VALUE);
-		}
-
-		public void testFirePropertyChangedObjectObjectNoChange() {
-			this.firePropertyChanged(PROPERTY_NAME, OLD_OBJECT_VALUE, OLD_OBJECT_VALUE);
-		}
-
-		public void testFirePropertyChangedObject() {
-			this.firePropertyChanged(PROPERTY_NAME, NEW_OBJECT_VALUE);
-		}
-
-		public void testFirePropertyChangedObjectNoChange() {
-			this.firePropertyChanged(PROPERTY_NAME, null);
-		}
-
-		public void testFirePropertyChangedIntInt() {
-			this.firePropertyChanged(PROPERTY_NAME, OLD_INT_VALUE.intValue(), NEW_INT_VALUE.intValue());
-		}
-
-		public void testFirePropertyChangedIntIntNoChange() {
-			this.firePropertyChanged(PROPERTY_NAME, OLD_INT_VALUE.intValue(), OLD_INT_VALUE.intValue());
-		}
-
-		public void testFirePropertyChangedBooleanBoolean() {
-			this.firePropertyChanged(PROPERTY_NAME, OLD_BOOLEAN_VALUE.booleanValue(), NEW_BOOLEAN_VALUE.booleanValue());
-		}
-
-		public void testFirePropertyChangedBooleanBooleanNoChange() {
-			this.firePropertyChanged(PROPERTY_NAME, OLD_BOOLEAN_VALUE.booleanValue(), OLD_BOOLEAN_VALUE.booleanValue());
-		}
-
-		// ***** collection
-		public void testFireItemsAddedCollectionEvent() {
-			this.fireItemsAdded(new CollectionAddEvent(this, COLLECTION_NAME, ADDED_OBJECT_VALUE));
-		}
-
-		public void testFireItemsAddedCollectionEventNoChange() {
-			this.fireItemsAdded(new CollectionAddEvent(this, COLLECTION_NAME, Collections.emptySet()));
-		}
-
-		public void testFireItemsAddedCollection() {
-			this.fireItemsAdded(COLLECTION_NAME, Collections.singleton(ADDED_OBJECT_VALUE));
-		}
-
-		public void testFireItemsAddedCollectionNoChange() {
-			this.fireItemsAdded(COLLECTION_NAME, Collections.emptySet());
-		}
-
-		public void testFireItemAddedCollection() {
-			this.fireItemAdded(COLLECTION_NAME, ADDED_OBJECT_VALUE);
-		}
-
-		public void testFireItemsRemovedCollectionEvent() {
-			this.fireItemsRemoved(new CollectionRemoveEvent(this, COLLECTION_NAME, REMOVED_OBJECT_VALUE));
-		}
-
-		public void testFireItemsRemovedCollectionEventNoChange() {
-			this.fireItemsRemoved(new CollectionRemoveEvent(this, COLLECTION_NAME, Collections.emptySet()));
-		}
-
-		public void testFireItemsRemovedCollection() {
-			this.fireItemsRemoved(COLLECTION_NAME, Collections.singleton(REMOVED_OBJECT_VALUE));
-		}
-
-		public void testFireItemsRemovedCollectionNoChange() {
-			this.fireItemsRemoved(COLLECTION_NAME, Collections.emptySet());
-		}
-
-		public void testFireItemRemovedCollection() {
-			this.fireItemRemoved(COLLECTION_NAME, REMOVED_OBJECT_VALUE);
-		}
-
-		public void testFireCollectionCleared() {
-			this.fireCollectionCleared(COLLECTION_NAME);
-		}
-
-		public void testFireCollectionChangedEvent() {
-			this.fireCollectionChanged(new CollectionChangeEvent(this, COLLECTION_NAME, Collections.emptySet()));
-		}
-
-		public void testFireCollectionChanged() {
-			this.fireCollectionChanged(COLLECTION_NAME, Collections.emptySet());
-		}
-
-		public boolean testAddItemToCollection() {
-			return this.addItemToCollection(ADDED_OBJECT_VALUE, new ArrayList<Object>(), COLLECTION_NAME);
-		}
-
-		public boolean testAddItemToCollectionNoChange() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add(ADDED_OBJECT_VALUE);
-			return this.addItemToCollection(ADDED_OBJECT_VALUE, collection, COLLECTION_NAME);
-		}
-
-		public boolean testAddItemsToCollection() {
-			return this.addItemsToCollection(Collections.singleton(ADDED_OBJECT_VALUE), new ArrayList<Object>(), COLLECTION_NAME);
-		}
-
-		public boolean testAddItemsToCollectionNoChange() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add(ADDED_OBJECT_VALUE);
-			return this.addItemsToCollection(Collections.singleton(ADDED_OBJECT_VALUE), collection, COLLECTION_NAME);
-		}
-
-		public boolean testAddItemsToCollectionMixed() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add(ADDED_OBJECT_VALUE);
-			return this.addItemsToCollection(new Object[] {ADDED_OBJECT_VALUE, ADDED_OBJECT_VALUE_2}, collection, COLLECTION_NAME);
-		}
-
-		public boolean testRemoveItemFromCollection() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add(REMOVED_OBJECT_VALUE);
-			return this.removeItemFromCollection(REMOVED_OBJECT_VALUE, collection, COLLECTION_NAME);
-		}
-
-		public boolean testRemoveItemFromCollectionNoChange() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add(REMOVED_OBJECT_VALUE);
-			return this.removeItemFromCollection("foo", collection, COLLECTION_NAME);
-		}
-
-		public boolean testRemoveItemsFromCollection() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add(REMOVED_OBJECT_VALUE);
-			collection.add("foo");
-			collection.add("bar");
-			return this.removeItemsFromCollection(new Object[] {"foo", "bar", REMOVED_OBJECT_VALUE}, collection, COLLECTION_NAME);
-		}
-
-		public boolean testRemoveItemsFromCollectionNoChange1() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add(REMOVED_OBJECT_VALUE);
-			return this.removeItemsFromCollection(Collections.emptySet(), collection, COLLECTION_NAME);
-		}
-
-		public boolean testRemoveItemsFromCollectionNoChange2() {
-			Collection<Object> collection = new HashSet<Object>();
-			return this.removeItemsFromCollection(Collections.singleton("foo"), collection, COLLECTION_NAME);
-		}
-
-		public boolean testRemoveItemsFromCollectionNoChange3() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add(REMOVED_OBJECT_VALUE);
-			return this.removeItemsFromCollection(Collections.singleton("foo"), collection, COLLECTION_NAME);
-		}
-
-		public boolean testRetainItemsInCollection1() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add(REMOVED_OBJECT_VALUE);
-			collection.add("foo");
-			collection.add("bar");
-			return this.retainItemsInCollection(new Object[] {"foo", "bar"}, collection, COLLECTION_NAME);
-		}
-
-		public boolean testRetainItemsInCollection2() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add(REMOVED_OBJECT_VALUE);
-			collection.add("foo");
-			collection.add("bar");
-			return this.retainItemsInCollection(Collections.emptySet(), collection, COLLECTION_NAME);
-		}
-
-		public boolean testRetainItemsInCollectionNoChange1() {
-			Collection<Object> collection = new HashSet<Object>();
-			return this.retainItemsInCollection(new Object[] {"foo", "bar"}, collection, COLLECTION_NAME);
-		}
-
-		public boolean testRetainItemsInCollectionNoChange2() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add(REMOVED_OBJECT_VALUE);
-			collection.add("foo");
-			collection.add("bar");
-			return this.retainItemsInCollection(new Object[] {"foo", "bar", REMOVED_OBJECT_VALUE}, collection, COLLECTION_NAME);
-		}
-
-		public boolean testClearCollection() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add(REMOVED_OBJECT_VALUE);
-			collection.add("foo");
-			collection.add("bar");
-			return this.clearCollection(collection, COLLECTION_NAME);
-		}
-
-		public boolean testClearCollectionNoChange() {
-			Collection<Object> collection = new HashSet<Object>();
-			return this.clearCollection(collection, COLLECTION_NAME);
-		}
-
-		public boolean testSynchronizeCollection1() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add("foo");
-			collection.add("bar");
-			collection.add("baz");
-			Collection<Object> newCollection = new HashSet<Object>();
-			newCollection.add("joo");
-			newCollection.add("jar");
-			newCollection.add("baz");
-			boolean result = this.synchronizeCollection(newCollection, collection, COLLECTION_NAME);
-			assertEquals(newCollection, collection);
-			return result;
-		}
-
-		public boolean testSynchronizeCollection2() {
-			Collection<Object> collection = new HashSet<Object>();
-			collection.add("foo");
-			collection.add("bar");
-			collection.add("baz");
-			Collection<Object> newCollection = new HashSet<Object>();
-			boolean result = this.synchronizeCollection(newCollection, collection, COLLECTION_NAME);
-			assertEquals(newCollection, collection);
-			return result;
-		}
-
-		public boolean testSynchronizeCollection3() {
-			Collection<Object> collection = new HashSet<Object>();
-			Collection<Object> newCollection = new HashSet<Object>();
-			newCollection.add("joo");
-			newCollection.add("jar");
-			newCollection.add("baz");
-			boolean result = this.synchronizeCollection(newCollection, collection, COLLECTION_NAME);
-			assertEquals(newCollection, collection);
-			return result;
-		}
-
-		// ***** list
-		public void testFireItemsAddedListEvent() {
-			this.fireItemsAdded(new ListAddEvent(this, LIST_NAME, ADD_INDEX, ADDED_OBJECT_VALUE));
-		}
-
-		public void testFireItemsAddedListEventNoChange() {
-			this.fireItemsAdded(new ListAddEvent(this, LIST_NAME, ADD_INDEX, Collections.emptyList()));
-		}
-
-		public void testFireItemsAddedList() {
-			this.fireItemsAdded(LIST_NAME, ADD_INDEX, Collections.singletonList(ADDED_OBJECT_VALUE));
-		}
-
-		public void testFireItemsAddedListNoChange() {
-			this.fireItemsAdded(LIST_NAME, ADD_INDEX, Collections.emptyList());
-		}
-
-		public void testFireItemAddedList() {
-			this.fireItemAdded(LIST_NAME, ADD_INDEX, ADDED_OBJECT_VALUE);
-		}
-
-		public void testFireItemsRemovedListEvent() {
-			this.fireItemsRemoved(new ListRemoveEvent(this, LIST_NAME, REMOVE_INDEX, REMOVED_OBJECT_VALUE));
-		}
-
-		public void testFireItemsRemovedListEventNoChange() {
-			this.fireItemsRemoved(new ListRemoveEvent(this, LIST_NAME, REMOVE_INDEX, Collections.emptyList()));
-		}
-
-		public void testFireItemsRemovedList() {
-			this.fireItemsRemoved(LIST_NAME, REMOVE_INDEX, Collections.singletonList(REMOVED_OBJECT_VALUE));
-		}
-
-		public void testFireItemsRemovedListNoChange() {
-			this.fireItemsRemoved(LIST_NAME, REMOVE_INDEX, Collections.emptyList());
-		}
-
-		public void testFireItemRemovedList() {
-			this.fireItemRemoved(LIST_NAME, REMOVE_INDEX, REMOVED_OBJECT_VALUE);
-		}
-
-		public void testFireItemsReplacedListEvent() {
-			this.fireItemsReplaced(new ListReplaceEvent(this, LIST_NAME, REPLACE_INDEX, ADDED_OBJECT_VALUE, REMOVED_OBJECT_VALUE));
-		}
-
-		public void testFireItemsReplacedListEventNoChange() {
-			this.fireItemsReplaced(new ListReplaceEvent(this, LIST_NAME, REPLACE_INDEX, Collections.emptyList(), Collections.emptyList()));
-		}
-
-		public void testFireItemsReplacedList() {
-			this.fireItemsReplaced(LIST_NAME, REPLACE_INDEX, Collections.singletonList(ADDED_OBJECT_VALUE), Collections.singletonList(REMOVED_OBJECT_VALUE));
-		}
-
-		public void testFireItemsReplacedListNoChange() {
-			this.fireItemsReplaced(LIST_NAME, REPLACE_INDEX, Collections.emptyList(), Collections.emptyList());
-		}
-
-		public void testFireItemReplacedList() {
-			this.fireItemReplaced(LIST_NAME, REPLACE_INDEX, ADDED_OBJECT_VALUE, REMOVED_OBJECT_VALUE);
-		}
-
-		public void testFireItemsMovedListEvent() {
-			this.fireItemsMoved(new ListMoveEvent(this, LIST_NAME, TARGET_INDEX, SOURCE_INDEX, 1));
-		}
-
-		public void testFireItemsMovedListEventNoChange() {
-			this.fireItemsMoved(new ListMoveEvent(this, LIST_NAME, SOURCE_INDEX, SOURCE_INDEX, 1));
-		}
-
-		public void testFireItemsMovedList() {
-			this.fireItemsMoved(LIST_NAME, TARGET_INDEX, SOURCE_INDEX, 1);
-		}
-
-		public void testFireItemsMovedListNoChange() {
-			this.fireItemsMoved(LIST_NAME, SOURCE_INDEX, SOURCE_INDEX, 1);
-		}
-
-		public void testFireItemMovedList() {
-			this.fireItemMoved(LIST_NAME, TARGET_INDEX, SOURCE_INDEX);
-		}
-
-		public void testFireListClearedEvent() {
-			this.fireListCleared(new ListClearEvent(this, LIST_NAME));
-		}
-
-		public void testFireListCleared() {
-			this.fireListCleared(LIST_NAME);
-		}
-
-		public void testFireListChangedEvent() {
-			this.fireListChanged(new ListChangeEvent(this, LIST_NAME, Collections.emptyList()));
-		}
-
-		public void testFireListChanged() {
-			this.fireListChanged(LIST_NAME, Collections.emptyList());
-		}
-
-		public void testAddItemToListIndex() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.addItemToList(2, "joo", list, LIST_NAME);
-		}
-
-		public void testAddItemToList() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.addItemToList("joo", list, LIST_NAME);
-		}
-
-		public void testAddItemsToListIndex() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.addItemsToList(2, Collections.singletonList("joo"), list, LIST_NAME);
-		}
-
-		public void testAddItemsToListIndexNoChange() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.addItemsToList(2, Collections.<String>emptyList(), list, LIST_NAME);
-		}
-
-		public void testAddItemsToList() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.addItemsToList(Collections.singletonList("joo"), list, LIST_NAME);
-		}
-
-		public void testAddItemsToListNoChange() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.addItemsToList(Collections.<String>emptyList(), list, LIST_NAME);
-		}
-
-		public void testRemoveItemFromListIndex() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.removeItemFromList(1, list, LIST_NAME);
-		}
-
-		public void testRemoveItemFromList() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.removeItemFromList("bar", list, LIST_NAME);
-		}
-
-		public void testRemoveItemsFromListIndex() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.removeItemsFromList(1, 1, list, LIST_NAME);
-		}
-
-		public void testRemoveItemsFromListIndexNoChange() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.removeItemsFromList(2, 0, list, LIST_NAME);
-		}
-
-		public void testRemoveItemsFromList() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.removeItemsFromList(Collections.singletonList("bar"), list, LIST_NAME);
-		}
-
-		public void testRemoveItemsFromListNoChange() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.addItemsToList(Collections.<String>emptyList(), list, LIST_NAME);
-		}
-
-		public void testRetainItemsInList() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.retainItemsInList(new String[] {"bar", "baz"}, list, LIST_NAME);
-		}
-
-		public void testReplaceItemInList() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.replaceItemInList("bar", "xxx", list, LIST_NAME);
-		}
-
-		public void testSetItemsInList() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.setItemsInList(1, new String[] {"xxx"}, list, LIST_NAME);
-		}
-
-		public void testMoveItemsInList() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			list.add("xxx");
-			list.add("yyy");
-			list.add("zzz");
-			this.moveItemsInList(2, 4, 2, list, LIST_NAME);
-		}
-
-		public void testClearList() {
-			List<String> list = new ArrayList<String>();
-			list.add("foo");
-			list.add("bar");
-			list.add("baz");
-			this.clearList(list, LIST_NAME);
-		}
-
-		public void testSynchronizeList() {
-			List<String> oldList = new ArrayList<String>();
-			oldList.add("foo");
-			oldList.add("bar");
-			oldList.add("baz");
-			oldList.add("xxx");
-			oldList.add("yyy");
-			oldList.add("zzz");
-			List<String> newList = new ArrayList<String>();
-			newList.add("foo");
-			newList.add("ppp");
-			newList.add("baz");
-			newList.add("xxx");
-			newList.add("qqq");
-			this.synchronizeList(newList, oldList, LIST_NAME);
-			assertEquals(newList, oldList);
-		}
-
-		// ***** tree
-		public void testFireNodeAddedTreeEvent() {
-			this.fireNodeAdded(new TreeAddEvent(this, TREE_NAME, OBJECT_PATH));
-		}
-
-		public void testFireNodeAddedTree() {
-			this.fireNodeAdded(TREE_NAME, OBJECT_PATH);
-		}
-
-		public void testFireNodeRemovedTreeEvent() {
-			this.fireNodeRemoved(new TreeRemoveEvent(this, TREE_NAME, OBJECT_PATH));
-		}
-
-		public void testFireNodeRemovedTree() {
-			this.fireNodeRemoved(TREE_NAME, OBJECT_PATH);
-		}
-
-		public void testFireTreeClearedEvent() {
-			this.fireTreeCleared(new TreeClearEvent(this, TREE_NAME));
-		}
-
-		public void testFireTreeCleared() {
-			this.fireTreeCleared(TREE_NAME);
-		}
-
-		public void testFireTreeChangedEvent() {
-			this.fireTreeChanged(new TreeChangeEvent(this, TREE_NAME, OBJECT_PATH));
-		}
-
-		public void testFireTreeChanged() {
-			this.fireTreeChanged(TREE_NAME, OBJECT_PATH);
-		}
-
-		public boolean testAttributeValueHasChanged(Object value1, Object value2) {
-			return this.attributeValueHasChanged(value1, value2);
-		}
-
-		public boolean testAttributeValueHasNotChanged(Object value1, Object value2) {
-			return this.attributeValueHasNotChanged(value1, value2);
-		}
-
-		// ***** misc
-		@Override
-		public TestModel clone() {
-			try {
-				return (TestModel) super.clone();
-			} catch (CloneNotSupportedException ex) {
-				throw new InternalError();
-			}
-		}
-
-		public boolean testValuesAreDifferent(Object value1, Object value2) {
-			return this.valuesAreDifferent(value1, value2);
-		}
-
-		public boolean testValuesAreEqual(Object value1, Object value2) {
-			return this.valuesAreEqual(value1, value2);
-		}
-
-		public boolean testElementsAreDifferent(Iterable<?> iterable1, Iterable<?> iterable2) {
-			return this.getChangeSupport().elementsAreDifferent(iterable1, iterable2);
-		}
-
-		public boolean testElementsAreEqual(Iterable<?> iterable1, Iterable<?> iterable2) {
-			return this.getChangeSupport().elementsAreEqual(iterable1, iterable2);
-		}
-
-		@Override
-		public void toString(StringBuilder sb) {
-			sb.append(TEST_TO_STRING);
-		}
-
-	}
-
-
-	// ********** serialization test **********
-	public void testSerialization() throws java.io.IOException, ClassNotFoundException {
-		if (Tools.jvmIsSun()) {
-			// This test doesn't pass in the Eclipse build environment (Linux/IBM JVM) for some reason
-			this.verifySerialization();
-		}
-	}
-
-	private void verifySerialization() throws java.io.IOException, ClassNotFoundException {
-		LocalModel model1 = new LocalModel();
-		Foo foo1 = new Foo();
-		Bar bar1 = new Bar();
-		Joo joo1 = new Joo();
-		Jar jar1 = new Jar();
-		model1.addStateChangeListener(foo1);
-		model1.addStateChangeListener(bar1);
-		model1.addListChangeListener("foo", joo1);
-		model1.addListChangeListener("foo", jar1);
-
-		Iterable<EventListener> listeners1 = this.getListeners(model1, StateChangeListener.class, null);
-		Object[] listenersArray1 = ArrayTools.array(listeners1);
-		assertEquals(2, listenersArray1.length);
-		// the order of these could change...
-		assertEquals(Foo.class, listenersArray1[0].getClass());
-		assertEquals(Bar.class, listenersArray1[1].getClass());
-
-		listeners1 = this.getListeners(model1, ListChangeListener.class, "foo");
-		listenersArray1 = ArrayTools.array(listeners1);
-		assertEquals(2, listenersArray1.length);
-		// the order of these could change...
-		assertEquals(Joo.class, listenersArray1[0].getClass());
-		assertEquals(Jar.class, listenersArray1[1].getClass());
-
-		LocalModel model2 = TestTools.serialize(model1);
-
-		Iterable<EventListener> listeners2 = this.getListeners(model2, StateChangeListener.class, null);
-		Object[] listenersArray2 = ArrayTools.array(listeners2);
-		assertEquals(1, listenersArray2.length);
-		assertEquals(Foo.class, listenersArray2[0].getClass());
-
-		listeners2 = this.getListeners(model2, ListChangeListener.class, "foo");
-		listenersArray2 = ArrayTools.array(listeners2);
-		assertEquals(1, listenersArray2.length);
-		assertEquals(Joo.class, listenersArray2[0].getClass());
-	}
-
-	private Iterable<EventListener> getListeners(LocalModel model, Class<? extends EventListener> listenerClass, String aspectName) {
-		return this.getListenerList(model, listenerClass, aspectName).getListeners();
-	}
-
-	@SuppressWarnings("unchecked")
-	private ListenerList<EventListener> getListenerList(LocalModel model, Class<? extends EventListener> listenerClass, String aspectName) {
-		ChangeSupport changeSupport = (ChangeSupport) ReflectionTools.getFieldValue(model, "changeSupport");
-		return (ListenerList<EventListener>) ReflectionTools.executeMethod(changeSupport, "getListenerList_", new Class<?>[] {Class.class, String.class}, new Object[] {listenerClass, aspectName});
-	}
-
-	// we have to manually handle 'changeSupport' since AbstractModel is not Serializable
-	private static class LocalModel extends AbstractModel implements Serializable {
-		LocalModel() {
-			super();
-		}
-		private synchronized void writeObject(ObjectOutputStream s) throws IOException {
-			s.defaultWriteObject();
-			s.writeObject(this.changeSupport);
-	    }
-		private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException {
-			s.defaultReadObject();
-			this.changeSupport = (ChangeSupport) s.readObject();
-		}
-	}
-
-	private static class Foo implements Serializable, StateChangeListener {
-		Foo() {
-			super();
-		}
-		public void stateChanged(StateChangeEvent event) {
-			// do nothing
-		}
-	}
-
-	private static class Bar implements StateChangeListener {
-		Bar() {
-			super();
-		}
-		public void stateChanged(StateChangeEvent event) {
-			// do nothing
-		}
-	}
-
-	private static class Joo extends ListChangeAdapter implements Serializable {
-		Joo() {
-			super();
-		}
-	}
-
-	private static class Jar extends ListChangeAdapter {
-		Jar() {
-			super();
-		}
-	}
-
-
-	// ********** bug(?) test **********
-
-	private static final String ISE_MESSAGE = "this object is no longer listening to localA";
-
-	/**
-	 * Test the following situation:
-	 * 	- both B and C are listening to A
-	 * 	- C is also listening to B
-	 * 	- when B receives an event from A, it will fire an event to C
-	 * 	- when C receives an event from B, it will STOP listening to A
-	 * 	- the event from B to C may be preceded or followed (depending on
-	 * 		the hash positions of listeners) by an event from A to C:
-	 * 		- if the A to C event comes first, no problem
-	 * 		- but if the A to B event comes first, the A to C event should NOT happen
-	 */
-	public void testIndirectRemoveStateListener() {
-		this.verifyIndirectRemoveListener(
-			new NotifyCommand() {
-				public void notifyListeners(LocalA localA) {
-					localA.notifyStateListeners();
-				}
-			}
-		);
-	}
-
-	public void testIndirectRemovePropertyListener() {
-		this.verifyIndirectRemoveListener(
-			new NotifyCommand() {
-				public void notifyListeners(LocalA localA) {
-					localA.notifyPropertyListeners();
-				}
-			}
-		);
-	}
-
-	public void testIndirectRemoveCollectionListener() {
-		this.verifyIndirectRemoveListener(
-			new NotifyCommand() {
-				public void notifyListeners(LocalA localA) {
-					localA.notifyCollectionListeners();
-				}
-			}
-		);
-	}
-
-	public void testIndirectRemoveListListener() {
-		this.verifyIndirectRemoveListener(
-			new NotifyCommand() {
-				public void notifyListeners(LocalA localA) {
-					localA.notifyListListeners();
-				}
-			}
-		);
-	}
-
-	public void testIndirectRemoveTreeListener() {
-		this.verifyIndirectRemoveListener(
-			new NotifyCommand() {
-				public void notifyListeners(LocalA localA) {
-					localA.notifyTreeListeners();
-				}
-			}
-		);
-	}
-
-	public void verifyIndirectRemoveListener(NotifyCommand command) {
-		LocalA localA = new LocalA();
-		LocalB localB = new LocalB(localA);
-
-		// build a bunch of LocalCs so at least one of them is notified AFTER the LocalB;
-		// using 1000 seemed to fail very consistently before ChangeSupport was fixed
-		LocalC[] localCs = new LocalC[1000];
-		for (int i = localCs.length; i-- > 0; ) {
-			localCs[i] = new LocalC(localA, localB);
-		}
-
-		boolean exCaught = false;
-		try {
-			command.notifyListeners(localA);
-		} catch (IllegalStateException ex) {
-			if (ex.getMessage() == ISE_MESSAGE) {
-				exCaught = true;
-			} else {
-				throw ex;
-			}
-		}
-		assertFalse(exCaught);
-
-		for (int i = localCs.length; i-- > 0; ) {
-			assertFalse(localCs[i].isListeningToLocalA());
-		}
-	}
-
-	private interface NotifyCommand {
-		void notifyListeners(LocalA localA);
-	}
-
-	/**
-	 * This object simply fires a state change event. Both LocalB and LocalC
-	 * will be listeners.
-	 */
-	private static class LocalA extends AbstractModel {
-		LocalA() {
-			super();
-		}
-		void notifyStateListeners() {
-			this.fireStateChanged();
-		}
-		void notifyPropertyListeners() {
-			this.firePropertyChanged("foo", 1, 2);
-		}
-		void notifyCollectionListeners() {
-			this.fireCollectionChanged("foo", Collections.emptySet());
-		}
-		void notifyListListeners() {
-			this.fireListChanged("foo", Collections.emptyList());
-		}
-		void notifyTreeListeners() {
-			this.fireTreeChanged("foo", Collections.emptySet());
-		}
-	}
-
-	/**
-	 * This object will fire state change events whenever it receives
-	 * a state change event from localA.
-	 */
-	private static class LocalB
-		extends AbstractModel
-		implements ChangeListener
-	{
-		LocalB(LocalA localA) {
-			super();
-			localA.addChangeListener(this);
-		}
-
-		public void stateChanged(StateChangeEvent e) {
-			this.fireStateChanged();
-		}
-
-		public void propertyChanged(PropertyChangeEvent evt) {
-			this.firePropertyChanged("bar", 1, 2);
-		}
-
-		public void collectionChanged(CollectionChangeEvent e) {
-			this.fireCollectionChanged("bar", Collections.emptySet());
-		}
-		public void collectionCleared(CollectionClearEvent e) {/*ignore*/}
-		public void itemsAdded(CollectionAddEvent e) {/*ignore*/}
-		public void itemsRemoved(CollectionRemoveEvent e) {/*ignore*/}
-
-		public void listChanged(ListChangeEvent e) {
-			this.fireListChanged("bar", Collections.emptyList());
-		}
-		public void listCleared(ListClearEvent e) {/*ignore*/}
-		public void itemsAdded(ListAddEvent e) {/*ignore*/}
-		public void itemsRemoved(ListRemoveEvent e) {/*ignore*/}
-		public void itemsReplaced(ListReplaceEvent e) {/*ignore*/}
-		public void itemsMoved(ListMoveEvent e) {/*ignore*/}
-
-		public void treeChanged(TreeChangeEvent e) {
-			this.fireTreeChanged("bar", Collections.emptySet());
-		}
-		public void treeCleared(TreeClearEvent e) {/*ignore*/}
-		public void nodeAdded(TreeAddEvent e) {/*ignore*/}
-		public void nodeRemoved(TreeRemoveEvent e) {/*ignore*/}
-
-	}
-
-	/**
-	 * This object will listen to two other objects, localA and localB.
-	 * If this object receives notification from localB, it will stop listening to
-	 * localA. If this object receives notification from localA, it will check to
-	 * see whether it still listening to localA. If this object is no longer
-	 * listening to localA, it will complain about receiving the event and
-	 * throw an exception.
-	 */
-	private static class LocalC
-		extends AbstractModel
-		implements ChangeListener
-	{
-		private LocalA localA;
-		private LocalB localB;
-		private boolean listeningToLocalA;
-
-		LocalC(LocalA localA, LocalB localB) {
-			super();
-			this.localA = localA;
-			this.localB = localB;
-
-			localA.addChangeListener(this);
-			this.listeningToLocalA = true;
-
-			localB.addChangeListener(this);
-		}
-		boolean isListeningToLocalA() {
-			return this.listeningToLocalA;
-		}
-
-		public void stateChanged(StateChangeEvent e) {
-			Object source = e.getSource();
-			if (source == this.localA) {
-				if ( ! this.listeningToLocalA) {
-					throw new IllegalStateException(ISE_MESSAGE);
-				}
-			} else if (source == this.localB) {
-				this.localA.removeChangeListener(this);
-				this.listeningToLocalA = false;
-			} else {
-				throw new IllegalStateException("bogus event source: " + source);
-			}
-		}
-
-		public void propertyChanged(PropertyChangeEvent e) {
-			Object source = e.getSource();
-			if (source == this.localA) {
-				if ( ! this.listeningToLocalA) {
-					throw new IllegalStateException(ISE_MESSAGE);
-				}
-			} else if (source == this.localB) {
-				this.localA.removeChangeListener(this);
-				this.listeningToLocalA = false;
-			} else {
-				throw new IllegalStateException("bogus event source: " + source);
-			}
-		}
-
-		public void collectionChanged(CollectionChangeEvent e) {
-			Object source = e.getSource();
-			if (source == this.localA) {
-				if ( ! this.listeningToLocalA) {
-					throw new IllegalStateException(ISE_MESSAGE);
-				}
-			} else if (source == this.localB) {
-				this.localA.removeChangeListener(this);
-				this.listeningToLocalA = false;
-			} else {
-				throw new IllegalStateException("bogus event source: " + source);
-			}
-		}
-		public void collectionCleared(CollectionClearEvent e) {/*ignore*/}
-		public void itemsAdded(CollectionAddEvent e) {/*ignore*/}
-		public void itemsRemoved(CollectionRemoveEvent e) {/*ignore*/}
-
-		public void listChanged(ListChangeEvent e) {
-			Object source = e.getSource();
-			if (source == this.localA) {
-				if ( ! this.listeningToLocalA) {
-					throw new IllegalStateException(ISE_MESSAGE);
-				}
-			} else if (source == this.localB) {
-				this.localA.removeChangeListener(this);
-				this.listeningToLocalA = false;
-			} else {
-				throw new IllegalStateException("bogus event source: " + source);
-			}
-		}
-		public void listCleared(ListClearEvent e) {/*ignore*/}
-		public void itemsAdded(ListAddEvent e) {/*ignore*/}
-		public void itemsRemoved(ListRemoveEvent e) {/*ignore*/}
-		public void itemsReplaced(ListReplaceEvent e) {/*ignore*/}
-		public void itemsMoved(ListMoveEvent e) {/*ignore*/}
-
-		public void treeChanged(TreeChangeEvent e) {
-			Object source = e.getSource();
-			if (source == this.localA) {
-				if ( ! this.listeningToLocalA) {
-					throw new IllegalStateException(ISE_MESSAGE);
-				}
-			} else if (source == this.localB) {
-				this.localA.removeChangeListener(this);
-				this.listeningToLocalA = false;
-			} else {
-				throw new IllegalStateException("bogus event source: " + source);
-			}
-		}
-		public void treeCleared(TreeClearEvent e) {/*ignore*/}
-		public void nodeAdded(TreeAddEvent e) {/*ignore*/}
-		public void nodeRemoved(TreeRemoveEvent e) {/*ignore*/}
-
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/JptUtilityModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/JptUtilityModelTests.java
deleted file mode 100644
index ebd6330..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/JptUtilityModelTests.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.jpt.utility.tests.internal.model.listener.JptUtilityModelListenerTests;
-import org.eclipse.jpt.utility.tests.internal.model.value.JptUtilityModelValueTests;
-
-public class JptUtilityModelTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUtilityModelTests.class.getPackage().getName());
-
-		suite.addTest(JptUtilityModelListenerTests.suite());
-		suite.addTest(JptUtilityModelValueTests.suite());
-
-		suite.addTestSuite(ChangeSupportTests.class);
-		suite.addTestSuite(NewEventTests.class);
-		suite.addTestSuite(SingleAspectChangeSupportTests.class);
-
-		return suite;
-	}
-
-	private JptUtilityModelTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/NewEventTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/NewEventTests.java
deleted file mode 100644
index 2227650..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/NewEventTests.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model;
-
-import java.util.EventListener;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.ListenerList;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.ChangeEvent;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-/**
- * test what it takes to add a new type of event to
- * model and change support
- */
-public class NewEventTests extends TestCase {
-	private Foo foo;
-
-	public NewEventTests(String name) {
-		super(name);
-	}
-	
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.foo = new Foo();
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testHasNoFooChangeListeners() {
-		assertTrue(this.foo.hasNoFooChangeListeners());
-		LocalListener listener = new LocalListener();
-		this.foo.addFooChangeListener(listener);
-		assertFalse(this.foo.hasNoFooChangeListeners());
-		this.foo.removeFooChangeListener(listener);
-		assertTrue(this.foo.hasNoFooChangeListeners());
-	}
-
-	public void testHasAnyFooChangeListeners() {
-		assertFalse(this.foo.hasAnyFooChangeListeners());
-		LocalListener listener = new LocalListener();
-		this.foo.addFooChangeListener(listener);
-		assertTrue(this.foo.hasAnyFooChangeListeners());
-		this.foo.removeFooChangeListener(listener);
-		assertFalse(this.foo.hasAnyFooChangeListeners());
-	}
-
-	public void testFireFooChangeEvent() {
-		LocalListener listener = new LocalListener();
-		assertFalse(listener.receivedFooEvent);
-		this.foo.addFooChangeListener(listener);
-		this.foo.foo();
-		assertTrue(listener.receivedFooEvent);
-	}
-
-
-	// ********** harness classes **********
-
-	class Foo extends AbstractFooModel {
-		Foo() {
-			super();
-		}
-		void foo() {
-			this.fireFooChangeEvent();
-		}
-	}
-
-	class LocalListener implements FooChangeListener {
-		boolean receivedFooEvent = false;
-		LocalListener() {
-			super();
-		}
-		public void fooChanged(FooChangeEvent event) {
-			this.receivedFooEvent = true;
-		}
-	}
-
-	interface FooModel extends Model {
-		void addFooChangeListener(FooChangeListener listener);
-		void removeFooChangeListener(FooChangeListener listener);
-	}
-
-	interface FooChangeListener extends EventListener {
-		void fooChanged(FooChangeEvent event);
-	}
-
-	static class FooChangeEvent extends ChangeEvent {
-		private static final long serialVersionUID = 1L;
-		public FooChangeEvent(FooModel source) {
-			super(source);
-		}
-		public FooChangeEvent clone(Model newSource) {
-			return new FooChangeEvent((FooModel) newSource);
-		}
-	}
-
-	static class AbstractFooModel extends AbstractModel implements FooModel {
-		@Override
-		protected synchronized FooChangeSupport getChangeSupport() {
-			return (FooChangeSupport) super.getChangeSupport();
-		}
-		@Override
-		protected ChangeSupport buildChangeSupport() {
-			return new FooChangeSupport(this);
-		}
-		public void addFooChangeListener(FooChangeListener listener) {
-			this.getChangeSupport().addFooChangeListener(listener);
-		}
-		public void removeFooChangeListener(FooChangeListener listener) {
-			this.getChangeSupport().removeFooChangeListener(listener);
-		}
-		protected void fireFooChangeEvent() {
-			this.getChangeSupport().fireFooChanged();
-		}
-		public boolean hasAnyFooChangeListeners() {
-			return this.getChangeSupport().hasAnyFooChangeListeners();
-		}
-		public boolean hasNoFooChangeListeners() {
-			return ! this.hasAnyFooChangeListeners();
-		}
-	}
-
-	static class FooChangeSupport extends ChangeSupport {
-		FooChangeSupport(FooModel source) {
-			super(source);
-		}
-		protected static final Class<FooChangeListener> FOO_CHANGE_LISTENER_CLASS = FooChangeListener.class;
-		void addFooChangeListener(FooChangeListener listener) {
-			this.addListener(FOO_CHANGE_LISTENER_CLASS, listener);
-		}
-		void removeFooChangeListener(FooChangeListener listener) {
-			this.removeListener(FOO_CHANGE_LISTENER_CLASS, listener);
-		}
-		public boolean hasAnyFooChangeListeners() {
-			return this.hasAnyListeners(FOO_CHANGE_LISTENER_CLASS);
-		}
-		private ListenerList<FooChangeListener> getFooChangeListenerList() {
-			return this.getListenerList(FOO_CHANGE_LISTENER_CLASS);
-		}
-		private Iterable<FooChangeListener> getFooChangeListeners() {
-			ListenerList<FooChangeListener> listenerList = this.getFooChangeListenerList();
-			return (listenerList == null) ? null : listenerList.getListeners();
-		}
-		private boolean hasFooChangeListener(FooChangeListener listener) {
-			return CollectionTools.contains(this.getFooChangeListeners(), listener);
-		}
-		public void fireFooChanged() {
-			Iterable<FooChangeListener> listeners = this.getFooChangeListeners();
-			if (listeners != null) {
-				FooChangeEvent event = null;
-				for (FooChangeListener listener : listeners) {
-					if (this.hasFooChangeListener(listener)) {
-						if (event == null) {
-							// here's the reason for the duplicate code...
-							event = new FooChangeEvent((FooModel) this.source);
-						}
-						listener.fooChanged(event);
-					}
-				}
-			}
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/SingleAspectChangeSupportTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/SingleAspectChangeSupportTests.java
deleted file mode 100644
index f934ec1..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/SingleAspectChangeSupportTests.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.ChangeSupport;
-import org.eclipse.jpt.utility.internal.model.SingleAspectChangeSupport;
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-import org.eclipse.jpt.utility.model.listener.TreeChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.TreeChangeListener;
-
-@SuppressWarnings("nls")
-public class SingleAspectChangeSupportTests extends TestCase {
-
-	public SingleAspectChangeSupportTests(String name) {
-		super(name);
-	}
-
-	public void testAddPropertyChangeListenerInvalidClass() {
-		Model model = new StateTestModel();
-		boolean exCaught = false;
-		PropertyChangeListener listener = new PropertyChangeAdapter();
-		try {
-			model.addPropertyChangeListener("foo", listener);
-			fail("bogus listener: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAddPropertyChangeListenerInvalidAspect() {
-		Model model = new PropertyTestModel();
-		boolean exCaught = false;
-		PropertyChangeListener listener = new PropertyChangeAdapter();
-		try {
-			model.addPropertyChangeListener("bar", listener);
-			fail("bogus listener: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAddCollectionChangeListenerInvalidClass() {
-		Model model = new StateTestModel();
-		boolean exCaught = false;
-		CollectionChangeListener listener = new CollectionChangeAdapter();
-		try {
-			model.addCollectionChangeListener("foo", listener);
-			fail("bogus listener: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAddCollectionChangeListenerInvalidAspect() {
-		Model model = new CollectionTestModel();
-		boolean exCaught = false;
-		CollectionChangeListener listener = new CollectionChangeAdapter();
-		try {
-			model.addCollectionChangeListener("bar", listener);
-			fail("bogus listener: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAddListChangeListenerInvalidClass() {
-		Model model = new StateTestModel();
-		boolean exCaught = false;
-		ListChangeListener listener = new ListChangeAdapter();
-		try {
-			model.addListChangeListener("foo", listener);
-			fail("bogus listener: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAddListChangeListenerInvalidAspect() {
-		Model model = new ListTestModel();
-		boolean exCaught = false;
-		ListChangeListener listener = new ListChangeAdapter();
-		try {
-			model.addListChangeListener("bar", listener);
-			fail("bogus listener: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAddTreeChangeListenerInvalidClass() {
-		Model model = new StateTestModel();
-		boolean exCaught = false;
-		TreeChangeListener listener = new TreeChangeAdapter();
-		try {
-			model.addTreeChangeListener("foo", listener);
-			fail("bogus listener: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAddTreeChangeListenerInvalidAspect() {
-		Model model = new TreeTestModel();
-		boolean exCaught = false;
-		TreeChangeListener listener = new TreeChangeAdapter();
-		try {
-			model.addTreeChangeListener("bar", listener);
-			fail("bogus listener: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-
-	// ********** test models **********
-
-	static class StateTestModel extends AbstractModel {
-		StateTestModel() {
-			super();
-		}
-		@Override
-		protected ChangeSupport buildChangeSupport() {
-			return new SingleAspectChangeSupport(this, StateChangeListener.class, null);
-		}
-	}
-
-	static class PropertyTestModel extends AbstractModel {
-		PropertyTestModel() {
-			super();
-		}
-		@Override
-		protected ChangeSupport buildChangeSupport() {
-			return new SingleAspectChangeSupport(this, PropertyChangeListener.class, "foo");
-		}
-	}
-
-	static class CollectionTestModel extends AbstractModel {
-		CollectionTestModel() {
-			super();
-		}
-		@Override
-		protected ChangeSupport buildChangeSupport() {
-			return new SingleAspectChangeSupport(this, CollectionChangeListener.class, "foo");
-		}
-	}
-
-	static class ListTestModel extends AbstractModel {
-		ListTestModel() {
-			super();
-		}
-		@Override
-		protected ChangeSupport buildChangeSupport() {
-			return new SingleAspectChangeSupport(this, ListChangeListener.class, "foo");
-		}
-	}
-
-	static class TreeTestModel extends AbstractModel {
-		TreeTestModel() {
-			super();
-		}
-		@Override
-		protected ChangeSupport buildChangeSupport() {
-			return new SingleAspectChangeSupport(this, TreeChangeListener.class, "foo");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/JptUtilityModelListenerTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/JptUtilityModelListenerTests.java
deleted file mode 100644
index 084a9b8..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/JptUtilityModelListenerTests.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.listener;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class JptUtilityModelListenerTests {
-	
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUtilityModelListenerTests.class.getPackage().getName());
-
-		suite.addTestSuite(ReflectiveCollectionChangeListenerTests.class);
-		suite.addTestSuite(ReflectiveListChangeListenerTests.class);
-		suite.addTestSuite(ReflectivePropertyChangeListenerTests.class);
-		suite.addTestSuite(ReflectiveStateChangeListenerTests.class);
-		suite.addTestSuite(ReflectiveTreeChangeListenerTests.class);
-	
-		return suite;
-	}
-	
-	private JptUtilityModelListenerTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-	
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectiveCollectionChangeListenerTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectiveCollectionChangeListenerTests.java
deleted file mode 100644
index 43adcd0..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectiveCollectionChangeListenerTests.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.listener;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.listener.ReflectiveChangeListener;
-
-@SuppressWarnings("nls")
-public class ReflectiveCollectionChangeListenerTests extends TestCase {
-	
-	public ReflectiveCollectionChangeListenerTests(String name) {
-		super(name);
-	}
-
-	private CollectionChangeListener buildZeroArgumentListener(Object target) {
-		return ReflectiveChangeListener.buildCollectionChangeListener(target, "itemAddedZeroArgument", "itemRemovedZeroArgument", "collectionClearedZeroArgument", "collectionChangedZeroArgument");
-	}
-
-	private CollectionChangeListener buildSingleArgumentListener(Object target) {
-		return ReflectiveChangeListener.buildCollectionChangeListener(target, "itemAddedSingleArgument", "itemRemovedSingleArgument", "collectionClearedSingleArgument", "collectionChangedSingleArgument");
-	}
-
-	public void testItemAddedZeroArgumentNamedCollection() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		Target target = new Target(testModel, TestModel.STRINGS_COLLECTION, string);
-		testModel.addCollectionChangeListener(TestModel.STRINGS_COLLECTION, this.buildZeroArgumentListener(target));
-		testModel.addString(string);
-		assertTrue(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.collectionClearedZeroArgumentFlag);
-		assertFalse(target.collectionClearedSingleArgumentFlag);
-		assertFalse(target.collectionChangedZeroArgumentFlag);
-		assertFalse(target.collectionChangedSingleArgumentFlag);
-	}
-
-	public void testItemAddedSingleArgumentNamedCollection() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		Target target = new Target(testModel, TestModel.STRINGS_COLLECTION, string);
-		testModel.addCollectionChangeListener(TestModel.STRINGS_COLLECTION, this.buildSingleArgumentListener(target));
-		testModel.addString(string);
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertTrue(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.collectionClearedZeroArgumentFlag);
-		assertFalse(target.collectionClearedSingleArgumentFlag);
-		assertFalse(target.collectionChangedZeroArgumentFlag);
-		assertFalse(target.collectionChangedSingleArgumentFlag);
-	}
-
-	public void testItemRemovedZeroArgumentNamedCollection() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		testModel.addString(string);
-		Target target = new Target(testModel, TestModel.STRINGS_COLLECTION, string);
-		testModel.addCollectionChangeListener(TestModel.STRINGS_COLLECTION, this.buildZeroArgumentListener(target));
-		testModel.removeString(string);
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertTrue(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.collectionClearedZeroArgumentFlag);
-		assertFalse(target.collectionClearedSingleArgumentFlag);
-		assertFalse(target.collectionChangedZeroArgumentFlag);
-		assertFalse(target.collectionChangedSingleArgumentFlag);
-	}
-
-	public void testItemRemovedSingleArgumentNamedCollection() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		testModel.addString(string);
-		Target target = new Target(testModel, TestModel.STRINGS_COLLECTION, string);
-		testModel.addCollectionChangeListener(TestModel.STRINGS_COLLECTION, this.buildSingleArgumentListener(target));
-		testModel.removeString(string);
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertTrue(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.collectionClearedZeroArgumentFlag);
-		assertFalse(target.collectionClearedSingleArgumentFlag);
-		assertFalse(target.collectionChangedZeroArgumentFlag);
-		assertFalse(target.collectionChangedSingleArgumentFlag);
-	}
-
-	public void testCollectionClearedZeroArgumentNamedCollection() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		testModel.addString(string);
-		Target target = new Target(testModel, TestModel.STRINGS_COLLECTION, string);
-		testModel.addCollectionChangeListener(TestModel.STRINGS_COLLECTION, this.buildZeroArgumentListener(target));
-		testModel.clearStrings();
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertTrue(target.collectionClearedZeroArgumentFlag);
-		assertFalse(target.collectionClearedSingleArgumentFlag);
-		assertFalse(target.collectionChangedZeroArgumentFlag);
-		assertFalse(target.collectionChangedSingleArgumentFlag);
-	}
-
-	public void testCollectionClearedSingleArgumentNamedCollection() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		testModel.addString(string);
-		Target target = new Target(testModel, TestModel.STRINGS_COLLECTION, string);
-		testModel.addCollectionChangeListener(TestModel.STRINGS_COLLECTION, this.buildSingleArgumentListener(target));
-		testModel.clearStrings();
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.collectionClearedZeroArgumentFlag);
-		assertTrue(target.collectionClearedSingleArgumentFlag);
-		assertFalse(target.collectionChangedZeroArgumentFlag);
-		assertFalse(target.collectionChangedSingleArgumentFlag);
-	}
-
-	public void testCollectionChangedZeroArgumentNamedCollection() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		testModel.addString(string);
-		Target target = new Target(testModel, TestModel.STRINGS_COLLECTION, string);
-		testModel.addCollectionChangeListener(TestModel.STRINGS_COLLECTION, this.buildZeroArgumentListener(target));
-		testModel.replaceStrings(new String[] {"bar", "baz"});
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.collectionClearedZeroArgumentFlag);
-		assertFalse(target.collectionClearedSingleArgumentFlag);
-		assertTrue(target.collectionChangedZeroArgumentFlag);
-		assertFalse(target.collectionChangedSingleArgumentFlag);
-	}
-
-	public void testCollectionChangedSingleArgumentNamedCollection() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		testModel.addString(string);
-		Target target = new Target(testModel, TestModel.STRINGS_COLLECTION, string);
-		testModel.addCollectionChangeListener(TestModel.STRINGS_COLLECTION, this.buildSingleArgumentListener(target));
-		testModel.replaceStrings(new String[] {"bar", "baz"});
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.collectionClearedZeroArgumentFlag);
-		assertFalse(target.collectionClearedSingleArgumentFlag);
-		assertFalse(target.collectionChangedZeroArgumentFlag);
-		assertTrue(target.collectionChangedSingleArgumentFlag);
-	}
-
-	public void testBogusDoubleArgument1() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		Target target = new Target(testModel, TestModel.STRINGS_COLLECTION, string);
-		boolean exCaught = false;
-		try {
-			CollectionChangeListener listener = ReflectiveChangeListener.buildCollectionChangeListener(target, "collectionChangedDoubleArgument");
-			fail("bogus listener: " + listener);
-		} catch (RuntimeException ex) {
-			if (ex.getCause().getClass() == NoSuchMethodException.class) {
-				exCaught = true;
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testBogusDoubleArgument2() throws Exception {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		Target target = new Target(testModel, TestModel.STRINGS_COLLECTION, string);
-		Method method = ReflectionTools.getMethod(target, "collectionChangedDoubleArgument", new Class[] {CollectionChangeEvent.class, Object.class});
-		boolean exCaught = false;
-		try {
-			CollectionChangeListener listener = ReflectiveChangeListener.buildCollectionChangeListener(target, method);
-			fail("bogus listener: " + listener);
-		} catch (RuntimeException ex) {
-			if (ex.getMessage().equals(method.toString())) {
-				exCaught = true;
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testListenerMismatch() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		Target target = new Target(testModel, TestModel.STRINGS_COLLECTION, string);
-		// build a COLLECTION change listener and hack it so we
-		// can add it as a LIST change listener
-		Object listener = ReflectiveChangeListener.buildCollectionChangeListener(target, "collectionEventSingleArgument");
-		testModel.addListChangeListener("bogus list", (ListChangeListener) listener);
-
-		boolean exCaught = false;
-		try {
-			testModel.changeList();
-			fail("listener mismatch: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-
-	class TestModel extends AbstractModel {
-		private Collection<String> strings = new ArrayList<String>();
-			public static final String STRINGS_COLLECTION = "strings";
-		TestModel() {
-			super();
-		}
-		Iterator<String> strings() {
-			return new CloneIterator<String>(this.strings) {
-				@Override
-				protected void remove(String s) {
-					TestModel.this.removeString(s);
-				}
-			};
-		}
-		void addString(String string) {
-			this.addItemToCollection(string, this.strings, STRINGS_COLLECTION);
-		}
-		void removeString(String string) {
-			this.removeItemFromCollection(string, this.strings, STRINGS_COLLECTION);
-		}
-		void clearStrings() {
-			this.clearCollection(this.strings, STRINGS_COLLECTION);
-		}
-		void replaceStrings(String[] newStrings) {
-			this.strings.clear();
-			CollectionTools.addAll(this.strings, newStrings);
-			this.fireCollectionChanged(STRINGS_COLLECTION, this.strings);
-		}
-		void changeList() {
-			this.fireListChanged("bogus list", Collections.emptyList());
-		}
-	}
-
-	class Target {
-		TestModel testModel;
-		String collectionName;
-		String string;
-		boolean itemAddedZeroArgumentFlag = false;
-		boolean itemAddedSingleArgumentFlag = false;
-		boolean itemRemovedZeroArgumentFlag = false;
-		boolean itemRemovedSingleArgumentFlag = false;
-		boolean collectionClearedZeroArgumentFlag = false;
-		boolean collectionClearedSingleArgumentFlag = false;
-		boolean collectionChangedZeroArgumentFlag = false;
-		boolean collectionChangedSingleArgumentFlag = false;
-		boolean collectionEventSingleArgumentFlag = false;
-		Target(TestModel testModel, String collectionName, String string) {
-			super();
-			this.testModel = testModel;
-			this.collectionName = collectionName;
-			this.string = string;
-		}
-		void itemAddedZeroArgument() {
-			this.itemAddedZeroArgumentFlag = true;
-		}
-		void itemAddedSingleArgument(CollectionAddEvent e) {
-			this.itemAddedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.collectionName, e.getCollectionName());
-			assertEquals(this.string, e.getItems().iterator().next());
-		}
-		void itemRemovedZeroArgument() {
-			this.itemRemovedZeroArgumentFlag = true;
-		}
-		void itemRemovedSingleArgument(CollectionRemoveEvent e) {
-			this.itemRemovedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.collectionName, e.getCollectionName());
-			assertEquals(this.string, e.getItems().iterator().next());
-		}
-		void collectionClearedZeroArgument() {
-			this.collectionClearedZeroArgumentFlag = true;
-		}
-		void collectionClearedSingleArgument(CollectionClearEvent e) {
-			this.collectionClearedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.collectionName, e.getCollectionName());
-		}
-		void collectionChangedZeroArgument() {
-			this.collectionChangedZeroArgumentFlag = true;
-		}
-		void collectionChangedSingleArgument(CollectionChangeEvent e) {
-			this.collectionChangedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.collectionName, e.getCollectionName());
-		}
-		void collectionEventSingleArgument(CollectionEvent e) {
-			this.collectionEventSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.collectionName, e.getCollectionName());
-		}
-		void collectionChangedDoubleArgument(CollectionChangeEvent e, Object o) {
-			fail("bogus event: " + e + " object: " + o);
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectiveListChangeListenerTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectiveListChangeListenerTests.java
deleted file mode 100644
index 8a3965d..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectiveListChangeListenerTests.java
+++ /dev/null
@@ -1,498 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.listener;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.ListIterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.listener.ReflectiveChangeListener;
-
-@SuppressWarnings("nls")
-public class ReflectiveListChangeListenerTests extends TestCase {
-	
-	public ReflectiveListChangeListenerTests(String name) {
-		super(name);
-	}
-
-	private ListChangeListener buildZeroArgumentListener(Object target) {
-		return ReflectiveChangeListener.buildListChangeListener(target, "itemAddedZeroArgument", "itemRemovedZeroArgument", "itemReplacedZeroArgument", "itemMovedZeroArgument", "listClearedZeroArgument", "listChangedZeroArgument");
-	}
-
-	private ListChangeListener buildSingleArgumentListener(Object target) {
-		return ReflectiveChangeListener.buildListChangeListener(target, "itemAddedSingleArgument", "itemRemovedSingleArgument", "itemReplacedSingleArgument", "itemMovedSingleArgument", "listClearedSingleArgument", "listChangedSingleArgument");
-	}
-
-	public void testItemAddedZeroArgumentNamedList() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, string, 0);
-		testModel.addListChangeListener(TestModel.STRINGS_LIST, this.buildZeroArgumentListener(target));
-		testModel.addString(string);
-		assertTrue(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.itemReplacedZeroArgumentFlag);
-		assertFalse(target.itemReplacedSingleArgumentFlag);
-		assertFalse(target.itemMovedZeroArgumentFlag);
-		assertFalse(target.itemMovedSingleArgumentFlag);
-		assertFalse(target.listClearedZeroArgumentFlag);
-		assertFalse(target.listClearedSingleArgumentFlag);
-		assertFalse(target.listChangedZeroArgumentFlag);
-		assertFalse(target.listChangedSingleArgumentFlag);
-	}
-
-	public void testItemAddedSingleArgumentNamedList() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, string, 0);
-		testModel.addListChangeListener(TestModel.STRINGS_LIST, this.buildSingleArgumentListener(target));
-		testModel.addString(string);
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertTrue(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.itemReplacedZeroArgumentFlag);
-		assertFalse(target.itemReplacedSingleArgumentFlag);
-		assertFalse(target.itemMovedZeroArgumentFlag);
-		assertFalse(target.itemMovedSingleArgumentFlag);
-		assertFalse(target.listClearedZeroArgumentFlag);
-		assertFalse(target.listClearedSingleArgumentFlag);
-		assertFalse(target.listChangedZeroArgumentFlag);
-		assertFalse(target.listChangedSingleArgumentFlag);
-	}
-
-	public void testItemRemovedZeroArgumentNamedList() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		testModel.addString(string);
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, string, 0);
-		testModel.addListChangeListener(TestModel.STRINGS_LIST, this.buildZeroArgumentListener(target));
-		testModel.removeString(string);
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertTrue(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.itemReplacedZeroArgumentFlag);
-		assertFalse(target.itemReplacedSingleArgumentFlag);
-		assertFalse(target.itemMovedZeroArgumentFlag);
-		assertFalse(target.itemMovedSingleArgumentFlag);
-		assertFalse(target.listClearedZeroArgumentFlag);
-		assertFalse(target.listClearedSingleArgumentFlag);
-		assertFalse(target.listChangedZeroArgumentFlag);
-		assertFalse(target.listChangedSingleArgumentFlag);
-	}
-
-	public void testItemRemovedSingleArgumentNamedList() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		testModel.addString(string);
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, string, 0);
-		testModel.addListChangeListener(TestModel.STRINGS_LIST, this.buildSingleArgumentListener(target));
-		testModel.removeString(string);
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertTrue(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.itemReplacedZeroArgumentFlag);
-		assertFalse(target.itemReplacedSingleArgumentFlag);
-		assertFalse(target.itemMovedZeroArgumentFlag);
-		assertFalse(target.itemMovedSingleArgumentFlag);
-		assertFalse(target.listClearedZeroArgumentFlag);
-		assertFalse(target.listClearedSingleArgumentFlag);
-		assertFalse(target.listChangedZeroArgumentFlag);
-		assertFalse(target.listChangedSingleArgumentFlag);
-	}
-
-	public void testItemReplacedZeroArgumentNamedList() {
-		TestModel testModel = new TestModel();
-		String oldString = "foo";
-		String newString = "bar";
-		testModel.addString(oldString);
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, newString, 0, oldString);
-		testModel.addListChangeListener(TestModel.STRINGS_LIST, this.buildZeroArgumentListener(target));
-		testModel.replaceString(oldString, newString);
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertTrue(target.itemReplacedZeroArgumentFlag);
-		assertFalse(target.itemReplacedSingleArgumentFlag);
-		assertFalse(target.itemMovedZeroArgumentFlag);
-		assertFalse(target.itemMovedSingleArgumentFlag);
-		assertFalse(target.listClearedZeroArgumentFlag);
-		assertFalse(target.listClearedSingleArgumentFlag);
-		assertFalse(target.listChangedZeroArgumentFlag);
-		assertFalse(target.listChangedSingleArgumentFlag);
-	}
-
-	public void testItemReplacedSingleArgumentNamedList() {
-		TestModel testModel = new TestModel();
-		String oldString = "foo";
-		String newString = "bar";
-		testModel.addString(oldString);
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, newString, 0, oldString);
-		testModel.addListChangeListener(TestModel.STRINGS_LIST, this.buildSingleArgumentListener(target));
-		testModel.replaceString(oldString, newString);
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.itemReplacedZeroArgumentFlag);
-		assertTrue(target.itemReplacedSingleArgumentFlag);
-		assertFalse(target.itemMovedZeroArgumentFlag);
-		assertFalse(target.itemMovedSingleArgumentFlag);
-		assertFalse(target.listClearedZeroArgumentFlag);
-		assertFalse(target.listClearedSingleArgumentFlag);
-		assertFalse(target.listChangedZeroArgumentFlag);
-		assertFalse(target.listChangedSingleArgumentFlag);
-	}
-
-	public void testItemMovedZeroArgumentNamedList() {
-		TestModel testModel = new TestModel();
-		testModel.addString("zero");
-		testModel.addString("one");
-		testModel.addString("two");
-		testModel.addString("three");
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, 0, 2);
-		testModel.addListChangeListener(TestModel.STRINGS_LIST, this.buildZeroArgumentListener(target));
-		testModel.moveString(0, 2);
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.itemReplacedZeroArgumentFlag);
-		assertFalse(target.itemReplacedSingleArgumentFlag);
-		assertTrue(target.itemMovedZeroArgumentFlag);
-		assertFalse(target.itemMovedSingleArgumentFlag);
-		assertFalse(target.listClearedZeroArgumentFlag);
-		assertFalse(target.listClearedSingleArgumentFlag);
-		assertFalse(target.listChangedZeroArgumentFlag);
-		assertFalse(target.listChangedSingleArgumentFlag);
-	}
-
-	public void testItemMovedSingleArgumentNamedList() {
-		TestModel testModel = new TestModel();
-		testModel.addString("zero");
-		testModel.addString("one");
-		testModel.addString("two");
-		testModel.addString("three");
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, 0, 2);
-		testModel.addListChangeListener(TestModel.STRINGS_LIST, this.buildSingleArgumentListener(target));
-		testModel.moveString(0, 2);
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.itemReplacedZeroArgumentFlag);
-		assertFalse(target.itemReplacedSingleArgumentFlag);
-		assertFalse(target.itemMovedZeroArgumentFlag);
-		assertTrue(target.itemMovedSingleArgumentFlag);
-		assertFalse(target.listClearedZeroArgumentFlag);
-		assertFalse(target.listClearedSingleArgumentFlag);
-		assertFalse(target.listChangedZeroArgumentFlag);
-		assertFalse(target.listChangedSingleArgumentFlag);
-	}
-
-	public void testListClearedZeroArgumentNamedList() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		testModel.addString(string);
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, null, -1);
-		testModel.addListChangeListener(TestModel.STRINGS_LIST, this.buildZeroArgumentListener(target));
-		testModel.clearStrings();
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.itemReplacedZeroArgumentFlag);
-		assertFalse(target.itemReplacedSingleArgumentFlag);
-		assertFalse(target.itemMovedZeroArgumentFlag);
-		assertFalse(target.itemMovedSingleArgumentFlag);
-		assertTrue(target.listClearedZeroArgumentFlag);
-		assertFalse(target.listClearedSingleArgumentFlag);
-		assertFalse(target.listChangedZeroArgumentFlag);
-		assertFalse(target.listChangedSingleArgumentFlag);
-	}
-
-	public void testListClearedSingleArgumentNamedList() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		testModel.addString(string);
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, null, -1);
-		testModel.addListChangeListener(TestModel.STRINGS_LIST, this.buildSingleArgumentListener(target));
-		testModel.clearStrings();
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.itemReplacedZeroArgumentFlag);
-		assertFalse(target.itemReplacedSingleArgumentFlag);
-		assertFalse(target.itemMovedZeroArgumentFlag);
-		assertFalse(target.itemMovedSingleArgumentFlag);
-		assertFalse(target.listClearedZeroArgumentFlag);
-		assertTrue(target.listClearedSingleArgumentFlag);
-		assertFalse(target.listChangedZeroArgumentFlag);
-		assertFalse(target.listChangedSingleArgumentFlag);
-	}
-
-	public void testListChangedZeroArgumentNamedList() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		testModel.addString(string);
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, null, -1);
-		testModel.addListChangeListener(TestModel.STRINGS_LIST, this.buildZeroArgumentListener(target));
-		testModel.replaceAllStrings(new String[] {"bar", "baz"});
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.itemReplacedZeroArgumentFlag);
-		assertFalse(target.itemReplacedSingleArgumentFlag);
-		assertFalse(target.itemMovedZeroArgumentFlag);
-		assertFalse(target.itemMovedSingleArgumentFlag);
-		assertFalse(target.listClearedZeroArgumentFlag);
-		assertFalse(target.listClearedSingleArgumentFlag);
-		assertTrue(target.listChangedZeroArgumentFlag);
-		assertFalse(target.listChangedSingleArgumentFlag);
-	}
-
-	public void testListChangedSingleArgumentNamedList() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		testModel.addString(string);
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, null, -1);
-		testModel.addListChangeListener(TestModel.STRINGS_LIST, this.buildSingleArgumentListener(target));
-		testModel.replaceAllStrings(new String[] {"bar", "baz"});
-		assertFalse(target.itemAddedZeroArgumentFlag);
-		assertFalse(target.itemAddedSingleArgumentFlag);
-		assertFalse(target.itemRemovedZeroArgumentFlag);
-		assertFalse(target.itemRemovedSingleArgumentFlag);
-		assertFalse(target.itemReplacedZeroArgumentFlag);
-		assertFalse(target.itemReplacedSingleArgumentFlag);
-		assertFalse(target.itemMovedZeroArgumentFlag);
-		assertFalse(target.itemMovedSingleArgumentFlag);
-		assertFalse(target.listClearedZeroArgumentFlag);
-		assertFalse(target.listClearedSingleArgumentFlag);
-		assertFalse(target.listChangedZeroArgumentFlag);
-		assertTrue(target.listChangedSingleArgumentFlag);
-	}
-
-	public void testBogusDoubleArgument1() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, string, 0);
-		boolean exCaught = false;
-		try {
-			ListChangeListener listener = ReflectiveChangeListener.buildListChangeListener(target, "listChangedDoubleArgument");
-			fail("bogus listener: " + listener);
-		} catch (RuntimeException ex) {
-			if (ex.getCause().getClass() == NoSuchMethodException.class) {
-				exCaught = true;
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testBogusDoubleArgument2() throws Exception {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, string, 0);
-		Method method = ReflectionTools.getMethod(target, "listChangedDoubleArgument", new Class[] {ListChangeEvent.class, Object.class});
-		boolean exCaught = false;
-		try {
-			ListChangeListener listener = ReflectiveChangeListener.buildListChangeListener(target, method);
-			fail("bogus listener: " + listener);
-		} catch (RuntimeException ex) {
-			if (ex.getMessage().equals(method.toString())) {
-				exCaught = true;
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testListenerMismatch() {
-		TestModel testModel = new TestModel();
-		String string = "foo";
-		Target target = new Target(testModel, TestModel.STRINGS_LIST, string, 0);
-		// build a LIST change listener and hack it so we
-		// can add it as a COLLECTION change listener
-		Object listener = ReflectiveChangeListener.buildListChangeListener(target, "listEventSingleArgument");
-		testModel.addCollectionChangeListener("bogus collection", (CollectionChangeListener) listener);
-
-		boolean exCaught = false;
-		try {
-			testModel.changeCollection();
-			fail("listener mismatch: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-
-	class TestModel extends AbstractModel {
-		private List<String> strings = new ArrayList<String>();
-			public static final String STRINGS_LIST = "strings";
-		TestModel() {
-			super();
-		}
-		ListIterator<String> strings() {
-			return new CloneListIterator<String>(this.strings);
-		}
-		void addString(String string) {
-			this.addItemToList(string, this.strings, STRINGS_LIST);
-		}
-		void removeString(String string) {
-			this.removeItemFromList(this.strings.indexOf(string), this.strings, STRINGS_LIST);
-		}
-		void replaceString(String oldString, String newString) {
-			this.setItemInList(this.strings.indexOf(oldString), newString, this.strings, STRINGS_LIST);
-		}
-		void moveString(int targetIndex, int sourceIndex) {
-			this.moveItemInList(targetIndex, sourceIndex, this.strings, STRINGS_LIST);
-		}
-		void clearStrings() {
-			this.clearList(this.strings, STRINGS_LIST);
-		}
-		void replaceAllStrings(String[] newStrings) {
-			this.strings.clear();
-			CollectionTools.addAll(this.strings, newStrings);
-			this.fireListChanged(STRINGS_LIST, this.strings);
-		}
-		void changeCollection() {
-			this.fireCollectionChanged("bogus collection", Collections.emptySet());
-		}
-	}
-
-	class Target {
-		TestModel testModel;
-		String listName;
-		String string;
-		int index;
-		String replacedString;
-		int sourceIndex;
-		boolean itemAddedZeroArgumentFlag = false;
-		boolean itemAddedSingleArgumentFlag = false;
-		boolean itemRemovedZeroArgumentFlag = false;
-		boolean itemRemovedSingleArgumentFlag = false;
-		boolean itemReplacedZeroArgumentFlag = false;
-		boolean itemReplacedSingleArgumentFlag = false;
-		boolean itemMovedZeroArgumentFlag = false;
-		boolean itemMovedSingleArgumentFlag = false;
-		boolean listClearedZeroArgumentFlag = false;
-		boolean listClearedSingleArgumentFlag = false;
-		boolean listChangedZeroArgumentFlag = false;
-		boolean listChangedSingleArgumentFlag = false;
-		boolean listEventSingleArgumentFlag = false;
-		Target(TestModel testModel, String listName, String string, int index) {
-			super();
-			this.testModel = testModel;
-			this.listName = listName;
-			this.string = string;
-			this.index = index;
-		}
-		Target(TestModel testModel, String listName, String string, int index, String replacedString) {
-			this(testModel, listName, string, index);
-			this.replacedString = replacedString;
-		}
-		Target(TestModel testModel, String listName, int targetIndex, int sourceIndex) {
-			super();
-			this.testModel = testModel;
-			this.listName = listName;
-			this.index = targetIndex;
-			this.sourceIndex = sourceIndex;
-		}
-		void itemAddedZeroArgument() {
-			this.itemAddedZeroArgumentFlag = true;
-		}
-		void itemAddedSingleArgument(ListAddEvent e) {
-			this.itemAddedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.listName, e.getListName());
-			assertEquals(this.string, e.getItems().iterator().next());
-			assertEquals(this.index, e.getIndex());
-		}
-		void itemRemovedZeroArgument() {
-			this.itemRemovedZeroArgumentFlag = true;
-		}
-		void itemRemovedSingleArgument(ListRemoveEvent e) {
-			this.itemRemovedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.listName, e.getListName());
-			assertEquals(this.string, e.getItems().iterator().next());
-			assertEquals(this.index, e.getIndex());
-		}
-		void itemReplacedZeroArgument() {
-			this.itemReplacedZeroArgumentFlag = true;
-		}
-		void itemReplacedSingleArgument(ListReplaceEvent e) {
-			this.itemReplacedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.listName, e.getListName());
-			assertEquals(this.string, e.getNewItems().iterator().next());
-			assertEquals(this.replacedString, e.getOldItems().iterator().next());
-			assertEquals(this.index, e.getIndex());
-		}
-		void itemMovedZeroArgument() {
-			this.itemMovedZeroArgumentFlag = true;
-		}
-		void itemMovedSingleArgument(ListMoveEvent e) {
-			this.itemMovedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.listName, e.getListName());
-			assertEquals(this.index, e.getTargetIndex());
-			assertEquals(this.sourceIndex, e.getSourceIndex());
-		}
-		void listChangedZeroArgument() {
-			this.listChangedZeroArgumentFlag = true;
-		}
-		void listClearedSingleArgument(ListClearEvent e) {
-			this.listClearedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.listName, e.getListName());
-		}
-		void listClearedZeroArgument() {
-			this.listClearedZeroArgumentFlag = true;
-		}
-		void listChangedSingleArgument(ListChangeEvent e) {
-			this.listChangedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.listName, e.getListName());
-		}
-		void listChangedDoubleArgument(ListChangeEvent e, Object o) {
-			fail("bogus event: " + e + " - object: " + o);
-		}
-		void listEventSingleArgument(ListEvent e) {
-			this.listEventSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.listName, e.getListName());
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectivePropertyChangeListenerTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectivePropertyChangeListenerTests.java
deleted file mode 100644
index 8ca4f3a..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectivePropertyChangeListenerTests.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.listener;
-
-import java.lang.reflect.Method;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.listener.ReflectiveChangeListener;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-
-@SuppressWarnings("nls")
-public class ReflectivePropertyChangeListenerTests extends TestCase {
-	
-	public ReflectivePropertyChangeListenerTests(String name) {
-		super(name);
-	}
-
-	public void testZeroArgumentNamedProperty() {
-		TestModel testModel = new TestModel(7);
-		Target target = new Target(testModel, TestModel.VALUE_PROPERTY, 7, 99);
-		testModel.addPropertyChangeListener(TestModel.VALUE_PROPERTY, ReflectiveChangeListener.buildPropertyChangeListener(target, "propertyChangedZeroArgument"));
-		testModel.setValue(99);
-		assertTrue(target.zeroArgumentFlag);
-		assertFalse(target.singleArgumentFlag);
-	}
-
-	/**
-	 * test method that has more general method parameter type
-	 */
-	public void testSingleArgument2() throws Exception {
-		TestModel testModel = new TestModel(7);
-		Target target = new Target(testModel, TestModel.VALUE_PROPERTY, 7, 99);
-		Method method = ReflectionTools.getMethod(target, "propertyChangedSingleArgument2", new Class[] {Object.class});
-		testModel.addPropertyChangeListener(TestModel.VALUE_PROPERTY, ReflectiveChangeListener.buildPropertyChangeListener(target, method));
-		testModel.setValue(99);
-		assertFalse(target.zeroArgumentFlag);
-		assertTrue(target.singleArgumentFlag);
-	}
-
-	public void testSingleArgumentNamedProperty() {
-		TestModel testModel = new TestModel(7);
-		Target target = new Target(testModel, TestModel.VALUE_PROPERTY, 7, 99);
-		testModel.addPropertyChangeListener(TestModel.VALUE_PROPERTY, ReflectiveChangeListener.buildPropertyChangeListener(target, "propertyChangedSingleArgument"));
-		testModel.setValue(99);
-		assertFalse(target.zeroArgumentFlag);
-		assertTrue(target.singleArgumentFlag);
-	}
-
-	/**
-	 * test method that has more general method parameter type
-	 */
-	public void testSingleArgumentNamedProperty2() throws Exception {
-		TestModel testModel = new TestModel(7);
-		Target target = new Target(testModel, TestModel.VALUE_PROPERTY, 7, 99);
-		Method method = ReflectionTools.getMethod(target, "propertyChangedSingleArgument2", new Class[] {Object.class});
-		testModel.addPropertyChangeListener(TestModel.VALUE_PROPERTY, ReflectiveChangeListener.buildPropertyChangeListener(target, method));
-		testModel.setValue(99);
-		assertFalse(target.zeroArgumentFlag);
-		assertTrue(target.singleArgumentFlag);
-	}
-
-	public void testListenerMismatch() {
-		TestModel testModel = new TestModel(7);
-		Target target = new Target(testModel, TestModel.VALUE_PROPERTY, 7, 99);
-		// build a PROPERTY change listener and hack it so we
-		// can add it as a STATE change listener
-		Object listener = ReflectiveChangeListener.buildPropertyChangeListener(target, "propertyChangedSingleArgument");
-		testModel.addStateChangeListener((StateChangeListener) listener);
-
-		boolean exCaught = false;
-		try {
-			testModel.setValue(99);
-			fail("listener mismatch: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testBogusDoubleArgument1() {
-		TestModel testModel = new TestModel(7);
-		Target target = new Target(testModel, TestModel.VALUE_PROPERTY, 7, 99);
-		boolean exCaught = false;
-		try {
-			PropertyChangeListener listener = ReflectiveChangeListener.buildPropertyChangeListener(target, "stateChangedDoubleArgument");
-			fail("bogus listener: " + listener);
-		} catch (RuntimeException ex) {
-			if (ex.getCause().getClass() == NoSuchMethodException.class) {
-				exCaught = true;
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testBogusDoubleArgument2() throws Exception {
-		TestModel testModel = new TestModel(7);
-		Target target = new Target(testModel, TestModel.VALUE_PROPERTY, 7, 99);
-		Method method = ReflectionTools.getMethod(target, "propertyChangedDoubleArgument", new Class[] {PropertyChangeEvent.class, Object.class});
-		boolean exCaught = false;
-		try {
-			PropertyChangeListener listener = ReflectiveChangeListener.buildPropertyChangeListener(target, method);
-			fail("bogus listener: " + listener);
-		} catch (RuntimeException ex) {
-			if (ex.getMessage().equals(method.toString())) {
-				exCaught = true;
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-
-	class TestModel extends AbstractModel {
-		private int value = 0;
-			public static final String VALUE_PROPERTY = "value";
-		TestModel(int value) {
-			super();
-			this.value = value;
-		}
-		void setValue(int value) {
-			int old = this.value;
-			this.value = value;
-			this.firePropertyChanged(VALUE_PROPERTY, old, value);
-			if (old != value) {
-				this.fireStateChanged();
-			}
-		}
-	}
-
-	class Target {
-		TestModel testModel;
-		String propertyName;
-		Object oldValue;
-		Object newValue;
-		boolean zeroArgumentFlag = false;
-		boolean singleArgumentFlag = false;
-		Target(TestModel testModel, String propertyName, int oldValue, int newValue) {
-			super();
-			this.testModel = testModel;
-			this.propertyName = propertyName;
-			this.oldValue = new Integer(oldValue);
-			this.newValue = new Integer(newValue);
-		}
-		void propertyChangedZeroArgument() {
-			this.zeroArgumentFlag = true;
-		}
-		void propertyChangedSingleArgument(PropertyChangeEvent e) {
-			this.singleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.propertyName, e.getPropertyName());
-			assertEquals(this.oldValue, e.getOldValue());
-			assertEquals(this.newValue, e.getNewValue());
-		}
-		void propertyChangedSingleArgument2(Object o) {
-			PropertyChangeEvent e = (PropertyChangeEvent) o;
-			this.singleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.propertyName, e.getPropertyName());
-			assertEquals(this.oldValue, e.getOldValue());
-			assertEquals(this.newValue, e.getNewValue());
-		}
-		void propertyChangedDoubleArgument(PropertyChangeEvent e, Object o) {
-			fail("bogus event: " + e + " - object: " + o);
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectiveStateChangeListenerTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectiveStateChangeListenerTests.java
deleted file mode 100644
index 28aed8f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectiveStateChangeListenerTests.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.listener;
-
-import java.lang.reflect.Method;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.listener.ReflectiveChangeListener;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-
-@SuppressWarnings("nls")
-public class ReflectiveStateChangeListenerTests extends TestCase {
-	
-	public ReflectiveStateChangeListenerTests(String name) {
-		super(name);
-	}
-
-	public void testZeroArgument() {
-		TestModel testModel = new TestModel();
-		Target target = new Target(testModel);
-		testModel.addStateChangeListener(ReflectiveChangeListener.buildStateChangeListener(target, "stateChangedZeroArgument"));
-		testModel.changeState();
-		assertTrue(target.zeroArgumentFlag);
-		assertFalse(target.singleArgumentFlag);
-	}
-
-	public void testSingleArgument() {
-		TestModel testModel = new TestModel();
-		Target target = new Target(testModel);
-		testModel.addStateChangeListener(ReflectiveChangeListener.buildStateChangeListener(target, "stateChangedSingleArgument"));
-		testModel.changeState();
-		assertFalse(target.zeroArgumentFlag);
-		assertTrue(target.singleArgumentFlag);
-	}
-
-	/**
-	 * test method that has more general method parameter type
-	 */
-	public void testSingleArgument2() throws Exception {
-		TestModel testModel = new TestModel();
-		Target target = new Target(testModel);
-		Method method = ReflectionTools.getMethod(target, "stateChangedSingleArgument2", new Class[] {Object.class});
-		testModel.addStateChangeListener(ReflectiveChangeListener.buildStateChangeListener(target, method));
-		testModel.changeState();
-		assertFalse(target.zeroArgumentFlag);
-		assertTrue(target.singleArgumentFlag);
-	}
-
-	public void testListenerMismatch() {
-		TestModel testModel = new TestModel();
-		Target target = new Target(testModel);
-		// build a STATE change listener and hack it so we
-		// can add it as a PROPERTY change listener
-		Object listener = ReflectiveChangeListener.buildStateChangeListener(target, "stateChangedSingleArgument");
-		testModel.addPropertyChangeListener("value", (PropertyChangeListener) listener);
-
-		boolean exCaught = false;
-		try {
-			testModel.changeProperty();
-			fail("listener mismatch: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testBogusDoubleArgument1() {
-		TestModel testModel = new TestModel();
-		Target target = new Target(testModel);
-		boolean exCaught = false;
-		try {
-			StateChangeListener listener = ReflectiveChangeListener.buildStateChangeListener(target, "stateChangedDoubleArgument");
-			fail("bogus listener: " + listener);
-		} catch (RuntimeException ex) {
-			if (ex.getCause().getClass() == NoSuchMethodException.class) {
-				exCaught = true;
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testBogusDoubleArgument2() throws Exception {
-		TestModel testModel = new TestModel();
-		Target target = new Target(testModel);
-		Method method = ReflectionTools.getMethod(target, "stateChangedDoubleArgument", new Class[] {StateChangeEvent.class, Object.class});
-		boolean exCaught = false;
-		try {
-			StateChangeListener listener = ReflectiveChangeListener.buildStateChangeListener(target, method);
-			fail("bogus listener: " + listener);
-		} catch (RuntimeException ex) {
-			if (ex.getMessage().equals(method.toString())) {
-				exCaught = true;
-			}
-		}
-		assertTrue(exCaught);
-	}
-
-
-	class TestModel extends AbstractModel {
-		TestModel() {
-			super();
-		}
-		void changeState() {
-			this.fireStateChanged();
-		}
-		void changeProperty() {
-			this.firePropertyChanged("value", 55, 42);
-		}
-	}
-
-	class Target {
-		TestModel testModel;
-		boolean zeroArgumentFlag = false;
-		boolean singleArgumentFlag = false;
-		Target(TestModel testModel) {
-			super();
-			this.testModel = testModel;
-		}
-		void stateChangedZeroArgument() {
-			this.zeroArgumentFlag = true;
-		}
-		void stateChangedSingleArgument(StateChangeEvent e) {
-			this.singleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-		}
-		void stateChangedSingleArgument2(Object e) {
-			this.singleArgumentFlag = true;
-			assertSame(this.testModel, ((StateChangeEvent) e).getSource());
-		}
-		void stateChangedDoubleArgument(StateChangeEvent e, Object o) {
-			fail("bogus event: " + e + " - object: " + o);
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectiveTreeChangeListenerTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectiveTreeChangeListenerTests.java
deleted file mode 100644
index 52581ad..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/listener/ReflectiveTreeChangeListenerTests.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.listener;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.listener.ReflectiveChangeListener;
-import org.eclipse.jpt.utility.model.listener.TreeChangeListener;
-
-@SuppressWarnings("nls")
-public class ReflectiveTreeChangeListenerTests extends TestCase {
-	
-	public ReflectiveTreeChangeListenerTests(String name) {
-		super(name);
-	}
-
-	private TreeChangeListener buildZeroArgumentListener(Object target) {
-		return ReflectiveChangeListener.buildTreeChangeListener(target, "nodeAddedZeroArgument", "nodeRemovedZeroArgument", "treeClearedZeroArgument", "treeChangedZeroArgument");
-	}
-
-	private TreeChangeListener buildSingleArgumentListener(Object target) {
-		return ReflectiveChangeListener.buildTreeChangeListener(target, "nodeAddedSingleArgument", "nodeRemovedSingleArgument", "treeClearedSingleArgument", "treeChangedSingleArgument");
-	}
-
-	public void testNodeAddedZeroArgumentNamedTree() {
-		TestModel testModel = new TestModel("root");
-		Target target = new Target(testModel, TestModel.STRINGS_TREE, new String[]{"root", "child"});
-		testModel.addTreeChangeListener(TestModel.STRINGS_TREE, this.buildZeroArgumentListener(target));
-		testModel.addNode("root", "child");
-		assertTrue(target.nodeAddedZeroArgumentFlag);
-		assertFalse(target.nodeAddedSingleArgumentFlag);
-		assertFalse(target.nodeRemovedZeroArgumentFlag);
-		assertFalse(target.nodeRemovedSingleArgumentFlag);
-		assertFalse(target.treeClearedZeroArgumentFlag);
-		assertFalse(target.treeClearedSingleArgumentFlag);
-		assertFalse(target.treeChangedZeroArgumentFlag);
-		assertFalse(target.treeChangedSingleArgumentFlag);
-	}
-
-	public void testNodeAddedSingleArgumentNamedTree() {
-		TestModel testModel = new TestModel("root");
-		Target target = new Target(testModel, TestModel.STRINGS_TREE, new String[]{"root", "child"});
-		testModel.addTreeChangeListener(TestModel.STRINGS_TREE, this.buildSingleArgumentListener(target));
-		testModel.addNode("root", "child");
-		assertFalse(target.nodeAddedZeroArgumentFlag);
-		assertTrue(target.nodeAddedSingleArgumentFlag);
-		assertFalse(target.nodeRemovedZeroArgumentFlag);
-		assertFalse(target.nodeRemovedSingleArgumentFlag);
-		assertFalse(target.treeClearedZeroArgumentFlag);
-		assertFalse(target.treeClearedSingleArgumentFlag);
-		assertFalse(target.treeChangedZeroArgumentFlag);
-		assertFalse(target.treeChangedSingleArgumentFlag);
-	}
-
-	public void testNodeRemovedZeroArgumentNamedTree() {
-		TestModel testModel = new TestModel("root");
-		testModel.addNode("root", "child");
-		Target target = new Target(testModel, TestModel.STRINGS_TREE, new String[]{"root", "child"});
-		testModel.addTreeChangeListener(TestModel.STRINGS_TREE, this.buildZeroArgumentListener(target));
-		testModel.removeNode("child");
-		assertFalse(target.nodeAddedZeroArgumentFlag);
-		assertFalse(target.nodeAddedSingleArgumentFlag);
-		assertTrue(target.nodeRemovedZeroArgumentFlag);
-		assertFalse(target.nodeRemovedSingleArgumentFlag);
-		assertFalse(target.treeClearedZeroArgumentFlag);
-		assertFalse(target.treeClearedSingleArgumentFlag);
-		assertFalse(target.treeChangedZeroArgumentFlag);
-		assertFalse(target.treeChangedSingleArgumentFlag);
-	}
-
-	public void testNodeRemovedSingleArgumentNamedTree() {
-		TestModel testModel = new TestModel("root");
-		testModel.addNode("root", "child");
-		Target target = new Target(testModel, TestModel.STRINGS_TREE, new String[]{"root", "child"});
-		testModel.addTreeChangeListener(TestModel.STRINGS_TREE, this.buildSingleArgumentListener(target));
-		testModel.removeNode("child");
-		assertFalse(target.nodeAddedZeroArgumentFlag);
-		assertFalse(target.nodeAddedSingleArgumentFlag);
-		assertFalse(target.nodeRemovedZeroArgumentFlag);
-		assertTrue(target.nodeRemovedSingleArgumentFlag);
-		assertFalse(target.treeClearedZeroArgumentFlag);
-		assertFalse(target.treeClearedSingleArgumentFlag);
-		assertFalse(target.treeChangedZeroArgumentFlag);
-		assertFalse(target.treeChangedSingleArgumentFlag);
-	}
-
-	public void testTreeClearedZeroArgumentNamedTree() {
-		TestModel testModel = new TestModel("root");
-		testModel.addNode("root", "child");
-		testModel.addNode("child", "grandchild");
-		Target target = new Target(testModel, TestModel.STRINGS_TREE, new String[0]);
-		testModel.addTreeChangeListener(TestModel.STRINGS_TREE, this.buildZeroArgumentListener(target));
-		testModel.clearTree();
-		assertFalse(target.nodeAddedZeroArgumentFlag);
-		assertFalse(target.nodeAddedSingleArgumentFlag);
-		assertFalse(target.nodeRemovedZeroArgumentFlag);
-		assertFalse(target.nodeRemovedSingleArgumentFlag);
-		assertTrue(target.treeClearedZeroArgumentFlag);
-		assertFalse(target.treeClearedSingleArgumentFlag);
-		assertFalse(target.treeChangedZeroArgumentFlag);
-		assertFalse(target.treeChangedSingleArgumentFlag);
-	}
-
-	public void testTreeClearedSingleArgumentNamedTree() {
-		TestModel testModel = new TestModel("root");
-		testModel.addNode("root", "child");
-		testModel.addNode("child", "grandchild");
-		Target target = new Target(testModel, TestModel.STRINGS_TREE, new String[0]);
-		testModel.addTreeChangeListener(TestModel.STRINGS_TREE, this.buildSingleArgumentListener(target));
-		testModel.clearTree();
-		assertFalse(target.nodeAddedZeroArgumentFlag);
-		assertFalse(target.nodeAddedSingleArgumentFlag);
-		assertFalse(target.nodeRemovedZeroArgumentFlag);
-		assertFalse(target.nodeRemovedSingleArgumentFlag);
-		assertFalse(target.treeClearedZeroArgumentFlag);
-		assertTrue(target.treeClearedSingleArgumentFlag);
-		assertFalse(target.treeChangedZeroArgumentFlag);
-		assertFalse(target.treeChangedSingleArgumentFlag);
-	}
-
-	public void testTreeChangedZeroArgumentNamedTree() {
-		TestModel testModel = new TestModel("root");
-		testModel.addNode("root", "child");
-		Target target = new Target(testModel, TestModel.STRINGS_TREE, new String[]{"root", "another child"});
-		testModel.addTreeChangeListener(TestModel.STRINGS_TREE, this.buildZeroArgumentListener(target));
-		testModel.replaceNode("child", "another child");
-		assertFalse(target.nodeAddedZeroArgumentFlag);
-		assertFalse(target.nodeAddedSingleArgumentFlag);
-		assertFalse(target.nodeRemovedZeroArgumentFlag);
-		assertFalse(target.nodeRemovedSingleArgumentFlag);
-		assertFalse(target.treeClearedZeroArgumentFlag);
-		assertFalse(target.treeClearedSingleArgumentFlag);
-		assertTrue(target.treeChangedZeroArgumentFlag);
-		assertFalse(target.treeChangedSingleArgumentFlag);
-	}
-
-	public void testTreeChangedSingleArgumentNamedTree() {
-		TestModel testModel = new TestModel("root");
-		testModel.addNode("root", "child");
-		Target target = new Target(testModel, TestModel.STRINGS_TREE, new String[]{"root", "another child"});
-		testModel.addTreeChangeListener(TestModel.STRINGS_TREE, this.buildSingleArgumentListener(target));
-		testModel.replaceNode("child", "another child");
-		assertFalse(target.nodeAddedZeroArgumentFlag);
-		assertFalse(target.nodeAddedSingleArgumentFlag);
-		assertFalse(target.nodeRemovedZeroArgumentFlag);
-		assertFalse(target.nodeRemovedSingleArgumentFlag);
-		assertFalse(target.treeClearedZeroArgumentFlag);
-		assertFalse(target.treeClearedSingleArgumentFlag);
-		assertFalse(target.treeChangedZeroArgumentFlag);
-		assertTrue(target.treeChangedSingleArgumentFlag);
-	}
-
-	public void testListenerMismatch() {
-		TestModel testModel = new TestModel("root");
-		testModel.addNode("root", "child");
-		Target target = new Target(testModel, TestModel.STRINGS_TREE, new String[]{"root", "child"});
-		// build a TREE change listener and hack it so we
-		// can add it as a COLLECTION change listener
-		Object listener = ReflectiveChangeListener.buildTreeChangeListener(target, "treeEventSingleArgument");
-		testModel.addCollectionChangeListener("bogus collection", (CollectionChangeListener) listener);
-
-		boolean exCaught = false;
-		try {
-			testModel.changeCollection();
-			fail("listener mismatch: " + listener);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-
-	class TestModel extends AbstractModel {
-		private final String root;
-		private Map<String, Collection<String>> childrenLists = new HashMap<String, Collection<String>>();
-		private Map<String, String> parents = new HashMap<String, String>();
-			public static final String STRINGS_TREE = "strings";
-		TestModel(String root) {
-			super();
-			if (root == null) {
-				throw new NullPointerException();
-			}
-			this.root = root;
-			this.childrenLists.put(root, new ArrayList<String>());
-			this.parents.put(root, null);
-		}
-		String getRoot() {
-			return this.root;
-		}
-		private List<String> path(String node) {
-			String temp = node;
-			List<String> reversePath = new ArrayList<String>();
-			do {
-				reversePath.add(temp);
-				temp = this.parents.get(temp);
-			} while (temp != null);
-			return CollectionTools.reverse(reversePath);
-		}
-		Iterator<String> strings() {
-			return new CloneIterator<String>(this.childrenLists.keySet()) {
-				@Override
-				protected void remove(String s) {
-					TestModel.this.removeNode(s);
-				}
-			};
-		}
-		void addNode(String parent, String child) {
-			if ((parent == null) || (child == null)) {
-				throw new NullPointerException();
-			}
-
-			Collection<String> children = this.childrenLists.get(parent);
-			if (children == null) {
-				throw new IllegalStateException("cannot add a child to a non-existent parent");
-			}
-
-			if (this.childrenLists.get(child) != null) {
-				throw new IllegalStateException("cannot add a child that is already in the tree");
-			}
-			
-			children.add(child);
-			this.childrenLists.put(child, new ArrayList<String>());
-			this.parents.put(child, parent);
-			this.fireNodeAdded(STRINGS_TREE, this.path(child));
-		}
-		void removeNode(String node) {
-			if (node == null) {
-				throw new NullPointerException();
-			}
-
-			Collection<String> children = this.childrenLists.get(node);
-			if (children == null) {
-				throw new IllegalStateException("node is not in tree");
-			}
-			List<String> path = this.path(node);
-			for (String s : children) {
-				this.removeNode(s);
-			}
-			this.childrenLists.remove(node);
-			this.parents.remove(node);
-			this.fireNodeRemoved(STRINGS_TREE, path);
-		}
-		void replaceNode(String oldNode, String newNode) {
-			if ((oldNode == null) || (newNode == null)) {
-				throw new NullPointerException();
-			}
-
-			Collection<String> children = this.childrenLists.remove(oldNode);
-			if (children == null) {
-				throw new IllegalStateException("old node is not in tree");
-			}
-			this.childrenLists.put(newNode, children);
-			for (String child : children) {
-				this.parents.put(child, newNode);
-			}
-
-			String parent = this.parents.remove(oldNode);
-			this.parents.put(newNode, parent);
-
-			this.fireTreeChanged(STRINGS_TREE, this.path(newNode));
-		}
-		void clearTree() {
-			this.childrenLists.clear();
-			this.childrenLists.put(root, new ArrayList<String>());
-			this.parents.clear();
-			this.parents.put(root, null);
-			this.fireTreeCleared(STRINGS_TREE);
-		}
-		void changeCollection() {
-			this.fireCollectionChanged("bogus collection", Collections.emptySet());
-		}
-	}
-
-	class Target {
-		TestModel testModel;
-		String treeName;
-		List<String> path;
-		boolean nodeAddedZeroArgumentFlag = false;
-		boolean nodeAddedSingleArgumentFlag = false;
-		boolean nodeRemovedZeroArgumentFlag = false;
-		boolean nodeRemovedSingleArgumentFlag = false;
-		boolean treeClearedZeroArgumentFlag = false;
-		boolean treeClearedSingleArgumentFlag = false;
-		boolean treeChangedZeroArgumentFlag = false;
-		boolean treeChangedSingleArgumentFlag = false;
-		boolean treeEventSingleArgumentFlag = false;
-		Target(TestModel testModel, String treeName, String[] path) {
-			super();
-			this.testModel = testModel;
-			this.treeName = treeName;
-			this.path = Arrays.asList(path);
-		}
-		void nodeAddedZeroArgument() {
-			this.nodeAddedZeroArgumentFlag = true;
-		}
-		void nodeAddedSingleArgument(TreeAddEvent e) {
-			this.nodeAddedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.treeName, e.getTreeName());
-			assertEquals(this.path, CollectionTools.list(e.getPath()));
-		}
-		void nodeRemovedZeroArgument() {
-			this.nodeRemovedZeroArgumentFlag = true;
-		}
-		void nodeRemovedSingleArgument(TreeRemoveEvent e) {
-			this.nodeRemovedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.treeName, e.getTreeName());
-			assertEquals(this.path, CollectionTools.list(e.getPath()));
-		}
-		void treeClearedZeroArgument() {
-			this.treeClearedZeroArgumentFlag = true;
-		}
-		void treeClearedSingleArgument(TreeClearEvent e) {
-			this.treeClearedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.treeName, e.getTreeName());
-		}
-		void treeChangedZeroArgument() {
-			this.treeChangedZeroArgumentFlag = true;
-		}
-		void treeChangedSingleArgument(TreeChangeEvent e) {
-			this.treeChangedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.treeName, e.getTreeName());
-		}
-		void treeEventSingleArgument(TreeEvent e) {
-			this.treeChangedSingleArgumentFlag = true;
-			assertSame(this.testModel, e.getSource());
-			assertEquals(this.treeName, e.getTreeName());
-		}
-		void collectionChangedDoubleArgument(TreeChangeEvent e, Object o) {
-			fail("bogus event: " + e + " - object: " + o);
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/BufferedWritablePropertyValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/BufferedWritablePropertyValueModelTests.java
deleted file mode 100644
index 366cb55..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/BufferedWritablePropertyValueModelTests.java
+++ /dev/null
@@ -1,504 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.Date;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.BufferedWritablePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class BufferedWritablePropertyValueModelTests extends TestCase {
-	private Employee employee;
-	private WritablePropertyValueModel<Employee> employeeHolder;
-	PropertyChangeEvent employeeEvent;
-
-	private WritablePropertyValueModel<Integer> idAdapter;
-	private WritablePropertyValueModel<String> nameAdapter;
-	private WritablePropertyValueModel<Date> hireDateAdapter;
-	PropertyChangeEvent adapterEvent;
-
-	private BufferedWritablePropertyValueModel.Trigger trigger;
-	private BufferedWritablePropertyValueModel<Integer> bufferedIDHolder;
-	private BufferedWritablePropertyValueModel<String> bufferedNameHolder;
-	private BufferedWritablePropertyValueModel<Date> bufferedHireDateHolder;
-	PropertyChangeEvent bufferedEvent;
-
-	public BufferedWritablePropertyValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
-		this.employee = new Employee(17, "Freddy", new Date());
-		this.employeeHolder = new SimplePropertyValueModel<Employee>(this.employee);
-
-		this.trigger = new BufferedWritablePropertyValueModel.Trigger();
-
-		this.idAdapter = this.buildIDAdapter(this.employeeHolder);
-		this.bufferedIDHolder = new BufferedWritablePropertyValueModel<Integer>(this.idAdapter, this.trigger);
-
-		this.nameAdapter = this.buildNameAdapter(this.employeeHolder);
-		this.bufferedNameHolder = new BufferedWritablePropertyValueModel<String>(this.nameAdapter, this.trigger);
-
-		this.hireDateAdapter = this.buildHireDateAdapter(this.employeeHolder);
-		this.bufferedHireDateHolder = new BufferedWritablePropertyValueModel<Date>(this.hireDateAdapter, this.trigger);
-	}
-
-	private WritablePropertyValueModel<Integer> buildIDAdapter(PropertyValueModel<Employee> eHolder) {
-		return new PropertyAspectAdapter<Employee, Integer>(eHolder, Employee.ID_PROPERTY) {
-			@Override
-			protected Integer buildValue_() {
-				return new Integer(this.subject.getID());
-			}
-			@Override
-			protected void setValue_(Integer value) {
-				this.subject.setID(value.intValue());
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<String> buildNameAdapter(PropertyValueModel<Employee> eHolder) {
-		return new PropertyAspectAdapter<Employee, String>(eHolder, Employee.NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getName();
-			}
-			@Override
-			protected void setValue_(String value) {
-				this.subject.setName(value);
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Date> buildHireDateAdapter(PropertyValueModel<Employee> eHolder) {
-		return new PropertyAspectAdapter<Employee, Date>(eHolder, Employee.HIRE_DATE_PROPERTY) {
-			@Override
-			protected Date buildValue_() {
-				return this.subject.getHireDate();
-			}
-			@Override
-			protected void setValue_(Date value) {
-				this.subject.setHireDate(value);
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testGetValue() {
-		PropertyChangeListener bufferedListener = this.buildBufferedListener();
-		this.bufferedIDHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-		this.bufferedNameHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-		this.bufferedHireDateHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-
-		assertEquals(new Integer(17), this.idAdapter.getValue());
-		assertEquals(new Integer(17), this.bufferedIDHolder.getValue());
-
-		assertEquals("Freddy", this.employee.getName());
-		assertEquals("Freddy", this.nameAdapter.getValue());
-		assertEquals("Freddy", this.bufferedNameHolder.getValue());
-
-		Date temp = this.employee.getHireDate();
-		assertEquals(temp, this.employee.getHireDate());
-		assertEquals(temp, this.hireDateAdapter.getValue());
-		assertEquals(temp, this.bufferedHireDateHolder.getValue());
-
-		this.bufferedIDHolder.setValue(new Integer(323));
-		assertEquals(17, this.employee.getID());
-		assertEquals(new Integer(17), this.idAdapter.getValue());
-		assertEquals(new Integer(323), this.bufferedIDHolder.getValue());
-
-		this.bufferedNameHolder.setValue("Ripley");
-		assertEquals("Freddy", this.employee.getName());
-		assertEquals("Freddy", this.nameAdapter.getValue());
-		assertEquals("Ripley", this.bufferedNameHolder.getValue());
-
-		this.bufferedHireDateHolder.setValue(null);
-		assertEquals(temp, this.employee.getHireDate());
-		assertEquals(temp, this.hireDateAdapter.getValue());
-		assertEquals(null, this.bufferedHireDateHolder.getValue());
-	}
-
-	public void testTriggerAccept() {
-		PropertyChangeListener bufferedListener = this.buildBufferedListener();
-		this.bufferedIDHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-		this.bufferedNameHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-		this.bufferedHireDateHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-
-		this.bufferedIDHolder.setValue(new Integer(323));
-		assertEquals(17, this.employee.getID());
-		assertEquals(new Integer(17), this.idAdapter.getValue());
-		assertEquals(new Integer(323), this.bufferedIDHolder.getValue());
-
-		this.bufferedNameHolder.setValue("Ripley");
-		assertEquals("Freddy", this.employee.getName());
-		assertEquals("Freddy", this.nameAdapter.getValue());
-		assertEquals("Ripley", this.bufferedNameHolder.getValue());
-
-		Date temp = this.employee.getHireDate();
-		this.bufferedHireDateHolder.setValue(null);
-		assertEquals(temp, this.employee.getHireDate());
-		assertEquals(temp, this.hireDateAdapter.getValue());
-		assertEquals(null, this.bufferedHireDateHolder.getValue());
-
-		this.trigger.accept();
-
-		assertEquals(323, this.employee.getID());
-		assertEquals(new Integer(323), this.idAdapter.getValue());
-		assertEquals(new Integer(323), this.bufferedIDHolder.getValue());
-
-		assertEquals("Ripley", this.employee.getName());
-		assertEquals("Ripley", this.nameAdapter.getValue());
-		assertEquals("Ripley", this.bufferedNameHolder.getValue());
-
-		assertEquals(null, this.employee.getHireDate());
-		assertEquals(null, this.hireDateAdapter.getValue());
-		assertEquals(null, this.bufferedHireDateHolder.getValue());
-	}
-
-	public void testTriggerReset() {
-		PropertyChangeListener bufferedListener = this.buildBufferedListener();
-		this.bufferedIDHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-		this.bufferedNameHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-		this.bufferedHireDateHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-
-		this.bufferedIDHolder.setValue(new Integer(323));
-		assertEquals(17, this.employee.getID());
-		assertEquals(new Integer(17), this.idAdapter.getValue());
-		assertEquals(new Integer(323), this.bufferedIDHolder.getValue());
-
-		this.bufferedNameHolder.setValue("Ripley");
-		assertEquals("Freddy", this.employee.getName());
-		assertEquals("Freddy", this.nameAdapter.getValue());
-		assertEquals("Ripley", this.bufferedNameHolder.getValue());
-
-		Date temp = this.employee.getHireDate();
-		this.bufferedHireDateHolder.setValue(null);
-		assertEquals(temp, this.employee.getHireDate());
-		assertEquals(temp, this.hireDateAdapter.getValue());
-		assertEquals(null, this.bufferedHireDateHolder.getValue());
-
-		this.trigger.reset();
-
-		assertEquals(17, this.employee.getID());
-		assertEquals(new Integer(17), this.idAdapter.getValue());
-		assertEquals(new Integer(17), this.bufferedIDHolder.getValue());
-
-		assertEquals("Freddy", this.employee.getName());
-		assertEquals("Freddy", this.nameAdapter.getValue());
-		assertEquals("Freddy", this.bufferedNameHolder.getValue());
-
-		assertEquals(temp, this.employee.getHireDate());
-		assertEquals(temp, this.hireDateAdapter.getValue());
-		assertEquals(temp, this.bufferedHireDateHolder.getValue());
-	}
-
-	public void testLazyListening() {
-		assertTrue(((AbstractModel) this.bufferedIDHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.bufferedNameHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.bufferedHireDateHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		assertTrue(((AbstractModel) this.idAdapter).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.nameAdapter).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.hireDateAdapter).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		assertTrue(this.employee.hasNoPropertyChangeListeners(Employee.ID_PROPERTY));
-		assertTrue(this.employee.hasNoPropertyChangeListeners(Employee.NAME_PROPERTY));
-		assertTrue(this.employee.hasNoPropertyChangeListeners(Employee.HIRE_DATE_PROPERTY));
-
-		PropertyChangeListener bufferedListener = this.buildBufferedListener();
-		this.bufferedIDHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-		this.bufferedNameHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-		this.bufferedHireDateHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-
-		assertTrue(((AbstractModel) this.bufferedIDHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.bufferedNameHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.bufferedHireDateHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		assertTrue(((AbstractModel) this.idAdapter).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.nameAdapter).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.hireDateAdapter).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		assertTrue(this.employee.hasAnyPropertyChangeListeners(Employee.ID_PROPERTY));
-		assertTrue(this.employee.hasAnyPropertyChangeListeners(Employee.NAME_PROPERTY));
-		assertTrue(this.employee.hasAnyPropertyChangeListeners(Employee.HIRE_DATE_PROPERTY));
-
-		this.bufferedIDHolder.removePropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-		this.bufferedNameHolder.removePropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-		this.bufferedHireDateHolder.removePropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-
-		assertTrue(((AbstractModel) this.bufferedIDHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.bufferedNameHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.bufferedHireDateHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		assertTrue(((AbstractModel) this.idAdapter).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.nameAdapter).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.hireDateAdapter).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		assertTrue(this.employee.hasNoPropertyChangeListeners(Employee.ID_PROPERTY));
-		assertTrue(this.employee.hasNoPropertyChangeListeners(Employee.NAME_PROPERTY));
-		assertTrue(this.employee.hasNoPropertyChangeListeners(Employee.HIRE_DATE_PROPERTY));
-	}
-
-	public void testPropertyChange1() {
-		PropertyChangeListener bufferedListener = this.buildBufferedListener();
-		this.bufferedNameHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-
-		PropertyChangeListener adapterListener = this.buildAdapterListener();
-		this.nameAdapter.addPropertyChangeListener(PropertyValueModel.VALUE, adapterListener);
-
-		PropertyChangeListener employeeListener = this.buildEmployeeListener();
-		this.employee.addPropertyChangeListener(Employee.NAME_PROPERTY, employeeListener);
-
-		this.verifyPropertyChanges();
-	}
-
-	public void testPropertyChange2() {
-		ChangeListener bufferedListener = this.buildBufferedListener();
-		this.bufferedNameHolder.addChangeListener(bufferedListener);
-
-		ChangeListener adapterListener = this.buildAdapterListener();
-		this.nameAdapter.addChangeListener(adapterListener);
-
-		ChangeListener employeeListener = this.buildEmployeeListener();
-		this.employee.addChangeListener(employeeListener);
-
-		this.verifyPropertyChanges();
-	}
-
-	private void verifyPropertyChanges() {
-		this.bufferedEvent = null;
-		this.adapterEvent = null;
-		this.employeeEvent = null;
-		this.bufferedNameHolder.setValue("Ripley");
-		this.verifyEvent(this.bufferedEvent, this.bufferedNameHolder, PropertyValueModel.VALUE, "Freddy", "Ripley");
-		assertNull(this.adapterEvent);
-		assertNull(this.employeeEvent);
-
-		this.bufferedEvent = null;
-		this.adapterEvent = null;
-		this.employeeEvent = null;
-		this.bufferedNameHolder.setValue("Charlie");
-		this.verifyEvent(this.bufferedEvent, this.bufferedNameHolder, PropertyValueModel.VALUE, "Ripley", "Charlie");
-		assertNull(this.adapterEvent);
-		assertNull(this.employeeEvent);
-
-		this.bufferedEvent = null;
-		this.adapterEvent = null;
-		this.employeeEvent = null;
-		this.trigger.accept();
-		assertNull(this.bufferedEvent);
-		this.verifyEvent(this.adapterEvent, this.nameAdapter, PropertyValueModel.VALUE, "Freddy", "Charlie");
-		this.verifyEvent(this.employeeEvent, this.employee, Employee.NAME_PROPERTY, "Freddy", "Charlie");
-
-		this.bufferedEvent = null;
-		this.adapterEvent = null;
-		this.employeeEvent = null;
-		this.bufferedNameHolder.setValue("Jason");
-		this.verifyEvent(this.bufferedEvent, this.bufferedNameHolder, PropertyValueModel.VALUE, "Charlie", "Jason");
-		assertNull(this.adapterEvent);
-		assertNull(this.employeeEvent);
-
-		this.bufferedEvent = null;
-		this.adapterEvent = null;
-		this.employeeEvent = null;
-		this.trigger.reset();
-		this.verifyEvent(this.bufferedEvent, this.bufferedNameHolder, PropertyValueModel.VALUE, "Jason", "Charlie");
-		assertNull(this.adapterEvent);
-		assertNull(this.employeeEvent);
-	}
-
-	/**
-	 * changing the value should trigger buffering
-	 */
-	public void testBuffering1() {
-		PropertyChangeListener bufferedListener = this.buildBufferedListener();
-		this.bufferedNameHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-
-		this.bufferedNameHolder.setValue("Ripley");
-		assertEquals("Freddy", this.nameAdapter.getValue());
-		assertEquals("Ripley", this.bufferedNameHolder.getValue());
-		assertTrue(this.bufferedNameHolder.isBuffering());
-	}
-
-	/**
-	 * setting to the same value should not trigger buffering (?)
-	 */
-	public void testBuffering2() {
-		PropertyChangeListener bufferedListener = this.buildBufferedListener();
-		this.bufferedNameHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-
-		this.bufferedNameHolder.setValue("Freddy");
-		assertEquals("Freddy", this.bufferedNameHolder.getValue());
-		assertEquals("Freddy", this.nameAdapter.getValue());
-		assertFalse(this.bufferedNameHolder.isBuffering());
-	}
-
-	/**
-	 * setting to the original value should not trigger buffering (?)
-	 */
-	public void testBuffering3() {
-		PropertyChangeListener bufferedListener = this.buildBufferedListener();
-		this.bufferedNameHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-
-		this.bufferedNameHolder.setValue("Ripley");
-		assertEquals("Freddy", this.nameAdapter.getValue());
-		assertEquals("Ripley", this.bufferedNameHolder.getValue());
-		assertTrue(this.bufferedNameHolder.isBuffering());
-
-		this.bufferedNameHolder.setValue("Freddy");
-		assertEquals("Freddy", this.nameAdapter.getValue());
-		assertEquals("Freddy", this.bufferedNameHolder.getValue());
-		assertFalse(this.bufferedNameHolder.isBuffering());
-	}
-
-	/**
-	 * back-door changes are ignored - "Last One In Wins"
-	 */
-	public void testChangeConflict1() {
-		PropertyChangeListener bufferedListener = this.buildBufferedListener();
-		this.bufferedNameHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-
-		this.bufferedNameHolder.setValue("Ripley");
-		assertEquals("Freddy", this.employee.getName());
-		assertEquals("Freddy", this.nameAdapter.getValue());
-		assertEquals("Ripley", this.bufferedNameHolder.getValue());
-
-		this.nameAdapter.setValue("Jason");
-		assertEquals("Jason", this.employee.getName());
-		assertEquals("Jason", this.nameAdapter.getValue());
-		assertEquals("Ripley", this.bufferedNameHolder.getValue());
-
-		this.trigger.accept();
-		// "Jason" is dropped on the floor...
-		assertEquals("Ripley", this.employee.getName());
-		assertEquals("Ripley", this.nameAdapter.getValue());
-		assertEquals("Ripley", this.bufferedNameHolder.getValue());
-	}
-
-	/**
-	 * back-door changes can de-activate buffering (?)
-	 */
-	public void testChangeConflict2() {
-		PropertyChangeListener bufferedListener = this.buildBufferedListener();
-		this.bufferedNameHolder.addPropertyChangeListener(PropertyValueModel.VALUE, bufferedListener);
-
-		this.bufferedNameHolder.setValue("Ripley");
-		assertEquals("Freddy", this.employee.getName());
-		assertEquals("Freddy", this.nameAdapter.getValue());
-		assertEquals("Ripley", this.bufferedNameHolder.getValue());
-		assertTrue(this.bufferedNameHolder.isBuffering());
-
-		this.nameAdapter.setValue("Ripley");
-		assertEquals("Ripley", this.employee.getName());
-		assertEquals("Ripley", this.nameAdapter.getValue());
-		assertEquals("Ripley", this.bufferedNameHolder.getValue());
-		assertFalse(this.bufferedNameHolder.isBuffering());
-	}
-
-	private ChangeListener buildBufferedListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				BufferedWritablePropertyValueModelTests.this.bufferedEvent = e;
-			}
-		};
-	}
-
-	private ChangeListener buildAdapterListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				BufferedWritablePropertyValueModelTests.this.adapterEvent = e;
-			}
-		};
-	}
-
-	private ChangeListener buildEmployeeListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				BufferedWritablePropertyValueModelTests.this.employeeEvent = e;
-			}
-		};
-	}
-
-	private void verifyEvent(PropertyChangeEvent event, Object source, String propertyName, Object oldValue, Object newValue) {
-		assertEquals(source, event.getSource());
-		assertEquals(propertyName, event.getPropertyName());
-		assertEquals(oldValue, event.getOldValue());
-		assertEquals(newValue, event.getNewValue());
-	}
-
-
-	// ********** inner class **********
-
-	class Employee extends AbstractModel {
-		private int id;
-			public static final String ID_PROPERTY = "id";
-		private String name;
-			public static final String NAME_PROPERTY = "name";
-		private Date hireDate;
-			public static final String HIRE_DATE_PROPERTY = "hireDate";
-
-		Employee(int id, String name, Date hireDate) {
-			super();
-			this.id = id;
-			this.name = name;
-			this.hireDate = hireDate;
-		}
-		int getID() {
-			return this.id;
-		}
-		void setID(int id) {
-			int old = this.id;
-			this.id = id;
-			this.firePropertyChanged(ID_PROPERTY, old, id);
-		}
-		String getName() {
-			return this.name;
-		}
-		void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(NAME_PROPERTY, old, name);
-		}
-		Date getHireDate() {
-			return this.hireDate;
-		}
-		void setHireDate(Date hireDate) {
-			Object old = this.hireDate;
-			this.hireDate = hireDate;
-			this.firePropertyChanged(HIRE_DATE_PROPERTY, old, hireDate);
-		}
-		@Override
-		public void toString(StringBuilder sb) {
-			sb.append(this.name);
-		}
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CachingTransformationPropertyValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CachingTransformationPropertyValueModelTests.java
deleted file mode 100644
index 0107fd0..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CachingTransformationPropertyValueModelTests.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.BidiTransformer;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.CachingTransformationPropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class CachingTransformationPropertyValueModelTests extends TestCase {
-	private WritablePropertyValueModel<Person> objectHolder;
-	PropertyChangeEvent event;
-
-	private PropertyValueModel<Person> transformationObjectHolder;
-	PropertyChangeEvent transformationEvent;
-
-	public CachingTransformationPropertyValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.objectHolder = new SimplePropertyValueModel<Person>(new Person("Karen", "Peggy", null));
-		this.transformationObjectHolder = new CachingTransformationPropertyValueModel<Person, Person>(this.objectHolder, this.buildTransformer());
-	}
-
-	private BidiTransformer<Person, Person> buildTransformer() {
-		return new BidiTransformer<Person, Person>() {
-			public Person transform(Person p) {
-				return (p == null) ? null : p.getParent();
-			}
-			public Person reverseTransform(Person p) {
-				return (p == null) ? null : p.getChild();
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testValue() {
-		ChangeListener listener = this.buildTransformationChangeListener();
-		this.transformationObjectHolder.addChangeListener(listener);
-		
-		Person person = this.objectHolder.getValue();
-		assertEquals("Karen", person.getName());
-		Person parent = this.transformationObjectHolder.getValue();
-		assertEquals(person.getParent().getName(), parent.getName());
-		assertNotSame(person.getParent(), this.transformationObjectHolder.getValue());
-		assertEquals(parent, this.transformationObjectHolder.getValue());
-
-		Person person1 = new Person("Matt", "Mitch", null);
-		this.objectHolder.setValue(person1);
-		Person parent2 = this.transformationObjectHolder.getValue();
-		assertEquals(person1.getParent().getName(), parent2.getName());
-		assertNotSame(person1.getParent(), this.transformationObjectHolder.getValue());
-		assertEquals(parent2, this.transformationObjectHolder.getValue());
-
-
-		this.objectHolder.setValue(null);
-		assertNull(this.objectHolder.getValue());
-		assertNull(this.transformationObjectHolder.getValue());
-
-		Person person3 = new Person("Karen", "Peggy", null);
-		this.objectHolder.setValue(person3);
-		assertEquals("Karen", person3.getName());
-		Person parent3 = this.transformationObjectHolder.getValue();
-		assertEquals(person3.getParent().getName(), parent3.getName());
-		assertNotSame(person3.getParent(), this.transformationObjectHolder.getValue());
-		assertEquals(parent3, this.transformationObjectHolder.getValue());
-	}
-
-	public void testLazyListening() {
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		ChangeListener listener = this.buildTransformationChangeListener();
-		this.transformationObjectHolder.addChangeListener(listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.transformationObjectHolder.removeChangeListener(listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		this.transformationObjectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.transformationObjectHolder.removePropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-	}
-
-	public void testPropertyChange1() {
-		this.objectHolder.addChangeListener(this.buildChangeListener());
-		this.transformationObjectHolder.addChangeListener(this.buildTransformationChangeListener());
-		this.verifyPropertyChanges();
-	}
-
-	public void testPropertyChange2() {
-		this.objectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildListener());
-		this.transformationObjectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildTransformationListener());
-		this.verifyPropertyChanges();
-	}
-
-	private void verifyPropertyChanges() {
-		this.event = null;
-		this.transformationEvent = null;
-		Person karen = this.objectHolder.getValue();
-		Person peggyParent = this.transformationObjectHolder.getValue();
-		Person peggy = new Person("Peggy", "Marian", null);
-		this.objectHolder.setValue(peggy);
-		Person marianParent = this.transformationObjectHolder.getValue();
-		this.verifyEvent(this.event, this.objectHolder, karen, peggy);
-		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, peggyParent, marianParent);
-
-		this.event = null;
-		this.transformationEvent = null;
-		Person matt = new Person("Matt", "Mitch", null);
-		this.objectHolder.setValue(matt);
-		Person mitchParent = this.transformationObjectHolder.getValue();
-		this.verifyEvent(this.event, this.objectHolder, peggy, matt);
-		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, marianParent, mitchParent);
-
-		this.event = null;
-		this.transformationEvent = null;
-		this.objectHolder.setValue(null);
-		this.verifyEvent(this.event, this.objectHolder, matt, null);
-		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, mitchParent, null);
-
-		this.event = null;
-		this.transformationEvent = null;
-		this.objectHolder.setValue(matt);
-		mitchParent = this.transformationObjectHolder.getValue();
-		this.verifyEvent(this.event, this.objectHolder, null, matt);
-		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, null, mitchParent);
-	}
-
-	private PropertyChangeListener buildListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent e) {
-				CachingTransformationPropertyValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	private PropertyChangeListener buildTransformationListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent e) {
-				CachingTransformationPropertyValueModelTests.this.transformationEvent = e;
-			}
-		};
-	}
-
-	private ChangeListener buildChangeListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				CachingTransformationPropertyValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	private ChangeListener buildTransformationChangeListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				CachingTransformationPropertyValueModelTests.this.transformationEvent = e;
-			}
-		};
-	}
-
-	private void verifyEvent(PropertyChangeEvent e, Object source, Object oldValue, Object newValue) {
-		assertEquals(source, e.getSource());
-		assertEquals(PropertyValueModel.VALUE, e.getPropertyName());
-		assertEquals(oldValue, e.getOldValue());
-		assertEquals(newValue, e.getNewValue());
-	}
-
-	
-	class Person extends AbstractModel {
-
-		private String name;
-			public static final String NAME_PROPERTY = "name";
-		
-		private String parentName;
-			public static final String PARENT_NAME_PROPERTY = "parentName";
-		
-		private Person child;
-		
-		public Person(String name, String parentName, Person child) {
-			this.name = name;
-			this.parentName = parentName;
-			this.child = child;
-		}
-		
-		public String getName() {
-			return this.name;
-		}
-		
-		public void setName(String newName) {
-			String oldName = this.name;
-			this.name = newName;
-			firePropertyChanged(NAME_PROPERTY, oldName, newName);
-		}
-		
-		public Person getParent() {
-			return new Person(this.parentName, null, this);
-		}
-		
-		public String getParentName() {
-			return this.parentName;
-		}
-		
-		public void setParentName(String newParentName) {
-			String oldParentName = this.parentName;
-			this.parentName = newParentName;
-			firePropertyChanged(PARENT_NAME_PROPERTY, oldParentName, newParentName);
-		}
-		
-		public Person getChild() {
-			return this.child;
-		}
-
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CachingTransformationWritablePropertyValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CachingTransformationWritablePropertyValueModelTests.java
deleted file mode 100644
index 49905c2..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CachingTransformationWritablePropertyValueModelTests.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.BidiTransformer;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.CachingTransformationWritablePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class CachingTransformationWritablePropertyValueModelTests extends TestCase {
-	private WritablePropertyValueModel<Person> objectHolder;
-	PropertyChangeEvent event;
-
-	private WritablePropertyValueModel<Person> transformationObjectHolder;
-	PropertyChangeEvent transformationEvent;
-
-	public CachingTransformationWritablePropertyValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.objectHolder = new SimplePropertyValueModel<Person>(new Person("Karen", "Peggy", null));
-		this.transformationObjectHolder = new CachingTransformationWritablePropertyValueModel<Person, Person>(this.objectHolder, this.buildTransformer());
-	}
-
-	private BidiTransformer<Person, Person> buildTransformer() {
-		return new BidiTransformer<Person, Person>() {
-			public Person transform(Person p) {
-				return (p == null) ? null : p.getParent();
-			}
-			public Person reverseTransform(Person p) {
-				return (p == null) ? null : p.getChild();
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testValue() {
-		ChangeListener listener = this.buildTransformationListener();
-		this.transformationObjectHolder.addChangeListener(listener);
-
-		
-		Person person = this.objectHolder.getValue();
-		assertEquals("Karen", person.getName());
-		Person parent = this.transformationObjectHolder.getValue();
-		assertEquals(person.getParent().getName(), parent.getName());
-		assertNotSame(person.getParent(), this.transformationObjectHolder.getValue());
-		assertEquals(parent, this.transformationObjectHolder.getValue());
-
-		Person person1 = new Person("Matt", "Mitch", null);
-		this.objectHolder.setValue(person1);
-		Person parent2 = this.transformationObjectHolder.getValue();
-		assertEquals(person1.getParent().getName(), parent2.getName());
-		assertNotSame(person1.getParent(), this.transformationObjectHolder.getValue());
-		assertEquals(parent2, this.transformationObjectHolder.getValue());
-
-
-		this.objectHolder.setValue(null);
-		assertNull(this.objectHolder.getValue());
-		assertNull(this.transformationObjectHolder.getValue());
-
-		Person person3 = new Person("Karen", "Peggy", null);
-		this.objectHolder.setValue(person3);
-		assertEquals("Karen", person3.getName());
-		Person parent3 = this.transformationObjectHolder.getValue();
-		assertEquals(person3.getParent().getName(), parent3.getName());
-		assertNotSame(person3.getParent(), this.transformationObjectHolder.getValue());
-		assertEquals(parent3, this.transformationObjectHolder.getValue());
-	}
-
-	public void testSetValue() {
-		ChangeListener listener = this.buildTransformationListener();
-		this.transformationObjectHolder.addChangeListener(listener);
-
-		Person person = new Person("Chris", "Noel", null);
-		this.transformationObjectHolder.setValue(person.getParent());
-		assertEquals(person, this.objectHolder.getValue());
-		assertEquals(person.getParent().getName(), this.transformationObjectHolder.getValue().getName());
-		assertNotSame(person.getParent(), this.transformationObjectHolder.getValue());
-
-		Person person2 = new Person("Jon", "Elizabeth", null);
-		this.transformationObjectHolder.setValue(person2.getParent());
-		assertEquals(person2, this.objectHolder.getValue());
-		assertEquals(person2.getParent().getName(), this.transformationObjectHolder.getValue().getName());
-		assertNotSame(person2.getParent(), this.transformationObjectHolder.getValue());
-
-		this.transformationObjectHolder.setValue(null);
-		assertNull(this.objectHolder.getValue());
-		assertNull(this.transformationObjectHolder.getValue());
-
-		this.transformationObjectHolder.setValue(person.getParent());
-		assertEquals(person, this.objectHolder.getValue());
-		assertEquals(person.getParent().getName(), this.transformationObjectHolder.getValue().getName());
-		assertNotSame(person.getParent(), this.transformationObjectHolder.getValue());
-	}
-
-	public void testLazyListening() {
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		ChangeListener listener = this.buildTransformationListener();
-		this.transformationObjectHolder.addChangeListener(listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.transformationObjectHolder.removeChangeListener(listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		this.transformationObjectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.transformationObjectHolder.removePropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-	}
-
-	public void testPropertyChange1() {
-		this.objectHolder.addChangeListener(this.buildListener());
-		this.transformationObjectHolder.addChangeListener(this.buildTransformationListener());
-		this.verifyPropertyChanges();
-	}
-
-	public void testPropertyChange2() {
-		this.objectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildListener());
-		this.transformationObjectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildTransformationListener());
-		this.verifyPropertyChanges();
-	}
-
-	private void verifyPropertyChanges() {
-		this.event = null;
-		this.transformationEvent = null;
-		Person oldPerson = this.objectHolder.getValue();
-		Person oldParent = this.transformationObjectHolder.getValue();
-		Person newPerson = new Person("Karen" , "Peggy", null);
-		this.objectHolder.setValue(newPerson);
-		Person newParent = this.transformationObjectHolder.getValue();
-		this.verifyEvent(this.event, this.objectHolder, oldPerson, newPerson);
-		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, oldParent, newParent);
-
-//
-//		this.event = null;
-//		this.transformationEvent = null;
-//		this.objectHolder.setValue("Foo");
-//		this.verifyEvent(this.event, this.objectHolder, "baz", "Foo");
-//		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, "BAZ", "FOO");
-//
-//		this.event = null;
-//		this.transformationEvent = null;
-//		this.objectHolder.setValue("FOO");
-//		this.verifyEvent(this.event, this.objectHolder, "Foo", "FOO");
-//		assertNull(this.transformationEvent);
-//
-//		this.event = null;
-//		this.transformationEvent = null;
-//		this.objectHolder.setValue(null);
-//		this.verifyEvent(this.event, this.objectHolder, "FOO", null);
-//		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, "FOO", null);
-//
-//		this.event = null;
-//		this.transformationEvent = null;
-//		this.objectHolder.setValue("bar");
-//		this.verifyEvent(this.event, this.objectHolder, null, "bar");
-//		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, null, "BAR");
-	}
-
-	private ChangeListener buildListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				CachingTransformationWritablePropertyValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	private ChangeListener buildTransformationListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				CachingTransformationWritablePropertyValueModelTests.this.transformationEvent = e;
-			}
-		};
-	}
-
-	private void verifyEvent(PropertyChangeEvent e, Object source, Object oldValue, Object newValue) {
-		assertEquals(source, e.getSource());
-		assertEquals(PropertyValueModel.VALUE, e.getPropertyName());
-		assertEquals(oldValue, e.getOldValue());
-		assertEquals(newValue, e.getNewValue());
-	}
-
-	
-	class Person extends AbstractModel {
-
-		private String name;
-			public static final String NAME_PROPERTY = "name";
-		
-		private String parentName;
-			public static final String PARENT_NAME_PROPERTY = "parentName";
-		
-		private Person child;
-		
-		public Person(String name, String parentName, Person child) {
-			this.name = name;
-			this.parentName = parentName;
-			this.child = child;
-		}
-		
-		public String getName() {
-			return this.name;
-		}
-		
-		public void setName(String newName) {
-			String oldName = this.name;
-			this.name = newName;
-			firePropertyChanged(NAME_PROPERTY, oldName, newName);
-		}
-		
-		public Person getParent() {
-			return new Person(this.parentName, null, this);
-		}
-		
-		public String getParentName() {
-			return this.parentName;
-		}
-		
-		public void setParentName(String newParentName) {
-			String oldParentName = this.parentName;
-			this.parentName = newParentName;
-			firePropertyChanged(PARENT_NAME_PROPERTY, oldParentName, newParentName);
-		}
-		
-		public Person getChild() {
-			return this.child;
-		}
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CollectionAspectAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CollectionAspectAdapterTests.java
deleted file mode 100644
index 4d3008d..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CollectionAspectAdapterTests.java
+++ /dev/null
@@ -1,372 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.CollectionAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class CollectionAspectAdapterTests extends TestCase {
-	private TestSubject subject1;
-	private WritablePropertyValueModel<TestSubject> subjectHolder1;
-	private LocalCollectionAspectAdapter aa1;
-	private CollectionEvent event1;
-	private CollectionChangeListener listener1;
-	private String event1Type;
-
-	private static final String ADD = "add";
-	private static final String REMOVE = "remove";
-	private static final String CHANGE = "change";
-	private static final String CLEAR = "clear";
-
-	private TestSubject subject2;
-
-	public CollectionAspectAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.subject1 = new TestSubject();
-		this.subject1.addNames(this.subject1Names());
-		this.subject1.addDescriptions(this.subject1Descriptions());
-		this.subjectHolder1 = new SimplePropertyValueModel<TestSubject>(this.subject1);
-		this.aa1 = this.buildAspectAdapter(this.subjectHolder1);
-		this.listener1 = this.buildValueChangeListener1();
-		this.aa1.addCollectionChangeListener(CollectionValueModel.VALUES, this.listener1);
-		this.event1 = null;
-		this.event1Type = null;
-
-		this.subject2 = new TestSubject();
-		this.subject2.addNames(this.subject2Names());
-		this.subject2.addDescriptions(this.subject2Descriptions());
-	}
-
-	private Collection<String> subject1Names() {
-		Collection<String> result = new HashBag<String>();
-		result.add("foo");
-		result.add("bar");
-		return result;
-	}
-
-	private Collection<String> subject1Descriptions() {
-		Collection<String> result = new HashBag<String>();
-		result.add("this.subject1 description1");
-		result.add("this.subject1 description2");
-		return result;
-	}
-
-	private Collection<String> subject2Names() {
-		Collection<String> result = new HashBag<String>();
-		result.add("baz");
-		result.add("bam");
-		return result;
-	}
-
-	private Collection<String> subject2Descriptions() {
-		Collection<String> result = new HashBag<String>();
-		result.add("this.subject2 description1");
-		result.add("this.subject2 description2");
-		return result;
-	}
-
-	private LocalCollectionAspectAdapter buildAspectAdapter(PropertyValueModel<TestSubject> subjectHolder) {
-		return new LocalCollectionAspectAdapter(subjectHolder);
-	}
-
-	private CollectionChangeListener buildValueChangeListener1() {
-		return new CollectionChangeListener() {
-			public void itemsAdded(CollectionAddEvent e) {
-				CollectionAspectAdapterTests.this.value1Changed(e, ADD);
-			}
-			public void itemsRemoved(CollectionRemoveEvent e) {
-				CollectionAspectAdapterTests.this.value1Changed(e, REMOVE);
-			}
-			public void collectionCleared(CollectionClearEvent e) {
-				CollectionAspectAdapterTests.this.value1Changed(e, CLEAR);
-			}
-			public void collectionChanged(CollectionChangeEvent e) {
-				CollectionAspectAdapterTests.this.value1Changed(e, CHANGE);
-			}
-		};
-	}
-
-	void value1Changed(CollectionEvent e, String eventType) {
-		this.event1 = e;
-		this.event1Type = eventType;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSubjectHolder() {
-		assertEquals(this.subject1Names(), CollectionTools.bag(this.aa1.iterator()));
-		assertNull(this.event1);
-
-		this.subjectHolder1.setValue(this.subject2);
-		assertNotNull(this.event1);
-		assertEquals(this.event1Type, CHANGE);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(CollectionValueModel.VALUES, this.event1.getCollectionName());
-		assertEquals(this.subject2Names(), CollectionTools.bag(this.aa1.iterator()));
-		
-		this.event1 = null;
-		this.event1Type = null;
-		this.subjectHolder1.setValue(null);
-		assertNotNull(this.event1);
-		assertEquals(this.event1Type, CHANGE);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(CollectionValueModel.VALUES, this.event1.getCollectionName());
-		assertFalse(this.aa1.iterator().hasNext());
-		
-		this.event1 = null;
-		this.event1Type = null;
-		this.subjectHolder1.setValue(this.subject1);
-		assertNotNull(this.event1);
-		assertEquals(this.event1Type, CHANGE);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(CollectionValueModel.VALUES, this.event1.getCollectionName());
-		assertEquals(this.subject1Names(), CollectionTools.bag(this.aa1.iterator()));
-	}
-
-	public void testAdd() {
-		assertEquals(this.subject1Names(), CollectionTools.bag(this.aa1.iterator()));
-		assertNull(this.event1);
-
-		this.subject1.addName("jam");
-		assertNotNull(this.event1);
-		assertEquals(this.event1Type, ADD);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(CollectionValueModel.VALUES, this.event1.getCollectionName());
-		assertEquals("jam", ((CollectionAddEvent) this.event1).getItems().iterator().next());
-		Collection<String> namesPlus = this.subject1Names();
-		namesPlus.add("jam");
-		assertEquals(namesPlus, CollectionTools.bag(this.aa1.iterator()));
-
-		this.event1 = null;
-		this.event1Type = null;
-		this.aa1.addAll(Collections.singleton("jaz"));
-		assertNotNull(this.event1);
-		assertEquals(this.event1Type, ADD);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(CollectionValueModel.VALUES, this.event1.getCollectionName());
-		assertEquals("jaz", ((CollectionAddEvent) this.event1).getItems().iterator().next());
-		namesPlus.add("jaz");
-		assertEquals(namesPlus, CollectionTools.bag(this.aa1.iterator()));
-	}
-
-	public void testRemove() {
-		assertEquals(this.subject1Names(), CollectionTools.bag(this.aa1.iterator()));
-		assertNull(this.event1);
-
-		this.subject1.removeName("foo");
-		assertNotNull(this.event1);
-		assertEquals(this.event1Type, REMOVE);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(CollectionValueModel.VALUES, this.event1.getCollectionName());
-		assertEquals("foo", ((CollectionRemoveEvent) this.event1).getItems().iterator().next());
-		Collection<String> namesMinus = this.subject1Names();
-		namesMinus.remove("foo");
-		assertEquals(namesMinus, CollectionTools.bag(this.aa1.iterator()));
-
-		this.event1 = null;
-		this.event1Type = null;
-		this.aa1.removeAll(Collections.singleton("bar"));
-		assertNotNull(this.event1);
-		assertEquals(this.event1Type, REMOVE);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(CollectionValueModel.VALUES, this.event1.getCollectionName());
-		assertEquals("bar", ((CollectionRemoveEvent) this.event1).getItems().iterator().next());
-		namesMinus.remove("bar");
-		assertEquals(namesMinus, CollectionTools.bag(this.aa1.iterator()));
-	}
-
-	public void testCollectionChange() {
-		assertEquals(this.subject1Names(), CollectionTools.bag(this.aa1.iterator()));
-		assertNull(this.event1);
-
-		this.subject1.addTwoNames("jam", "jaz");
-		assertNotNull(this.event1);
-		assertEquals(this.event1Type, CHANGE);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(CollectionValueModel.VALUES, this.event1.getCollectionName());
-		Collection<String> namesPlus2 = this.subject1Names();
-		namesPlus2.add("jam");
-		namesPlus2.add("jaz");
-		assertEquals(namesPlus2, CollectionTools.bag(this.aa1.iterator()));
-	}
-
-	public void testIterator() {
-		assertEquals(this.subject1Names(), CollectionTools.bag(this.subject1.names()));
-		assertEquals(this.subject1Names(), CollectionTools.bag(this.aa1.iterator()));
-	}
-
-	public void testSize() {
-		assertEquals(this.subject1Names().size(), CollectionTools.size(this.subject1.names()));
-		assertEquals(this.subject1Names().size(), CollectionTools.size(this.aa1.iterator()));
-	}
-
-	public void testHasListeners() {
-		assertTrue(this.aa1.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		assertTrue(this.subject1.hasAnyCollectionChangeListeners(TestSubject.NAMES_COLLECTION));
-		this.aa1.removeCollectionChangeListener(CollectionValueModel.VALUES, this.listener1);
-		assertFalse(this.subject1.hasAnyCollectionChangeListeners(TestSubject.NAMES_COLLECTION));
-		assertFalse(this.aa1.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-
-		ChangeListener listener2 = new ChangeAdapter();
-		this.aa1.addChangeListener(listener2);
-		assertTrue(this.aa1.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		assertTrue(this.subject1.hasAnyCollectionChangeListeners(TestSubject.NAMES_COLLECTION));
-		this.aa1.removeChangeListener(listener2);
-		assertFalse(this.subject1.hasAnyCollectionChangeListeners(TestSubject.NAMES_COLLECTION));
-		assertFalse(this.aa1.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-	}
-
-
-	// ********** inner class **********
-	
-	private class TestSubject extends AbstractModel {
-		private Collection<String> names;
-		public static final String NAMES_COLLECTION = "names";
-		private Collection<String> descriptions;
-		public static final String DESCRIPTIONS_COLLECTION = "descriptions";
-	
-		public TestSubject() {
-			this.names = new HashBag<String>();
-			this.descriptions = new HashBag<String>();
-		}
-		public Iterator<String> names() {
-			return new ReadOnlyIterator<String>(this.names);
-		}
-		public void addName(String name) {
-			if (this.names.add(name)) {
-				this.fireItemAdded(NAMES_COLLECTION, name);
-			}
-		}
-		public void addNames(Iterator<String> newNames) {
-			while (newNames.hasNext()) {
-				this.addName(newNames.next());
-			}
-		}
-		public void addNames(Collection<String> newNames) {
-			this.addNames(newNames.iterator());
-		}
-		public void addTwoNames(String name1, String name2) {
-			if (this.names.add(name1) | this.names.add(name2)) {
-				this.fireCollectionChanged(NAMES_COLLECTION, this.names);
-			}
-		}
-		public void removeName(String name) {
-			if (this.names.remove(name)) {
-				this.fireItemRemoved(NAMES_COLLECTION, name);
-			}
-		}
-		public Iterator<String> descriptions() {
-			return new ReadOnlyIterator<String>(this.descriptions);
-		}
-		public void addDescription(String description) {
-			if (this.descriptions.add(description)) {
-				this.fireItemAdded(DESCRIPTIONS_COLLECTION, description);
-			}
-		}
-		public void addDescriptions(Iterator<String> newDescriptions) {
-			while (newDescriptions.hasNext()) {
-				this.addDescription(newDescriptions.next());
-			}
-		}
-		public void addDescriptions(Collection<String> newDescriptions) {
-			this.addDescriptions(newDescriptions.iterator());
-		}
-		public void removeDescription(String description) {
-			if (this.descriptions.remove(description)) {
-				this.fireItemRemoved(DESCRIPTIONS_COLLECTION, description);
-			}
-		}
-	}
-
-	// this is not a typical aspect adapter - the value is determined by the aspect name
-	private class LocalCollectionAspectAdapter extends CollectionAspectAdapter<TestSubject, String> {
-
-		LocalCollectionAspectAdapter(PropertyValueModel<TestSubject> subjectHolder) {
-			super(subjectHolder, TestSubject.NAMES_COLLECTION);
-		}
-
-		@Override
-		protected Iterator<String> iterator_() {
-			if (this.collectionNames[0] == TestSubject.NAMES_COLLECTION) {
-				return this.subject.names();
-			}
-			if (this.collectionNames[0] == TestSubject.DESCRIPTIONS_COLLECTION) {
-				return this.subject.descriptions();
-			}
-			throw new IllegalStateException("invalid aspect name: " + this.collectionNames[0]);
-		}
-
-		public void add(String item) {
-			if (this.collectionNames[0] == TestSubject.NAMES_COLLECTION) {
-				this.subject.addName(item);
-			} else if (this.collectionNames[0] == TestSubject.DESCRIPTIONS_COLLECTION) {
-				this.subject.addDescription(item);
-			} else {
-				throw new IllegalStateException("invalid aspect name: " + this.collectionNames[0]);
-			}
-		}
-
-		public void addAll(Collection<String> items) {
-			for (Iterator<String> stream = items.iterator(); stream.hasNext(); ) {
-				this.add(stream.next());
-			}
-		}
-
-		public void remove(Object item) {
-			if (this.collectionNames[0] == TestSubject.NAMES_COLLECTION) {
-				this.subject.removeName((String) item);
-			} else if (this.collectionNames[0] == TestSubject.DESCRIPTIONS_COLLECTION) {
-				this.subject.removeDescription((String) item);
-			} else {
-				throw new IllegalStateException("invalid aspect name: " + this.collectionNames[0]);
-			}
-		}
-
-		public void removeAll(Collection<String> items) {
-			for (Iterator<String> stream = items.iterator(); stream.hasNext(); ) {
-				this.remove(stream.next());
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CollectionListValueModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CollectionListValueModelAdapterTests.java
deleted file mode 100644
index 6835700..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CollectionListValueModelAdapterTests.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.Collection;
-import java.util.List;
-
-import javax.swing.JList;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.CollectionListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ListModelAdapter;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class CollectionListValueModelAdapterTests extends TestCase {
-	private ListValueModel<String> adapter;
-	private SimpleCollectionValueModel<String> wrappedCollectionHolder;
-	private Collection<String> wrappedCollection;
-
-	public CollectionListValueModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.wrappedCollection = new HashBag<String>();
-		this.wrappedCollectionHolder = new SimpleCollectionValueModel<String>(this.wrappedCollection);
-		this.adapter = new CollectionListValueModelAdapter<String>(this.wrappedCollectionHolder);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIterator() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListChangeListener() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {/* OK */}
-		});
-		this.wrappedCollectionHolder.add("foo");
-		this.wrappedCollectionHolder.add("bar");
-		this.wrappedCollectionHolder.add("baz");
-		Collection<String> adapterCollection = this.adapterCollection();
-		assertEquals(3, adapterCollection.size());
-		assertEquals(this.wrappedCollection, adapterCollection);
-	}
-
-	private Collection<String> adapterCollection() {
-		return CollectionTools.collection(this.adapter.iterator());
-	}
-
-	public void testStaleValue() {
-		ListChangeListener listener = new TestListChangeListener() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {/* OK */}
-		};
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		this.wrappedCollectionHolder.add("foo");
-		this.wrappedCollectionHolder.add("bar");
-		this.wrappedCollectionHolder.add("baz");
-		Collection<String> adapterCollection = this.adapterCollection();
-		assertEquals(3, adapterCollection.size());
-		assertEquals(this.wrappedCollection, adapterCollection);
-
-		this.adapter.removeListChangeListener(ListValueModel.LIST_VALUES, listener);
-		adapterCollection = this.adapterCollection();
-		assertEquals(0, adapterCollection.size());
-		assertEquals(new HashBag<String>(), adapterCollection);
-
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		adapterCollection = this.adapterCollection();
-		assertEquals(3, adapterCollection.size());
-		assertEquals(this.wrappedCollection, adapterCollection);
-	}
-
-	public void testAdd() {
-		List<String> synchList = new CoordinatedList<String>(this.adapter);
-		Bag<String> synchCollection = new CoordinatedBag<String>(this.wrappedCollectionHolder);
-		this.wrappedCollectionHolder.add("foo");
-		assertTrue(this.wrappedCollection.contains("foo"));
-		this.wrappedCollectionHolder.add("bar");
-		this.wrappedCollectionHolder.add("baz");
-		this.wrappedCollectionHolder.add("joo");
-		this.wrappedCollectionHolder.add("jar");
-		this.wrappedCollectionHolder.add("jaz");
-		assertEquals(6, this.wrappedCollection.size());
-
-		Collection<String> adapterCollection = this.adapterCollection();
-		assertEquals(this.wrappedCollection, adapterCollection);
-		assertEquals(this.wrappedCollection, CollectionTools.collection(synchList.iterator()));
-		assertEquals(this.wrappedCollection, synchCollection);
-	}
-
-	public void testRemove() {
-		List<String> synchList = new CoordinatedList<String>(this.adapter);
-		Bag<String> synchCollection = new CoordinatedBag<String>(this.wrappedCollectionHolder);
-		this.wrappedCollectionHolder.add("foo");
-		this.wrappedCollectionHolder.add("bar");
-		this.wrappedCollectionHolder.add("baz");
-		this.wrappedCollectionHolder.add("joo");
-		this.wrappedCollectionHolder.add("jar");
-		this.wrappedCollectionHolder.add("jaz");
-		assertTrue(this.wrappedCollection.contains("jaz"));
-		this.wrappedCollectionHolder.remove("jaz");
-		assertFalse(this.wrappedCollection.contains("jaz"));
-		this.wrappedCollectionHolder.remove("foo");
-		assertFalse(this.wrappedCollection.contains("foo"));
-		assertEquals(4, this.wrappedCollection.size());
-
-		Collection<String> adapterCollection = this.adapterCollection();
-		assertEquals(this.wrappedCollection, adapterCollection);
-		assertEquals(this.wrappedCollection, CollectionTools.collection(synchList.iterator()));
-		assertEquals(this.wrappedCollection, synchCollection);
-	}
-
-	public void testListSynch() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListChangeListener() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {/* OK */}
-			@Override
-			public void itemsRemoved(ListRemoveEvent e) {/* OK */}
-		});
-		this.wrappedCollectionHolder.add("foo");
-		this.wrappedCollectionHolder.add("bar");
-		this.wrappedCollectionHolder.add("baz");
-		this.wrappedCollectionHolder.add("joo");
-		this.wrappedCollectionHolder.add("jar");
-		this.wrappedCollectionHolder.add("jaz");
-		this.wrappedCollectionHolder.remove("jaz");
-		assertFalse(this.wrappedCollection.contains("jaz"));
-		this.wrappedCollectionHolder.remove("foo");
-		assertFalse(this.wrappedCollection.contains("foo"));
-		assertEquals(4, this.wrappedCollection.size());
-
-		Collection<String> adapterCollection = this.adapterCollection();
-		assertEquals(this.wrappedCollection, adapterCollection);
-	}
-
-	public void testHasListeners() {
-		assertFalse(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		CoordinatedList<String> synchList = new CoordinatedList<String>(this.adapter);
-		assertTrue(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		this.adapter.removeListChangeListener(ListValueModel.LIST_VALUES, synchList);
-		assertFalse(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		ChangeListener cl = new ChangeAdapter();
-		this.adapter.addChangeListener(cl);
-		assertTrue(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		this.adapter.removeChangeListener(cl);
-		assertFalse(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	public void testCollectionChangedToEmpty() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListChangeListener() {
-			@Override
-			public void listCleared(ListClearEvent e) {/* OK */}
-			@Override
-			public void itemsAdded(ListAddEvent e) {/* OK */}
-		});
-		this.wrappedCollectionHolder.add("foo");
-		this.wrappedCollectionHolder.add("bar");
-		this.wrappedCollectionHolder.add("baz");
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		this.wrappedCollectionHolder.setValues(new HashBag<String>());
-		assertEquals(0, jList.getModel().getSize());
-	}
-	
-	public void testCollectionChangedFromEmpty() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListChangeListener() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {/* OK */}
-			@Override
-			public void itemsRemoved(ListRemoveEvent e) {/* OK */}
-		});
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		
-		HashBag<String> bag = new HashBag<String>();
-		bag.add("foo");
-		bag.add("bar");
-		this.wrappedCollectionHolder.setValues(bag);
-		assertEquals(2, jList.getModel().getSize());
-	}
-	
-	public void testCollectionChangedFromEmptyToEmpty() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListChangeListener() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {/* OK */}
-			@Override
-			public void itemsRemoved(ListRemoveEvent e) {/* OK */}
-		});
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		
-		HashBag<String> bag = new HashBag<String>();
-		this.wrappedCollectionHolder.setValues(bag);
-		assertEquals(0, jList.getModel().getSize());
-	}
-
-
-	class TestListChangeListener implements ListChangeListener {
-		public void itemsAdded(ListAddEvent e) {
-			fail("unexpected event");
-		}
-		public void itemsRemoved(ListRemoveEvent e) {
-			fail("unexpected event");
-		}
-		public void itemsReplaced(ListReplaceEvent e) {
-			fail("unexpected event");
-		}
-		public void itemsMoved(ListMoveEvent e) {
-			fail("unexpected event");
-		}
-		public void listCleared(ListClearEvent e) {
-			fail("unexpected event");
-		}
-		public void listChanged(ListChangeEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CollectionPropertyValueModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CollectionPropertyValueModelAdapterTests.java
deleted file mode 100644
index d89dac7..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CollectionPropertyValueModelAdapterTests.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.Collection;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.CollectionPropertyValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class CollectionPropertyValueModelAdapterTests extends TestCase {
-	private WritablePropertyValueModel<Boolean> adapter;
-	private SimpleCollectionValueModel<String> wrappedCollectionHolder;
-	PropertyChangeEvent event;
-
-	public CollectionPropertyValueModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.wrappedCollectionHolder = new SimpleCollectionValueModel<String>();
-		this.adapter = new LocalAdapter(this.wrappedCollectionHolder, "666");
-		this.event = null;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	private boolean booleanValue() {
-		return this.adapter.getValue().booleanValue();
-	}
-
-	private Collection<String> wrappedCollection() {
-		return CollectionTools.collection(this.wrappedCollectionHolder.iterator());
-	}
-
-	public void testValue() {
-		this.adapter.addPropertyChangeListener(PropertyValueModel.VALUE, new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent e) {/* OK */}
-		});
-		assertFalse(this.booleanValue());
-		assertFalse(this.wrappedCollection().contains("666"));
-
-		this.wrappedCollectionHolder.add("111");
-		assertFalse(this.booleanValue());
-
-		this.wrappedCollectionHolder.add("222");
-		assertFalse(this.booleanValue());
-
-		this.wrappedCollectionHolder.add("666");
-		assertTrue(this.booleanValue());
-		assertTrue(this.wrappedCollection().contains("666"));
-
-		this.wrappedCollectionHolder.remove("666");
-		assertFalse(this.booleanValue());
-		assertFalse(this.wrappedCollection().contains("666"));
-
-		this.wrappedCollectionHolder.add("666");
-		assertTrue(this.booleanValue());
-		assertTrue(this.wrappedCollection().contains("666"));
-
-		this.wrappedCollectionHolder.clear();
-		assertFalse(this.booleanValue());
-		assertFalse(this.wrappedCollection().contains("666"));
-	}
-
-	public void testSetValue() {
-		this.adapter.addPropertyChangeListener(PropertyValueModel.VALUE, new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent e) {/* OK */}
-		});
-		assertFalse(this.booleanValue());
-		assertFalse(this.wrappedCollection().contains("666"));
-
-		this.adapter.setValue(Boolean.TRUE);
-		assertTrue(this.booleanValue());
-		assertTrue(this.wrappedCollection().contains("666"));
-
-		this.adapter.setValue(Boolean.FALSE);
-		assertFalse(this.booleanValue());
-		assertFalse(this.wrappedCollection().contains("666"));
-	}
-
-	public void testEventFiring() {
-		this.adapter.addPropertyChangeListener(PropertyValueModel.VALUE, new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent e) {
-				CollectionPropertyValueModelAdapterTests.this.event = e;
-			}
-		});
-		assertNull(this.event);
-
-		this.wrappedCollectionHolder.add("111");
-		assertNull(this.event);
-
-		this.wrappedCollectionHolder.add("222");
-		assertNull(this.event);
-
-		this.wrappedCollectionHolder.add("666");
-		this.verifyEvent(false, true);
-
-		this.wrappedCollectionHolder.remove("666");
-		this.verifyEvent(true, false);
-
-		this.wrappedCollectionHolder.add("666");
-		this.verifyEvent(false, true);
-
-		this.wrappedCollectionHolder.clear();
-		this.verifyEvent(true, false);
-	}
-
-	private void verifyEvent(boolean oldValue, boolean newValue) {
-		assertEquals(this.adapter, this.event.getSource());
-		assertEquals(Boolean.valueOf(oldValue), this.event.getOldValue());
-		assertEquals(Boolean.valueOf(newValue), this.event.getNewValue());
-		this.event = null;
-	}
-
-	public void testStaleValue() {
-		PropertyChangeListener listener = new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent e) {/* OK */}
-		};
-		this.adapter.addPropertyChangeListener(PropertyValueModel.VALUE, listener);
-		this.wrappedCollectionHolder.add("666");
-		assertTrue(this.booleanValue());
-		assertTrue(this.wrappedCollection().contains("666"));
-
-		this.adapter.removePropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertFalse(this.booleanValue());
-		assertTrue(this.wrappedCollection().contains("666"));
-
-		this.adapter.addPropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(this.booleanValue());
-		assertTrue(this.wrappedCollection().contains("666"));
-	}
-
-	public void testHasListeners() {
-		assertFalse(((AbstractModel) this.adapter).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertFalse(((AbstractModel) this.wrappedCollectionHolder).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-
-		ChangeListener listener = new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {/* OK */}
-		};
-		this.adapter.addPropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(((AbstractModel) this.adapter).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.wrappedCollectionHolder).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-
-		this.adapter.removePropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertFalse(((AbstractModel) this.adapter).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertFalse(((AbstractModel) this.wrappedCollectionHolder).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-
-		this.adapter.addChangeListener(listener);
-		assertTrue(((AbstractModel) this.adapter).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(((AbstractModel) this.wrappedCollectionHolder).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-
-		this.adapter.removeChangeListener(listener);
-		assertFalse(((AbstractModel) this.adapter).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertFalse(((AbstractModel) this.wrappedCollectionHolder).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-	}
-
-
-	// ********** member class **********
-
-	/**
-	 * the value is true if the wrapped collection contains the specified item,
-	 * otherwise the value is false
-	 */
-	static class LocalAdapter
-		extends CollectionPropertyValueModelAdapter<Boolean>
-		implements WritablePropertyValueModel<Boolean>
-	{
-		private String item;
-
-		LocalAdapter(CollectionValueModel<String> collectionHolder, String item) {
-			super(collectionHolder);
-			this.item = item;
-		}
-
-		// ********** CollectionPropertyValueModelAdapter implementation **********
-		/**
-		 * always return a Boolean
-		 */
-		@Override
-		public Boolean getValue() {
-			Boolean result = super.getValue();
-			return (result == null) ? Boolean.FALSE : result;
-		}
-		@SuppressWarnings("unchecked")
-		public void setValue(Boolean value) {
-			if (this.booleanValue()) {
-				if ( ! this.booleanValueOf(value)) {
-					// the value is changing from true to false
-					((SimpleCollectionValueModel<String>) this.collectionModel).remove(this.item);
-				}
-			} else {
-				if (this.booleanValueOf(value)) {
-					// the value is changing from false to true
-					((SimpleCollectionValueModel<String>) this.collectionModel).add(this.item);
-				}
-			}
-		}
-		@Override
-		protected Boolean buildValue() {
-			return Boolean.valueOf(CollectionTools.contains(this.collectionModel.iterator(), this.item));
-		}
-
-		// ********** internal methods **********
-		private boolean booleanValue() {
-			return this.booleanValueOf(this.value);
-		}
-		private boolean booleanValueOf(Object b) {
-			return (b == null) ? false : ((Boolean) b).booleanValue();
-		}
-
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CompositeBooleanPropertyValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CompositeBooleanPropertyValueModelTests.java
deleted file mode 100644
index 6600ff6..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CompositeBooleanPropertyValueModelTests.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.model.value.CompositeBooleanPropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-public class CompositeBooleanPropertyValueModelTests extends TestCase {
-	private SimplePropertyValueModel<Boolean> pvm1;
-	private WritablePropertyValueModel<Boolean> pvm2;
-	private WritablePropertyValueModel<Boolean> pvm3;
-	private WritablePropertyValueModel<Boolean> pvm4;
-	private Collection<WritablePropertyValueModel<Boolean>> collection;
-	private SimpleCollectionValueModel<WritablePropertyValueModel<Boolean>> cvm;
-	private PropertyValueModel<Boolean> compositePVM;
-	PropertyChangeEvent event;
-
-
-	public CompositeBooleanPropertyValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.pvm1 = new SimplePropertyValueModel<Boolean>(Boolean.TRUE);
-		this.pvm2 = new SimplePropertyValueModel<Boolean>(Boolean.TRUE);
-		this.pvm3 = new SimplePropertyValueModel<Boolean>(Boolean.TRUE);
-		this.pvm4 = new SimplePropertyValueModel<Boolean>(Boolean.TRUE);
-		this.collection = new ArrayList<WritablePropertyValueModel<Boolean>>();
-		this.collection.add(this.pvm1);
-		this.collection.add(this.pvm2);
-		this.collection.add(this.pvm3);
-		this.collection.add(this.pvm4);
-		this.cvm = new SimpleCollectionValueModel<WritablePropertyValueModel<Boolean>>(this.collection);
-		
-		this.compositePVM = this.buildCompositePVM(cvm);
-	}
-
-	private PropertyValueModel<Boolean> buildCompositePVM(CollectionValueModel<WritablePropertyValueModel<Boolean>> pvms) {
-		return CompositeBooleanPropertyValueModel.and(pvms);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testGetValue() {
-		assertNull(this.compositePVM.getValue());
-		ChangeListener listener = this.buildListener();
-		this.compositePVM.addChangeListener(listener);
-		assertTrue(this.compositePVM.getValue().booleanValue());
-	}
-
-	public void testValueAndListeners1() {
-		assertNull(this.compositePVM.getValue());
-		ChangeListener listener = this.buildListener();
-		this.compositePVM.addChangeListener(listener);
-		assertTrue(this.compositePVM.getValue().booleanValue());
-		this.compositePVM.removeChangeListener(listener);
-		assertNull(this.compositePVM.getValue());
-	}	
-
-	public void testValueAndListeners2() {
-		assertNull(this.compositePVM.getValue());
-		ChangeListener listener = this.buildListener();
-		this.compositePVM.addPropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(this.compositePVM.getValue().booleanValue());
-		this.compositePVM.removePropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertNull(this.compositePVM.getValue());
-	}
-
-	public void testPropertyChange1() {
-		this.compositePVM.addChangeListener(this.buildListener());
-		this.verifyPropertyChange();
-	}
-
-	public void testPropertyChange2() {
-		this.compositePVM.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildListener());
-		this.verifyPropertyChange();
-	}
-
-	private void verifyPropertyChange() {
-		this.event = null;
-		this.pvm1.setValue(Boolean.FALSE);
-		this.verifyEvent(true, false);
-
-		this.event = null;
-		this.pvm2.setValue(Boolean.FALSE);
-		assertNull(this.event);  // no change
-
-		this.event = null;
-		this.pvm2.setValue(Boolean.TRUE);
-		assertNull(this.event);  // no change
-
-		this.event = null;
-		this.pvm1.setValue(Boolean.TRUE);
-		this.verifyEvent(false, true);
-
-		this.event = null;
-		this.pvm4.setValue(Boolean.FALSE);
-		this.verifyEvent(true, false);
-	}
-
-	public void testCollectionChange1() {
-		this.compositePVM.addChangeListener(this.buildListener());
-		this.verifyCollectionChange();
-	}
-
-	public void testCollectionChange2() {
-		this.compositePVM.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildListener());
-		this.verifyCollectionChange();
-	}
-
-	private void verifyCollectionChange() {
-		this.event = null;
-		WritablePropertyValueModel<Boolean> pvm = new SimplePropertyValueModel<Boolean>(Boolean.FALSE);
-		this.cvm.add(pvm);
-		this.verifyEvent(true, false);
-
-		this.event = null;
-		this.cvm.remove(pvm);
-		this.verifyEvent(false, true);
-
-		this.event = null;
-		this.cvm.clear();
-		this.verifyEvent(Boolean.TRUE, null);
-
-		Collection<WritablePropertyValueModel<Boolean>> c2 = new ArrayList<WritablePropertyValueModel<Boolean>>();
-		c2.add(this.pvm1);
-		c2.add(this.pvm2);
-		this.event = null;
-		this.cvm.setValues(c2);
-		this.verifyEvent(null, Boolean.TRUE);
-	}
-
-	public void testLazyListening1() {
-		assertFalse(this.pvm1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		ChangeListener listener = this.buildListener();
-
-		this.compositePVM.addChangeListener(listener);
-		assertTrue(this.pvm1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		this.compositePVM.removeChangeListener(listener);
-		assertFalse(this.pvm1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-	}	
-
-	public void testLazyListening2() {
-		assertFalse(this.pvm1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		ChangeListener listener = this.buildListener();
-
-		this.compositePVM.addPropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(this.pvm1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		this.compositePVM.removePropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertFalse(this.pvm1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-	}	
-
-	private ChangeListener buildListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				CompositeBooleanPropertyValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	private void verifyEvent(boolean oldValue, boolean newValue) {
-		this.verifyEvent(Boolean.valueOf(oldValue), Boolean.valueOf(newValue));
-	}
-
-	private void verifyEvent(Boolean oldValue, Boolean newValue) {
-		assertEquals(this.compositePVM, this.event.getSource());
-		assertEquals(PropertyValueModel.VALUE, this.event.getPropertyName());
-		assertEquals(oldValue, this.event.getOldValue());
-		assertEquals(newValue, this.event.getNewValue());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CompositeCollectionValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CompositeCollectionValueModelTests.java
deleted file mode 100644
index 30ab72f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CompositeCollectionValueModelTests.java
+++ /dev/null
@@ -1,415 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.CollectionAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.CompositeCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class CompositeCollectionValueModelTests extends TestCase {
-	private Neighborhood neighborhood;
-	private WritablePropertyValueModel<Neighborhood> neighborhoodHolder;
-
-	public CompositeCollectionValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.neighborhood = new Neighborhood("Hanna-Barbera");
-		this.neighborhoodHolder = new SimplePropertyValueModel<Neighborhood>(this.neighborhood);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSynch1() {
-		this.verifySynch(this.buildAllMembersComposite(this.neighborhoodHolder));
-	}
-
-	public void testSynch2() {
-		this.verifySynch(this.buildAllMembersComposite2(this.neighborhoodHolder));
-	}
-
-	private void verifySynch(CollectionValueModel<Member> compositeCVM) {
-		assertEquals(0, CollectionTools.size(compositeCVM.iterator()));
-		Bag<Family> familiesSynch = new CoordinatedBag<Family>(this.buildFamiliesAspectAdapter(this.neighborhoodHolder));
-		Bag<Member> membersSynch = new CoordinatedBag<Member>(compositeCVM);
-		this.populateNeighborhood(this.neighborhood);
-
-		Family jetsons = this.neighborhood.familyNamed("Jetson");
-
-		assertEquals(3, familiesSynch.size());
-		assertEquals(12, CollectionTools.size(this.neighborhood.allMembers()));
-		assertEquals(12, membersSynch.size());
-		assertEquals(CollectionTools.bag(this.neighborhood.allMembers()), membersSynch);
-		assertEquals(membersSynch, CollectionTools.bag(compositeCVM.iterator()));
-
-		jetsons.removeMember(jetsons.memberNamed("Astro"));
-		assertEquals(3, familiesSynch.size());
-		assertEquals(11, CollectionTools.size(this.neighborhood.allMembers()));
-		assertEquals(11, membersSynch.size());
-		assertEquals(CollectionTools.bag(this.neighborhood.allMembers()), membersSynch);
-		assertEquals(membersSynch, CollectionTools.bag(compositeCVM.iterator()));
-
-		jetsons.removeMember(jetsons.memberNamed("Judy"));
-		assertEquals(3, familiesSynch.size());
-		assertEquals(10, CollectionTools.size(this.neighborhood.allMembers()));
-		assertEquals(10, membersSynch.size());
-		assertEquals(CollectionTools.bag(this.neighborhood.allMembers()), membersSynch);
-		assertEquals(membersSynch, CollectionTools.bag(compositeCVM.iterator()));
-
-		jetsons.addMember("Fido");
-		assertEquals(3, familiesSynch.size());
-		assertEquals(11, CollectionTools.size(this.neighborhood.allMembers()));
-		assertEquals(11, membersSynch.size());
-		assertEquals(CollectionTools.bag(this.neighborhood.allMembers()), membersSynch);
-		assertEquals(membersSynch, CollectionTools.bag(compositeCVM.iterator()));
-
-		this.neighborhood.removeFamily(jetsons);
-		assertEquals(2, familiesSynch.size());
-		assertEquals(7, CollectionTools.size(this.neighborhood.allMembers()));
-		assertEquals(7, membersSynch.size());
-		assertEquals(CollectionTools.bag(this.neighborhood.allMembers()), membersSynch);
-		assertEquals(membersSynch, CollectionTools.bag(compositeCVM.iterator()));
-
-		Family bears = this.neighborhood.addFamily("Bear");
-			bears.addMember("Yogi");
-		assertEquals(3, familiesSynch.size());
-		assertEquals(8, CollectionTools.size(this.neighborhood.allMembers()));
-		assertEquals(8, membersSynch.size());
-		assertEquals(CollectionTools.bag(this.neighborhood.allMembers()), membersSynch);
-		assertEquals(membersSynch, CollectionTools.bag(compositeCVM.iterator()));
-
-		bears.addMember("Boo-Boo");
-		assertEquals(3, familiesSynch.size());
-		assertEquals(9, CollectionTools.size(this.neighborhood.allMembers()));
-		assertEquals(9, membersSynch.size());
-		assertEquals(CollectionTools.bag(this.neighborhood.allMembers()), membersSynch);
-		assertEquals(membersSynch, CollectionTools.bag(compositeCVM.iterator()));
-
-		Neighborhood n2 = new Neighborhood("Hanna-Barbera 2");
-		this.neighborhoodHolder.setValue(n2);
-		this.populateNeighborhood(n2);
-		assertEquals(3, familiesSynch.size());
-		assertEquals(12, CollectionTools.size(n2.allMembers()));
-		assertEquals(12, membersSynch.size());
-		assertEquals(CollectionTools.bag(n2.allMembers()), membersSynch);
-		assertEquals(membersSynch, CollectionTools.bag(compositeCVM.iterator()));
-	}
-
-	public void testNoTransformer() {
-		SimpleCollectionValueModel<String> subCVM1 = new SimpleCollectionValueModel<String>();
-		SimpleCollectionValueModel<String> subCVM2 = new SimpleCollectionValueModel<String>();
-		Collection<CollectionValueModel<String>> collection = new ArrayList<CollectionValueModel<String>>();
-		collection.add(subCVM1);
-		collection.add(subCVM2);
-		Bag<String> synchBag = new CoordinatedBag<String>(new CompositeCollectionValueModel<CollectionValueModel<String>, String>(collection));
-
-		assertEquals(0, synchBag.size());
-
-		subCVM1.add("foo");
-		subCVM1.add("bar");
-		subCVM1.add("baz");
-		assertEquals(3, synchBag.size());
-		assertTrue(synchBag.contains("foo"));
-
-		subCVM2.add("joo");
-		subCVM2.add("jar");
-		subCVM2.add("jaz");
-		assertEquals(6, synchBag.size());
-		assertTrue(synchBag.contains("foo"));
-		assertTrue(synchBag.contains("jaz"));
-
-		subCVM1.remove("baz");
-		assertEquals(5, synchBag.size());
-		assertFalse(synchBag.contains("baz"));
-	}
-
-	public void testDuplicateItem() {
-		Bag<Member> synchBag = new CoordinatedBag<Member>(this.buildAllMembersComposite(this.neighborhoodHolder));
-		this.populateNeighborhood(this.neighborhood);
-		boolean exCaught = false;
-		try {
-			this.neighborhood.addFamily(this.neighborhood.familyNamed("Jetson"));
-		} catch (IllegalStateException ex) {
-			if (ex.getMessage().indexOf("duplicate component") != -1) {
-				exCaught = true;
-			}
-		}
-		assertTrue(exCaught);
-		assertEquals(12, synchBag.size());
-	}
-
-	public void testHasListeners() {
-		CompositeCollectionValueModel<Family, Member> compositeCVM = this.buildAllMembersComposite(this.neighborhoodHolder);
-		CoordinatedBag<Member> synchBag = new CoordinatedBag<Member>(compositeCVM);
-		this.populateNeighborhood(this.neighborhood);
-		Family jetsons = this.neighborhood.familyNamed("Jetson");
-
-		assertTrue(compositeCVM.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		assertTrue(jetsons.hasAnyCollectionChangeListeners(Family.MEMBERS_COLLECTION));
-
-		compositeCVM.removeCollectionChangeListener(CollectionValueModel.VALUES, synchBag);
-		assertFalse(compositeCVM.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		assertFalse(jetsons.hasAnyCollectionChangeListeners(Family.MEMBERS_COLLECTION));
-
-		compositeCVM.addCollectionChangeListener(CollectionValueModel.VALUES, synchBag);
-		assertTrue(compositeCVM.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		assertTrue(jetsons.hasAnyCollectionChangeListeners(Family.MEMBERS_COLLECTION));
-	}
-
-	private void populateNeighborhood(Neighborhood n) {
-		Family family1 = n.addFamily("Flintstone");
-			family1.addMember("Fred");
-			family1.addMember("Wilma");
-			family1.addMember("Pebbles");
-			family1.addMember("Dino");
-		Family family2 = n.addFamily("Rubble");
-			family2.addMember("Barney");
-			family2.addMember("Betty");
-			family2.addMember("Bamm-Bamm");
-		Family family3 = n.addFamily("Jetson");
-			family3.addMember("George");
-			family3.addMember("Jane");
-			family3.addMember("Judy");
-			family3.addMember("Elroy");
-			family3.addMember("Astro");
-	}
-
-	private CollectionValueModel<Family> buildFamiliesAspectAdapter(PropertyValueModel<Neighborhood> communeHolder) {
-		return new CollectionAspectAdapter<Neighborhood, Family>(communeHolder, Neighborhood.FAMILIES_COLLECTION) {
-			@Override
-			protected Iterator<Family> iterator_() {
-				return this.subject.families();
-			}
-		};
-	}
-
-	CollectionValueModel<Member> buildMembersAdapter(Family family) {
-		return new CollectionAspectAdapter<Family, Member>(Family.MEMBERS_COLLECTION, family) {
-			@Override
-			protected Iterator<Member> iterator_() {
-				return this.subject.members();
-			}
-		};
-	}
-
-	private CompositeCollectionValueModel<Family, Member> buildAllMembersComposite(PropertyValueModel<Neighborhood> communeHolder) {
-		// override #transform(Object)
-		return new CompositeCollectionValueModel<Family, Member>(this.buildFamiliesAspectAdapter(communeHolder)) {
-			@Override
-			protected CollectionValueModel<Member> transform(Family family) {
-				return CompositeCollectionValueModelTests.this.buildMembersAdapter(family);
-			}
-		};
-	}
-
-	private CollectionValueModel<Member> buildAllMembersComposite2(PropertyValueModel<Neighborhood> communeHolder) {
-		// build a custom Transformer
-		return new CompositeCollectionValueModel<Family, Member>(this.buildFamiliesAspectAdapter(communeHolder), this.buildTransformer());
-	}
-
-	private Transformer<Family, CollectionValueModel<Member>> buildTransformer() {
-		return new Transformer<Family, CollectionValueModel<Member>>() {
-			public CollectionValueModel<Member> transform(Family family) {
-				return CompositeCollectionValueModelTests.this.buildMembersAdapter(family);
-			}
-			@Override
-			public String toString() {
-				return "Local Transformer";
-			}
-		};
-	}
-
-
-// ********** inner classes **********
-
-	/**
-	 * inner class
-	 */
-	public class Neighborhood extends AbstractModel {
-		private String name;
-			public static final String NAME_PROPERTY = "name";
-		private Collection<Family> families = new ArrayList<Family>();
-			public static final String FAMILIES_COLLECTION = "families";
-	
-		public Neighborhood(String name) {
-			super();
-			this.name = name;
-		}
-	
-		public String getName() {
-			return this.name;
-		}
-		
-		public void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(NAME_PROPERTY, old, name);
-		}
-	
-		public Iterator<Family> families() {
-			return this.families.iterator();
-		}
-	
-		public Family addFamily(String familyName) {
-			return this.addFamily(new Family(familyName));
-		}
-
-		// backdoor to allow duplicates
-		public Family addFamily(Family family) {
-			this.addItemToCollection(family, this.families, FAMILIES_COLLECTION);
-			return family;
-		}
-
-		public void removeFamily(Family family) {
-			this.removeItemFromCollection(family, this.families, FAMILIES_COLLECTION);
-		}
-	
-		public Family familyNamed(String familyName) {
-			for (Family family : this.families) {
-				if (family.getName().equals(familyName)) {
-					return family;
-				}
-			}
-			throw new IllegalArgumentException(familyName);
-		}
-	
-		public Iterator<Member> allMembers() {
-			return new CompositeIterator<Member>(this.membersIterators());
-		}
-	
-		private Iterator<Iterator<Member>> membersIterators() {
-			return new TransformationIterator<Family, Iterator<Member>>(this.families()) {
-				@Override
-				protected Iterator<Member> transform(Family family) {
-					return family.members();
-				}
-			};
-		}
-	
-		public Member memberNamed(String familyName, String memberName) {
-			return this.familyNamed(familyName).memberNamed(memberName);
-		}
-	
-		@Override
-		public void toString(StringBuilder sb) {
-			sb.append(this.name);
-		}
-
-	}
-
-
-	/**
-	 * inner class
-	 */
-	public class Family extends AbstractModel {
-		private String name;
-			public static final String NAME_PROPERTY = "name";
-		private Collection<Member> members = new ArrayList<Member>();
-			public static final String MEMBERS_COLLECTION = "members";
-	
-		public Family(String name) {
-			super();
-			this.name = name;
-		}
-	
-		public String getName() {
-			return this.name;
-		}
-		
-		public void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(NAME_PROPERTY, old, name);
-		}
-	
-		public Iterator<Member> members() {
-			return this.members.iterator();
-		}
-	
-		public Member addMember(String memberName) {
-			Member member = new Member(memberName);
-			this.addItemToCollection(member, this.members, MEMBERS_COLLECTION);
-			return member;
-		}
-		
-		public void removeMember(Member member) {
-			this.removeItemFromCollection(member, this.members, MEMBERS_COLLECTION);
-		}
-	
-		public Member memberNamed(String memberName) {
-			for (Member member : this.members) {
-				if (member.getName().equals(memberName)) {
-					return member;
-				}
-			}
-			throw new IllegalArgumentException(memberName);
-		}
-	
-		@Override
-		public void toString(StringBuilder sb) {
-			sb.append(this.name);
-		}
-	
-	}
-
-
-	/**
-	 * inner class
-	 */
-	public class Member extends AbstractModel {
-		private String name;
-			public static final String NAME_PROPERTY = "name";
-
-		public Member(String name) {
-			super();
-			this.name = name;
-		}
-
-		public String getName() {
-			return this.name;
-		}
-	
-		public void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(NAME_PROPERTY, old, name);
-		}
-
-		@Override
-		public void toString(StringBuilder sb) {
-			sb.append(this.name);
-		}
-
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CompositeListValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CompositeListValueModelTests.java
deleted file mode 100644
index 06e7cde..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CompositeListValueModelTests.java
+++ /dev/null
@@ -1,1248 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class CompositeListValueModelTests extends TestCase {
-	private LocalListValueModel<String> lvm0;
-	private LocalListValueModel<String> lvm1;
-	private LocalListValueModel<String> lvm2;
-	private LocalListValueModel<String> lvm3;
-	private LocalListValueModel<LocalListValueModel<String>> uberLVM;
-	private CompositeListValueModel<LocalListValueModel<String>, String> compositeLVM;
-
-	public CompositeListValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
-		this.lvm0 = new LocalListValueModel<String>();
-		this.lvm0.add("aaa");
-		this.lvm0.add("bbb");
-		this.lvm0.add("ccc");
-
-		this.lvm1 = new LocalListValueModel<String>();
-		this.lvm1.add("ddd");
-		this.lvm1.add("eee");
-
-		this.lvm2 = new LocalListValueModel<String>();
-		this.lvm2.add("fff");
-
-		this.lvm3 = new LocalListValueModel<String>();
-		this.lvm3.add("ggg");
-		this.lvm3.add("hhh");
-		this.lvm3.add("iii");
-		this.lvm3.add("jjj");
-		this.lvm3.add("kkk");
-
-		this.uberLVM = new LocalListValueModel<LocalListValueModel<String>>();
-		this.uberLVM.add(this.lvm0);
-		this.uberLVM.add(this.lvm1);
-		this.uberLVM.add(this.lvm2);
-		this.uberLVM.add(this.lvm3);
-
-		this.compositeLVM = new CompositeListValueModel<LocalListValueModel<String>, String>((ListValueModel<LocalListValueModel<String>>) this.uberLVM);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testGetInt() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-		assertEquals("aaa", this.compositeLVM.get(0));
-		assertEquals("aaa", coordList.get(0));
-		assertEquals("bbb", this.compositeLVM.get(1));
-		assertEquals("bbb", coordList.get(1));
-		assertEquals("ccc", this.compositeLVM.get(2));
-		assertEquals("ccc", coordList.get(2));
-
-		assertEquals("ddd", this.compositeLVM.get(3));
-		assertEquals("ddd", coordList.get(3));
-		assertEquals("eee", this.compositeLVM.get(4));
-		assertEquals("eee", coordList.get(4));
-
-		assertEquals("fff", this.compositeLVM.get(5));
-		assertEquals("fff", coordList.get(5));
-
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testIterator() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-		assertEquals("aaa", this.compositeLVM.iterator().next());
-		assertEquals("aaa", coordList.iterator().next());
-		Iterator<String> stream1 = coordList.iterator();
-		for (Iterator<String> stream2 = this.compositeLVM.iterator(); stream2.hasNext(); ) {
-			assertEquals(stream1.next(), stream2.next());
-		}
-		assertFalse(stream1.hasNext());
-	}
-
-	public void testSize() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-		assertEquals(11, this.compositeLVM.size());
-		assertEquals(11, coordList.size());
-	}
-
-	public void testToArray() {
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-	}
-
-	public void testHasListeners() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		assertTrue(this.compositeLVM.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(this.lvm0.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		this.compositeLVM.removeListChangeListener(ListValueModel.LIST_VALUES, coordList);
-		assertFalse(this.compositeLVM.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.lvm0.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, coordList);
-		assertTrue(this.compositeLVM.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(this.lvm0.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	public void testAddSource_Begin() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		LocalListValueModel<String> lvm = new LocalListValueModel<String>();
-		lvm.add("xxx");
-		lvm.add("yyy");
-		lvm.add("zzz");
-		this.uberLVM.add(0, lvm);
-
-		Object[] expected = new Object[] { "xxx", "yyy", "zzz", "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(9));
-		assertEquals("ggg", coordList.get(9));
-	}
-
-	public void testAddSource_Middle() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		LocalListValueModel<String> lvm = new LocalListValueModel<String>();
-		lvm.add("xxx");
-		lvm.add("yyy");
-		lvm.add("zzz");
-		this.uberLVM.add(2, lvm);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "xxx", "yyy", "zzz", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(9));
-		assertEquals("ggg", coordList.get(9));
-	}
-
-	public void testAddSource_End() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		LocalListValueModel<String> lvm = new LocalListValueModel<String>();
-		lvm.add("xxx");
-		lvm.add("yyy");
-		lvm.add("zzz");
-		this.uberLVM.add(lvm);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk", "xxx", "yyy", "zzz" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testAddSources() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		LocalListValueModel<String> lvmA = new LocalListValueModel<String>();
-		lvmA.add("xxx");
-		lvmA.add("yyy");
-		lvmA.add("zzz");
-		LocalListValueModel<String> lvmB = new LocalListValueModel<String>();
-		lvmB.add("ppp");
-		lvmB.add("qqq");
-		lvmB.add("rrr");
-		Collection<LocalListValueModel<String>> c = new ArrayList<LocalListValueModel<String>>();
-		c.add(lvmA);
-		c.add(lvmB);
-		this.uberLVM.addAll(2, c);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "xxx", "yyy", "zzz", "ppp", "qqq", "rrr", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(12));
-		assertEquals("ggg", coordList.get(12));
-	}
-
-	public void testRemoveSource_Begin() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.remove(0);
-
-		Object[] expected = new Object[] { "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(3));
-		assertEquals("ggg", coordList.get(3));
-	}
-
-	public void testRemoveSource_Middle() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.remove(2);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(5));
-		assertEquals("ggg", coordList.get(5));
-	}
-
-	public void testRemoveSource_End() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.remove(3);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("fff", this.compositeLVM.get(5));
-		assertEquals("fff", coordList.get(5));
-	}
-
-	public void testRemoveSources() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.remove(2, 2);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("eee", this.compositeLVM.get(4));
-		assertEquals("eee", coordList.get(4));
-	}
-
-	public void testReplaceSources() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		LocalListValueModel<String> lvmA = new LocalListValueModel<String>();
-		lvmA.add("xxx");
-		lvmA.add("yyy");
-		lvmA.add("zzz");
-		LocalListValueModel<String> lvmB = new LocalListValueModel<String>();
-		lvmB.add("ppp");
-		lvmB.add("qqq");
-		lvmB.add("rrr");
-		List<LocalListValueModel<String>> list = new ArrayList<LocalListValueModel<String>>();
-		list.add(lvmA);
-		list.add(lvmB);
-		this.uberLVM.set(2, list);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "xxx", "yyy", "zzz", "ppp", "qqq", "rrr" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("qqq", this.compositeLVM.get(9));
-		assertEquals("qqq", coordList.get(9));
-	}
-
-	public void testMoveSources_Begin() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.move(0, 2, 2);
-
-		Object[] expected = new Object[] { "fff", "ggg", "hhh", "iii", "jjj", "kkk", "aaa", "bbb", "ccc", "ddd", "eee" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(1));
-		assertEquals("ggg", coordList.get(1));
-	}
-
-	public void testMoveSources_Middle() {
-		LocalListValueModel<String> lvm4 = new LocalListValueModel<String>();
-		lvm4.add("lll");
-		lvm4.add("mmm");
-		this.uberLVM.add(lvm4);
-
-		LocalListValueModel<String> lvm5 = new LocalListValueModel<String>();
-		lvm5.add("nnn");
-		lvm5.add("ooo");
-		lvm5.add("ppp");
-		lvm5.add("qqq");
-		this.uberLVM.add(lvm5);
-
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.move(1, 3, 2);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ggg", "hhh", "iii", "jjj", "kkk", "lll", "mmm", "ddd", "eee", "fff", "nnn", "ooo", "ppp", "qqq" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(3));
-		assertEquals("ggg", coordList.get(3));
-	}
-
-	public void testMoveSources_End() {
-		LocalListValueModel<String> lvm4 = new LocalListValueModel<String>();
-		lvm4.add("lll");
-		lvm4.add("mmm");
-		this.uberLVM.add(lvm4);
-
-		LocalListValueModel<String> lvm5 = new LocalListValueModel<String>();
-		lvm5.add("nnn");
-		lvm5.add("ooo");
-		lvm5.add("ppp");
-		lvm5.add("qqq");
-		this.uberLVM.add(lvm5);
-
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.move(3, 0, 3);
-
-		Object[] expected = new Object[] { "ggg", "hhh", "iii", "jjj", "kkk", "lll", "mmm", "nnn", "ooo", "ppp", "qqq", "aaa", "bbb", "ccc", "ddd", "eee", "fff" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(0));
-		assertEquals("ggg", coordList.get(0));
-	}
-
-	public void testMoveSource() {
-		LocalListValueModel<String> lvm4 = new LocalListValueModel<String>();
-		lvm4.add("lll");
-		lvm4.add("mmm");
-		this.uberLVM.add(lvm4);
-
-		LocalListValueModel<String> lvm5 = new LocalListValueModel<String>();
-		lvm5.add("nnn");
-		lvm5.add("ooo");
-		lvm5.add("ppp");
-		lvm5.add("qqq");
-		this.uberLVM.add(lvm5);
-
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.move(3, 1);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "fff", "ggg", "hhh", "iii", "jjj", "kkk", "ddd", "eee", "lll", "mmm", "nnn", "ooo", "ppp", "qqq" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ooo", this.compositeLVM.get(14));
-		assertEquals("ooo", coordList.get(14));
-	}
-
-	public void testClearSources() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.clear();
-
-		Object[] expected = new Object[0];
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-	}
-
-	public void testChangeSources1() {
-		List<LocalListValueModel<String>> newList = new ArrayList<LocalListValueModel<String>>();
-		LocalListValueModel<String> lvm4 = new LocalListValueModel<String>();
-		lvm4.add("lll");
-		lvm4.add("mmm");
-		newList.add(lvm4);
-
-		LocalListValueModel<String> lvm5 = new LocalListValueModel<String>();
-		lvm5.add("nnn");
-		lvm5.add("ooo");
-		lvm5.add("ppp");
-		lvm5.add("qqq");
-		newList.add(lvm5);
-
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.setListValues(newList);
-
-		Object[] expected = new Object[] { "lll", "mmm", "nnn", "ooo", "ppp", "qqq" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ooo", this.compositeLVM.get(3));
-		assertEquals("ooo", coordList.get(3));
-	}
-
-	public void testChangeSources2() {
-		List<LocalListValueModel<String>> newList = new ArrayList<LocalListValueModel<String>>();
-		LocalListValueModel<String> lvm4 = new LocalListValueModel<String>();
-		lvm4.add("lll");
-		lvm4.add("mmm");
-		newList.add(lvm4);
-
-		LocalListValueModel<String> lvm5 = new LocalListValueModel<String>();
-		lvm5.add("nnn");
-		lvm5.add("ooo");
-		lvm5.add("ppp");
-		lvm5.add("qqq");
-		newList.add(lvm5);
-
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.changeListValues(newList);
-
-		Object[] expected = new Object[] { "lll", "mmm", "nnn", "ooo", "ppp", "qqq" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ooo", this.compositeLVM.get(3));
-		assertEquals("ooo", coordList.get(3));
-	}
-
-	public void testChangeSources3() {
-		ListChangeListener listener = new ErrorListener();
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-
-		List<LocalListValueModel<String>> newList = new ArrayList<LocalListValueModel<String>>();
-		newList.add(this.lvm0);
-		newList.add(this.lvm1);
-		newList.add(this.lvm2);
-		newList.add(this.lvm3);
-
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.changeListValues(newList);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ddd", this.compositeLVM.get(3));
-		assertEquals("ddd", coordList.get(3));
-	}
-
-	public void testChangeSources4() {
-		ListChangeListener listener = new ErrorListener() {
-			@Override
-			public void itemsAdded(ListAddEvent event) { /* OK */ }
-		};
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-
-		List<LocalListValueModel<String>> newList = new ArrayList<LocalListValueModel<String>>();
-		newList.add(this.lvm0);
-		newList.add(this.lvm1);
-		newList.add(this.lvm2);
-		newList.add(this.lvm3);
-		LocalListValueModel<String> lvm4 = new LocalListValueModel<String>();
-		lvm4.add("lll");
-		lvm4.add("mmm");
-		newList.add(lvm4);
-
-
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.changeListValues(newList);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk", "lll", "mmm" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ddd", this.compositeLVM.get(3));
-		assertEquals("ddd", coordList.get(3));
-	}
-
-	public void testChangeSources5() {
-		ListChangeListener listener = new ErrorListener() {
-			@Override
-			public void itemsRemoved(ListRemoveEvent event) { /* OK */ }
-		};
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-
-		List<LocalListValueModel<String>> newList = new ArrayList<LocalListValueModel<String>>();
-		newList.add(this.lvm0);
-		newList.add(this.lvm1);
-		newList.add(this.lvm2);
-
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.changeListValues(newList);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ddd", this.compositeLVM.get(3));
-		assertEquals("ddd", coordList.get(3));
-	}
-
-	public void testChangeSources6() {
-		ListChangeListener listener = new ErrorListener() {
-			@Override
-			public void itemsAdded(ListAddEvent event) { /* OK */ }
-			@Override
-			public void itemsRemoved(ListRemoveEvent event) { /* OK */ }
-		};
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-
-		List<LocalListValueModel<String>> newList = new ArrayList<LocalListValueModel<String>>();
-		newList.add(this.lvm0);
-		newList.add(this.lvm1);
-
-		LocalListValueModel<String> lvm4 = new LocalListValueModel<String>();
-		lvm4.add("lll");
-		lvm4.add("mmm");
-		newList.add(lvm4);
-
-		newList.add(this.lvm3);
-
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.uberLVM.changeListValues(newList);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "lll", "mmm", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ddd", this.compositeLVM.get(3));
-		assertEquals("ddd", coordList.get(3));
-	}
-
-	public void testAddItem_Begin() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.add(0, "xxx");
-
-		Object[] expected = new Object[] { "xxx", "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(7));
-		assertEquals("ggg", coordList.get(7));
-	}
-
-	public void testAddItem_Middle() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm2.add(1, "xxx");
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "xxx", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(7));
-		assertEquals("ggg", coordList.get(7));
-	}
-
-	public void testAddItem_End() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.add(5, "xxx");
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk", "xxx" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testAddItems_Begin() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.addAll(0, Arrays.asList(new String[] { "xxx", "yyy", "zzz" }));
-
-		Object[] expected = new Object[] { "xxx", "yyy", "zzz", "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(9));
-		assertEquals("ggg", coordList.get(9));
-	}
-
-	public void testAddItems_Middle() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm2.addAll(1, Arrays.asList(new String[] { "xxx", "yyy", "zzz" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "xxx", "yyy", "zzz", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(9));
-		assertEquals("ggg", coordList.get(9));
-	}
-
-	public void testAddItems_End() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.addAll(5, Arrays.asList(new String[] { "xxx", "yyy", "zzz" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk", "xxx", "yyy", "zzz" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testRemoveItem_Begin() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.remove(0);
-
-		Object[] expected = new Object[] { "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(5));
-		assertEquals("ggg", coordList.get(5));
-	}
-
-	public void testRemoveItem_Middle() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm2.remove(0);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(5));
-		assertEquals("ggg", coordList.get(5));
-	}
-
-	public void testRemoveItem_End() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.remove(4);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testRemoveItems_Begin() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.remove(0, 3);
-
-		Object[] expected = new Object[] { "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(3));
-		assertEquals("ggg", coordList.get(3));
-	}
-
-	public void testRemoveItems_Middle() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.remove(1, 3);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("kkk", this.compositeLVM.get(7));
-		assertEquals("kkk", coordList.get(7));
-	}
-
-	public void testRemoveItems_End() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.remove(3, 2);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testReplaceItem_Begin() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.set(0, "xxx");
-
-		Object[] expected = new Object[] { "xxx", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testReplaceItem_Middle() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm2.set(0, "xxx");
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "xxx", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testReplaceItem_End() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.set(4, "xxx");
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "xxx" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testReplaceItems_Begin() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.set(0, Arrays.asList(new String[] { "xxx", "yyy", "zzz" }));
-
-		Object[] expected = new Object[] { "xxx", "yyy", "zzz", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testReplaceItems_Middle() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.set(1, Arrays.asList(new String[] { "xxx", "yyy", "zzz" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "xxx", "yyy", "zzz", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("kkk", this.compositeLVM.get(10));
-		assertEquals("kkk", coordList.get(10));
-	}
-
-	public void testReplaceItems_End() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.set(3, Arrays.asList(new String[] { "xxx", "yyy" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "xxx", "yyy" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testMoveItem_Begin() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.move(2, 0);
-
-		Object[] expected = new Object[] { "bbb", "ccc", "aaa", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testMoveItem_Middle() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm1.move(0, 1);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "eee", "ddd", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testMoveItem_End() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.move(0, 4);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "kkk", "ggg", "hhh", "iii", "jjj" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(7));
-		assertEquals("ggg", coordList.get(7));
-	}
-
-	public void testMoveItems_Begin() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.move(1, 0, 2);
-
-		Object[] expected = new Object[] { "ccc", "aaa", "bbb", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testMoveItems_Middle() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm1.add("eee.1");
-		this.lvm1.add("eee.2");
-		this.lvm1.add("eee.3");
-		this.lvm1.move(1, 2, 3);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee.1", "eee.2", "eee.3", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(9));
-		assertEquals("ggg", coordList.get(9));
-	}
-
-	public void testMoveItems_End() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.move(0, 2, 3);
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "iii", "jjj", "kkk", "ggg", "hhh" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(9));
-		assertEquals("ggg", coordList.get(9));
-	}
-
-	public void testClearItems_Begin() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.clear();
-
-		Object[] expected = new Object[] { "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(3));
-		assertEquals("ggg", coordList.get(3));
-	}
-
-	public void testClearItems_Middle() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm1.clear();
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(4));
-		assertEquals("ggg", coordList.get(4));
-	}
-
-	public void testClearItems_End() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.clear();
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("fff", this.compositeLVM.get(5));
-		assertEquals("fff", coordList.get(5));
-	}
-
-	public void testChangeItems_Begin1() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.setListValues(Arrays.asList(new String[] { "xxx", "yyy", "zzz" }));
-
-		Object[] expected = new Object[] { "xxx", "yyy", "zzz", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testChangeItems_Middle1() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm1.setListValues(Arrays.asList(new String[] { "xxx", "yyy", "zzz" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "xxx", "yyy", "zzz", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(7));
-		assertEquals("ggg", coordList.get(7));
-	}
-
-	public void testChangeItems_End1() {
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.setListValues(Arrays.asList(new String[] { "xxx", "yyy", "zzz" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "xxx", "yyy", "zzz" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("fff", this.compositeLVM.get(5));
-		assertEquals("fff", coordList.get(5));
-	}
-
-	public void testChangeItems_Begin2() {
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, new ErrorListener());
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.changeListValues(Arrays.asList(new String[] { "aaa", "bbb", "ccc" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testChangeItems_Middle2() {
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, new ErrorListener());
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm1.changeListValues(Arrays.asList(new String[] { "ddd", "eee" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("hhh", this.compositeLVM.get(7));
-		assertEquals("hhh", coordList.get(7));
-	}
-
-	public void testChangeItems_End2() {
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, new ErrorListener());
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.changeListValues(Arrays.asList(new String[] { "ggg", "hhh", "iii", "jjj", "kkk" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("fff", this.compositeLVM.get(5));
-		assertEquals("fff", coordList.get(5));
-	}
-
-	public void testChangeItems_Begin3() {
-		ListChangeListener listener = new ErrorListener() {
-			@Override
-			public void itemsReplaced(ListReplaceEvent event) { /* OK */ }
-		};
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.changeListValues(Arrays.asList(new String[] { "aaa", "bbb", "xxx" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "xxx", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(6));
-		assertEquals("ggg", coordList.get(6));
-	}
-
-	public void testChangeItems_Middle3() {
-		ListChangeListener listener = new ErrorListener() {
-			@Override
-			public void itemsReplaced(ListReplaceEvent event) { /* OK */ }
-		};
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm1.changeListValues(Arrays.asList(new String[] { "ddd", "xxx" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "xxx", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("hhh", this.compositeLVM.get(7));
-		assertEquals("hhh", coordList.get(7));
-	}
-
-	public void testChangeItems_End3() {
-		ListChangeListener listener = new ErrorListener() {
-			@Override
-			public void itemsReplaced(ListReplaceEvent event) { /* OK */ }
-		};
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.changeListValues(Arrays.asList(new String[] { "ggg", "hhh", "iii", "xxx", "kkk" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "xxx", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("fff", this.compositeLVM.get(5));
-		assertEquals("fff", coordList.get(5));
-	}
-
-	public void testChangeItems_Begin4() {
-		ListChangeListener listener = new ErrorListener() {
-			@Override
-			public void itemsAdded(ListAddEvent event) { /* OK */ }
-		};
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.changeListValues(Arrays.asList(new String[] { "aaa", "bbb", "ccc", "xxx" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "xxx", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("fff", this.compositeLVM.get(6));
-		assertEquals("fff", coordList.get(6));
-	}
-
-	public void testChangeItems_Middle4() {
-		ListChangeListener listener = new ErrorListener() {
-			@Override
-			public void itemsAdded(ListAddEvent event) { /* OK */ }
-		};
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm1.changeListValues(Arrays.asList(new String[] { "ddd", "eee", "xxx" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "xxx", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("ggg", this.compositeLVM.get(7));
-		assertEquals("ggg", coordList.get(7));
-	}
-
-	public void testChangeItems_End4() {
-		ListChangeListener listener = new ErrorListener() {
-			@Override
-			public void itemsAdded(ListAddEvent event) { /* OK */ }
-		};
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.changeListValues(Arrays.asList(new String[] { "ggg", "hhh", "iii", "jjj", "kkk", "xxx" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk", "xxx" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("fff", this.compositeLVM.get(5));
-		assertEquals("fff", coordList.get(5));
-	}
-
-	public void testChangeItems_Begin5() {
-		ListChangeListener listener = new ErrorListener() {
-			@Override
-			public void itemsRemoved(ListRemoveEvent event) { /* OK */ }
-		};
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm0.changeListValues(Arrays.asList(new String[] { "aaa" }));
-
-		Object[] expected = new Object[] { "aaa", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("iii", this.compositeLVM.get(6));
-		assertEquals("iii", coordList.get(6));
-	}
-
-	public void testChangeItems_Middle5() {
-		ListChangeListener listener = new ErrorListener() {
-			@Override
-			public void itemsRemoved(ListRemoveEvent event) { /* OK */ }
-		};
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm1.changeListValues(Arrays.asList(new String[] { "ddd" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "fff", "ggg", "hhh", "iii", "jjj", "kkk" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("iii", this.compositeLVM.get(7));
-		assertEquals("iii", coordList.get(7));
-	}
-
-	public void testChangeItems_End5() {
-		ListChangeListener listener = new ErrorListener() {
-			@Override
-			public void itemsRemoved(ListRemoveEvent event) { /* OK */ }
-		};
-		this.compositeLVM.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		CoordinatedList<String> coordList = new CoordinatedList<String>(this.compositeLVM);
-
-		this.lvm3.changeListValues(Arrays.asList(new String[] { "ggg", "hhh", "iii" }));
-
-		Object[] expected = new Object[] { "aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii" };
-		assertEquals(expected.length, this.compositeLVM.size());
-		assertEquals(expected.length, coordList.size());
-		assertTrue(Arrays.equals(expected, this.compositeLVM.toArray()));
-		assertTrue(Arrays.equals(expected, coordList.toArray()));
-		assertEquals("fff", this.compositeLVM.get(5));
-		assertEquals("fff", coordList.get(5));
-	}
-
-	class ErrorListener implements ListChangeListener {
-		public void itemsAdded(ListAddEvent event) {
-			fail();
-		}
-		public void itemsRemoved(ListRemoveEvent event) {
-			fail();
-		}
-		public void itemsMoved(ListMoveEvent event) {
-			fail();
-		}
-		public void itemsReplaced(ListReplaceEvent event) {
-			fail();
-		}
-		public void listCleared(ListClearEvent event) {
-			fail();
-		}
-		public void listChanged(ListChangeEvent event) {
-			fail();
-		}
-	}
-
-	class LocalListValueModel<E> extends SimpleListValueModel<E> {
-		LocalListValueModel() {
-			super();
-		}
-		void changeListValues(Iterable<E> listValues) {
-			if (listValues == null) {
-				throw new NullPointerException();
-			}
-			this.list.clear();
-			CollectionTools.addAll(this.list, listValues);
-			this.fireListChanged(LIST_VALUES, this.list);
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CompositePropertyValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CompositePropertyValueModelTests.java
deleted file mode 100644
index b8082e5..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CompositePropertyValueModelTests.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.model.value.CompositePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-public class CompositePropertyValueModelTests extends TestCase {
-	private SimplePropertyValueModel<Integer> pvm1;
-	private WritablePropertyValueModel<Integer> pvm2;
-	private WritablePropertyValueModel<Integer> pvm3;
-	private WritablePropertyValueModel<Integer> pvm4;
-	private Collection<WritablePropertyValueModel<Integer>> collection;
-	private SimpleCollectionValueModel<WritablePropertyValueModel<Integer>> cvm;
-	private PropertyValueModel<Integer> compositePVM;
-	PropertyChangeEvent event;
-
-
-	public CompositePropertyValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.pvm1 = new SimplePropertyValueModel<Integer>(Integer.valueOf(1));
-		this.pvm2 = new SimplePropertyValueModel<Integer>(Integer.valueOf(2));
-		this.pvm3 = new SimplePropertyValueModel<Integer>(Integer.valueOf(3));
-		this.pvm4 = new SimplePropertyValueModel<Integer>(Integer.valueOf(4));
-		this.collection = new ArrayList<WritablePropertyValueModel<Integer>>();
-		this.collection.add(this.pvm1);
-		this.collection.add(this.pvm2);
-		this.collection.add(this.pvm3);
-		this.collection.add(this.pvm4);
-		this.cvm = new SimpleCollectionValueModel<WritablePropertyValueModel<Integer>>(this.collection);
-		
-		this.compositePVM = this.buildCompositePVM(cvm);
-	}
-
-	private <T extends PropertyValueModel<?>> PropertyValueModel<Integer> buildCompositePVM(CollectionValueModel<T> pvms) {
-		return new CompositePropertyValueModel<Integer>(pvms) {
-			@Override
-			protected Integer buildValue() {
-				int sum = 0;
-				for (PropertyValueModel<Integer> each : this.getCollectionModel()) {
-					sum += each.getValue().intValue();
-				}
-				return Integer.valueOf(sum);
-			}
-			@Override
-			@SuppressWarnings("unchecked")
-			protected CollectionValueModel<PropertyValueModel<Integer>> getCollectionModel() {
-				return (CollectionValueModel<PropertyValueModel<Integer>>) super.getCollectionModel();
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testGetValue() {
-		assertNull(this.compositePVM.getValue());
-		ChangeListener listener = this.buildListener();
-		this.compositePVM.addChangeListener(listener);
-		assertEquals(10, this.compositePVM.getValue().intValue());
-	}
-
-	public void testValueAndListeners1() {
-		assertNull(this.compositePVM.getValue());
-		ChangeListener listener = this.buildListener();
-		this.compositePVM.addChangeListener(listener);
-		assertEquals(10, this.compositePVM.getValue().intValue());
-		this.compositePVM.removeChangeListener(listener);
-		assertNull(this.compositePVM.getValue());
-	}	
-
-	public void testValueAndListeners2() {
-		assertNull(this.compositePVM.getValue());
-		ChangeListener listener = this.buildListener();
-		this.compositePVM.addPropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertEquals(10, this.compositePVM.getValue().intValue());
-		this.compositePVM.removePropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertNull(this.compositePVM.getValue());
-	}
-
-	public void testPropertyChange1() {
-		this.compositePVM.addChangeListener(this.buildListener());
-		this.verifyPropertyChange();
-	}
-
-	public void testPropertyChange2() {
-		this.compositePVM.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildListener());
-		this.verifyPropertyChange();
-	}
-
-	private void verifyPropertyChange() {
-		this.event = null;
-		this.pvm1.setValue(Integer.valueOf(5));
-		this.verifyEvent(10, 14);
-
-		this.event = null;
-		this.pvm4.setValue(Integer.valueOf(0));
-		this.verifyEvent(14, 10);
-	}
-
-	public void testCollectionChange1() {
-		this.compositePVM.addChangeListener(this.buildListener());
-		this.verifyCollectionChange();
-	}
-
-	public void testCollectionChange2() {
-		this.compositePVM.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildListener());
-		this.verifyCollectionChange();
-	}
-
-	private void verifyCollectionChange() {
-		this.event = null;
-		WritablePropertyValueModel<Integer> pvm = new SimplePropertyValueModel<Integer>(Integer.valueOf(77));
-		this.cvm.add(pvm);
-		this.verifyEvent(10, 87);
-
-		this.event = null;
-		this.cvm.remove(pvm);
-		this.verifyEvent(87, 10);
-
-		this.event = null;
-		this.cvm.clear();
-		this.verifyEvent(10, 0);
-
-		Collection<WritablePropertyValueModel<Integer>> c2 = new ArrayList<WritablePropertyValueModel<Integer>>();
-		c2.add(this.pvm1);
-		c2.add(this.pvm2);
-		this.event = null;
-		this.cvm.setValues(c2);
-		this.verifyEvent(0, 3);
-	}
-
-	public void testLazyListening1() {
-		assertFalse(this.pvm1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		ChangeListener listener = this.buildListener();
-
-		this.compositePVM.addChangeListener(listener);
-		assertTrue(this.pvm1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		this.compositePVM.removeChangeListener(listener);
-		assertFalse(this.pvm1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-	}	
-
-	public void testLazyListening2() {
-		assertFalse(this.pvm1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		ChangeListener listener = this.buildListener();
-
-		this.compositePVM.addPropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(this.pvm1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		this.compositePVM.removePropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertFalse(this.pvm1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-	}	
-
-	private ChangeListener buildListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				CompositePropertyValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	private void verifyEvent(int oldValue, int newValue) {
-		assertEquals(this.compositePVM, this.event.getSource());
-		assertEquals(PropertyValueModel.VALUE, this.event.getPropertyName());
-		assertEquals(Integer.valueOf(oldValue), this.event.getOldValue());
-		assertEquals(Integer.valueOf(newValue), this.event.getNewValue());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CoordinatedBag.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CoordinatedBag.java
deleted file mode 100644
index d45fad6..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CoordinatedBag.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-
-/**
- * Helper class that keeps an internal collection in synch with the
- * collection held by a collection value model.
- */
-class CoordinatedBag<E> implements Bag<E>, CollectionChangeListener {
-
-	private Bag<E> bag = new HashBag<E>();
-
-	CoordinatedBag(CollectionValueModel<E> cvm) {
-		cvm.addCollectionChangeListener(CollectionValueModel.VALUES, this);
-	}
-
-
-	// ********** Collection implementation **********
-
-	public boolean add(E o) {
-		return this.bag.add(o);
-	}
-
-	public boolean addAll(Collection<? extends E> c) {
-		return this.bag.addAll(c);
-	}
-
-	public void clear() {
-		this.bag.clear();
-	}
-
-	public boolean contains(Object o) {
-		return this.bag.contains(o);
-	}
-
-	public boolean containsAll(Collection<?> c) {
-		return this.bag.containsAll(c);
-	}
-
-	public boolean isEmpty() {
-		return this.bag.isEmpty();
-	}
-
-	public Iterator<E> iterator() {
-		return this.bag.iterator();
-	}
-
-	public boolean remove(Object o) {
-		return this.bag.remove(o);
-	}
-
-	public boolean removeAll(Collection<?> c) {
-		return this.bag.removeAll(c);
-	}
-
-	public boolean retainAll(Collection<?> c) {
-		return this.bag.retainAll(c);
-	}
-
-	public int size() {
-		return this.bag.size();
-	}
-
-	public Object[] toArray() {
-		return this.bag.toArray();
-	}
-
-	public <T> T[] toArray(T[] a) {
-		return this.bag.toArray(a);
-	}
-
-
-	// ********** Bag implementation **********
-
-	public int count(Object o) {
-		return this.bag.count(o);
-	}
-
-	public boolean add(E o, int count) {
-		return this.bag.add(o, count);
-	}
-
-	public boolean remove(Object o, int count) {
-		return this.bag.remove(o, count);
-	}
-
-	public Iterator<E> uniqueIterator() {
-		return this.bag.uniqueIterator();
-	}
-
-	public int uniqueCount() {
-		return this.bag.uniqueCount();
-	}
-
-	public Iterator<Bag.Entry<E>> entries() {
-		return this.bag.entries();
-	}
-
-	// ********** CollectionChangeListener implementation **********
-
-	@SuppressWarnings("unchecked")
-	public void itemsAdded(CollectionAddEvent event) {
-		for (E item : (Iterable<E>) event.getItems()) {
-			this.bag.add(item);
-		}
-	}
-
-	@SuppressWarnings("unchecked")
-	public void itemsRemoved(CollectionRemoveEvent event) {
-		for (E item : (Iterable<E>) event.getItems()) {
-			this.bag.remove(item);
-		}
-	}
-
-	public void collectionCleared(CollectionClearEvent event) {
-		this.bag.clear();
-	}
-
-	@SuppressWarnings("unchecked")
-	public void collectionChanged(CollectionChangeEvent event) {
-		this.bag.clear();
-		CollectionTools.addAll(this.bag, ((CollectionValueModel<E>) event.getSource()).iterator());
-	}
-
-
-	// ********** standard methods **********
-
-	@Override
-	public boolean equals(Object o) {
-		return this.bag.equals(o);
-	}
-
-	@Override
-	public int hashCode() {
-		return this.bag.hashCode();
-	}
-
-	@Override
-	public String toString() {
-		return this.bag.toString();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CoordinatedList.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CoordinatedList.java
deleted file mode 100644
index 70ea298..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/CoordinatedList.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import javax.swing.ListModel;
-import javax.swing.event.ListDataEvent;
-import javax.swing.event.ListDataListener;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * Helper class that keeps an internal list in synch with the
- * list held by a list value model.
- */
-public class CoordinatedList<E> implements List<E>, ListChangeListener, ListDataListener {
-	private List<E> list = new ArrayList<E>();
-
-	public CoordinatedList(ListValueModel<E> listValueModel) {
-		listValueModel.addListChangeListener(ListValueModel.LIST_VALUES, this);
-		for (Iterator<E> stream = listValueModel.iterator(); stream.hasNext(); ) {
-			this.add(stream.next());
-		}
-	}
-
-	public CoordinatedList(ListModel listModel) {
-		listModel.addListDataListener(this);
-		for (int i = 0; i < listModel.getSize(); i++) {
-			this.add(i, this.getElementAt(listModel, i));
-		}
-	}
-
-
-	// ********** List implementation **********
-
-	public void add(int index, E element) {
-		this.list.add(index, element);
-	}
-
-	public boolean add(E o) {
-		return this.list.add(o);
-	}
-
-	public boolean addAll(Collection<? extends E> c) {
-		return this.list.addAll(c);
-	}
-
-	public boolean addAll(int index, Collection<? extends E> c) {
-		return this.list.addAll(index, c);
-	}
-
-	public void clear() {
-		this.list.clear();
-	}
-
-	public boolean contains(Object o) {
-		return this.list.contains(o);
-	}
-
-	public boolean containsAll(Collection<?> c) {
-		return this.list.containsAll(c);
-	}
-
-	public E get(int index) {
-		return this.list.get(index);
-	}
-
-	public int indexOf(Object o) {
-		return this.list.indexOf(o);
-	}
-
-	public boolean isEmpty() {
-		return this.list.isEmpty();
-	}
-
-	public Iterator<E> iterator() {
-		return this.list.iterator();
-	}
-
-	public int lastIndexOf(Object o) {
-		return this.list.lastIndexOf(o);
-	}
-
-	public ListIterator<E> listIterator() {
-		return this.list.listIterator();
-	}
-
-	public ListIterator<E> listIterator(int index) {
-		return this.list.listIterator(index);
-	}
-
-	public E remove(int index) {
-		return this.list.remove(index);
-	}
-
-	public boolean remove(Object o) {
-		return this.list.remove(o);
-	}
-
-	public boolean removeAll(Collection<?> c) {
-		return this.list.removeAll(c);
-	}
-
-	public boolean retainAll(Collection<?> c) {
-		return this.list.retainAll(c);
-	}
-
-	public E set(int index, E element) {
-		return this.list.set(index, element);
-	}
-
-	public int size() {
-		return this.list.size();
-	}
-
-	public List<E> subList(int fromIndex, int toIndex) {
-		return this.list.subList(fromIndex, toIndex);
-	}
-
-	public Object[] toArray() {
-		return this.list.toArray();
-	}
-
-	public <T> T[] toArray(T[] a) {
-		return this.list.toArray(a);
-	}
-
-
-	// ********** ListChangeListener implementation **********
-
-	public void itemsAdded(ListAddEvent e) {
-		int i = e.getIndex();
-		for (E item : this.getItems(e)) {
-			this.list.add(i++, item);
-		}
-	}
-
-	public void itemsRemoved(ListRemoveEvent e) {
-		int base = e.getIndex();
-		for (int i = e.getItemsSize(); i-- > 0; ) {
-			this.list.remove(base + i);  // remove from end
-		}
-	}
-
-	public void itemsReplaced(ListReplaceEvent e) {
-		int i = e.getIndex();
-		for (E item : this.getNewItems(e)) {
-			this.list.set(i++, item);
-		}
-	}
-
-	public void itemsMoved(ListMoveEvent e) {
-		CollectionTools.move(this.list, e.getTargetIndex(), e.getSourceIndex(), e.getLength());
-	}
-
-	public void listCleared(ListClearEvent e) {
-		this.list.clear();
-	}
-
-	public void listChanged(ListChangeEvent e) {
-		this.list.clear();
-		CollectionTools.addAll(this.list, this.getSource(e).iterator());
-	}
-
-
-	// ********** ListDataListener implementation **********
-
-	public void contentsChanged(ListDataEvent e) {
-		this.list.clear();
-		ListModel lm = (ListModel) e.getSource();
-		int size = lm.getSize();
-		for (int i = 0; i < size; i++) {
-			this.list.add(i, this.getElementAt(lm, i));
-		}
-	}
-
-	public void intervalAdded(ListDataEvent e) {
-		ListModel lm = (ListModel) e.getSource();
-		int start = Math.min(e.getIndex0(), e.getIndex1());
-		int end = Math.max(e.getIndex0(), e.getIndex1());
-		for (int i = start; i <= end; i++) {
-			this.list.add(i, this.getElementAt(lm, i));
-		}
-	}
-
-	public void intervalRemoved(ListDataEvent e) {
-		int start = Math.min(e.getIndex0(), e.getIndex1());
-		int end = Math.max(e.getIndex0(), e.getIndex1());
-		int length = end - start + 1;
-		for (int i = 1; i <= length; i++) {
-			this.list.remove(start);
-		}
-	}
-
-
-	// ********** standard methods **********
-
-    @Override
-	public boolean equals(Object o) {
-		return this.list.equals(o);
-	}
-
-    @Override
-	public int hashCode() {
-		return this.list.hashCode();
-	}
-
-    @Override
-	public String toString() {
-		return this.list.toString();
-	}
-
-
-	// ********** internal methods **********
-
-	/**
-	 * minimize the scope of the suppressed warnings.=
-	 */
-	@SuppressWarnings("unchecked")
-	private E getElementAt(ListModel listModel, int index) {
-		return (E) listModel.getElementAt(index);
-	}
-
-	// minimized scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	private Iterable<E> getItems(ListAddEvent event) {
-		return (Iterable<E>) event.getItems();
-	}
-
-	// minimized scope of suppressed warnings
-	@SuppressWarnings("unchecked")
-	private Iterable<E> getNewItems(ListReplaceEvent event) {
-		return (Iterable<E>) event.getNewItems();
-	}
-
-	/**
-	 * minimize the scope of the suppressed warnings.=
-	 */
-	@SuppressWarnings("unchecked")
-	private ListValueModel<E> getSource(ListChangeEvent event) {
-		return (ListValueModel<E>) event.getSource();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ExtendedListValueModelWrapperTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ExtendedListValueModelWrapperTests.java
deleted file mode 100644
index 7f64503..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ExtendedListValueModelWrapperTests.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ExtendedListValueModelWrapper;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ExtendedListValueModelWrapperTests extends TestCase {
-	private SimpleListValueModel<String> listHolder;
-	private ListValueModel<String> extendedListHolder;
-	ListEvent event;
-	String eventType;
-
-	private static final String ADD = "add";
-	private static final String REMOVE = "remove";
-	private static final String REPLACE = "replace";
-	private static final String MOVE = "move";
-	private static final String CLEAR = "clear";
-	private static final String CHANGE = "change";
-
-	public ExtendedListValueModelWrapperTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.listHolder = new SimpleListValueModel<String>(this.buildList());
-		this.extendedListHolder = this.buildExtendedListHolder(this.listHolder);
-	}
-
-	private List<String> buildList() {
-		List<String> result = new ArrayList<String>();
-		result.add("A");
-		result.add("B");
-		result.add("C");
-		result.add("D");
-		return result;
-	}
-
-	private List<String> buildExtendedList() {
-		List<String> extendedList = new ArrayList<String>();
-		extendedList.addAll(this.buildPrefix());
-		extendedList.addAll(this.buildList());
-		extendedList.addAll(this.buildSuffix());
-		return extendedList;
-	}
-
-	private List<String> buildPrefix() {
-		List<String> prefix = new ArrayList<String>();
-		prefix.add("x");
-		prefix.add("y");
-		prefix.add("z");
-		return prefix;
-	}
-
-	private List<String> buildSuffix() {
-		List<String> suffix = new ArrayList<String>();
-		suffix.add("i");
-		suffix.add("j");
-		return suffix;
-	}
-
-	private ListValueModel<String> buildExtendedListHolder(ListValueModel<String> lvm) {
-		return new ExtendedListValueModelWrapper<String>(this.buildPrefix(), lvm, this.buildSuffix());
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIterator() {
-		this.extendedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-		assertEquals(this.buildExtendedList(), CollectionTools.list(this.extendedListHolder.iterator()));
-	}
-
-	public void testSize() {
-		this.extendedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-		assertEquals(this.buildExtendedList().size(), CollectionTools.size(this.extendedListHolder.iterator()));
-		assertEquals(this.buildExtendedList().size(), this.extendedListHolder.size());
-	}
-
-	private boolean extendedListContains(Object item) {
-		return CollectionTools.contains(this.extendedListHolder.iterator(), item);
-	}
-
-	private boolean extendedListContainsAll(Collection<String> items) {
-		return CollectionTools.containsAll(this.extendedListHolder.iterator(), items);
-	}
-
-	private boolean extendedListContainsAny(Collection<String> items) {
-		List<String> extendedList = CollectionTools.list(this.extendedListHolder.iterator());
-		for (Iterator<String> stream = items.iterator(); stream.hasNext(); ) {
-			if (extendedList.contains(stream.next())) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	private boolean listContains(Object item) {
-		return CollectionTools.contains(this.listHolder.iterator(), item);
-	}
-
-	private boolean listContainsAll(Collection<String> items) {
-		return CollectionTools.containsAll(this.listHolder.iterator(), items);
-	}
-
-//	private boolean listContainsAny(Collection<String> items) {
-//		List<String> extendedList = CollectionTools.list(this.listHolder.iterator());
-//		for (Iterator<String> stream = items.iterator(); stream.hasNext(); ) {
-//			if (extendedList.contains(stream.next())) {
-//				return true;
-//			}
-//		}
-//		return false;
-//	}
-//
-	public void testAdd1() {
-		this.extendedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-
-		assertFalse(this.extendedListContains("E"));
-		this.listHolder.add(4, "E");
-		assertTrue(this.extendedListContains("E"));
-		assertTrue(this.listContains("E"));
-	}
-
-	public void testAdd2() {
-		this.extendedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-
-		assertFalse(this.extendedListContains(null));
-		this.listHolder.add(4, null);
-		assertTrue(this.extendedListContains(null));
-		assertTrue(this.listContains(null));
-	}
-
-	private List<String> buildAddList() {
-		List<String> addList = new ArrayList<String>();
-		addList.add("E");
-		addList.add("F");
-		return addList;
-	}
-
-	public void testAddAll1() {
-		this.extendedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-
-		assertFalse(this.extendedListContainsAny(this.buildAddList()));
-		this.listHolder.addAll(4, this.buildAddList());
-		assertTrue(this.extendedListContainsAll(this.buildAddList()));
-		assertTrue(this.listContainsAll(this.buildAddList()));
-	}
-
-	public void testRemove1() {
-		this.extendedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-
-		assertTrue(this.extendedListContains("B"));
-		this.listHolder.remove(this.buildList().indexOf("B"));
-		assertFalse(this.extendedListContains("B"));
-		assertFalse(this.listContains("B"));
-	}
-
-	public void testListChangeGeneric() {
-		this.extendedListHolder.addChangeListener(this.buildListener());
-		this.verifyListChange();
-	}
-
-	public void testListChangeNamed() {
-		this.extendedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-		this.verifyListChange();
-	}
-
-	private void verifyListChange() {
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.add(4, "E");
-		this.verifyEvent(ADD, 7, "E");
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.add(5, null);
-		this.verifyEvent(ADD, 8, null);
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.remove(5);
-		this.verifyEvent(REMOVE, 8, null);
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.remove(4);
-		this.verifyEvent(REMOVE, 7, "E");
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.addAll(0, this.buildList());
-		this.verifyEvent(ADD);
-		assertEquals(this.buildList(), CollectionTools.list(((ListAddEvent) this.event).getItems()));
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.set(0, "AA");
-		this.verifyEvent(REPLACE);
-		assertFalse(CollectionTools.contains(((ListReplaceEvent) this.event).getNewItems(), "A"));
-		assertTrue(CollectionTools.contains(((ListReplaceEvent) this.event).getNewItems(), "AA"));
-	}
-
-	private ChangeListener buildListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {
-				ExtendedListValueModelWrapperTests.this.eventType = ADD;
-				ExtendedListValueModelWrapperTests.this.event = e;
-			}
-			@Override
-			public void itemsRemoved(ListRemoveEvent e) {
-				ExtendedListValueModelWrapperTests.this.eventType = REMOVE;
-				ExtendedListValueModelWrapperTests.this.event = e;
-			}
-			@Override
-			public void itemsReplaced(ListReplaceEvent e) {
-				ExtendedListValueModelWrapperTests.this.eventType = REPLACE;
-				ExtendedListValueModelWrapperTests.this.event = e;
-			}
-			@Override
-			public void itemsMoved(ListMoveEvent e) {
-				ExtendedListValueModelWrapperTests.this.eventType = MOVE;
-				ExtendedListValueModelWrapperTests.this.event = e;
-			}
-			@Override
-			public void listCleared(ListClearEvent e) {
-				ExtendedListValueModelWrapperTests.this.eventType = CLEAR;
-				ExtendedListValueModelWrapperTests.this.event = e;
-			}
-			@Override
-			public void listChanged(ListChangeEvent e) {
-				ExtendedListValueModelWrapperTests.this.eventType = CHANGE;
-				ExtendedListValueModelWrapperTests.this.event = e;
-			}
-		};
-	}
-
-	private void verifyEvent(String type) {
-		assertEquals(type, this.eventType);
-		assertEquals(this.extendedListHolder, this.event.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event.getListName());
-	}
-
-	private void verifyEvent(String type, int index, Object item) {
-		this.verifyEvent(type);
-		if (type == ADD) {
-			assertEquals(index, ((ListAddEvent) this.event).getIndex());
-			assertEquals(item, ((ListAddEvent) this.event).getItems().iterator().next());
-		} else if (type == REMOVE) {
-			assertEquals(index, ((ListRemoveEvent) this.event).getIndex());
-			assertEquals(item, ((ListRemoveEvent) this.event).getItems().iterator().next());
-		}
-	}
-
-	public void testHasListeners() {
-		/*
-		 * adding listeners to the extended list will cause listeners
-		 * to be added to the wrapped list;
-		 * likewise, removing listeners from the extended list will
-		 * cause listeners to be removed from the wrapped list
-		 */
-		assertFalse(((AbstractModel) this.listHolder).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		ChangeListener listener = this.buildListener();
-
-		this.extendedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		assertTrue(((AbstractModel) this.listHolder).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		this.extendedListHolder.removeListChangeListener(ListValueModel.LIST_VALUES, listener);
-		assertFalse(((AbstractModel) this.listHolder).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		this.extendedListHolder.addChangeListener(listener);
-		assertTrue(((AbstractModel) this.listHolder).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		this.extendedListHolder.removeChangeListener(listener);
-		assertFalse(((AbstractModel) this.listHolder).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/FilteringCollectionValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/FilteringCollectionValueModelTests.java
deleted file mode 100644
index bf03010..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/FilteringCollectionValueModelTests.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Vector;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.Filter;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.FilteringCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class FilteringCollectionValueModelTests extends TestCase {
-	private SimpleCollectionValueModel<String> collectionHolder;
-	CollectionAddEvent addEvent;
-	CollectionRemoveEvent removeEvent;
-	CollectionClearEvent collectionClearedEvent;
-	CollectionChangeEvent collectionChangedEvent;
-
-	private CollectionValueModel<String> filteredCollectionHolder;
-	CollectionAddEvent filteredAddEvent;
-	CollectionRemoveEvent filteredRemoveEvent;
-	CollectionClearEvent filteredCollectionClearedEvent;
-	CollectionChangeEvent filteredCollectionChangedEvent;
-
-	public FilteringCollectionValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.collectionHolder = new SimpleCollectionValueModel<String>(buildCollection());
-		this.filteredCollectionHolder = new FilteringCollectionValueModel<String>(this.collectionHolder, this.buildFilter());
-	}
-
-	private Collection<String> buildCollection() {
-		Collection<String> collection = new Vector<String>();
-		collection.add("foo");
-		return collection;
-	}
-
-	private Filter<String> buildFilter() {
-		return new Filter<String>() {
-			public boolean accept(String s) {
-				return s.startsWith("b");
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIterator() {
-		// add a listener to "activate" the wrapper
-		this.filteredCollectionHolder.addCollectionChangeListener(CollectionValueModel.VALUES, this.buildFilteredListener());
-
-		assertEquals("foo", this.collectionHolder.iterator().next());
-		assertFalse(this.filteredCollectionHolder.iterator().hasNext());
-
-		this.collectionHolder.add("bar");
-		Iterator<String> collectionHolderValue = this.collectionHolder.iterator();
-		assertEquals("foo", collectionHolderValue.next());
-		assertEquals("bar", collectionHolderValue.next());
-		assertTrue(this.filteredCollectionHolder.iterator().hasNext());
-		assertEquals("bar", this.filteredCollectionHolder.iterator().next());
-
-		this.collectionHolder.remove("bar");
-		assertEquals("foo", this.collectionHolder.iterator().next());
-		assertFalse(this.filteredCollectionHolder.iterator().hasNext());
-
-		this.collectionHolder.remove("foo");
-		assertFalse(this.collectionHolder.iterator().hasNext());
-		assertFalse(this.filteredCollectionHolder.iterator().hasNext());
-
-		this.collectionHolder.add("foo");
-		assertEquals("foo", this.collectionHolder.iterator().next());
-		assertFalse(this.filteredCollectionHolder.iterator().hasNext());
-	}
-
-	public void testSetValue() {
-		// add a listener to "activate" the wrapper
-		this.filteredCollectionHolder.addCollectionChangeListener(CollectionValueModel.VALUES, this.buildFilteredListener());
-
-		Collection<String> newCollection = new Vector<String>();
-		newCollection.add("fox");
-		newCollection.add("baz");
-		
-		this.collectionHolder.setValues(newCollection);
-
-		Iterator<String> collectionValues = this.collectionHolder.iterator();
-		assertEquals("fox", collectionValues.next());
-		assertEquals("baz", collectionValues.next());
-		Iterator<String> filteredCollectionValues = this.filteredCollectionHolder.iterator();
-		assertEquals("baz", filteredCollectionValues.next());
-		assertFalse(filteredCollectionValues.hasNext());
-	}		
-
-	public void testLazyListening() {
-		assertTrue(((AbstractModel) this.collectionHolder).hasNoCollectionChangeListeners(CollectionValueModel.VALUES));
-		ChangeListener listener = this.buildFilteredChangeListener();
-		this.filteredCollectionHolder.addChangeListener(listener);
-		assertTrue(((AbstractModel) this.collectionHolder).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		this.filteredCollectionHolder.removeChangeListener(listener);
-		assertTrue(((AbstractModel) this.collectionHolder).hasNoCollectionChangeListeners(CollectionValueModel.VALUES));
-
-		this.filteredCollectionHolder.addCollectionChangeListener(CollectionValueModel.VALUES, listener);
-		assertTrue(((AbstractModel) this.collectionHolder).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		this.filteredCollectionHolder.removeCollectionChangeListener(CollectionValueModel.VALUES, listener);
-		assertTrue(((AbstractModel) this.collectionHolder).hasNoCollectionChangeListeners(CollectionValueModel.VALUES));
-	}
-
-	public void testCollectionChange1() {
-		this.collectionHolder.addChangeListener(this.buildChangeListener());
-		this.filteredCollectionHolder.addChangeListener(this.buildFilteredChangeListener());
-		this.verifyCollectionChanges();
-	}
-
-	public void testCollectionChange2() {
-		this.collectionHolder.addCollectionChangeListener(CollectionValueModel.VALUES, this.buildListener());
-		this.filteredCollectionHolder.addCollectionChangeListener(CollectionValueModel.VALUES, this.buildFilteredListener());
-		this.verifyCollectionChanges();
-	}
-
-	private void clearEvents() {
-		this.addEvent = null;
-		this.removeEvent = null;
-		this.collectionClearedEvent = null;
-		this.collectionChangedEvent = null;
-		this.filteredAddEvent = null;
-		this.filteredRemoveEvent = null;
-		this.filteredCollectionClearedEvent = null;
-		this.filteredCollectionChangedEvent = null;
-	}
-
-	private void verifyCollectionChanges() {
-		clearEvents();
-		this.collectionHolder.add("bar");
-		Collection<String> tempCollection = new Vector<String>();
-		tempCollection.add("bar");
-		this.verifyEvent(this.addEvent, this.collectionHolder, tempCollection);
-		this.verifyEvent(this.filteredAddEvent, this.filteredCollectionHolder, tempCollection);
-		
-		clearEvents();
-		this.collectionHolder.remove("foo");
-		tempCollection.remove("bar");
-		tempCollection.add("foo");
-		this.verifyEvent(this.removeEvent, this.collectionHolder, tempCollection);
-		assertNull(this.filteredRemoveEvent);
-
-
-		clearEvents();
-		this.collectionHolder.remove("bar");
-		tempCollection.add("bar");
-		tempCollection.remove("foo");
-		this.verifyEvent(this.removeEvent, this.collectionHolder, tempCollection);
-		this.verifyEvent(this.filteredRemoveEvent, this.filteredCollectionHolder, tempCollection);
-
-
-		clearEvents();
-		this.collectionHolder.add("foo");
-		tempCollection.remove("bar");
-		tempCollection.add("foo");
-		this.verifyEvent(this.addEvent, this.collectionHolder, tempCollection);
-		assertNull(this.filteredAddEvent);
-
-
-		clearEvents();
-		Collection<String> newCollection = new Vector<String>();
-		newCollection.add("fox");
-		newCollection.add("baz");
-		
-		this.collectionHolder.setValues(newCollection);
-
-		this.verifyEvent(this.collectionChangedEvent, this.collectionHolder);
-		
-		tempCollection.remove("foo");
-		tempCollection.add("baz");
-		this.verifyEvent(this.filteredCollectionChangedEvent, this.filteredCollectionHolder);
-		
-	}
-
-	private CollectionChangeListener buildListener() {
-		return new CollectionChangeListener() {
-			public void itemsAdded(CollectionAddEvent e) {
-				FilteringCollectionValueModelTests.this.addEvent = e;
-			}
-			public void itemsRemoved(CollectionRemoveEvent e) {
-				FilteringCollectionValueModelTests.this.removeEvent = e;
-			}
-			public void collectionCleared(CollectionClearEvent e) {
-				FilteringCollectionValueModelTests.this.collectionClearedEvent = e;
-			}
-			public void collectionChanged(CollectionChangeEvent e) {
-				FilteringCollectionValueModelTests.this.collectionChangedEvent = e;
-			}
-		};
-	}
-
-	private ChangeListener buildChangeListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {
-				FilteringCollectionValueModelTests.this.addEvent = e;
-			}
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent e) {
-				FilteringCollectionValueModelTests.this.removeEvent = e;
-			}
-			@Override
-			public void collectionCleared(CollectionClearEvent e) {
-				FilteringCollectionValueModelTests.this.collectionClearedEvent = e;
-			}
-			@Override
-			public void collectionChanged(CollectionChangeEvent e) {
-				FilteringCollectionValueModelTests.this.collectionChangedEvent = e;
-			}
-		};
-	}
-
-	private CollectionChangeListener buildFilteredListener() {
-		return new CollectionChangeListener() {
-			public void itemsAdded(CollectionAddEvent e) {
-				FilteringCollectionValueModelTests.this.filteredAddEvent = e;
-			}
-			public void itemsRemoved(CollectionRemoveEvent e) {
-				FilteringCollectionValueModelTests.this.filteredRemoveEvent = e;
-			}
-			public void collectionCleared(CollectionClearEvent e) {
-				FilteringCollectionValueModelTests.this.filteredCollectionClearedEvent = e;
-			}
-			public void collectionChanged(CollectionChangeEvent e) {
-				FilteringCollectionValueModelTests.this.filteredCollectionChangedEvent = e;
-			}
-		};
-	}
-
-	private ChangeListener buildFilteredChangeListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {
-				FilteringCollectionValueModelTests.this.filteredAddEvent = e;
-			}
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent e) {
-				FilteringCollectionValueModelTests.this.filteredRemoveEvent = e;
-			}
-			@Override
-			public void collectionCleared(CollectionClearEvent e) {
-				FilteringCollectionValueModelTests.this.filteredCollectionClearedEvent = e;
-			}
-			@Override
-			public void collectionChanged(CollectionChangeEvent e) {
-				FilteringCollectionValueModelTests.this.filteredCollectionChangedEvent = e;
-			}
-		};
-	}
-
-	private void verifyEvent(CollectionChangeEvent event, Object source) {
-		assertEquals(source, event.getSource());
-		assertEquals(CollectionValueModel.VALUES, event.getCollectionName());
-	}
-
-	private void verifyEvent(CollectionAddEvent event, Object source, Object items) {
-		assertEquals(source, event.getSource());
-		assertEquals(CollectionValueModel.VALUES, event.getCollectionName());
-		assertEquals(items, CollectionTools.vector(event.getItems()));
-	}
-
-	private void verifyEvent(CollectionRemoveEvent event, Object source, Object items) {
-		assertEquals(source, event.getSource());
-		assertEquals(CollectionValueModel.VALUES, event.getCollectionName());
-		assertEquals(items, CollectionTools.vector(event.getItems()));
-	}
-
-	public void testRemoveFilteredItem() {
-		// build collection with TestItems
-		SimpleCollectionValueModel<TestItem> tiHolder = new SimpleCollectionValueModel<TestItem>(this.buildCollection2());
-		CollectionValueModel<TestItem> filteredTIHolder = new FilteringCollectionValueModel<TestItem>(tiHolder, this.buildFilter2());
-		// add a listener to "activate" the wrapper
-		filteredTIHolder.addCollectionChangeListener(CollectionValueModel.VALUES, this.buildFilteredListener());
-
-		assertEquals(0, filteredTIHolder.size());
-
-		tiHolder.add(new TestItem("bar"));
-		assertEquals(1, filteredTIHolder.size());
-
-		TestItem baz = new TestItem("baz");
-		tiHolder.add(baz);
-		assertEquals(2, filteredTIHolder.size());
-		// before removing it, change the item so that it is filtered
-		baz.name = "jaz";
-		tiHolder.remove(baz);
-		// this would fail because the item was not removed from
-		// the filtered collection cache... but we've fixed it now
-		assertEquals(1, filteredTIHolder.size());
-	}
-
-	private Collection<TestItem> buildCollection2() {
-		Collection<TestItem> collection = new Vector<TestItem>();
-		collection.add(new TestItem("foo"));
-		return collection;
-	}
-
-	private Filter<TestItem> buildFilter2() {
-		return new Filter<TestItem>() {
-			public boolean accept(TestItem ti) {
-				return ti.name.startsWith("b");
-			}
-		};
-	}
-
-
-	// ********** TestItem inner class **********
-
-	private class TestItem {
-		String name;
-		TestItem(String name) {
-			super();
-			this.name = name;
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/FilteringPropertyValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/FilteringPropertyValueModelTests.java
deleted file mode 100644
index b676dda..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/FilteringPropertyValueModelTests.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.BidiFilter;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.FilteringWritablePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class FilteringPropertyValueModelTests extends TestCase {
-	private WritablePropertyValueModel<String> objectHolder;
-	PropertyChangeEvent event;
-
-	private WritablePropertyValueModel<String> filteredObjectHolder;
-	PropertyChangeEvent filteredEvent;
-
-	public FilteringPropertyValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.objectHolder = new SimplePropertyValueModel<String>("foo");
-		this.filteredObjectHolder = new FilteringWritablePropertyValueModel<String>(this.objectHolder, this.buildFilter());
-	}
-
-	private BidiFilter<String> buildFilter() {
-		return new BidiFilter<String>() {
-			public boolean accept(String s) {
-				return (s != null) && s.startsWith("b");
-			}
-			public boolean reverseAccept(String s) {
-				return (s != null) && s.startsWith("b");
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testValue() {
-		assertEquals("foo", this.objectHolder.getValue());
-		assertNull(this.filteredObjectHolder.getValue());
-
-		this.objectHolder.setValue("bar");
-		assertEquals("bar", this.objectHolder.getValue());
-		assertNotNull(this.filteredObjectHolder.getValue());
-		assertEquals("bar", this.filteredObjectHolder.getValue());
-
-		this.objectHolder.setValue("baz");
-		assertEquals("baz", this.objectHolder.getValue());
-		assertNotNull(this.filteredObjectHolder.getValue());
-		assertEquals("baz", this.filteredObjectHolder.getValue());
-
-		this.objectHolder.setValue(null);
-		assertNull(this.objectHolder.getValue());
-		assertNull(this.filteredObjectHolder.getValue());
-
-		this.objectHolder.setValue("foo");
-		assertEquals("foo", this.objectHolder.getValue());
-		assertNull(this.filteredObjectHolder.getValue());
-	}
-
-	public void testSetValue() {
-		this.filteredObjectHolder.setValue("bar");
-		assertEquals("bar", this.objectHolder.getValue());
-		assertEquals("bar", this.filteredObjectHolder.getValue());
-
-		this.filteredObjectHolder.setValue("foo");
-		assertEquals("bar", this.objectHolder.getValue());
-		assertEquals("bar", this.filteredObjectHolder.getValue());
-
-		this.filteredObjectHolder.setValue(null);
-		assertEquals("bar", this.objectHolder.getValue());
-		assertEquals("bar", this.filteredObjectHolder.getValue());
-
-		this.filteredObjectHolder.setValue("baz");
-		assertEquals("baz", this.objectHolder.getValue());
-		assertEquals("baz", this.filteredObjectHolder.getValue());
-	}
-
-	public void testLazyListening() {
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		ChangeListener listener = this.buildFilteredListener();
-		this.filteredObjectHolder.addChangeListener(listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.filteredObjectHolder.removeChangeListener(listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		this.filteredObjectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.filteredObjectHolder.removePropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-	}
-
-	public void testPropertyChange1() {
-		this.objectHolder.addChangeListener(this.buildListener());
-		this.filteredObjectHolder.addChangeListener(this.buildFilteredListener());
-		this.verifyPropertyChanges();
-	}
-
-	public void testPropertyChange2() {
-		this.objectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildListener());
-		this.filteredObjectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildFilteredListener());
-		this.verifyPropertyChanges();
-	}
-
-	private void verifyPropertyChanges() {
-		this.event = null;
-		this.filteredEvent = null;
-		this.objectHolder.setValue("bar");
-		this.verifyEvent(this.event, this.objectHolder, "foo", "bar");
-		this.verifyEvent(this.filteredEvent, this.filteredObjectHolder, null, "bar");
-
-		this.event = null;
-		this.filteredEvent = null;
-		this.objectHolder.setValue("baz");
-		this.verifyEvent(this.event, this.objectHolder, "bar", "baz");
-		this.verifyEvent(this.filteredEvent, this.filteredObjectHolder, "bar", "baz");
-
-		this.event = null;
-		this.filteredEvent = null;
-		this.objectHolder.setValue("foo");
-		this.verifyEvent(this.event, this.objectHolder, "baz", "foo");
-		this.verifyEvent(this.filteredEvent, this.filteredObjectHolder, "baz", null);
-
-		this.event = null;
-		this.filteredEvent = null;
-		this.objectHolder.setValue("fop");
-		this.verifyEvent(this.event, this.objectHolder, "foo", "fop");
-		assertNull(this.filteredEvent);
-
-		this.event = null;
-		this.filteredEvent = null;
-		this.objectHolder.setValue(null);
-		this.verifyEvent(this.event, this.objectHolder, "fop", null);
-		assertNull(this.filteredEvent);
-
-		this.event = null;
-		this.filteredEvent = null;
-		this.objectHolder.setValue("bar");
-		this.verifyEvent(this.event, this.objectHolder, null, "bar");
-		this.verifyEvent(this.filteredEvent, this.filteredObjectHolder, null, "bar");
-	}
-
-	private ChangeListener buildListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				FilteringPropertyValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	private ChangeListener buildFilteredListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				FilteringPropertyValueModelTests.this.filteredEvent = e;
-			}
-		};
-	}
-
-	private void verifyEvent(PropertyChangeEvent e, Object source, Object oldValue, Object newValue) {
-		assertEquals(source, e.getSource());
-		assertEquals(PropertyValueModel.VALUE, e.getPropertyName());
-		assertEquals(oldValue, e.getOldValue());
-		assertEquals(newValue, e.getNewValue());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ItemCollectionListValueModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ItemCollectionListValueModelAdapterTests.java
deleted file mode 100644
index e35d3c1..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ItemCollectionListValueModelAdapterTests.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import javax.swing.Icon;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ItemCollectionListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelWrapper;
-import org.eclipse.jpt.utility.internal.swing.Displayable;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ItemCollectionListValueModelAdapterTests extends TestCase {
-	private Junk foo;
-	private Junk bar;
-	private Junk baz;
-	private Junk joo;
-	private Junk jar;
-	private Junk jaz;
-
-	private Junk tom;
-	private Junk dick;
-	private Junk harry;
-
-	public ItemCollectionListValueModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.foo = new Junk("foo");
-		this.bar = new Junk("bar");
-		this.baz = new Junk("baz");
-		this.joo = new Junk("joo");
-		this.jar = new Junk("jar");
-		this.jaz = new Junk("jaz");
-
-		this.tom = new Junk("tom");
-		this.dick = new Junk("dick");
-		this.harry = new Junk("harry");
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testCollectionSynchronization() {
-		SimpleCollectionValueModel<Junk> collectionHolder = this.buildCollectionHolder();
-		ListValueModel<Junk> listValueModel = new ItemCollectionListValueModelAdapter<Junk>(collectionHolder, Junk.STUFF_COLLECTION);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		collectionHolder.add(this.tom);
-		collectionHolder.add(this.dick);
-		collectionHolder.add(this.harry);
-		assertEquals(9, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		collectionHolder.remove(this.foo);
-		collectionHolder.remove(this.jar);
-		collectionHolder.remove(this.harry);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-	}
-
-	public void testListSynchronization() {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new ItemCollectionListValueModelAdapter<Junk>(listHolder, Junk.STUFF_COLLECTION);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		listHolder.add(6, this.tom);
-		listHolder.add(7, this.dick);
-		listHolder.add(8, this.harry);
-		assertEquals(9, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		listHolder.remove(8);
-		listHolder.remove(0);
-		listHolder.remove(4);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-	}
-
-	private void compare(ListValueModel<Junk> listValueModel, List<Junk> list) {
-		assertEquals(listValueModel.size(), list.size());
-		for (int i = 0; i < listValueModel.size(); i++) {
-			assertEquals(listValueModel.get(i), list.get(i));
-		}
-	}
-
-
-	public void testHasListeners() throws Exception {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.foo.hasAnyListChangeListeners(Junk.STUFF_COLLECTION));
-		assertFalse(this.jaz.hasAnyListChangeListeners(Junk.STUFF_COLLECTION));
-
-		ListValueModel<Junk> listValueModel = new ItemCollectionListValueModelAdapter<Junk>(listHolder, Junk.STUFF_COLLECTION);
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.foo.hasAnyCollectionChangeListeners(Junk.STUFF_COLLECTION));
-		assertFalse(this.jaz.hasAnyCollectionChangeListeners(Junk.STUFF_COLLECTION));
-		this.verifyHasNoListeners(listValueModel);
-
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertTrue(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(this.foo.hasAnyCollectionChangeListeners(Junk.STUFF_COLLECTION));
-		assertTrue(this.jaz.hasAnyCollectionChangeListeners(Junk.STUFF_COLLECTION));
-		this.verifyHasListeners(listValueModel);
-
-		listValueModel.removeListChangeListener(ListValueModel.LIST_VALUES, synchList);
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.foo.hasAnyCollectionChangeListeners(Junk.STUFF_COLLECTION));
-		assertFalse(this.jaz.hasAnyCollectionChangeListeners(Junk.STUFF_COLLECTION));
-		this.verifyHasNoListeners(listValueModel);
-	}
-
-	public void testGetSize() throws Exception {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new ItemCollectionListValueModelAdapter<Junk>(listHolder, Junk.STUFF_COLLECTION);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		this.verifyHasListeners(listValueModel);
-		assertEquals(6, listValueModel.size());
-		assertEquals(6, synchList.size());
-	}
-
-	public void testGet() throws Exception {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new SortedListValueModelWrapper<Junk>(new ItemCollectionListValueModelAdapter<Junk>(listHolder, Junk.STUFF_COLLECTION));
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		this.verifyHasListeners(listValueModel);
-		assertEquals(this.bar, listValueModel.get(0));
-		assertEquals(this.bar, synchList.get(0));
-		this.bar.removeStuff("bar");
-		this.bar.addStuff("zzz");
-		this.bar.addStuff("bar");
-		assertEquals(this.bar, listValueModel.get(5));
-		assertEquals(this.bar, synchList.get(5));
-		this.bar.removeStuff("zzz");
-	}
-
-	private void verifyHasNoListeners(ListValueModel<Junk> listValueModel) throws Exception {
-		assertTrue(((AbstractModel) listValueModel).hasNoListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	private void verifyHasListeners(ListValueModel<Junk> listValueModel) throws Exception {
-		assertTrue(((AbstractModel) listValueModel).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	private SimpleCollectionValueModel<Junk> buildCollectionHolder() {
-		return new SimpleCollectionValueModel<Junk>(this.buildCollection());
-	}
-
-	private Collection<Junk> buildCollection() {
-		Bag<Junk> bag = new HashBag<Junk>();
-		this.populateCollection(bag);
-		return bag;
-	}
-
-	private SimpleListValueModel<Junk> buildListHolder() {
-		return new SimpleListValueModel<Junk>(this.buildList());
-	}
-
-	private List<Junk> buildList() {
-		List<Junk> list = new ArrayList<Junk>();
-		this.populateCollection(list);
-		return list;
-	}
-
-	private void populateCollection(Collection<Junk> c) {
-		c.add(this.foo);
-		c.add(this.bar);
-		c.add(this.baz);
-		c.add(this.joo);
-		c.add(this.jar);
-		c.add(this.jaz);
-	}
-
-
-	// ********** Junk class **********
-
-	private class Junk extends AbstractModel implements Displayable, Comparable<Junk> {
-		private Collection<String> stuff;
-			public static final String STUFF_COLLECTION = "stuff";
-			
-	
-		public Junk(String stuffItem) {
-			this.stuff = new ArrayList<String>();
-			this.stuff.add(stuffItem);
-		}
-	
-		public void addStuff(String stuffItem) {
-			this.addItemToCollection(stuffItem, this.stuff, STUFF_COLLECTION);
-		}
-		
-		public void removeStuff(String stuffItem) {
-			this.removeItemFromCollection(stuffItem, this.stuff, STUFF_COLLECTION);
-		}
-	
-		public String displayString() {
-			return toString();
-		}
-	
-		public Icon icon() {
-			return null;
-		}
-
-		public int compareTo(Junk o) {
-			return this.displayString().compareTo(o.displayString());
-		}
-
-		@Override
-		public String toString() {
-			return "Junk(" + this.stuff + ")";
-		}
-	
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ItemListListValueModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ItemListListValueModelAdapterTests.java
deleted file mode 100644
index aaaa7f8..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ItemListListValueModelAdapterTests.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import javax.swing.Icon;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ItemListListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelWrapper;
-import org.eclipse.jpt.utility.internal.swing.Displayable;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ItemListListValueModelAdapterTests extends TestCase {
-	private Junk foo;
-	private Junk bar;
-	private Junk baz;
-	private Junk joo;
-	private Junk jar;
-	private Junk jaz;
-
-	private Junk tom;
-	private Junk dick;
-	private Junk harry;
-
-	public ItemListListValueModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.foo = new Junk("foo");
-		this.bar = new Junk("bar");
-		this.baz = new Junk("baz");
-		this.joo = new Junk("joo");
-		this.jar = new Junk("jar");
-		this.jaz = new Junk("jaz");
-
-		this.tom = new Junk("tom");
-		this.dick = new Junk("dick");
-		this.harry = new Junk("harry");
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testCollectionSynchronization() {
-		SimpleCollectionValueModel<Junk> collectionHolder = this.buildCollectionHolder();
-		ListValueModel<Junk> listValueModel = new ItemListListValueModelAdapter<Junk>(collectionHolder, Junk.STUFF_LIST);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		collectionHolder.add(this.tom);
-		collectionHolder.add(this.dick);
-		collectionHolder.add(this.harry);
-		assertEquals(9, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		collectionHolder.remove(this.foo);
-		collectionHolder.remove(this.jar);
-		collectionHolder.remove(this.harry);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-	}
-
-	public void testListSynchronization() {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new ItemListListValueModelAdapter<Junk>(listHolder, Junk.STUFF_LIST);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		listHolder.add(6, this.tom);
-		listHolder.add(7, this.dick);
-		listHolder.add(8, this.harry);
-		assertEquals(9, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		listHolder.remove(8);
-		listHolder.remove(0);
-		listHolder.remove(4);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-	}
-
-	private void compare(ListValueModel<Junk> listValueModel, List<Junk> list) {
-		assertEquals(listValueModel.size(), list.size());
-		for (int i = 0; i < listValueModel.size(); i++) {
-			assertEquals(listValueModel.get(i), list.get(i));
-		}
-	}
-
-
-	public void testHasListeners() throws Exception {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.foo.hasAnyListChangeListeners(Junk.STUFF_LIST));
-		assertFalse(this.jaz.hasAnyListChangeListeners(Junk.STUFF_LIST));
-
-		ListValueModel<Junk> listValueModel = new ItemListListValueModelAdapter<Junk>(listHolder, Junk.STUFF_LIST);
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.foo.hasAnyListChangeListeners(Junk.STUFF_LIST));
-		assertFalse(this.jaz.hasAnyListChangeListeners(Junk.STUFF_LIST));
-		this.verifyHasNoListeners(listValueModel);
-
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertTrue(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(this.foo.hasAnyListChangeListeners(Junk.STUFF_LIST));
-		assertTrue(this.jaz.hasAnyListChangeListeners(Junk.STUFF_LIST));
-		this.verifyHasListeners(listValueModel);
-
-		listValueModel.removeListChangeListener(ListValueModel.LIST_VALUES, synchList);
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.foo.hasAnyListChangeListeners(Junk.STUFF_LIST));
-		assertFalse(this.jaz.hasAnyListChangeListeners(Junk.STUFF_LIST));
-		this.verifyHasNoListeners(listValueModel);
-	}
-
-	public void testGetSize() throws Exception {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new ItemListListValueModelAdapter<Junk>(listHolder, Junk.STUFF_LIST);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		this.verifyHasListeners(listValueModel);
-		assertEquals(6, listValueModel.size());
-		assertEquals(6, synchList.size());
-	}
-
-	public void testGet() throws Exception {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new SortedListValueModelWrapper<Junk>(new ItemListListValueModelAdapter<Junk>(listHolder, Junk.STUFF_LIST));
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		this.verifyHasListeners(listValueModel);
-		assertEquals(this.bar, listValueModel.get(0));
-		assertEquals(this.bar, synchList.get(0));
-		this.bar.removeStuff("bar");
-		this.bar.addStuff("zzz");
-		this.bar.addStuff("bar");
-		assertEquals(this.bar, listValueModel.get(5));
-		assertEquals(this.bar, synchList.get(5));
-		this.bar.removeStuff("zzz");
-	}
-
-	private void verifyHasNoListeners(ListValueModel<Junk> listValueModel) throws Exception {
-		assertTrue(((AbstractModel) listValueModel).hasNoListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	private void verifyHasListeners(ListValueModel<Junk> listValueModel) throws Exception {
-		assertTrue(((AbstractModel) listValueModel).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	private SimpleCollectionValueModel<Junk> buildCollectionHolder() {
-		return new SimpleCollectionValueModel<Junk>(this.buildCollection());
-	}
-
-	private Collection<Junk> buildCollection() {
-		Bag<Junk> bag = new HashBag<Junk>();
-		this.populateCollection(bag);
-		return bag;
-	}
-
-	private SimpleListValueModel<Junk> buildListHolder() {
-		return new SimpleListValueModel<Junk>(this.buildList());
-	}
-
-	private List<Junk> buildList() {
-		List<Junk> list = new ArrayList<Junk>();
-		this.populateCollection(list);
-		return list;
-	}
-
-	private void populateCollection(Collection<Junk> c) {
-		c.add(this.foo);
-		c.add(this.bar);
-		c.add(this.baz);
-		c.add(this.joo);
-		c.add(this.jar);
-		c.add(this.jaz);
-	}
-
-
-	// ********** Junk class **********
-
-	private class Junk extends AbstractModel implements Displayable, Comparable<Junk> {
-		private List<String> stuff;
-			public static final String STUFF_LIST = "stuff";
-			
-	
-		public Junk(String stuffItem) {
-			this.stuff = new ArrayList<String>();
-			this.stuff.add(stuffItem);
-		}
-		public void addStuff(String stuffItem) {
-			this.stuff.add(stuffItem);
-			fireItemAdded(STUFF_LIST, this.stuff.indexOf(stuffItem), stuffItem);
-		}
-		
-		public void removeStuff(String stuffItem) {
-			int index = this.stuff.indexOf(stuffItem);
-			this.stuff.remove(stuffItem);
-			fireItemRemoved(STUFF_LIST, index, stuffItem);
-		}
-	
-		public String displayString() {
-			return toString();
-		}
-	
-		public Icon icon() {
-			return null;
-		}
-
-		public int compareTo(Junk o) {
-			return this.displayString().compareTo(o.displayString());
-		}
-
-		@Override
-		public String toString() {
-			return "Junk(" + this.stuff + ")";
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ItemPropertyListValueModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ItemPropertyListValueModelAdapterTests.java
deleted file mode 100644
index a30ced9..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ItemPropertyListValueModelAdapterTests.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import javax.swing.Icon;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ItemPropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelWrapper;
-import org.eclipse.jpt.utility.internal.swing.Displayable;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ItemPropertyListValueModelAdapterTests extends TestCase {
-	private Junk foo;
-	private Junk bar;
-	private Junk baz;
-	private Junk joo;
-	private Junk jar;
-	private Junk jaz;
-
-	private Junk tom;
-	private Junk dick;
-	private Junk harry;
-
-	public ItemPropertyListValueModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.foo = new Junk("this.foo");
-		this.bar = new Junk("this.bar");
-		this.baz = new Junk("this.baz");
-		this.joo = new Junk("this.joo");
-		this.jar = new Junk("this.jar");
-		this.jaz = new Junk("this.jaz");
-
-		this.tom = new Junk("this.tom");
-		this.dick = new Junk("this.dick");
-		this.harry = new Junk("this.harry");
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testCollectionSynchronization() {
-		SimpleCollectionValueModel<Junk> collectionHolder = this.buildCollectionHolder();
-		ListValueModel<Junk> listValueModel = new ItemPropertyListValueModelAdapter<Junk>(collectionHolder, Displayable.DISPLAY_STRING_PROPERTY, Displayable.ICON_PROPERTY);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		collectionHolder.add(this.tom);
-		collectionHolder.add(this.dick);
-		collectionHolder.add(this.harry);
-		assertEquals(9, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		collectionHolder.remove(this.foo);
-		collectionHolder.remove(this.jar);
-		collectionHolder.remove(this.harry);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		collectionHolder.setValues(this.buildCollection());
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-	}
-
-	public void testListSynchronization() {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new ItemPropertyListValueModelAdapter<Junk>(listHolder, Displayable.DISPLAY_STRING_PROPERTY, Displayable.ICON_PROPERTY);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		listHolder.add(6, this.tom);
-		listHolder.add(7, this.dick);
-		listHolder.add(8, this.harry);
-		assertEquals(9, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		listHolder.remove(8);
-		listHolder.remove(0);
-		listHolder.remove(4);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		// test concurrent modification exception
-		listHolder.setListValues(this.buildList());
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-	}
-
-	private void compare(ListValueModel<Junk> listValueModel, List<Junk> list) {
-		assertEquals(listValueModel.size(), list.size());
-		for (int i = 0; i < listValueModel.size(); i++) {
-			assertEquals(listValueModel.get(i), list.get(i));
-		}
-	}
-
-	public void testCollectionSort() {
-		this.verifyCollectionSort(null);
-	}
-
-	public void testListSort() {
-		this.verifyListSort(null);
-	}
-
-	public void testCustomCollectionSort() {
-		this.verifyCollectionSort(this.buildCustomComparator());
-	}
-
-	public void testCustomListSort() {
-		this.verifyListSort(this.buildCustomComparator());
-	}
-
-	private Comparator<Junk> buildCustomComparator() {
-		// sort with reverse order
-		return new Comparator<Junk>() {
-			public int compare(Junk o1, Junk o2) {
-				return o2.displayString().compareTo(o1.displayString());
-			}
-		};
-	}
-
-	private void verifyCollectionSort(Comparator<Junk> comparator) {
-		SimpleCollectionValueModel<Junk> collectionHolder = this.buildCollectionHolder();
-		ListValueModel<Junk> listValueModel = new ItemPropertyListValueModelAdapter<Junk>(new SortedListValueModelAdapter<Junk>(collectionHolder, comparator), Displayable.DISPLAY_STRING_PROPERTY, Displayable.ICON_PROPERTY);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertEquals(6, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-
-		collectionHolder.add(this.tom);
-		collectionHolder.add(this.dick);
-		collectionHolder.add(this.harry);
-		assertEquals(9, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-
-		collectionHolder.remove(this.foo);
-		collectionHolder.remove(this.jar);
-		collectionHolder.remove(this.harry);
-		assertEquals(6, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-
-		collectionHolder.setValues(this.buildCollection());
-		assertEquals(6, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-	}
-
-	private void verifyListSort(Comparator<Junk> comparator) {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new ItemPropertyListValueModelAdapter<Junk>(new SortedListValueModelWrapper<Junk>(listHolder, comparator), Displayable.DISPLAY_STRING_PROPERTY, Displayable.ICON_PROPERTY);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertEquals(6, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-
-		listHolder.add(0, this.tom);
-		listHolder.add(0, this.dick);
-		listHolder.add(0, this.harry);
-		assertEquals(9, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-
-		listHolder.remove(8);
-		listHolder.remove(4);
-		listHolder.remove(0);
-		listHolder.remove(5);
-		assertEquals(5, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-
-		listHolder.setListValues(this.buildList());
-		assertEquals(6, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-	}
-
-	private void compareSort(ListValueModel<Junk> listValueModel, List<Junk> list, Comparator<Junk> comparator) {
-		SortedSet<Junk> ss = new TreeSet<Junk>(comparator);
-		for (int i = 0; i < listValueModel.size(); i++) {
-			ss.add(listValueModel.get(i));
-		}
-		assertEquals(ss.size(), list.size());
-		for (Iterator<Junk> stream1 = ss.iterator(), stream2 = list.iterator(); stream1.hasNext(); ) {
-			assertEquals(stream1.next(), stream2.next());
-		}
-	}
-
-	public void testHasListeners() throws Exception {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.foo.hasAnyPropertyChangeListeners(Displayable.DISPLAY_STRING_PROPERTY));
-		assertFalse(this.foo.hasAnyPropertyChangeListeners(Displayable.ICON_PROPERTY));
-		assertFalse(this.jaz.hasAnyPropertyChangeListeners(Displayable.DISPLAY_STRING_PROPERTY));
-		assertFalse(this.jaz.hasAnyPropertyChangeListeners(Displayable.ICON_PROPERTY));
-
-		ListValueModel<Junk> listValueModel = new ItemPropertyListValueModelAdapter<Junk>(new SortedListValueModelWrapper<Junk>(listHolder), Displayable.DISPLAY_STRING_PROPERTY, Displayable.ICON_PROPERTY);
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.foo.hasAnyPropertyChangeListeners(Displayable.DISPLAY_STRING_PROPERTY));
-		assertFalse(this.foo.hasAnyPropertyChangeListeners(Displayable.ICON_PROPERTY));
-		assertFalse(this.jaz.hasAnyPropertyChangeListeners(Displayable.DISPLAY_STRING_PROPERTY));
-		assertFalse(this.jaz.hasAnyPropertyChangeListeners(Displayable.ICON_PROPERTY));
-		this.verifyHasNoListeners(listValueModel);
-
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertTrue(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(this.foo.hasAnyPropertyChangeListeners(Displayable.DISPLAY_STRING_PROPERTY));
-		assertTrue(this.foo.hasAnyPropertyChangeListeners(Displayable.ICON_PROPERTY));
-		assertTrue(this.jaz.hasAnyPropertyChangeListeners(Displayable.DISPLAY_STRING_PROPERTY));
-		assertTrue(this.jaz.hasAnyPropertyChangeListeners(Displayable.ICON_PROPERTY));
-		this.verifyHasListeners(listValueModel);
-
-		listValueModel.removeListChangeListener(ListValueModel.LIST_VALUES, synchList);
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.foo.hasAnyPropertyChangeListeners(Displayable.DISPLAY_STRING_PROPERTY));
-		assertFalse(this.foo.hasAnyPropertyChangeListeners(Displayable.ICON_PROPERTY));
-		assertFalse(this.jaz.hasAnyPropertyChangeListeners(Displayable.DISPLAY_STRING_PROPERTY));
-		assertFalse(this.jaz.hasAnyPropertyChangeListeners(Displayable.ICON_PROPERTY));
-		this.verifyHasNoListeners(listValueModel);
-	}
-
-	public void testGetSize() throws Exception {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new ItemPropertyListValueModelAdapter<Junk>(new SortedListValueModelWrapper<Junk>(listHolder), Displayable.DISPLAY_STRING_PROPERTY, Displayable.ICON_PROPERTY);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		this.verifyHasListeners(listValueModel);
-		assertEquals(6, listValueModel.size());
-		assertEquals(6, synchList.size());
-	}
-
-	public void testGet() throws Exception {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new SortedListValueModelWrapper<Junk>(new ItemPropertyListValueModelAdapter<Junk>(listHolder, Displayable.DISPLAY_STRING_PROPERTY, Displayable.ICON_PROPERTY));
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		this.verifyHasListeners(listValueModel);
-		assertEquals(this.bar, listValueModel.get(0));
-		assertEquals(this.bar, synchList.get(0));
-		this.bar.setName("zzz");
-		assertEquals(this.bar, listValueModel.get(5));
-		assertEquals(this.bar, synchList.get(5));
-		this.bar.setName("this.bar");
-	}
-
-	private void verifyHasNoListeners(ListValueModel<Junk> listValueModel) throws Exception {
-		assertTrue(((AbstractModel) listValueModel).hasNoListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	private void verifyHasListeners(ListValueModel<Junk> listValueModel) throws Exception {
-		assertTrue(((AbstractModel) listValueModel).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	private SimpleCollectionValueModel<Junk> buildCollectionHolder() {
-		return new SimpleCollectionValueModel<Junk>(this.buildCollection());
-	}
-
-	private Collection<Junk> buildCollection() {
-		Bag<Junk> bag = new HashBag<Junk>();
-		this.populateCollection(bag);
-		return bag;
-	}
-
-	private SimpleListValueModel<Junk> buildListHolder() {
-		return new SimpleListValueModel<Junk>(this.buildList());
-	}
-
-	private List<Junk> buildList() {
-		List<Junk> list = new ArrayList<Junk>();
-		this.populateCollection(list);
-		return list;
-	}
-
-	private void populateCollection(Collection<Junk> c) {
-		c.add(this.foo);
-		c.add(this.bar);
-		c.add(this.baz);
-		c.add(this.joo);
-		c.add(this.jar);
-		c.add(this.jaz);
-	}
-
-
-	// ********** Junk class **********
-
-	private class Junk extends AbstractModel implements Displayable, Comparable<Junk> {
-		private String name;
-		public Junk(String name) {
-			this.name = name;
-		}
-		public String displayString() {
-			return this.name;
-		}
-		public Icon icon() {
-			return null;
-		}
-		public void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(DISPLAY_STRING_PROPERTY, old, name);
-		}
-		public int compareTo(Junk o) {
-			return this.displayString().compareTo(o.displayString());
-		}
-		@Override
-		public String toString() {
-			return "Junk(" + this.name + ")";
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ItemStateListValueModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ItemStateListValueModelAdapterTests.java
deleted file mode 100644
index 890249a..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ItemStateListValueModelAdapterTests.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ItemStateListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelWrapper;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ItemStateListValueModelAdapterTests extends TestCase {
-	private Junk foo;
-	private Junk bar;
-	private Junk baz;
-	private Junk joo;
-	private Junk jar;
-	private Junk jaz;
-
-	private Junk tom;
-	private Junk dick;
-	private Junk harry;
-
-	public ItemStateListValueModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.foo = new Junk("this.foo");
-		this.bar = new Junk("this.bar");
-		this.baz = new Junk("this.baz");
-		this.joo = new Junk("this.joo");
-		this.jar = new Junk("this.jar");
-		this.jaz = new Junk("this.jaz");
-
-		this.tom = new Junk("this.tom");
-		this.dick = new Junk("this.dick");
-		this.harry = new Junk("this.harry");
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testCollectionSynchronization() {
-		SimpleCollectionValueModel<Junk> collectionHolder = this.buildCollectionHolder();
-		ListValueModel<Junk> listValueModel = new ItemStateListValueModelAdapter<Junk>(collectionHolder);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		collectionHolder.add(this.tom);
-		collectionHolder.add(this.dick);
-		collectionHolder.add(this.harry);
-		assertEquals(9, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		collectionHolder.remove(this.foo);
-		collectionHolder.remove(this.jar);
-		collectionHolder.remove(this.harry);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-	}
-
-	public void testListSynchronization() {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new ItemStateListValueModelAdapter<Junk>(listHolder);
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		listHolder.add(6, this.tom);
-		listHolder.add(7, this.dick);
-		listHolder.add(8, this.harry);
-		assertEquals(9, synchList.size());
-		this.compare(listValueModel, synchList);
-
-		listHolder.remove(8);
-		listHolder.remove(0);
-		listHolder.remove(4);
-		assertEquals(6, synchList.size());
-		this.compare(listValueModel, synchList);
-	}
-
-	private void compare(ListValueModel<Junk> listValueModel, List<Junk> list) {
-		assertEquals(listValueModel.size(), list.size());
-		for (int i = 0; i < listValueModel.size(); i++) {
-			assertEquals(listValueModel.get(i), list.get(i));
-		}
-	}
-
-	public void testCollectionSort() {
-		this.verifyCollectionSort(null);
-	}
-
-	public void testListSort() {
-		this.verifyListSort(null);
-	}
-
-	public void testCustomCollectionSort() {
-		this.verifyCollectionSort(this.buildCustomComparator());
-	}
-
-	public void testCustomListSort() {
-		this.verifyListSort(this.buildCustomComparator());
-	}
-
-	private Comparator<Junk> buildCustomComparator() {
-		// sort with reverse order
-		return new Comparator<Junk>() {
-			public int compare(Junk o1, Junk o2) {
-				return o2.compareTo(o1);
-			}
-		};
-	}
-
-	private void verifyCollectionSort(Comparator<Junk> comparator) {
-		SimpleCollectionValueModel<Junk> collectionHolder = this.buildCollectionHolder();
-		ListValueModel<Junk> listValueModel = new ItemStateListValueModelAdapter<Junk>(new SortedListValueModelAdapter<Junk>(collectionHolder, comparator));
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertEquals(6, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-
-		collectionHolder.add(this.tom);
-		collectionHolder.add(this.dick);
-		collectionHolder.add(this.harry);
-		assertEquals(9, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-
-		collectionHolder.remove(this.foo);
-		collectionHolder.remove(this.jar);
-		collectionHolder.remove(this.harry);
-		assertEquals(6, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-	}
-
-	private void verifyListSort(Comparator<Junk> comparator) {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new ItemStateListValueModelAdapter<Junk>(new SortedListValueModelWrapper<Junk>(listHolder, comparator));
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertEquals(6, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-
-		listHolder.add(0, this.tom);
-		listHolder.add(0, this.dick);
-		listHolder.add(0, this.harry);
-		assertEquals(9, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-
-		listHolder.remove(8);
-		listHolder.remove(4);
-		listHolder.remove(0);
-		listHolder.remove(5);
-		assertEquals(5, synchList.size());
-		this.compareSort(listValueModel, synchList, comparator);
-	}
-
-	private void compareSort(ListValueModel<Junk> listValueModel, List<Junk> list, Comparator<Junk> comparator) {
-		SortedSet<Junk> ss = new TreeSet<Junk>(comparator);
-		for (int i = 0; i < listValueModel.size(); i++) {
-			ss.add(listValueModel.get(i));
-		}
-		assertEquals(ss.size(), list.size());
-		for (Iterator<Junk> stream1 = ss.iterator(), stream2 = list.iterator(); stream1.hasNext(); ) {
-			assertEquals(stream1.next(), stream2.next());
-		}
-	}
-
-	public void testHasListeners() throws Exception {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.foo.hasAnyStateChangeListeners());
-		assertFalse(this.foo.hasAnyStateChangeListeners());
-		assertFalse(this.jaz.hasAnyStateChangeListeners());
-		assertFalse(this.jaz.hasAnyStateChangeListeners());
-
-		ListValueModel<Junk> listValueModel = new ItemStateListValueModelAdapter<Junk>(new SortedListValueModelWrapper<Junk>(listHolder));
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.foo.hasAnyStateChangeListeners());
-		assertFalse(this.foo.hasAnyStateChangeListeners());
-		assertFalse(this.jaz.hasAnyStateChangeListeners());
-		assertFalse(this.jaz.hasAnyStateChangeListeners());
-		this.verifyHasNoListeners(listValueModel);
-
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		assertTrue(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(this.foo.hasAnyStateChangeListeners());
-		assertTrue(this.foo.hasAnyStateChangeListeners());
-		assertTrue(this.jaz.hasAnyStateChangeListeners());
-		assertTrue(this.jaz.hasAnyStateChangeListeners());
-		this.verifyHasListeners(listValueModel);
-
-		listValueModel.removeListChangeListener(ListValueModel.LIST_VALUES, synchList);
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(this.foo.hasAnyStateChangeListeners());
-		assertFalse(this.foo.hasAnyStateChangeListeners());
-		assertFalse(this.jaz.hasAnyStateChangeListeners());
-		assertFalse(this.jaz.hasAnyStateChangeListeners());
-		this.verifyHasNoListeners(listValueModel);
-	}
-
-	public void testGetSize() throws Exception {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new ItemStateListValueModelAdapter<Junk>(new SortedListValueModelWrapper<Junk>(listHolder));
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		this.verifyHasListeners(listValueModel);
-		assertEquals(6, listValueModel.size());
-		assertEquals(6, synchList.size());
-	}
-
-	public void testGet() throws Exception {
-		SimpleListValueModel<Junk> listHolder = this.buildListHolder();
-		ListValueModel<Junk> listValueModel = new SortedListValueModelWrapper<Junk>(new ItemStateListValueModelAdapter<Junk>(listHolder));
-		CoordinatedList<Junk> synchList = new CoordinatedList<Junk>(listValueModel);
-		this.verifyHasListeners(listValueModel);
-		assertEquals(this.bar, listValueModel.get(0));
-		assertEquals(this.bar, synchList.get(0));
-		this.bar.setName("zzz");
-		assertEquals(this.bar, listValueModel.get(5));
-		assertEquals(this.bar, synchList.get(5));
-		this.bar.setName("this.bar");
-	}
-
-	private void verifyHasNoListeners(ListValueModel<Junk> listValueModel) throws Exception {
-		assertTrue(((AbstractModel) listValueModel).hasNoListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	private void verifyHasListeners(ListValueModel<Junk> listValueModel) throws Exception {
-		assertTrue(((AbstractModel) listValueModel).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	private SimpleCollectionValueModel<Junk> buildCollectionHolder() {
-		return new SimpleCollectionValueModel<Junk>(this.buildCollection());
-	}
-
-	private Collection<Junk> buildCollection() {
-		Bag<Junk> bag = new HashBag<Junk>();
-		this.populateCollection(bag);
-		return bag;
-	}
-
-	private SimpleListValueModel<Junk> buildListHolder() {
-		return new SimpleListValueModel<Junk>(this.buildList());
-	}
-
-	private List<Junk> buildList() {
-		List<Junk> list = new ArrayList<Junk>();
-		this.populateCollection(list);
-		return list;
-	}
-
-	private void populateCollection(Collection<Junk> c) {
-		c.add(this.foo);
-		c.add(this.bar);
-		c.add(this.baz);
-		c.add(this.joo);
-		c.add(this.jar);
-		c.add(this.jaz);
-	}
-
-	// ********** Junk class **********
-	private class Junk extends AbstractModel implements Comparable<Junk> {
-		private String name;
-		public Junk(String name) {
-			this.name = name;
-		}
-		public void setName(String name) {
-			this.name = name;
-			this.fireStateChanged();
-		}
-		public int compareTo(Junk j) {
-			return this.name.compareTo(j.name);
-		}
-		@Override
-		public String toString() {
-			return "Junk(" + this.name + ")";
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/JptUtilityModelValueTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/JptUtilityModelValueTests.java
deleted file mode 100644
index 8bfbe02..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/JptUtilityModelValueTests.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.jpt.utility.tests.internal.model.value.prefs.JptUtilityModelValuePrefsTests;
-import org.eclipse.jpt.utility.tests.internal.model.value.swing.JptUtilityModelValueSwingTests;
-
-public class JptUtilityModelValueTests {
-	
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUtilityModelValueTests.class.getPackage().getName());
-
-		suite.addTest(JptUtilityModelValuePrefsTests.suite());
-		suite.addTest(JptUtilityModelValueSwingTests.suite());
-		
-		suite.addTestSuite(BufferedWritablePropertyValueModelTests.class);
-		suite.addTestSuite(CachingTransformationPropertyValueModelTests.class);
-		suite.addTestSuite(CachingTransformationWritablePropertyValueModelTests.class);
-		suite.addTestSuite(CollectionAspectAdapterTests.class);
-		suite.addTestSuite(CollectionListValueModelAdapterTests.class);
-		suite.addTestSuite(CollectionPropertyValueModelAdapterTests.class);
-		suite.addTestSuite(CompositeBooleanPropertyValueModelTests.class);
-		suite.addTestSuite(CompositeCollectionValueModelTests.class);
-		suite.addTestSuite(CompositeListValueModelTests.class);
-		suite.addTestSuite(CompositePropertyValueModelTests.class);
-		suite.addTestSuite(ExtendedListValueModelWrapperTests.class);
-		suite.addTestSuite(FilteringCollectionValueModelTests.class);
-		suite.addTestSuite(FilteringPropertyValueModelTests.class);
-		suite.addTestSuite(ItemCollectionListValueModelAdapterTests.class);
-		suite.addTestSuite(ItemListListValueModelAdapterTests.class);
-		suite.addTestSuite(ItemPropertyListValueModelAdapterTests.class);
-		suite.addTestSuite(ItemStateListValueModelAdapterTests.class);
-		suite.addTestSuite(ListAspectAdapterTests.class);
-		suite.addTestSuite(ListCollectionValueModelAdapterTests.class);
-		suite.addTestSuite(ListCuratorTests.class);
-		suite.addTestSuite(NullCollectionValueModelTests.class);
-		suite.addTestSuite(NullListValueModelTests.class);
-		suite.addTestSuite(NullPropertyValueModelTests.class);
-		suite.addTestSuite(PropertyAspectAdapterTests.class);
-		suite.addTestSuite(PropertyCollectionValueModelAdapterTests.class);
-		suite.addTestSuite(PropertyListValueModelAdapterTests.class);
-		suite.addTestSuite(ReadOnlyWritablePropertyValueModelWrapperTests.class);
-		suite.addTestSuite(SetCollectionValueModelTests.class);
-		suite.addTestSuite(SimpleCollectionValueModelTests.class);
-		suite.addTestSuite(SimpleListValueModelTests.class);
-		suite.addTestSuite(SimplePropertyValueModelTests.class);
-		suite.addTestSuite(SortedListValueModelAdapterTests.class);
-		suite.addTestSuite(SortedListValueModelWrapperTests.class);
-		suite.addTestSuite(StaticCollectionValueModelTests.class);
-		suite.addTestSuite(StaticListValueModelTests.class);
-		suite.addTestSuite(StaticValueModelTests.class);
-		suite.addTestSuite(TransformationListValueModelAdapterTests.class);
-		suite.addTestSuite(TransformationListValueModelAdapterTests.TransformerTests.class);
-		suite.addTestSuite(TransformationPropertyValueModelTests.class);
-		suite.addTestSuite(TreeAspectAdapterTests.class);
-		suite.addTestSuite(ValueCollectionAdapterTests.class);
-		suite.addTestSuite(ValueListAdapterTests.class);
-		suite.addTestSuite(ValuePropertyAdapterTests.class);
-		suite.addTestSuite(ValueStateAdapterTests.class);
-	
-		return suite;
-	}
-	
-	private JptUtilityModelValueTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-	
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ListAspectAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ListAspectAdapterTests.java
deleted file mode 100644
index 37c6718..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ListAspectAdapterTests.java
+++ /dev/null
@@ -1,476 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.ListIterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyListIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ListAspectAdapterTests extends TestCase {
-	private TestSubject subject1;
-	private WritablePropertyValueModel<TestSubject> subjectHolder1;
-	private LocalListAspectAdapter aa1;
-	private ListEvent event1;
-	private ListChangeListener listener1;
-
-	private TestSubject subject2;
-
-	public ListAspectAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.subject1 = new TestSubject();
-		this.subject1.addNames(this.subject1Names());
-		this.subject1.addDescriptions(this.subject1Descriptions());
-		this.subjectHolder1 = new SimplePropertyValueModel<TestSubject>(this.subject1);
-		this.aa1 = this.buildAspectAdapter(this.subjectHolder1);
-		this.listener1 = this.buildValueChangeListener1();
-		this.aa1.addListChangeListener(ListValueModel.LIST_VALUES, this.listener1);
-		this.event1 = null;
-
-		this.subject2 = new TestSubject();
-		this.subject2.addNames(this.subject2Names());
-		this.subject2.addDescriptions(this.subject2Descriptions());
-	}
-
-	private List<String> subject1Names() {
-		List<String> result = new ArrayList<String>();
-		result.add("foo");
-		result.add("bar");
-		result.add("baz");
-		result.add("bam");
-		return result;
-	}
-
-	private List<String> subject1Descriptions() {
-		List<String> result = new ArrayList<String>();
-		result.add("this.subject1 description1");
-		result.add("this.subject1 description2");
-		return result;
-	}
-
-	private List<String> subject2Names() {
-		List<String> result = new ArrayList<String>();
-		result.add("joo");
-		result.add("jar");
-		result.add("jaz");
-		result.add("jam");
-		return result;
-	}
-
-	private List<String> subject2Descriptions() {
-		List<String> result = new ArrayList<String>();
-		result.add("this.subject2 description1");
-		result.add("this.subject2 description2");
-		return result;
-	}
-
-	private LocalListAspectAdapter buildAspectAdapter(PropertyValueModel<TestSubject> subjectHolder) {
-		return new LocalListAspectAdapter(subjectHolder);
-	}
-
-	private ListChangeListener buildValueChangeListener1() {
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent e) {
-				ListAspectAdapterTests.this.value1Changed(e);
-			}
-			public void itemsRemoved(ListRemoveEvent e) {
-				ListAspectAdapterTests.this.value1Changed(e);
-			}
-			public void itemsReplaced(ListReplaceEvent e) {
-				ListAspectAdapterTests.this.value1Changed(e);
-			}
-			public void itemsMoved(ListMoveEvent e) {
-				ListAspectAdapterTests.this.value1Changed(e);
-			}
-			public void listCleared(ListClearEvent e) {
-				ListAspectAdapterTests.this.value1Changed(e);
-			}
-			public void listChanged(ListChangeEvent e) {
-				ListAspectAdapterTests.this.value1Changed(e);
-			}
-		};
-	}
-
-	void value1Changed(ListEvent e) {
-		this.event1 = e;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSubjectHolder() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.aa1.listIterator()));
-		assertNull(this.event1);
-
-		this.subjectHolder1.setValue(this.subject2);
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(this.subject2Names(), CollectionTools.list(this.aa1.listIterator()));
-		
-		this.event1 = null;
-		this.subjectHolder1.setValue(null);
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertFalse(this.aa1.iterator().hasNext());
-		
-		this.event1 = null;
-		this.subjectHolder1.setValue(this.subject1);
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(this.subject1Names(), CollectionTools.list(this.aa1.listIterator()));
-	}
-
-	public void testAdd() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.aa1.listIterator()));
-		assertNull(this.event1);
-
-		this.subject1.addName("jam");
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(this.subject1Names().size(), ((ListAddEvent) this.event1).getIndex());
-		assertEquals("jam", ((ListAddEvent) this.event1).getItems().iterator().next());
-		List<String> namesPlus = this.subject1Names();
-		namesPlus.add("jam");
-		assertEquals(namesPlus, CollectionTools.list(this.aa1.listIterator()));
-
-		this.event1 = null;
-		this.aa1.add(2, "jaz");
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(2, ((ListAddEvent) this.event1).getIndex());
-		assertEquals("jaz", ((ListAddEvent) this.event1).getItems().iterator().next());
-		namesPlus.add(2, "jaz");
-		assertEquals(namesPlus, CollectionTools.list(this.aa1.listIterator()));
-	}
-
-	public void testDefaultAdd() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.aa1.listIterator()));
-		assertNull(this.event1);
-
-		List<String> items = new ArrayList<String>();
-		items.add("joo");
-		items.add("jar");
-		items.add("jaz");
-		items.add("jam");
-
-		this.event1 = null;
-		this.aa1.addAll(2, items);
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(5, ((ListAddEvent) this.event1).getIndex());		// only the last "add" event will still be there
-		assertEquals("jam", ((ListAddEvent) this.event1).getItems().iterator().next());
-		List<String> namesPlus = this.subject1Names();
-		namesPlus.addAll(2, items);
-		assertEquals(namesPlus, CollectionTools.list(this.aa1.listIterator()));
-	}
-
-	public void testRemove() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.aa1.listIterator()));
-		assertNull(this.event1);
-
-		String removedName = this.subject1.removeName(0);	// should be "foo"
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(0, ((ListRemoveEvent) this.event1).getIndex());
-		assertEquals(removedName, ((ListRemoveEvent) this.event1).getItems().iterator().next());
-		List<String> namesMinus = this.subject1Names();
-		namesMinus.remove(0);
-		assertEquals(namesMinus, CollectionTools.list(this.aa1.listIterator()));
-
-		this.event1 = null;
-		Object removedItem = this.aa1.remove(0);	
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(0, ((ListRemoveEvent) this.event1).getIndex());
-		assertEquals(removedItem, ((ListRemoveEvent) this.event1).getItems().iterator().next());
-		namesMinus.remove(0);
-		assertEquals(namesMinus, CollectionTools.list(this.aa1.listIterator()));
-	}
-
-	public void testDefaultLength() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.aa1.listIterator()));
-		assertNull(this.event1);
-
-		List<String> items = new ArrayList<String>();
-		items.add("bar");
-		items.add("baz");
-
-		this.event1 = null;
-		this.aa1.remove(1, 2);
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(1, ((ListRemoveEvent) this.event1).getIndex());		// only the last "remove" event will still be there
-		assertEquals("baz", ((ListRemoveEvent) this.event1).getItems().iterator().next());
-		List<String> namesPlus = this.subject1Names();
-		namesPlus.remove(1);
-		namesPlus.remove(1);
-		assertEquals(namesPlus, CollectionTools.list(this.aa1.listIterator()));
-	}
-
-	public void testReplace() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.aa1.listIterator()));
-		assertNull(this.event1);
-
-		String replacedName = this.subject1.setName(0, "jelly");	// should be "foo"
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(0, ((ListReplaceEvent) this.event1).getIndex());
-		assertEquals("jelly", ((ListReplaceEvent) this.event1).getNewItems().iterator().next());
-		assertEquals(replacedName, ((ListReplaceEvent) this.event1).getOldItems().iterator().next());
-		List<String> namesChanged = this.subject1Names();
-		namesChanged.set(0, "jelly");
-		assertEquals(namesChanged, CollectionTools.list(this.aa1.listIterator()));
-
-		this.event1 = null;
-		replacedName = this.subject1.setName(1, "roll");	// should be "bar"
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(1, ((ListReplaceEvent) this.event1).getIndex());
-		assertEquals("roll", ((ListReplaceEvent) this.event1).getNewItems().iterator().next());
-		assertEquals(replacedName, ((ListReplaceEvent) this.event1).getOldItems().iterator().next());
-		namesChanged = this.subject1Names();
-		namesChanged.set(0, "jelly");
-		namesChanged.set(1, "roll");
-		assertEquals(namesChanged, CollectionTools.list(this.aa1.listIterator()));
-	}
-
-	public void testListChange() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.aa1.listIterator()));
-		assertNull(this.event1);
-
-		this.subject1.addTwoNames("jam", "jaz");
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		List<String> namesPlus2 = this.subject1Names();
-		namesPlus2.add(0, "jaz");
-		namesPlus2.add(0, "jam");
-		assertEquals(namesPlus2, CollectionTools.list(this.aa1.listIterator()));
-	}
-
-	public void testIterator() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.subject1.names()));
-		assertEquals(this.subject1Names(), CollectionTools.list(this.aa1.listIterator()));
-	}
-
-	public void testGet() {
-		assertEquals(this.subject1Names().get(0), this.subject1.getName(0));
-		assertEquals(this.subject1Names().get(0), this.aa1.get(0));
-	}
-
-	public void testSize() {
-		assertEquals(this.subject1Names().size(), CollectionTools.size(this.subject1.names()));
-		assertEquals(this.subject1Names().size(), CollectionTools.size(this.aa1.listIterator()));
-	}
-
-	public void testHasListeners() {
-		assertTrue(this.aa1.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(this.subject1.hasAnyListChangeListeners(TestSubject.NAMES_LIST));
-		this.aa1.removeListChangeListener(ListValueModel.LIST_VALUES, this.listener1);
-		assertFalse(this.subject1.hasAnyListChangeListeners(TestSubject.NAMES_LIST));
-		assertFalse(this.aa1.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		ChangeListener listener2 = new ChangeAdapter();
-		this.aa1.addChangeListener(listener2);
-		assertTrue(this.aa1.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(this.subject1.hasAnyListChangeListeners(TestSubject.NAMES_LIST));
-		this.aa1.removeChangeListener(listener2);
-		assertFalse(this.subject1.hasAnyListChangeListeners(TestSubject.NAMES_LIST));
-		assertFalse(this.aa1.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-
-	// ********** inner class **********
-
-	class TestSubject extends AbstractModel {
-		private List<String> names;
-		public static final String NAMES_LIST = "names";
-		private List<String> descriptions;
-		public static final String DESCRIPTIONS_LIST = "descriptions";
-	
-		public TestSubject() {
-			this.names = new ArrayList<String>();
-			this.descriptions = new ArrayList<String>();
-		}
-		public ListIterator<String> names() {
-			return new ReadOnlyListIterator<String>(this.names);
-		}
-		public String getName(int index) {
-			return this.names.get(index);
-		}
-		public void addName(int index, String name) {
-			this.names.add(index, name);
-			this.fireItemAdded(NAMES_LIST, index, name);
-		}
-		public void addName(String name) {
-			this.addName(this.names.size(), name);
-		}
-		public void addNames(ListIterator<String> newNames) {
-			while (newNames.hasNext()) {
-				this.addName(newNames.next());
-			}
-		}
-		public void addNames(List<String> newNames) {
-			this.addNames(newNames.listIterator());
-		}
-		public void addTwoNames(String name1, String name2) {
-			this.names.add(0, name2);
-			this.names.add(0, name1);
-			this.fireListChanged(NAMES_LIST, this.names);
-		}
-		public String removeName(int index) {
-			String removedName = this.names.remove(index);
-			this.fireItemRemoved(NAMES_LIST, index, removedName);
-			return removedName;
-		}
-		public String setName(int index, String name) {
-			String replacedName = this.names.set(index, name);
-			this.fireItemReplaced(NAMES_LIST, index, name, replacedName);
-			return replacedName;
-		}
-		public ListIterator<String> descriptions() {
-			return new ReadOnlyListIterator<String>(this.descriptions);
-		}
-		public String getDescription(int index) {
-			return this.descriptions.get(index);
-		}
-		public void addDescription(int index, String description) {
-			this.descriptions.add(index, description);
-			this.fireItemAdded(DESCRIPTIONS_LIST, index, description);
-		}
-		public void addDescription(String description) {
-			this.addDescription(this.descriptions.size(), description);
-		}
-		public void addDescriptions(ListIterator<String> newDescriptions) {
-			while (newDescriptions.hasNext()) {
-				this.addDescription(newDescriptions.next());
-			}
-		}
-		public void addDescriptions(List<String> newDescriptions) {
-			this.addDescriptions(newDescriptions.listIterator());
-		}
-		public String removeDescription(int index) {
-			String removedDescription = this.descriptions.remove(index);
-			this.fireItemRemoved(DESCRIPTIONS_LIST, index, removedDescription);
-			return removedDescription;
-		}
-		public String setDescription(int index, String description) {
-			String replacedDescription = this.descriptions.set(index, description);
-			this.fireItemReplaced(DESCRIPTIONS_LIST, index, description, replacedDescription);
-			return replacedDescription;
-		}
-	}
-
-
-	// this is not a typical aspect adapter - the value is determined by the aspect name
-	class LocalListAspectAdapter extends ListAspectAdapter<TestSubject, String> {
-
-		LocalListAspectAdapter(PropertyValueModel<TestSubject> subjectHolder) {
-			super(subjectHolder, TestSubject.NAMES_LIST);
-		}
-
-		@Override
-		protected ListIterator<String> listIterator_() {
-			if (this.listNames[0] == TestSubject.NAMES_LIST) {
-				return this.subject.names();
-			} else if (this.listNames[0] == TestSubject.DESCRIPTIONS_LIST) {
-				return this.subject.descriptions();
-			} else {
-				throw new IllegalStateException("invalid aspect name: " + this.listNames[0]);
-			}
-		}
-
-		public void add(int index, Object item) {
-			if (this.listNames[0] == TestSubject.NAMES_LIST) {
-				this.subject.addName(index, (String) item);
-			} else if (this.listNames[0] == TestSubject.DESCRIPTIONS_LIST) {
-				this.subject.addDescription(index, (String) item);
-			} else {
-				throw new IllegalStateException("invalid aspect name: " + this.listNames[0]);
-			}
-		}
-
-		public void addAll(int index, List<String> items) {
-			for (int i = 0; i < items.size(); i++) {
-				this.add(index + i, items.get(i));
-			}
-		}
-
-		public String remove(int index) {
-			if (this.listNames[0] == TestSubject.NAMES_LIST) {
-				return this.subject.removeName(index);
-			} else if (this.listNames[0] == TestSubject.DESCRIPTIONS_LIST) {
-				return this.subject.removeDescription(index);
-			} else {
-				throw new IllegalStateException("invalid aspect name: " + this.listNames[0]);
-			}
-		}
-
-		public List<String> remove(int index, int length) {
-			List<String> removedItems = new ArrayList<String>(length);
-			for (int i = 0; i < length; i++) {
-				removedItems.add(this.remove(index));
-			}
-			return removedItems;
-		}
-
-		public Object replace(int index, Object item) {
-			if (this.listNames[0] == TestSubject.NAMES_LIST) {
-				return this.subject.setName(index, (String) item);
-			} else if (this.listNames[0] == TestSubject.DESCRIPTIONS_LIST) {
-				return this.subject.setDescription(index, (String) item);
-			} else {
-				throw new IllegalStateException("invalid aspect name: " + this.listNames[0]);
-			}
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ListCollectionValueModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ListCollectionValueModelAdapterTests.java
deleted file mode 100644
index 0c083da..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ListCollectionValueModelAdapterTests.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import javax.swing.JList;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ListCollectionValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ListModelAdapter;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ListCollectionValueModelAdapterTests extends TestCase {
-	CollectionValueModel<String> adapter;
-	private SimpleListValueModel<String> wrappedListHolder;
-	private List<String> wrappedList;
-
-	public ListCollectionValueModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.wrappedList = new ArrayList<String>();
-		this.wrappedListHolder = new SimpleListValueModel<String>(this.wrappedList);
-		this.adapter = new ListCollectionValueModelAdapter<String>(this.wrappedListHolder);
-	}
-
-	private Collection<String> wrappedCollection() {
-		return CollectionTools.collection(this.wrappedList.iterator());
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIterator() {
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {
-				// override failure
-			}
-		});
-		this.wrappedListHolder.add(0, "foo");
-		this.wrappedListHolder.add(1, "bar");
-		this.wrappedListHolder.add(2, "baz");
-		Collection<String> adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(3, adapterCollection.size());
-		assertEquals(this.wrappedCollection(), adapterCollection);
-	}
-
-	public void testStaleValues() {
-		CollectionChangeListener listener = new TestListener() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {/* OK */}
-		};
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, listener);
-		this.wrappedListHolder.add(0, "foo");
-		this.wrappedListHolder.add(1, "bar");
-		this.wrappedListHolder.add(2, "baz");
-		Collection<String> adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(3, adapterCollection.size());
-		assertEquals(this.wrappedCollection(), adapterCollection);
-
-		this.adapter.removeCollectionChangeListener(CollectionValueModel.VALUES, listener);
-		adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(0, adapterCollection.size());
-		assertEquals(new HashBag<String>(), adapterCollection);
-
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, listener);
-		adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(3, adapterCollection.size());
-		assertEquals(this.wrappedCollection(), adapterCollection);
-	}
-
-	public void testAdd() {
-		Bag<String> synchCollection = new CoordinatedBag<String>(this.adapter);
-		List<String> synchList = new CoordinatedList<String>(this.wrappedListHolder);
-		this.wrappedListHolder.add(0, "foo");
-		assertTrue(this.wrappedList.contains("foo"));
-		this.wrappedListHolder.add(1, "bar");
-		this.wrappedListHolder.add(2, "baz");
-		this.wrappedListHolder.add(3, "joo");
-		this.wrappedListHolder.add(4, "jar");
-		this.wrappedListHolder.add(5, "jaz");
-		assertEquals(6, this.wrappedList.size());
-
-		Collection<String> adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(this.wrappedCollection(), adapterCollection);
-		assertEquals(this.wrappedCollection(), CollectionTools.collection(synchList.iterator()));
-		assertEquals(this.wrappedCollection(), synchCollection);
-	}
-
-	public void testRemove() {
-		Bag<String> synchCollection = new CoordinatedBag<String>(this.adapter);
-		List<String> synchList = new CoordinatedList<String>(this.wrappedListHolder);
-		this.wrappedListHolder.add(0, "foo");
-		this.wrappedListHolder.add(1, "bar");
-		this.wrappedListHolder.add(2, "baz");
-		this.wrappedListHolder.add(3, "joo");
-		this.wrappedListHolder.add(4, "jar");
-		this.wrappedListHolder.add(5, "jaz");
-		assertEquals("jaz", this.wrappedListHolder.remove(5));
-		assertFalse(this.wrappedList.contains("jaz"));
-		assertEquals("foo", this.wrappedListHolder.remove(0));
-		assertFalse(this.wrappedList.contains("foo"));
-		assertEquals(4, this.wrappedList.size());
-
-		Collection<String> adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(this.wrappedCollection(), adapterCollection);
-		assertEquals(this.wrappedCollection(), CollectionTools.collection(synchList.iterator()));
-		assertEquals(this.wrappedCollection(), synchCollection);
-	}
-
-	public void testListSynch() {
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {
-				// override failure
-			}
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent e) {
-				// override failure
-			}
-		});
-		this.wrappedListHolder.add(0, "foo");
-		this.wrappedListHolder.add(1, "bar");
-		this.wrappedListHolder.add(2, "baz");
-		this.wrappedListHolder.add(3, "joo");
-		this.wrappedListHolder.add(4, "jar");
-		this.wrappedListHolder.add(5, "jaz");
-		this.wrappedListHolder.remove(5);
-		assertFalse(this.wrappedList.contains("jaz"));
-		this.wrappedListHolder.remove(0);
-		assertFalse(this.wrappedList.contains("foo"));
-		assertEquals(4, this.wrappedList.size());
-
-		Collection<String> adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(this.wrappedCollection(), adapterCollection);
-	}
-
-	public void testReplace() {
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {
-				// override failure
-			}
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent e) {
-				// override failure
-			}
-		});
-		this.wrappedListHolder.add(0, "foo");
-		this.wrappedListHolder.add(1, "bar");
-		this.wrappedListHolder.add(2, "baz");
-		Collection<String> adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(3, adapterCollection.size());
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, new TestListener() {
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent e) {
-				assertEquals("foo", e.getItems().iterator().next());
-				assertFalse(CollectionTools.contains(ListCollectionValueModelAdapterTests.this.adapter.iterator(), "joo"));
-				assertEquals(2, ListCollectionValueModelAdapterTests.this.adapter.size());
-			}
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {
-				assertEquals("joo", e.getItems().iterator().next());
-				assertEquals(3, ListCollectionValueModelAdapterTests.this.adapter.size());
-			}
-		});
-		this.wrappedListHolder.set(0, "joo");
-		adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(3, adapterCollection.size());
-		assertEquals(this.wrappedCollection(), adapterCollection);
-	}
-
-	public void testHasListeners() {
-		assertFalse(((AbstractModel) this.adapter).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		CoordinatedBag<String> synchCollection = new CoordinatedBag<String>(this.adapter);
-		assertTrue(((AbstractModel) this.adapter).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		this.adapter.removeCollectionChangeListener(CollectionValueModel.VALUES, synchCollection);
-		assertFalse(((AbstractModel) this.adapter).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-
-		ChangeListener cl = new ChangeAdapter();
-		this.adapter.addChangeListener(cl);
-		assertTrue(((AbstractModel) this.adapter).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		this.adapter.removeChangeListener(cl);
-		assertFalse(((AbstractModel) this.adapter).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-	}
-	
-	public void testListChangedToEmpty() {
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {/* OK */}
-			@Override
-			public void collectionCleared(CollectionClearEvent e) {/* OK */}
-		});
-		this.wrappedListHolder.add(0, "foo");
-		this.wrappedListHolder.add(1, "bar");
-		this.wrappedListHolder.add(2, "baz");
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		this.wrappedListHolder.setListValues(new ArrayList<String>());
-		assertEquals(0, jList.getModel().getSize());
-	}
-	
-	public void testCollectionChangedFromEmpty() {
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {/* OK */}
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent e) {/* OK */}
-		});
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("foo");
-		list.add("bar");
-		this.wrappedListHolder.setListValues(list);
-		assertEquals(2, jList.getModel().getSize());
-	}
-	
-	public void testCollectionChangedFromEmptyToEmpty() {
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {/* OK */}
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent e) {/* OK */}
-		});
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		
-		ArrayList<String> list = new ArrayList<String>();
-		this.wrappedListHolder.setListValues(list);
-		assertEquals(0, jList.getModel().getSize());
-	}
-
-
-	// ********** inner class **********
-
-	class TestListener implements CollectionChangeListener {
-		public void itemsAdded(CollectionAddEvent e) {
-			fail("unexpected event");
-		}
-		public void itemsRemoved(CollectionRemoveEvent e) {
-			fail("unexpected event");
-		}
-		public void collectionCleared(CollectionClearEvent e) {
-			fail("unexpected event");
-		}
-		public void collectionChanged(CollectionChangeEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ListCuratorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ListCuratorTests.java
deleted file mode 100644
index 49ce46f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ListCuratorTests.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyListIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ListCurator;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public final class ListCuratorTests 
-	extends TestCase 
-{
-	private TestSubject subject1;
-	private WritablePropertyValueModel<TestSubject> subjectHolder1;
-	
-	private ListCurator<TestSubject, String> curator;
-	private ListChangeListener listener1;
-	private ListEvent event1;
-	
-	private TestSubject subject2;
-
-	public ListCuratorTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.subject1 = new TestSubject(this.subject1Names());
-		this.subjectHolder1 = new SimplePropertyValueModel<TestSubject>(this.subject1);
-		this.curator = this.buildListCurator(this.subjectHolder1);
-		this.listener1 = this.buildListChangeListener1();
-		this.curator.addListChangeListener(ListValueModel.LIST_VALUES, this.listener1);
-		this.event1 = null;
-		
-		this.subject2 = new TestSubject(this.subject2Names());
-	}
-	
-	private List<String> subject1Names() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("alpha");
-		list.add("bravo");
-		list.add("charlie");
-		list.add("delta");
-		return list;
-	}
-	
-	private List<String> subject2Names() {
-		ArrayList<String> list = new ArrayList<String>();
-		list.add("echo");
-		list.add("foxtrot");
-		list.add("glove");
-		list.add("hotel");
-		return list;
-	}
-	
-	private ListCurator<TestSubject, String> buildListCurator(PropertyValueModel<TestSubject> subjectHolder) {
-		return new ListCurator<TestSubject, String>(subjectHolder) {
-			@Override
-			public Iterator<String> iteratorForRecord() {
-				return this.subject.strings();
-			}
-		};
-	}
-
-	private ListChangeListener buildListChangeListener1() {
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent e) {
-				ListCuratorTests.this.value1Changed(e);
-			}
-			public void itemsRemoved(ListRemoveEvent e) {
-				ListCuratorTests.this.value1Changed(e);
-			}
-			public void itemsReplaced(ListReplaceEvent e) {
-				ListCuratorTests.this.value1Changed(e);
-			}
-			public void itemsMoved(ListMoveEvent e) {
-				ListCuratorTests.this.value1Changed(e);
-			}
-			public void listCleared(ListClearEvent e) {
-				ListCuratorTests.this.value1Changed(e);
-			}
-			public void listChanged(ListChangeEvent e) {
-				ListCuratorTests.this.value1Changed(e);
-			}
-		};
-	}
-
-	void value1Changed(ListEvent e) {
-		this.event1 = e;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSubjectHolder() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.curator.listIterator()));
-		assertNull(this.event1);
-
-		this.subjectHolder1.setValue(this.subject2);
-		assertNotNull(this.event1);
-		assertEquals(this.curator, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(this.subject2Names(), CollectionTools.list(this.curator.listIterator()));
-		
-		this.event1 = null;
-		this.subjectHolder1.setValue(null);
-		assertNotNull(this.event1);
-		assertEquals(this.curator, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertFalse(this.curator.iterator().hasNext());
-		
-		this.event1 = null;
-		this.subjectHolder1.setValue(this.subject1);
-		assertNotNull(this.event1);
-		assertEquals(this.curator, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(this.subject1Names(), CollectionTools.list(this.curator.listIterator()));
-	}
-
-	public void testAdd() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.curator.listIterator()));
-		assertNull(this.event1);
-
-		this.subject1.addString("echo");
-		assertNotNull(this.event1);
-		assertEquals(this.curator, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(this.subject1Names().size(), ((ListAddEvent) this.event1).getIndex());
-		assertEquals("echo", ((ListAddEvent) this.event1).getItems().iterator().next());
-		List<String> stringsPlus = this.subject1Names();
-		stringsPlus.add("echo");
-		assertEquals(stringsPlus, CollectionTools.list(this.curator.listIterator()));
-
-		this.event1 = null;
-		this.subject1.addString(0, "zulu");
-		assertNotNull(this.event1);
-		assertEquals(this.curator, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(0, ((ListAddEvent) this.event1).getIndex());
-		assertEquals("zulu", ((ListAddEvent) this.event1).getItems().iterator().next());
-		stringsPlus.add(0, "zulu");
-		assertEquals(stringsPlus, CollectionTools.list(this.curator.listIterator()));
-	}
-	
-	public void testRemove() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.curator.listIterator()));
-		assertNull(this.event1);
-
-		String removedString = this.subject1.removeString(0);	// should be "alpha"
-		assertNotNull(this.event1);
-		assertEquals(this.curator, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(0, ((ListRemoveEvent) this.event1).getIndex());
-		assertEquals(removedString, ((ListRemoveEvent) this.event1).getItems().iterator().next());
-		List<String> stringsMinus = this.subject1Names();
-		stringsMinus.remove(0);
-		assertEquals(stringsMinus, CollectionTools.list(this.curator.listIterator()));
-		
-		removedString = this.subject1.removeString(2);	// should be "delta"
-		assertNotNull(this.event1);
-		assertEquals(this.curator, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(2, ((ListRemoveEvent) this.event1).getIndex());
-		assertEquals(removedString, ((ListRemoveEvent) this.event1).getItems().iterator().next());
-		stringsMinus.remove(2);
-		assertEquals(stringsMinus, CollectionTools.list(this.curator.listIterator()));
-	}
-	
-	public void testCompleteListChange() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.curator.listIterator()));
-		assertNull(this.event1);
-		
-		this.subject1.setStrings(this.subject2Names());
-		assertNotNull(this.event1);
-		assertEquals(this.curator, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		List<String> newStrings = this.subject2Names();
-		assertEquals(newStrings, CollectionTools.list(this.curator.listIterator()));
-	}
-	
-	public void testPartialListChange() {
-		List<String> startingList = CollectionTools.list(this.curator.listIterator());
-		assertEquals(this.subject1Names(), startingList);
-		assertNull(this.event1);
-		
-		String identicalString = startingList.get(1);  // should be "bravo"
-		String nonidenticalString = startingList.get(0); // should be "alpha"
-		List<String> newStrings = CollectionTools.list(new String[] {new String("bravo"), new String("alpha"), "echo", "delta", "foxtrot"});
-		this.subject1.setStrings(newStrings);
-		
-		List<String> finalList = CollectionTools.list(this.curator.listIterator());
-		assertNotNull(this.event1);
-		assertEquals(this.curator, this.event1.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event1.getListName());
-		assertEquals(newStrings, finalList);
-		assertTrue(identicalString == finalList.get(0));
-		assertTrue(nonidenticalString != finalList.get(1));
-	}
-	
-	public void testIterator() {
-		assertEquals(this.subject1Names(), CollectionTools.list(this.subject1.strings()));
-		assertEquals(this.subject1Names(), CollectionTools.list(this.curator.listIterator()));
-	}
-	
-	public void testGet() {
-		assertEquals(this.subject1Names().get(0), this.subject1.getString(0));
-		assertEquals(this.subject1Names().get(0), this.curator.get(0));
-	}
-	
-	public void testSize() {
-		assertEquals(this.subject1Names().size(), CollectionTools.size(this.subject1.strings()));
-		assertEquals(this.subject1Names().size(), CollectionTools.size(this.curator.listIterator()));
-		assertEquals(this.subject1Names().size(), this.curator.size());
-	}
-	
-	public void testHasListeners() {
-		assertTrue(this.curator.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(this.subject1.hasAnyStateChangeListeners());
-		this.curator.removeListChangeListener(ListValueModel.LIST_VALUES, this.listener1);
-		assertFalse(this.subject1.hasAnyStateChangeListeners());
-		assertFalse(this.curator.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		ChangeListener listener2 = this.buildChangeListener();
-		this.curator.addChangeListener(listener2);
-		assertTrue(this.curator.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(this.subject1.hasAnyStateChangeListeners());
-		this.curator.removeChangeListener(listener2);
-		assertFalse(this.subject1.hasAnyStateChangeListeners());
-		assertFalse(this.curator.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-	
-	private ChangeListener buildChangeListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {
-				ListCuratorTests.this.value1Changed(e);
-			}
-			@Override
-			public void itemsRemoved(ListRemoveEvent e) {
-				ListCuratorTests.this.value1Changed(e);
-			}
-			@Override
-			public void itemsReplaced(ListReplaceEvent e) {
-				ListCuratorTests.this.value1Changed(e);
-			}
-			@Override
-			public void itemsMoved(ListMoveEvent e) {
-				ListCuratorTests.this.value1Changed(e);
-			}
-			@Override
-			public void listCleared(ListClearEvent e) {
-				ListCuratorTests.this.value1Changed(e);
-			}
-			@Override
-			public void listChanged(ListChangeEvent e) {
-				ListCuratorTests.this.value1Changed(e);
-			}
-		};
-	}
-
-	
-	// **************** Inner Class *******************************************
-	
-	class TestSubject extends AbstractModel {
-		private List<String> strings;
-		
-		public TestSubject() {
-			this.strings = new ArrayList<String>();
-		}
-		
-		public TestSubject(List<String> strings) {
-			this();
-			this.setStrings(strings);
-		}
-		
-		public String getString(int index) {
-			return this.strings.get(index);
-		}
-		
-		public ListIterator<String> strings() {
-			return new ReadOnlyListIterator<String>(this.strings);
-		}
-		
-		public void addString(int index, String string) {
-			this.strings.add(index, string);
-			this.fireStateChanged();
-		}
-		
-		public void addString(String string) {
-			this.addString(this.strings.size(), string);
-		}
-		
-		public String removeString(int index) {
-			String string = this.strings.get(index);
-			this.removeString(string);
-			return string;
-		}
-		
-		public void removeString(String string) {
-			this.strings.remove(string);
-			this.fireStateChanged();
-		}
-		
-		public void setStrings(List<String> strings) {
-			this.strings = new ArrayList<String>(strings);
-			this.fireStateChanged();
-		}
-		
-		public void setStrings(String[] strings) {
-			this.strings = CollectionTools.list(strings);
-			this.fireStateChanged();
-		}
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/NullCollectionValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/NullCollectionValueModelTests.java
deleted file mode 100644
index 2bcc738..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/NullCollectionValueModelTests.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.model.value.NullCollectionValueModel;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-public class NullCollectionValueModelTests extends TestCase {
-	private CollectionValueModel<Object> collectionHolder;
-
-	public NullCollectionValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.collectionHolder = new NullCollectionValueModel<Object>();
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSize() {
-		assertEquals(0, this.collectionHolder.size());
-	}
-
-	public void testIterator() {
-		assertFalse(this.collectionHolder.iterator().hasNext());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/NullListValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/NullListValueModelTests.java
deleted file mode 100644
index e42bf48..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/NullListValueModelTests.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.model.value.NullListValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-public class NullListValueModelTests extends TestCase {
-	private ListValueModel<Object> listHolder;
-
-	public NullListValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.listHolder = new NullListValueModel<Object>();
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testGet() {
-		boolean exCaught = false;
-		try {
-			this.listHolder.get(0);
-		} catch (IndexOutOfBoundsException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testSize() {
-		assertEquals(0, this.listHolder.size());
-	}
-
-	public void testIterator() {
-		assertFalse(this.listHolder.iterator().hasNext());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/NullPropertyValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/NullPropertyValueModelTests.java
deleted file mode 100644
index 7548506..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/NullPropertyValueModelTests.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.model.value.NullPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-public class NullPropertyValueModelTests extends TestCase {
-	private PropertyValueModel<Object> valueHolder;
-
-	public NullPropertyValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.valueHolder = new NullPropertyValueModel<Object>();
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testValue() {
-		assertNull(this.valueHolder.getValue());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/PropertyAspectAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/PropertyAspectAdapterTests.java
deleted file mode 100644
index 06abc83..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/PropertyAspectAdapterTests.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class PropertyAspectAdapterTests extends TestCase {
-	private TestSubject subject1;
-	private WritablePropertyValueModel<TestSubject> subjectHolder1;
-	private PropertyAspectAdapter<TestSubject, String> aa1;
-	private PropertyChangeEvent event1;
-	private PropertyChangeListener listener1;
-
-	private TestSubject subject2;
-
-	private PropertyChangeEvent multipleValueEvent;
-
-	private PropertyChangeEvent customValueEvent;
-
-
-	public PropertyAspectAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.subject1 = new TestSubject("foo", "test subject 1");
-		this.subjectHolder1 = new SimplePropertyValueModel<TestSubject> (this.subject1);
-		this.aa1 = this.buildAspectAdapter(this.subjectHolder1);
-		this.listener1 = this.buildValueChangeListener1();
-		this.aa1.addPropertyChangeListener(PropertyValueModel.VALUE, this.listener1);
-		this.event1 = null;
-
-		this.subject2 = new TestSubject("bar", "test subject 2");
-	}
-
-	private PropertyAspectAdapter<TestSubject, String> buildAspectAdapter(PropertyValueModel<TestSubject> subjectHolder) {
-		return new PropertyAspectAdapter<TestSubject, String>(subjectHolder, TestSubject.NAME_PROPERTY) {
-			// this is not a aspect adapter - the value is determined by the aspect name
-			@Override
-			protected String buildValue_() {
-				if (this.propertyNames[0] == TestSubject.NAME_PROPERTY) {
-					return this.subject.getName();
-				} else if (this.propertyNames[0] == TestSubject.DESCRIPTION_PROPERTY) {
-					return this.subject.getDescription();
-				} else {
-					throw new IllegalStateException("invalid aspect name: " + this.propertyNames[0]);
-				}
-			}
-			@Override
-			protected void setValue_(String value) {
-				if (this.propertyNames[0] == TestSubject.NAME_PROPERTY) {
-					this.subject.setName(value);
-				} else if (this.propertyNames[0] == TestSubject.DESCRIPTION_PROPERTY) {
-					this.subject.setDescription(value);
-				} else {
-					throw new IllegalStateException("invalid aspect name: " + this.propertyNames[0]);
-				}
-			}
-		};
-	}
-
-	private ChangeListener buildValueChangeListener1() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				PropertyAspectAdapterTests.this.value1Changed(e);
-			}
-		};
-	}
-
-	void value1Changed(PropertyChangeEvent e) {
-		this.event1 = e;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSubjectHolder() {
-		assertEquals("foo", this.aa1.getValue());
-		assertNull(this.event1);
-
-		this.subjectHolder1.setValue(this.subject2);
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(PropertyValueModel.VALUE, this.event1.getPropertyName());
-		assertEquals("foo", this.event1.getOldValue());
-		assertEquals("bar", this.event1.getNewValue());
-		assertEquals("bar", this.aa1.getValue());
-		
-		this.event1 = null;
-		this.subjectHolder1.setValue(null);
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(PropertyValueModel.VALUE, this.event1.getPropertyName());
-		assertEquals("bar", this.event1.getOldValue());
-		assertNull(this.event1.getNewValue());
-		assertNull(this.aa1.getValue());
-		
-		this.event1 = null;
-		this.subjectHolder1.setValue(this.subject1);
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(PropertyValueModel.VALUE, this.event1.getPropertyName());
-		assertEquals(null, this.event1.getOldValue());
-		assertEquals("foo", this.event1.getNewValue());
-		assertEquals("foo", this.aa1.getValue());
-	}
-
-	public void testPropertyChange() {
-		assertEquals("foo", this.aa1.getValue());
-		assertNull(this.event1);
-
-		this.subject1.setName("baz");
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(PropertyValueModel.VALUE, this.event1.getPropertyName());
-		assertEquals("foo", this.event1.getOldValue());
-		assertEquals("baz", this.event1.getNewValue());
-		assertEquals("baz", this.aa1.getValue());
-		
-		this.event1 = null;
-		this.subject1.setName(null);
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(PropertyValueModel.VALUE, this.event1.getPropertyName());
-		assertEquals("baz", this.event1.getOldValue());
-		assertEquals(null, this.event1.getNewValue());
-		assertEquals(null, this.aa1.getValue());
-		
-		this.event1 = null;
-		this.subject1.setName("foo");
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(PropertyValueModel.VALUE, this.event1.getPropertyName());
-		assertEquals(null, this.event1.getOldValue());
-		assertEquals("foo", this.event1.getNewValue());
-		assertEquals("foo", this.aa1.getValue());
-	}
-
-	public void testValue() {
-		assertEquals("foo", this.subject1.getName());
-		assertEquals("foo", this.aa1.getValue());
-	}
-
-	public void testStaleValue() {
-		assertEquals("foo", this.subject1.getName());
-		assertEquals("foo", this.aa1.getValue());
-
-		this.aa1.removePropertyChangeListener(PropertyValueModel.VALUE, this.listener1);
-		assertEquals(null, this.aa1.getValue());
-
-		this.aa1.addPropertyChangeListener(PropertyValueModel.VALUE, this.listener1);
-		assertEquals("foo", this.aa1.getValue());
-
-		this.aa1.removePropertyChangeListener(PropertyValueModel.VALUE, this.listener1);
-		this.subjectHolder1.setValue(this.subject2);
-		assertEquals(null, this.aa1.getValue());
-
-		this.aa1.addPropertyChangeListener(PropertyValueModel.VALUE, this.listener1);
-		assertEquals("bar", this.aa1.getValue());
-	}
-
-	public void testSetValue() {
-		this.aa1.setValue("baz");
-		assertEquals("baz", this.aa1.getValue());
-		assertEquals("baz", this.subject1.getName());
-	}
-
-	public void testHasListeners() {
-		assertTrue(this.aa1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(this.subject1.hasAnyPropertyChangeListeners(TestSubject.NAME_PROPERTY));
-		this.aa1.removePropertyChangeListener(PropertyValueModel.VALUE, this.listener1);
-		assertFalse(this.subject1.hasAnyPropertyChangeListeners(TestSubject.NAME_PROPERTY));
-		assertFalse(this.aa1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		ChangeListener listener2 = this.buildValueChangeListener1();
-		this.aa1.addChangeListener(listener2);
-		assertTrue(this.aa1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(this.subject1.hasAnyPropertyChangeListeners(TestSubject.NAME_PROPERTY));
-		this.aa1.removeChangeListener(listener2);
-		assertFalse(this.subject1.hasAnyPropertyChangeListeners(TestSubject.NAME_PROPERTY));
-		assertFalse(this.aa1.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-	}
-
-	public void testMultipleAspectAdapter() {
-		TestSubject testSubject = new TestSubject("fred", "husband");
-		WritablePropertyValueModel<TestSubject> testSubjectHolder = new SimplePropertyValueModel<TestSubject>(testSubject);
-		WritablePropertyValueModel<String> testAA = this.buildMultipleAspectAdapter(testSubjectHolder);
-		PropertyChangeListener testListener = this.buildMultipleValueChangeListener();
-		testAA.addPropertyChangeListener(PropertyValueModel.VALUE, testListener);
-		assertEquals("fred:husband", testAA.getValue());
-
-		this.multipleValueEvent = null;
-		testSubject.setName("wilma");
-		assertEquals("wilma:husband", testAA.getValue());
-		assertEquals("fred:husband", this.multipleValueEvent.getOldValue());
-		assertEquals("wilma:husband", this.multipleValueEvent.getNewValue());
-
-		this.multipleValueEvent = null;
-		testSubject.setDescription("wife");
-		assertEquals("wilma:wife", testAA.getValue());
-		assertEquals("wilma:husband", this.multipleValueEvent.getOldValue());
-		assertEquals("wilma:wife", this.multipleValueEvent.getNewValue());
-	}
-
-	private WritablePropertyValueModel<String> buildMultipleAspectAdapter(PropertyValueModel<TestSubject> subjectHolder) {
-		return new PropertyAspectAdapter<TestSubject, String>(subjectHolder, TestSubject.NAME_PROPERTY, TestSubject.DESCRIPTION_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getName() + ":" + this.subject.getDescription();
-			}
-		};
-	}
-
-	private PropertyChangeListener buildMultipleValueChangeListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent e) {
-				PropertyAspectAdapterTests.this.multipleValueChanged(e);
-			}
-		};
-	}
-
-	void multipleValueChanged(PropertyChangeEvent e) {
-		this.multipleValueEvent = e;
-	}
-
-	/**
-	 * test a bug where we would call #buildValue() in
-	 * #engageNonNullSubject(), when we needed to call
-	 * it in #engageSubject(), so the cached value would
-	 * be rebuilt when the this.subject was set to null
-	 */
-	public void testCustomBuildValueWithNullSubject() {
-		TestSubject customSubject = new TestSubject("fred", "laborer");
-		WritablePropertyValueModel<TestSubject> customSubjectHolder = new SimplePropertyValueModel<TestSubject>(customSubject);
-		WritablePropertyValueModel<String> customAA = this.buildCustomAspectAdapter(customSubjectHolder);
-		PropertyChangeListener customListener = this.buildCustomValueChangeListener();
-		customAA.addPropertyChangeListener(PropertyValueModel.VALUE, customListener);
-		assertEquals("fred", customAA.getValue());
-
-		this.customValueEvent = null;
-		customSubject.setName("wilma");
-		assertEquals("wilma", customAA.getValue());
-		assertEquals("fred", this.customValueEvent.getOldValue());
-		assertEquals("wilma", this.customValueEvent.getNewValue());
-
-		this.customValueEvent = null;
-		customSubjectHolder.setValue(null);
-		// this would fail - the value would be null...
-		assertEquals("<unnamed>", customAA.getValue());
-		assertEquals("wilma", this.customValueEvent.getOldValue());
-		assertEquals("<unnamed>", this.customValueEvent.getNewValue());
-	}
-
-	/**
-	 * Test a bug:
-	 * If two listeners were added to an aspect adapter, one with an
-	 * aspect name and one without, the aspect adapter would add its
-	 * 'subjectChangeListener' to its 'subjectHolder' twice. As a result,
-	 * the following code will trigger an IllegalArgumentException
-	 * if the bug is present; otherwise, it completes silently.
-	 */
-	public void testDuplicateListener() {
-		ChangeListener listener2 = new ChangeAdapter();
-		this.aa1.addChangeListener(listener2);
-	}
-
-	private WritablePropertyValueModel<String> buildCustomAspectAdapter(PropertyValueModel<TestSubject> subjectHolder) {
-		return new PropertyAspectAdapter<TestSubject, String>(subjectHolder, TestSubject.NAME_PROPERTY) {
-			@Override
-			protected String buildValue() {
-				return (this.subject == null) ? "<unnamed>" : this.subject.getName();
-			}
-		};
-	}
-
-	private PropertyChangeListener buildCustomValueChangeListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent e) {
-				PropertyAspectAdapterTests.this.customValueChanged(e);
-			}
-		};
-	}
-
-	void customValueChanged(PropertyChangeEvent e) {
-		this.customValueEvent = e;
-	}
-
-
-	// ********** test model **********
-	
-	private static class TestSubject extends AbstractModel {
-		private String name;
-		public static final String NAME_PROPERTY = "name";
-		private String description;
-		public static final String DESCRIPTION_PROPERTY = "description";
-	
-		public TestSubject(String name, String description) {
-			this.name = name;
-			this.description = description;
-		}
-		public String getName() {
-			return this.name;
-		}
-		public void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(NAME_PROPERTY, old, name);
-		}
-		public String getDescription() {
-			return this.description;
-		}
-		public void setDescription(String description) {
-			Object old = this.description;
-			this.description = description;
-			this.firePropertyChanged(DESCRIPTION_PROPERTY, old, description);
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/PropertyCollectionValueModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/PropertyCollectionValueModelAdapterTests.java
deleted file mode 100644
index 9661ef4..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/PropertyCollectionValueModelAdapterTests.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.Collection;
-
-import javax.swing.JList;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyCollectionValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ListModelAdapter;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class PropertyCollectionValueModelAdapterTests extends TestCase {
-	private CollectionValueModel<String> adapter;
-	private WritablePropertyValueModel<String> wrappedValueHolder;
-
-	public PropertyCollectionValueModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.wrappedValueHolder = new SimplePropertyValueModel<String>();
-		this.adapter = new PropertyCollectionValueModelAdapter<String>(this.wrappedValueHolder);
-	}
-
-	private Collection<String> wrappedCollection() {
-		return CollectionTools.collection(new SingleElementIterator<String>(this.wrappedValueHolder.getValue()));
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIterator() {
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {/* OK */}
-		});
-		this.wrappedValueHolder.setValue("foo");
-		Collection<String> adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(1, adapterCollection.size());
-		assertEquals(this.wrappedCollection(), adapterCollection);
-		assertEquals("foo", adapterCollection.iterator().next());
-	}
-
-	public void testStaleValue() {
-		CollectionChangeListener listener = new TestListener() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {/* OK */}
-		};
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, listener);
-		this.wrappedValueHolder.setValue("foo");
-		Collection<String> adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(1, adapterCollection.size());
-		assertEquals(this.wrappedCollection(), adapterCollection);
-		assertEquals("foo", adapterCollection.iterator().next());
-
-		this.adapter.removeCollectionChangeListener(CollectionValueModel.VALUES, listener);
-		adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(0, adapterCollection.size());
-		assertEquals(new HashBag<String>(), adapterCollection);
-
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, listener);
-		adapterCollection = CollectionTools.collection(this.adapter.iterator());
-		assertEquals(1, adapterCollection.size());
-		assertEquals(this.wrappedCollection(), adapterCollection);
-		assertEquals("foo", adapterCollection.iterator().next());
-	}
-
-	public void testHasListeners() {
-		assertFalse(((AbstractModel) this.adapter).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		CoordinatedBag<String> synchCollection = new CoordinatedBag<String>(this.adapter);
-		assertTrue(((AbstractModel) this.adapter).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		this.adapter.removeCollectionChangeListener(CollectionValueModel.VALUES, synchCollection);
-		assertFalse(((AbstractModel) this.adapter).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-
-		ChangeListener cl = new ChangeAdapter();
-		this.adapter.addChangeListener(cl);
-		assertTrue(((AbstractModel) this.adapter).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		this.adapter.removeChangeListener(cl);
-		assertFalse(((AbstractModel) this.adapter).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-	}
-
-	public void testListChangedToEmpty() {
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {/* OK */}
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent e) {/* OK */}
-		});
-		this.wrappedValueHolder.setValue("foo");
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		this.wrappedValueHolder.setValue(null);
-		assertEquals(0, jList.getModel().getSize());
-	}
-
-	public void testCollectionChangedFromEmpty() {
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {/* OK */}
-		});
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		
-		this.wrappedValueHolder.setValue("foo");
-		assertEquals(1, jList.getModel().getSize());
-	}
-	
-	public void testCollectionChangedFromEmptyToEmpty() {
-		this.adapter.addCollectionChangeListener(CollectionValueModel.VALUES, new TestListener());
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		
-		this.wrappedValueHolder.setValue(null);
-		assertEquals(0, jList.getModel().getSize());
-	}
-
-
-	// ********** member class **********
-	
-	static class TestListener implements CollectionChangeListener {
-		public void collectionChanged(CollectionChangeEvent event) {
-			fail("unexpected event");
-		}
-		public void collectionCleared(CollectionClearEvent event) {
-			fail("unexpected event");
-		}
-		public void itemsAdded(CollectionAddEvent event) {
-			fail("unexpected event");
-		}
-		public void itemsRemoved(CollectionRemoveEvent event) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/PropertyListValueModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/PropertyListValueModelAdapterTests.java
deleted file mode 100644
index d91b03d..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/PropertyListValueModelAdapterTests.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import javax.swing.JList;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ListModelAdapter;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class PropertyListValueModelAdapterTests extends TestCase {
-	private ListValueModel<String> adapter;
-	private WritablePropertyValueModel<String> wrappedValueHolder;
-
-	public PropertyListValueModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.wrappedValueHolder = new SimplePropertyValueModel<String>();
-		this.adapter = new PropertyListValueModelAdapter<String>(this.wrappedValueHolder);
-	}
-
-	private Collection<String> wrappedList() {
-		return CollectionTools.list(new SingleElementIterator<String>(this.wrappedValueHolder.getValue()));
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIterator() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(ListAddEvent event) {/* OK */}
-		});
-		assertFalse(this.adapter.iterator().hasNext());
-		this.wrappedValueHolder.setValue("foo");
-		List<String> adapterList = CollectionTools.list(this.adapter.iterator());
-		assertEquals(1, adapterList.size());
-		assertEquals(this.wrappedList(), adapterList);
-		assertEquals("foo", adapterList.iterator().next());
-	}
-
-	public void testGetInt() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(ListAddEvent event) {/* OK */}
-		});
-		this.wrappedValueHolder.setValue("foo");
-		assertEquals("foo", this.adapter.get(0));
-	}
-
-	public void testToArray1() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(ListAddEvent event) {/* OK */}
-		});
-		this.wrappedValueHolder.setValue("foo");
-		Object[] array = this.adapter.toArray();
-		assertEquals("foo", array[0]);
-		assertEquals(1, array.length);
-	}
-
-	public void testToArray2() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListener());
-		Object[] array = this.adapter.toArray();
-		assertEquals(0, array.length);
-	}
-
-	public void testStaleValue() {
-		ListChangeListener listener = new TestListener() {
-			@Override
-			public void itemsAdded(ListAddEvent event) {/* OK */}
-		};
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		this.wrappedValueHolder.setValue("foo");
-		List<String> adapterList = CollectionTools.list(this.adapter.iterator());
-		assertEquals(1, adapterList.size());
-		assertEquals(this.wrappedList(), adapterList);
-		assertEquals("foo", adapterList.iterator().next());
-
-		this.adapter.removeListChangeListener(ListValueModel.LIST_VALUES, listener);
-		adapterList = CollectionTools.list(this.adapter.iterator());
-		assertEquals(0, adapterList.size());
-		assertEquals(new ArrayList<String>(), adapterList);
-
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		adapterList = CollectionTools.list(this.adapter.iterator());
-		assertEquals(1, adapterList.size());
-		assertEquals(this.wrappedList(), adapterList);
-		assertEquals("foo", adapterList.iterator().next());
-	}
-
-	public void testHasListeners() {
-		assertFalse(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		CoordinatedList<String> synchList = new CoordinatedList<String>(this.adapter);
-		assertTrue(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		this.adapter.removeListChangeListener(ListValueModel.LIST_VALUES, synchList);
-		assertFalse(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		ChangeListener cl = new ChangeAdapter();
-		this.adapter.addChangeListener(cl);
-		assertTrue(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		this.adapter.removeChangeListener(cl);
-		assertFalse(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	public void testListChangedToEmpty() {
-		this.wrappedValueHolder.setValue("foo");
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListener() {
-			@Override
-			public void itemsRemoved(ListRemoveEvent event) {/* OK */}
-		});
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		this.wrappedValueHolder.setValue(null);
-		assertEquals(0, jList.getModel().getSize());
-	}
-
-	public void testListChangedFromEmpty() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListener() {
-			@Override
-			public void itemsAdded(ListAddEvent event) {/* OK */}
-		});
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		
-		this.wrappedValueHolder.setValue("foo");
-		assertEquals(1, jList.getModel().getSize());
-	}
-	
-	public void testListItemChanged() {
-		this.wrappedValueHolder.setValue("foo");
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListener() {
-			@Override
-			public void itemsReplaced(ListReplaceEvent event) {/* OK */}
-		});
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		assertEquals(1, jList.getModel().getSize());
-		assertEquals("foo", jList.getModel().getElementAt(0));
-		
-		this.wrappedValueHolder.setValue("bar");
-		assertEquals(1, jList.getModel().getSize());
-		assertEquals("bar", jList.getModel().getElementAt(0));
-	}
-	
-	public void testListChangedFromEmptyToEmpty() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListener());
-		JList jList = new JList(new ListModelAdapter(this.adapter));
-		
-		this.wrappedValueHolder.setValue(null);
-		assertEquals(0, jList.getModel().getSize());
-	}
-
-
-	// ********** member class **********
-	
-	static class TestListener implements ListChangeListener {
-		public void listChanged(ListChangeEvent event) {
-			fail("unexpected event");
-		}
-		public void listCleared(ListClearEvent event) {
-			fail("unexpected event");
-		}
-		public void itemsAdded(ListAddEvent event) {
-			fail("unexpected event");
-		}
-		public void itemsRemoved(ListRemoveEvent event) {
-			fail("unexpected event");
-		}
-		public void itemsMoved(ListMoveEvent event) {
-			fail("unexpected event");
-		}
-		public void itemsReplaced(ListReplaceEvent event) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ReadOnlyWritablePropertyValueModelWrapperTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ReadOnlyWritablePropertyValueModelWrapperTests.java
deleted file mode 100644
index c8678a7..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ReadOnlyWritablePropertyValueModelWrapperTests.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ReadOnlyWritablePropertyValueModelWrapper;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ReadOnlyWritablePropertyValueModelWrapperTests 
-	extends TestCase
-{
-	private WritablePropertyValueModel<String> objectHolder;
-	
-	PropertyChangeEvent event;
-	
-	private WritablePropertyValueModel<String> wrapperObjectHolder;
-	
-	PropertyChangeEvent wrapperEvent;
-	
-	
-	public ReadOnlyWritablePropertyValueModelWrapperTests(String name) {
-		super(name);
-	}
-	
-	
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.objectHolder = new SimplePropertyValueModel<String>("foo");
-		this.wrapperObjectHolder = new ReadOnlyWritablePropertyValueModelWrapper<String>(this.objectHolder);
-	}
-	
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-	
-	
-	public void testValue() {
-		assertEquals("foo", this.objectHolder.getValue());
-		assertEquals("foo", this.wrapperObjectHolder.getValue());
-		
-		this.objectHolder.setValue("bar");
-		assertEquals("bar", this.objectHolder.getValue());
-		assertEquals("bar", this.wrapperObjectHolder.getValue());
-		
-		this.objectHolder.setValue(null);
-		assertNull(this.objectHolder.getValue());
-		assertNull(this.wrapperObjectHolder.getValue());
-		
-		this.objectHolder.setValue("foo");
-		assertEquals("foo", this.objectHolder.getValue());
-		assertEquals("foo", this.wrapperObjectHolder.getValue());
-	}
-	
-	public void testSetValue() {
-		boolean exceptionOccurred = false;
-		try {
-			this.wrapperObjectHolder.setValue("bar");
-		}
-		catch (UnsupportedOperationException uoe) {
-			exceptionOccurred = true;
-		}
-		
-		assertTrue(exceptionOccurred);
-		assertEquals("foo", this.objectHolder.getValue());
-		assertEquals("foo", this.wrapperObjectHolder.getValue());
-	}
-	
-	public void testLazyListening() {
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		ChangeListener listener = buildWrapperListener();
-		this.wrapperObjectHolder.addChangeListener(listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.wrapperObjectHolder.removeChangeListener(listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		
-		this.wrapperObjectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.wrapperObjectHolder.removePropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-	}
-	
-	public void testPropertyChange1() {
-		this.objectHolder.addChangeListener(this.buildListener());
-		this.wrapperObjectHolder.addChangeListener(this.buildWrapperListener());
-		this.verifyPropertyChanges();
-	}
-	
-	public void testPropertyChange2() {
-		this.objectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildListener());
-		this.wrapperObjectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildWrapperListener());
-		this.verifyPropertyChanges();
-	}
-	
-	private void verifyPropertyChanges() {
-		this.event = null;
-		this.wrapperEvent = null;
-		this.objectHolder.setValue("bar");
-		verifyEvent(this.event, this.objectHolder, "foo", "bar");
-		verifyEvent(this.wrapperEvent, this.wrapperObjectHolder, "foo", "bar");
-		
-		this.event = null;
-		this.wrapperEvent = null;
-		this.objectHolder.setValue(null);
-		verifyEvent(this.event, this.objectHolder, "bar", null);
-		verifyEvent(this.wrapperEvent, this.wrapperObjectHolder, "bar", null);
-		
-		this.event = null;
-		this.wrapperEvent = null;
-		this.objectHolder.setValue("foo");
-		verifyEvent(this.event, this.objectHolder, null, "foo");
-		verifyEvent(this.wrapperEvent, this.wrapperObjectHolder, null, "foo");
-	}
-
-	private ChangeListener buildListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				ReadOnlyWritablePropertyValueModelWrapperTests.this.event = e;
-			}
-		};
-	}
-
-	private ChangeListener buildWrapperListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				ReadOnlyWritablePropertyValueModelWrapperTests.this.wrapperEvent = e;
-			}
-		};
-	}
-
-	private void verifyEvent(PropertyChangeEvent e, Object source, Object oldValue, Object newValue) {
-		assertEquals(source, e.getSource());
-		assertEquals(PropertyValueModel.VALUE, e.getPropertyName());
-		assertEquals(oldValue, e.getOldValue());
-		assertEquals(newValue, e.getNewValue());
-	}
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SetCollectionValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SetCollectionValueModelTests.java
deleted file mode 100644
index ceb9c8a..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SetCollectionValueModelTests.java
+++ /dev/null
@@ -1,328 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.SetCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class SetCollectionValueModelTests extends TestCase {
-	private SimpleCollectionValueModel<String> collectionHolder;
-	CollectionAddEvent addEvent;
-	CollectionRemoveEvent removeEvent;
-	CollectionClearEvent collectionClearedEvent;
-	CollectionChangeEvent collectionChangedEvent;
-
-	private CollectionValueModel<String> setHolder;
-	CollectionAddEvent setAddEvent;
-	CollectionRemoveEvent setRemoveEvent;
-	CollectionClearEvent setClearedEvent;
-	CollectionChangeEvent setChangedEvent;
-
-	public SetCollectionValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.collectionHolder = new SimpleCollectionValueModel<String>(this.buildCollection());
-		this.setHolder = new SetCollectionValueModel<String>(this.collectionHolder);
-	}
-
-	private Collection<String> buildCollection() {
-		Collection<String> collection = new ArrayList<String>();
-		collection.add("foo");
-		collection.add("foo");
-		return collection;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIterator() {
-		// add a listener to "activate" the wrapper
-		this.setHolder.addChangeListener(this.buildSetChangeListener());
-
-		this.verify(this.collectionHolder, "foo", "foo");
-		this.verify(this.setHolder, "foo");
-
-		this.collectionHolder.add("bar");
-		this.collectionHolder.add("bar");
-		this.verify(this.collectionHolder, "foo", "foo", "bar", "bar");
-		this.verify(this.setHolder, "foo", "bar");
-
-		this.collectionHolder.remove("bar");
-		this.verify(this.collectionHolder, "foo", "foo", "bar");
-		this.verify(this.setHolder, "foo", "bar");
-
-		this.collectionHolder.remove("bar");
-		this.verify(this.collectionHolder, "foo", "foo");
-		this.verify(this.setHolder, "foo");
-
-		this.collectionHolder.remove("foo");
-		this.verify(this.collectionHolder, "foo");
-		this.verify(this.setHolder, "foo");
-
-		this.collectionHolder.remove("foo");
-		assertFalse(this.collectionHolder.iterator().hasNext());
-		assertFalse(this.setHolder.iterator().hasNext());
-	}
-
-	public void testSize() {
-		// add a listener to "activate" the wrapper
-		this.setHolder.addChangeListener(this.buildSetChangeListener());
-
-		assertEquals(2, this.collectionHolder.size());
-		assertEquals(1, this.setHolder.size());
-
-		this.collectionHolder.add("bar");
-		this.collectionHolder.add("bar");
-		assertEquals(4, this.collectionHolder.size());
-		assertEquals(2, this.setHolder.size());
-
-		this.collectionHolder.remove("bar");
-		assertEquals(3, this.collectionHolder.size());
-		assertEquals(2, this.setHolder.size());
-
-		this.collectionHolder.remove("bar");
-		assertEquals(2, this.collectionHolder.size());
-		assertEquals(1, this.setHolder.size());
-
-		this.collectionHolder.remove("foo");
-		assertEquals(1, this.collectionHolder.size());
-		assertEquals(1, this.setHolder.size());
-
-		this.collectionHolder.remove("foo");
-		assertEquals(0, this.collectionHolder.size());
-		assertEquals(0, this.setHolder.size());
-	}
-
-	public void testBulkChange() {
-		// add a listener to "activate" the wrapper
-		this.setHolder.addChangeListener(this.buildSetChangeListener());
-
-		Collection<String> newCollection = new ArrayList<String>();
-		newCollection.add("fox");
-		newCollection.add("fox");
-		newCollection.add("bat");
-
-		this.collectionHolder.setValues(newCollection);
-		this.verify(this.collectionHolder, "fox", "fox", "bat");
-		this.verify(this.setHolder, "fox", "bat");
-	}		
-
-	public void testLazyListening() {
-		assertTrue(((AbstractModel) this.collectionHolder).hasNoCollectionChangeListeners(CollectionValueModel.VALUES));
-		ChangeListener listener = this.buildSetChangeListener();
-		this.setHolder.addChangeListener(listener);
-		assertTrue(((AbstractModel) this.collectionHolder).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		this.setHolder.removeChangeListener(listener);
-		assertTrue(((AbstractModel) this.collectionHolder).hasNoCollectionChangeListeners(CollectionValueModel.VALUES));
-
-		this.setHolder.addCollectionChangeListener(CollectionValueModel.VALUES, listener);
-		assertTrue(((AbstractModel) this.collectionHolder).hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		this.setHolder.removeCollectionChangeListener(CollectionValueModel.VALUES, listener);
-		assertTrue(((AbstractModel) this.collectionHolder).hasNoCollectionChangeListeners(CollectionValueModel.VALUES));
-	}
-
-	public void testEvents1() {
-		this.collectionHolder.addChangeListener(this.buildChangeListener());
-		this.setHolder.addChangeListener(this.buildSetChangeListener());
-		this.verifyEvents();
-	}
-
-	public void testEvents2() {
-		this.collectionHolder.addCollectionChangeListener(CollectionValueModel.VALUES, this.buildCollectionChangeListener());
-		this.setHolder.addCollectionChangeListener(CollectionValueModel.VALUES, this.buildSetCollectionChangeListener());
-		this.verifyEvents();
-	}
-
-	private void clearEvents() {
-		this.addEvent = null;
-		this.removeEvent = null;
-		this.collectionClearedEvent = null;
-		this.collectionChangedEvent = null;
-		this.setAddEvent = null;
-		this.setRemoveEvent = null;
-		this.setClearedEvent = null;
-		this.setChangedEvent = null;
-	}
-
-	private void verifyEvents() {
-		this.clearEvents();
-		this.collectionHolder.add("bar");
-		this.verifyEvent(this.addEvent, this.collectionHolder, "bar");
-		this.verifyEvent(this.setAddEvent, this.setHolder, "bar");
-
-		this.clearEvents();
-		this.collectionHolder.remove("foo");
-		this.verifyEvent(this.removeEvent, this.collectionHolder, "foo");
-		assertNull(this.setRemoveEvent);
-
-		this.clearEvents();
-		this.collectionHolder.add("bar");
-		this.verifyEvent(this.addEvent, this.collectionHolder, "bar");
-		assertNull(this.setAddEvent);
-
-		this.clearEvents();
-		this.collectionHolder.remove("foo");
-		this.verifyEvent(this.removeEvent, this.collectionHolder, "foo");
-		this.verifyEvent(this.setRemoveEvent, this.setHolder, "foo");
-
-		this.clearEvents();
-		this.collectionHolder.add("foo");
-		this.verifyEvent(this.addEvent, this.collectionHolder, "foo");
-		this.verifyEvent(this.setAddEvent, this.setHolder, "foo");
-
-		this.clearEvents();
-		this.collectionHolder.clear();
-		this.verifyEvent(this.collectionClearedEvent, this.collectionHolder);
-		this.verifyEvent(this.setClearedEvent, this.setHolder);
-
-		this.clearEvents();
-		Collection<String> newCollection = new ArrayList<String>();
-		newCollection.add("fox");
-		newCollection.add("fox");
-		newCollection.add("bat");
-		newCollection.add("bat");
-		newCollection.add("bat");
-		this.collectionHolder.setValues(newCollection);
-		this.verifyEvent(this.collectionChangedEvent, this.collectionHolder, "fox", "fox", "bat", "bat", "bat");
-		this.verifyEvent(this.setChangedEvent, this.setHolder, "fox", "bat");
-		
-	}
-
-	private CollectionChangeListener buildCollectionChangeListener() {
-		return new CollectionChangeListener() {
-			public void itemsAdded(CollectionAddEvent event) {
-				SetCollectionValueModelTests.this.addEvent = event;
-			}
-			public void itemsRemoved(CollectionRemoveEvent event) {
-				SetCollectionValueModelTests.this.removeEvent = event;
-			}
-			public void collectionCleared(CollectionClearEvent event) {
-				SetCollectionValueModelTests.this.collectionClearedEvent = event;
-			}
-			public void collectionChanged(CollectionChangeEvent event) {
-				SetCollectionValueModelTests.this.collectionChangedEvent = event;
-			}
-		};
-	}
-
-	private ChangeListener buildChangeListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void itemsAdded(CollectionAddEvent event) {
-				SetCollectionValueModelTests.this.addEvent = event;
-			}
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent event) {
-				SetCollectionValueModelTests.this.removeEvent = event;
-			}
-			@Override
-			public void collectionCleared(CollectionClearEvent event) {
-				SetCollectionValueModelTests.this.collectionClearedEvent = event;
-			}
-			@Override
-			public void collectionChanged(CollectionChangeEvent event) {
-				SetCollectionValueModelTests.this.collectionChangedEvent = event;
-			}
-		};
-	}
-
-	private CollectionChangeListener buildSetCollectionChangeListener() {
-		return new CollectionChangeListener() {
-			public void itemsAdded(CollectionAddEvent event) {
-				SetCollectionValueModelTests.this.setAddEvent = event;
-			}
-			public void itemsRemoved(CollectionRemoveEvent event) {
-				SetCollectionValueModelTests.this.setRemoveEvent = event;
-			}
-			public void collectionCleared(CollectionClearEvent event) {
-				SetCollectionValueModelTests.this.setClearedEvent = event;
-			}
-			public void collectionChanged(CollectionChangeEvent event) {
-				SetCollectionValueModelTests.this.setChangedEvent = event;
-			}
-		};
-	}
-
-	private ChangeListener buildSetChangeListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void itemsAdded(CollectionAddEvent event) {
-				SetCollectionValueModelTests.this.setAddEvent = event;
-			}
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent event) {
-				SetCollectionValueModelTests.this.setRemoveEvent = event;
-			}
-			@Override
-			public void collectionCleared(CollectionClearEvent event) {
-				SetCollectionValueModelTests.this.setClearedEvent = event;
-			}
-			@Override
-			public void collectionChanged(CollectionChangeEvent event) {
-				SetCollectionValueModelTests.this.setChangedEvent = event;
-			}
-		};
-	}
-
-	private void verify(CollectionValueModel<String> cvm, String... expectedItems) {
-		Bag<String> actual = CollectionTools.bag(cvm);
-		Bag<String> expected = CollectionTools.bag(expectedItems);
-		assertEquals(expected, actual);
-	}
-
-	private void verifyEvent(CollectionAddEvent event, Object source, Object... expectedItems) {
-		assertEquals(source, event.getSource());
-		assertEquals(CollectionValueModel.VALUES, event.getCollectionName());
-		assertEquals(CollectionTools.bag(expectedItems), CollectionTools.bag(event.getItems()));
-	}
-
-	private void verifyEvent(CollectionRemoveEvent event, Object source, Object... expectedItems) {
-		assertEquals(source, event.getSource());
-		assertEquals(CollectionValueModel.VALUES, event.getCollectionName());
-		assertEquals(CollectionTools.bag(expectedItems), CollectionTools.bag(event.getItems()));
-	}
-
-	private void verifyEvent(CollectionClearEvent event, Object source) {
-		assertEquals(source, event.getSource());
-		assertEquals(CollectionValueModel.VALUES, event.getCollectionName());
-	}
-
-	private void verifyEvent(CollectionChangeEvent event, Object source, Object... expectedItems) {
-		assertEquals(source, event.getSource());
-		assertEquals(CollectionValueModel.VALUES, event.getCollectionName());
-		assertEquals(CollectionTools.bag(expectedItems), CollectionTools.bag(event.getCollection()));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SimpleCollectionValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SimpleCollectionValueModelTests.java
deleted file mode 100644
index 48bac55..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SimpleCollectionValueModelTests.java
+++ /dev/null
@@ -1,443 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class SimpleCollectionValueModelTests extends TestCase {
-	private SimpleCollectionValueModel<String> bagHolder;
-	CollectionEvent bagEvent;
-	String bagEventType;
-
-	private SimpleCollectionValueModel<String> setHolder;
-	CollectionEvent setEvent;
-	String setEventType;
-
-	private static final String ADD = "add";
-	private static final String REMOVE = "remove";
-	private static final String CHANGE = "change";
-	private static final String CLEAR = "clear";
-
-	
-	public SimpleCollectionValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.bagHolder = new SimpleCollectionValueModel<String>(this.buildBag());
-		this.setHolder = new SimpleCollectionValueModel<String>(this.buildSet());
-	}
-
-	private Bag<String> buildBag() {
-		Bag<String> result = new HashBag<String>();
-		this.addItemsTo(result);
-		return result;
-	}
-
-	private Set<String> buildSet() {
-		Set<String> result = new HashSet<String>();
-		this.addItemsTo(result);
-		return result;
-	}
-
-	private void addItemsTo(Collection<String> c) {
-		c.add("foo");
-		c.add("bar");
-		c.add("baz");
-	}
-
-	private Bag<String> buildAddItems() {
-		Bag<String> result = new HashBag<String>();
-		result.add("joo");
-		result.add("jar");
-		result.add("jaz");
-		return result;
-	}
-
-	private Bag<String> buildRemoveItems() {
-		Bag<String> result = new HashBag<String>();
-		result.add("foo");
-		result.add("baz");
-		return result;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIterator() {
-		assertEquals(this.buildBag(), CollectionTools.bag(this.bagHolder.iterator()));
-		assertEquals(this.buildSet(), CollectionTools.set(this.setHolder.iterator()));
-	}
-
-	public void testSize() {
-		assertEquals(this.buildBag().size(), CollectionTools.size(this.bagHolder.iterator()));
-		assertEquals(this.buildSet().size(), CollectionTools.size(this.setHolder.iterator()));
-	}
-
-	private boolean bagHolderContains(Object item) {
-		return CollectionTools.contains(this.bagHolder.iterator(), item);
-	}
-
-	private boolean setHolderContains(Object item) {
-		return CollectionTools.contains(this.setHolder.iterator(), item);
-	}
-
-	private boolean bagHolderContainsAll(Collection<String> items) {
-		return CollectionTools.containsAll(this.bagHolder.iterator(), items);
-	}
-
-	private boolean setHolderContainsAll(Collection<String> items) {
-		return CollectionTools.containsAll(this.setHolder.iterator(), items);
-	}
-
-	private boolean bagHolderContainsAny(Collection<String> items) {
-		Bag<String> bag = CollectionTools.bag(this.bagHolder.iterator());
-		for (String string : items) {
-			if (bag.contains(string)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	private boolean setHolderContainsAny(Collection<String> items) {
-		Set<String> set = CollectionTools.set(this.setHolder.iterator());
-		for (String string : items) {
-			if (set.contains(string)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	public void testAdd() {
-		assertFalse(this.bagHolderContains("joo"));
-		this.bagHolder.add("joo");
-		assertTrue(this.bagHolderContains("joo"));
-
-		assertFalse(this.bagHolderContains(null));
-		this.bagHolder.add(null);
-		assertTrue(this.bagHolderContains(null));
-
-		assertFalse(this.setHolderContains("joo"));
-		this.setHolder.add("joo");
-		assertTrue(this.setHolderContains("joo"));
-
-		assertFalse(this.setHolderContains(null));
-		this.setHolder.add(null);
-		assertTrue(this.setHolderContains(null));
-	}
-
-	public void testAddAll() {
-		assertFalse(this.bagHolderContainsAny(this.buildAddItems()));
-		this.bagHolder.addAll(this.buildAddItems());
-		assertTrue(this.bagHolderContainsAll(this.buildAddItems()));
-
-		assertFalse(this.setHolderContainsAny(this.buildAddItems()));
-		this.setHolder.addAll(this.buildAddItems());
-		assertTrue(this.setHolderContainsAll(this.buildAddItems()));
-	}
-
-	public void testRemove() {
-		assertTrue(this.bagHolderContains("bar"));
-		this.bagHolder.remove("bar");
-		assertFalse(this.bagHolderContains("bar"));
-
-		this.bagHolder.add(null);
-		assertTrue(this.bagHolderContains(null));
-		this.bagHolder.remove(null);
-		assertFalse(this.bagHolderContains(null));
-
-		assertTrue(this.setHolderContains("bar"));
-		this.setHolder.remove("bar");
-		assertFalse(this.setHolderContains("bar"));
-
-		this.setHolder.add(null);
-		assertTrue(this.setHolderContains(null));
-		this.setHolder.remove(null);
-		assertFalse(this.setHolderContains(null));
-	}
-
-	public void testRemoveAll() {
-		assertTrue(this.bagHolderContainsAll(this.buildRemoveItems()));
-		this.bagHolder.removeAll(this.buildRemoveItems());
-		assertFalse(this.bagHolderContainsAny(this.buildRemoveItems()));
-
-		assertTrue(this.setHolderContainsAll(this.buildRemoveItems()));
-		this.setHolder.removeAll(this.buildRemoveItems());
-		assertFalse(this.setHolderContainsAny(this.buildRemoveItems()));
-	}
-
-	public void testSetValues() {
-		assertTrue(this.bagHolderContains("bar"));
-		assertFalse(this.bagHolderContains("jar"));
-		this.bagHolder.setValues(this.buildAddItems());
-		assertFalse(this.bagHolderContains("bar"));
-		assertTrue(this.bagHolderContains("jar"));
-
-		this.bagHolder.add(null);
-		assertTrue(this.bagHolderContains(null));
-		this.bagHolder.remove(null);
-		assertFalse(this.bagHolderContains(null));
-
-		this.bagHolder.setValues(new HashBag<String>());
-		assertFalse(this.bagHolderContains("jar"));
-
-		assertTrue(this.setHolderContains("bar"));
-		assertFalse(this.setHolderContains("jar"));
-		this.setHolder.setValues(this.buildAddItems());
-		assertFalse(this.setHolderContains("bar"));
-		assertTrue(this.setHolderContains("jar"));
-
-		this.setHolder.add(null);
-		assertTrue(this.setHolderContains(null));
-		this.setHolder.remove(null);
-		assertFalse(this.setHolderContains(null));
-
-		this.setHolder.setValues(new HashBag<String>());
-		assertFalse(this.setHolderContains("jar"));
-	}
-
-	public void testCollectionChange1() {
-		this.bagHolder.addChangeListener(this.buildBagListener());
-		this.verifyBagChange();
-
-		this.setHolder.addChangeListener(this.buildSetListener());
-		this.verifySetChange();
-	}
-
-	public void testCollectionChange2() {
-		this.bagHolder.addCollectionChangeListener(CollectionValueModel.VALUES, this.buildBagListener());
-		this.verifyBagChange();
-
-		this.setHolder.addCollectionChangeListener(CollectionValueModel.VALUES, this.buildSetListener());
-		this.verifySetChange();
-	}
-
-	private void verifyBagChange() {
-		this.bagEvent = null;
-		this.bagEventType = null;
-		this.bagHolder.add("foo");
-		this.verifyBagEvent(ADD, "foo");
-
-		this.bagEvent = null;
-		this.bagEventType = null;
-		this.bagHolder.add("foo");
-		this.verifyBagEvent(ADD, "foo");
-
-		this.bagEvent = null;
-		this.bagEventType = null;
-		this.bagHolder.add("joo");
-		this.verifyBagEvent(ADD, "joo");
-
-		this.bagEvent = null;
-		this.bagEventType = null;
-		this.bagHolder.add(null);
-		this.verifyBagEvent(ADD, null);
-
-		this.bagEvent = null;
-		this.bagEventType = null;
-		this.bagHolder.add(null);
-		this.verifyBagEvent(ADD, null);
-
-		this.bagEvent = null;
-		this.bagEventType = null;
-		this.bagHolder.remove("joo");
-		this.verifyBagEvent(REMOVE, "joo");
-
-		this.bagEvent = null;
-		this.bagEventType = null;
-		this.bagHolder.remove(null);
-		this.verifyBagEvent(REMOVE, null);
-
-		this.bagEvent = null;
-		this.bagEventType = null;
-		this.bagHolder.setValues(this.buildBag());
-		this.verifyBagEvent(CHANGE);
-
-		this.bagEvent = null;
-		this.bagEventType = null;
-		this.bagHolder.addAll(this.buildBag());
-		this.verifyBagEvent(ADD);
-		assertEquals(this.buildBag(), CollectionTools.bag(((CollectionAddEvent) this.bagEvent).getItems()));
-	}
-
-	private void verifySetChange() {
-		this.setEvent = null;
-		this.setEventType = null;
-		this.setHolder.add("foo");
-		assertNull(this.setEvent);
-		assertNull(this.setEventType);
-
-		this.setEvent = null;
-		this.setEventType = null;
-		this.setHolder.add("joo");
-		this.verifySetEvent(ADD, "joo");
-
-		this.setEvent = null;
-		this.setEventType = null;
-		this.setHolder.add("joo");
-		assertNull(this.setEvent);
-		assertNull(this.setEventType);
-
-		this.setEvent = null;
-		this.setEventType = null;
-		this.setHolder.add(null);
-		this.verifySetEvent(ADD, null);
-
-		this.setEvent = null;
-		this.setEventType = null;
-		this.setHolder.add(null);
-		assertNull(this.setEvent);
-		assertNull(this.setEventType);
-
-		this.setEvent = null;
-		this.setEventType = null;
-		this.setHolder.remove("joo");
-		this.verifySetEvent(REMOVE, "joo");
-
-		this.setEvent = null;
-		this.setEventType = null;
-		this.setHolder.remove("joo");
-		assertNull(this.setEvent);
-		assertNull(this.setEventType);
-
-		this.setEvent = null;
-		this.setEventType = null;
-		this.setHolder.remove(null);
-		this.verifySetEvent(REMOVE, null);
-
-		this.setEvent = null;
-		this.setEventType = null;
-		this.setHolder.setValues(this.buildSet());
-		this.verifySetEvent(CHANGE);
-
-		this.setEvent = null;
-		this.setEventType = null;
-		this.setHolder.addAll(this.buildSet());
-		assertNull(this.setEvent);
-		assertNull(this.setEventType);
-	}
-
-	private ChangeListener buildBagListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {
-				SimpleCollectionValueModelTests.this.bagEventType = ADD;
-				SimpleCollectionValueModelTests.this.bagEvent = e;
-			}
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent e) {
-				SimpleCollectionValueModelTests.this.bagEventType = REMOVE;
-				SimpleCollectionValueModelTests.this.bagEvent = e;
-			}
-			@Override
-			public void collectionCleared(CollectionClearEvent e) {
-				SimpleCollectionValueModelTests.this.bagEventType = CLEAR;
-				SimpleCollectionValueModelTests.this.bagEvent = e;
-			}
-			@Override
-			public void collectionChanged(CollectionChangeEvent e) {
-				SimpleCollectionValueModelTests.this.bagEventType = CHANGE;
-				SimpleCollectionValueModelTests.this.bagEvent = e;
-			}
-		};
-	}
-
-	private ChangeListener buildSetListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {
-				SimpleCollectionValueModelTests.this.setEventType = ADD;
-				SimpleCollectionValueModelTests.this.setEvent = e;
-			}
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent e) {
-				SimpleCollectionValueModelTests.this.setEventType = REMOVE;
-				SimpleCollectionValueModelTests.this.setEvent = e;
-			}
-			@Override
-			public void collectionCleared(CollectionClearEvent e) {
-				SimpleCollectionValueModelTests.this.setEventType = CLEAR;
-				SimpleCollectionValueModelTests.this.setEvent = e;
-			}
-			@Override
-			public void collectionChanged(CollectionChangeEvent e) {
-				SimpleCollectionValueModelTests.this.setEventType = CHANGE;
-				SimpleCollectionValueModelTests.this.setEvent = e;
-			}
-		};
-	}
-
-	private void verifyBagEvent(String eventType) {
-		assertEquals(eventType, this.bagEventType);
-		assertEquals(this.bagHolder, this.bagEvent.getSource());
-		assertEquals(CollectionValueModel.VALUES, this.bagEvent.getCollectionName());
-	}
-
-	private void verifyBagEvent(String eventType, Object item) {
-		this.verifyBagEvent(eventType);
-		assertEquals(item, this.getBagEventItems().iterator().next());
-	}
-
-	private Iterable<?> getBagEventItems() {
-		if (this.bagEvent instanceof CollectionAddEvent) {
-			return ((CollectionAddEvent) this.bagEvent).getItems();
-		} else if (this.bagEvent instanceof CollectionRemoveEvent) {
-			return ((CollectionRemoveEvent) this.bagEvent).getItems();
-		}
-		throw new IllegalStateException();
-	}
-
-	private void verifySetEvent(String eventType) {
-		assertEquals(eventType, this.setEventType);
-		assertEquals(this.setHolder, this.setEvent.getSource());
-		assertEquals(CollectionValueModel.VALUES, this.setEvent.getCollectionName());
-	}
-
-	private void verifySetEvent(String eventType, Object item) {
-		this.verifySetEvent(eventType);
-		assertEquals(item, this.getSetEventItems().iterator().next());
-	}
-
-	private Iterable<?> getSetEventItems() {
-		if (this.setEvent instanceof CollectionAddEvent) {
-			return ((CollectionAddEvent) this.setEvent).getItems();
-		} else if (this.setEvent instanceof CollectionRemoveEvent) {
-			return ((CollectionRemoveEvent) this.setEvent).getItems();
-		}
-		throw new IllegalStateException();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SimpleListValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SimpleListValueModelTests.java
deleted file mode 100644
index f4122fd..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SimpleListValueModelTests.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class SimpleListValueModelTests extends TestCase {
-	private SimpleListValueModel<String> listHolder;
-	ListEvent event;
-	String eventType;
-
-	private static final String ADD = "add";
-	private static final String REMOVE = "remove";
-	private static final String REPLACE = "replace";
-	private static final String MOVE = "move";
-	private static final String CLEAR = "clear";
-	private static final String CHANGE = "change";
-
-	
-	public SimpleListValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.listHolder = new SimpleListValueModel<String>(this.buildList());
-	}
-
-	private List<String> buildList() {
-		List<String> result = new ArrayList<String>();
-		result.add("foo");
-		result.add("bar");
-		result.add("baz");
-		return result;
-	}
-
-	private List<String> buildAddList() {
-		List<String> result = new ArrayList<String>();
-		result.add("joo");
-		result.add("jar");
-		result.add("jaz");
-		return result;
-	}
-
-//	private List<String> buildRemoveList() {
-//		List<String> result = new ArrayList<String>();
-//		result.add("foo");
-//		result.add("bar");
-//		return result;
-//	}
-//
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIterator() {
-		assertEquals(this.buildList(), CollectionTools.list(this.listHolder.iterator()));
-	}
-
-	public void testListIterator() {
-		assertEquals(this.buildList(), CollectionTools.list(this.listHolder.listIterator()));
-	}
-
-	public void testListIteratorInt() {
-		assertEquals(CollectionTools.list(this.buildList().listIterator(1)), CollectionTools.list(this.listHolder.listIterator(1)));
-	}
-
-	public void testSize() {
-		assertEquals(this.buildList().size(), this.listHolder.size());
-	}
-
-	private boolean listContains(Object item) {
-		return CollectionTools.contains(this.listHolder.listIterator(), item);
-	}
-
-	private boolean listContainsAll(Collection<String> items) {
-		return CollectionTools.containsAll(this.listHolder.listIterator(), items);
-	}
-
-	private boolean listContainsAny(Collection<String> items) {
-		Set<String> set = CollectionTools.set(this.listHolder.iterator());
-		for (Iterator<String> stream = items.iterator(); stream.hasNext(); ) {
-			if (set.contains(stream.next())) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	public void testAddObject() {
-		assertFalse(this.listContains("joo"));
-		this.listHolder.add("joo");
-		assertTrue(this.listContains("joo"));
-
-		assertFalse(this.listContains(null));
-		this.listHolder.add(null);
-		assertTrue(this.listContains(null));
-	}
-
-	public void testAddIntObject() {
-		assertFalse(this.listContains("joo"));
-		this.listHolder.add(2, "joo");
-		assertTrue(this.listContains("joo"));
-
-		assertFalse(this.listContains(null));
-		this.listHolder.add(0, null);
-		assertTrue(this.listContains(null));
-	}
-
-	public void testAddAllCollection() {
-		assertFalse(this.listContainsAny(this.buildAddList()));
-		this.listHolder.addAll(this.buildAddList());
-		assertTrue(this.listContainsAll(this.buildAddList()));
-	}
-
-	public void testAddAllIntCollection() {
-		assertFalse(this.listContainsAny(this.buildAddList()));
-		this.listHolder.addAll(2, this.buildAddList());
-		assertTrue(this.listContainsAll(this.buildAddList()));
-	}
-
-	public void testClear() {
-		assertFalse(this.listHolder.isEmpty());
-		this.listHolder.clear();
-		assertTrue(this.listHolder.isEmpty());
-	}
-
-	public void testContainsObject() {
-		assertTrue(this.listHolder.contains("foo"));
-		assertFalse(this.listHolder.contains("joo"));
-	}
-
-	public void testContainsAllCollection() {
-		Collection<String> c = new ArrayList<String>();
-		c.add("foo");
-		c.add("bar");
-		assertTrue(this.listHolder.containsAll(c));
-
-		c.add("joo");
-		assertFalse(this.listHolder.containsAll(c));
-	}
-
-	public void testEquals() {
-		assertEquals(new SimpleListValueModel<String>(this.buildList()), this.listHolder);
-		assertFalse(this.listHolder.equals(new SimpleListValueModel<String>(this.buildAddList())));
-		assertFalse(this.listHolder.equals(this.buildList()));
-		assertFalse(this.listHolder.equals(new SimpleListValueModel<String>()));
-	}
-
-	public void testGetInt() {
-		assertEquals("foo", this.listHolder.get(0));
-		assertEquals("bar", this.listHolder.get(1));
-		assertEquals("baz", this.listHolder.get(2));
-	}
-
-	public void testHashCode() {
-		assertEquals(new SimpleListValueModel<String>(this.buildList()).hashCode(), this.listHolder.hashCode());
-	}
-
-	public void testIndexOfObject() {
-		assertEquals(0, this.listHolder.indexOf("foo"));
-		assertEquals(1, this.listHolder.indexOf("bar"));
-		assertEquals(2, this.listHolder.indexOf("baz"));
-		assertEquals(-1, this.listHolder.indexOf("joo"));
-	}
-
-	public void testLastIndexOfObject() {
-		assertEquals(0, this.listHolder.lastIndexOf("foo"));
-		assertEquals(1, this.listHolder.lastIndexOf("bar"));
-		assertEquals(2, this.listHolder.lastIndexOf("baz"));
-		assertEquals(-1, this.listHolder.lastIndexOf("joo"));
-
-		this.listHolder.add("foo");
-		assertEquals(3, this.listHolder.lastIndexOf("foo"));
-	}
-
-	public void testIsEmpty() {
-		assertFalse(this.listHolder.isEmpty());
-		this.listHolder.clear();
-		assertTrue(this.listHolder.isEmpty());
-	}
-
-	public void testRemove() {
-		assertTrue(this.listContains("bar"));
-		this.listHolder.remove(this.buildList().indexOf("bar"));
-		assertFalse(this.listContains("bar"));
-
-		this.listHolder.add(1, null);
-		assertTrue(this.listContains(null));
-		this.listHolder.remove(1);
-		assertFalse(this.listContains(null));
-	}
-
-	public void testSetValues() {
-		List<String> newList = new ArrayList<String>();
-		newList.add("joo");
-		newList.add("jar");
-		newList.add("jaz");
-
-		assertTrue(this.listContains("bar"));
-		assertFalse(this.listContains("jar"));
-		this.listHolder.setListValues(newList);
-		assertFalse(this.listContains("bar"));
-		assertTrue(this.listContains("jar"));
-
-		this.listHolder.add(1, null);
-		assertTrue(this.listContains(null));
-		this.listHolder.remove(1);
-		assertFalse(this.listContains(null));
-
-		this.listHolder.setListValues(new ArrayList<String>());
-		assertFalse(this.listContains("jar"));
-	}
-
-	public void testListChange1() {
-		this.listHolder.addChangeListener(this.buildChangeListener());
-		this.verifyListChange();
-	}
-
-	public void testListChange2() {
-		this.listHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-		this.verifyListChange();
-	}
-
-	private void verifyListChange() {
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.add(1, "joo");
-		this.verifyEvent(ADD, 1, "joo");
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.add(1, null);
-		this.verifyEvent(ADD, 1, null);
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.remove(1);
-		this.verifyEvent(REMOVE, 1, null);
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.remove(1);
-		this.verifyEvent(REMOVE, 1, "joo");
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.setListValues(this.buildList());
-		this.verifyEvent(CHANGE);
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.addAll(0, this.buildList());
-		this.verifyEvent(ADD);
-		assertEquals(this.buildList(), CollectionTools.list(((ListAddEvent) this.event).getItems()));
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.set(0, "joo");
-		this.verifyEvent(REPLACE);
-		assertFalse(CollectionTools.contains(((ListReplaceEvent) this.event).getNewItems(), "foo"));
-		assertTrue(CollectionTools.contains(((ListReplaceEvent) this.event).getNewItems(), "joo"));
-	}
-
-	private ListChangeListener buildListener() {
-		return new ListChangeListener() {
-			public void itemsAdded(ListAddEvent e) {
-				SimpleListValueModelTests.this.eventType = ADD;
-				SimpleListValueModelTests.this.event = e;
-			}
-			public void itemsRemoved(ListRemoveEvent e) {
-				SimpleListValueModelTests.this.eventType = REMOVE;
-				SimpleListValueModelTests.this.event = e;
-			}
-			public void itemsReplaced(ListReplaceEvent e) {
-				SimpleListValueModelTests.this.eventType = REPLACE;
-				SimpleListValueModelTests.this.event = e;
-			}
-			public void itemsMoved(ListMoveEvent e) {
-				SimpleListValueModelTests.this.eventType = MOVE;
-				SimpleListValueModelTests.this.event = e;
-			}
-			public void listCleared(ListClearEvent e) {
-				SimpleListValueModelTests.this.eventType = CLEAR;
-				SimpleListValueModelTests.this.event = e;
-			}
-			public void listChanged(ListChangeEvent e) {
-				SimpleListValueModelTests.this.eventType = CHANGE;
-				SimpleListValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	private ChangeListener buildChangeListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {
-				SimpleListValueModelTests.this.eventType = ADD;
-				SimpleListValueModelTests.this.event = e;
-			}
-			@Override
-			public void itemsRemoved(ListRemoveEvent e) {
-				SimpleListValueModelTests.this.eventType = REMOVE;
-				SimpleListValueModelTests.this.event = e;
-			}
-			@Override
-			public void itemsReplaced(ListReplaceEvent e) {
-				SimpleListValueModelTests.this.eventType = REPLACE;
-				SimpleListValueModelTests.this.event = e;
-			}
-			@Override
-			public void itemsMoved(ListMoveEvent e) {
-				SimpleListValueModelTests.this.eventType = MOVE;
-				SimpleListValueModelTests.this.event = e;
-			}
-			@Override
-			public void listCleared(ListClearEvent e) {
-				SimpleListValueModelTests.this.eventType = CLEAR;
-				SimpleListValueModelTests.this.event = e;
-			}
-			@Override
-			public void listChanged(ListChangeEvent e) {
-				SimpleListValueModelTests.this.eventType = CHANGE;
-				SimpleListValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	private void verifyEvent(String e) {
-		assertEquals(e, this.eventType);
-		assertEquals(this.listHolder, this.event.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event.getListName());
-	}
-
-	private void verifyEvent(String e, int index, Object item) {
-		this.verifyEvent(e);
-		if (e == ADD) {
-			assertEquals(index, ((ListAddEvent) this.event).getIndex());
-			assertEquals(item, ((ListAddEvent) this.event).getItems().iterator().next());
-		} else if (e == REMOVE) {
-			assertEquals(index, ((ListRemoveEvent) this.event).getIndex());
-			assertEquals(item, ((ListRemoveEvent) this.event).getItems().iterator().next());
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SimplePropertyValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SimplePropertyValueModelTests.java
deleted file mode 100644
index e1a617f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SimplePropertyValueModelTests.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class SimplePropertyValueModelTests extends TestCase {
-	private WritablePropertyValueModel<String> objectHolder;
-	PropertyChangeEvent event;
-
-	
-	public SimplePropertyValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.objectHolder = new SimplePropertyValueModel<String>("foo");
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testValue() {
-		assertEquals("foo", this.objectHolder.getValue());
-	}
-
-	public void testSetValue() {
-		this.objectHolder.setValue("bar");
-		assertEquals("bar", this.objectHolder.getValue());
-		this.objectHolder.setValue(null);
-		assertEquals(null, this.objectHolder.getValue());
-		this.objectHolder.setValue("baz");
-		assertEquals("baz", this.objectHolder.getValue());
-	}
-
-	public void testPropertyChange1() {
-		this.objectHolder.addChangeListener(this.buildListener());
-		this.verifyPropertyChange();
-	}
-
-	public void testPropertyChange2() {
-		this.objectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildListener());
-		this.verifyPropertyChange();
-	}
-
-	private void verifyPropertyChange() {
-		this.event = null;
-		this.objectHolder.setValue("bar");
-		this.verifyEvent("foo", "bar");
-
-		this.event = null;
-		this.objectHolder.setValue(null);
-		this.verifyEvent("bar", null);
-
-		this.event = null;
-		this.objectHolder.setValue("baz");
-		this.verifyEvent(null, "baz");
-	}
-
-	private ChangeListener buildListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				SimplePropertyValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	private void verifyEvent(Object oldValue, Object newValue) {
-		assertEquals(this.objectHolder, this.event.getSource());
-		assertEquals(PropertyValueModel.VALUE, this.event.getPropertyName());
-		assertEquals(oldValue, this.event.getOldValue());
-		assertEquals(newValue, this.event.getNewValue());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SortedListValueModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SortedListValueModelAdapterTests.java
deleted file mode 100644
index a1e0d01..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SortedListValueModelAdapterTests.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.List;
-import java.util.TreeSet;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.ReverseComparator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelAdapter;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class SortedListValueModelAdapterTests extends TestCase {
-	private SortedListValueModelAdapter<String> adapter;
-	private SimpleCollectionValueModel<String> wrappedCollectionHolder;
-	private Collection<String> wrappedCollection;
-
-	
-	public SortedListValueModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.wrappedCollection = new HashBag<String>();
-		this.wrappedCollectionHolder = new SimpleCollectionValueModel<String>(this.wrappedCollection);
-		this.adapter = new SortedListValueModelAdapter<String>(this.wrappedCollectionHolder);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	private void verifyList(Collection<String> expected, ListValueModel<String> actual) {
-		this.verifyList(expected, actual, null);
-	}
-
-	private void verifyList(Collection<String> expected, ListValueModel<String> actual, Comparator<String> comparator) {
-		Collection<String> sortedSet = new TreeSet<String>(comparator);
-		sortedSet.addAll(expected);
-		List<String> expectedList = new ArrayList<String>(sortedSet);
-		List<String> actualList = CollectionTools.list(actual.iterator());
-		assertEquals(expectedList, actualList);
-	}
-
-	public void testAdd() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListChangeListener() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {/* OK */}
-			@Override
-			public void itemsReplaced(ListReplaceEvent e) {/* OK */}
-		});
-		this.wrappedCollectionHolder.add("foo");
-		this.wrappedCollectionHolder.add("bar");
-		this.wrappedCollectionHolder.add("baz");
-		assertEquals(3, this.adapter.size());
-		this.verifyList(this.wrappedCollection, this.adapter);
-	}
-
-	public void testAddItem() {
-		List<String> synchList = new CoordinatedList<String>(this.adapter);
-		Bag<String> synchCollection = new CoordinatedBag<String>(this.wrappedCollectionHolder);
-		this.wrappedCollectionHolder.add("foo");
-		assertTrue(this.wrappedCollection.contains("foo"));
-		this.wrappedCollectionHolder.add("bar");
-		this.wrappedCollectionHolder.add("baz");
-		this.wrappedCollectionHolder.add("joo");
-		this.wrappedCollectionHolder.add("jar");
-		this.wrappedCollectionHolder.add("jaz");
-		assertEquals(6, this.wrappedCollection.size());
-
-		this.verifyList(this.wrappedCollection, this.adapter);
-		assertEquals(this.wrappedCollection, CollectionTools.collection(synchList.iterator()));
-		assertEquals(this.wrappedCollection, synchCollection);
-	}
-
-	public void testRemoveItem() {
-		List<String> synchList = new CoordinatedList<String>(this.adapter);
-		Bag<String> synchCollection = new CoordinatedBag<String>(this.wrappedCollectionHolder);
-		this.wrappedCollectionHolder.add("foo");
-		this.wrappedCollectionHolder.add("bar");
-		this.wrappedCollectionHolder.add("baz");
-		this.wrappedCollectionHolder.add("joo");
-		this.wrappedCollectionHolder.add("jar");
-		this.wrappedCollectionHolder.add("jaz");
-		this.wrappedCollectionHolder.remove("jaz");
-		assertFalse(this.wrappedCollection.contains("jaz"));
-		this.wrappedCollectionHolder.remove("foo");
-		assertFalse(this.wrappedCollection.contains("foo"));
-		assertEquals(4, this.wrappedCollection.size());
-
-		this.verifyList(this.wrappedCollection, this.adapter);
-		assertEquals(this.wrappedCollection, CollectionTools.collection(synchList.iterator()));
-		assertEquals(this.wrappedCollection, synchCollection);
-	}
-
-	public void testListSynch() {
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListChangeListener() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {/* OK */}
-			@Override
-			public void itemsRemoved(ListRemoveEvent e) {/* OK */}
-			@Override
-			public void itemsReplaced(ListReplaceEvent e) {/* OK */}
-		});
-		this.wrappedCollectionHolder.add("foo");
-		this.wrappedCollectionHolder.add("bar");
-		this.wrappedCollectionHolder.add("baz");
-		this.wrappedCollectionHolder.add("joo");
-		this.wrappedCollectionHolder.add("jar");
-		this.wrappedCollectionHolder.add("jaz");
-		this.wrappedCollectionHolder.remove("jaz");
-		assertFalse(this.wrappedCollection.contains("jaz"));
-		this.wrappedCollectionHolder.remove("foo");
-		assertFalse(this.wrappedCollection.contains("foo"));
-		assertEquals(4, this.wrappedCollection.size());
-
-		this.verifyList(this.wrappedCollection, this.adapter);
-	}
-
-	public void testSetComparator() {
-		List<String> synchList = new CoordinatedList<String>(this.adapter);
-		Bag<String> synchCollection = new CoordinatedBag<String>(this.wrappedCollectionHolder);
-		this.wrappedCollectionHolder.add("foo");
-		assertTrue(this.wrappedCollection.contains("foo"));
-		this.wrappedCollectionHolder.add("bar");
-		this.wrappedCollectionHolder.add("baz");
-		this.wrappedCollectionHolder.add("joo");
-		this.wrappedCollectionHolder.add("jar");
-		this.wrappedCollectionHolder.add("jaz");
-		assertEquals(6, this.wrappedCollection.size());
-
-		this.verifyList(this.wrappedCollection, this.adapter);
-		assertEquals(this.wrappedCollection, CollectionTools.collection(synchList.iterator()));
-		assertEquals(this.wrappedCollection, synchCollection);
-
-		this.adapter.setComparator(new ReverseComparator<String>());
-		this.verifyList(this.wrappedCollection, this.adapter, new ReverseComparator<String>());
-		assertEquals(this.wrappedCollection, CollectionTools.collection(synchList.iterator()));
-		assertEquals(this.wrappedCollection, synchCollection);
-	}
-
-	public void testHasListeners() {
-		assertFalse(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		CoordinatedList<String> synchList = new CoordinatedList<String>(this.adapter);
-		assertTrue(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		this.adapter.removeListChangeListener(ListValueModel.LIST_VALUES, synchList);
-		assertFalse(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		ChangeListener cl = new ChangeAdapter();
-		this.adapter.addChangeListener(cl);
-		assertTrue(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		this.adapter.removeChangeListener(cl);
-		assertFalse(((AbstractModel) this.adapter).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	public void testCollectionChange() {
-		this.wrappedCollectionHolder.add("fred");
-		this.adapter.addListChangeListener(ListValueModel.LIST_VALUES, new TestListChangeListener() {
-			@Override
-			public void listChanged(ListChangeEvent e) {/* OK */}
-		});
-		this.wrappedCollectionHolder.setValues(Arrays.asList(new String[] {"foo", "bar", "baz"}));
-		assertEquals(3, this.adapter.size());
-		this.verifyList(this.wrappedCollection, this.adapter);
-	}
-
-	class TestListChangeListener implements ListChangeListener {
-		public void itemsAdded(ListAddEvent e) {
-			fail("unexpected event");
-		}
-		public void itemsRemoved(ListRemoveEvent e) {
-			fail("unexpected event");
-		}
-		public void itemsReplaced(ListReplaceEvent e) {
-			fail("unexpected event");
-		}
-		public void itemsMoved(ListMoveEvent e) {
-			fail("unexpected event");
-		}
-		public void listCleared(ListClearEvent e) {
-			fail("unexpected event");
-		}
-		public void listChanged(ListChangeEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SortedListValueModelWrapperTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SortedListValueModelWrapperTests.java
deleted file mode 100644
index 63815b9..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/SortedListValueModelWrapperTests.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.List;
-import java.util.TreeSet;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.ReverseComparator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelWrapper;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class SortedListValueModelWrapperTests extends TestCase {
-	private List<String> list;
-	private SimpleListValueModel<String> listModel;
-	private SortedListValueModelWrapper<String> sortedListModel;
-
-	
-	public SortedListValueModelWrapperTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.list = new ArrayList<String>();
-		this.listModel = new SimpleListValueModel<String>(this.list);
-		this.sortedListModel = new SortedListValueModelWrapper<String>(this.listModel);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	private void verifyList(Collection<String> expected, ListValueModel<String> actual) {
-		this.verifyList(expected, actual, null);
-	}
-
-	private void verifyList(Collection<String> expected, ListValueModel<String> actual, Comparator<String> comparator) {
-		Collection<String> sortedSet = new TreeSet<String>(comparator);
-		sortedSet.addAll(expected);
-		List<String> expectedList = new ArrayList<String>(sortedSet);
-		List<String> actualList = CollectionTools.list(actual);
-		assertEquals(expectedList, actualList);
-	}
-
-	public void testAdd() {
-		this.sortedListModel.addListChangeListener(ListValueModel.LIST_VALUES, new TestListChangeListener() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {/* OK */}
-			@Override
-			public void itemsReplaced(ListReplaceEvent e) {/* OK */}
-		});
-		this.listModel.add("foo");
-		this.listModel.add("bar");
-		this.listModel.add("baz");
-		assertEquals(3, this.sortedListModel.size());
-		this.verifyList(this.list, this.sortedListModel);
-	}
-
-	public void testAddItem() {
-		List<String> sortedSynchList = new CoordinatedList<String>(this.sortedListModel);
-		List<String> synchList = new CoordinatedList<String>(this.listModel);
-		this.listModel.add("foo");
-		assertTrue(this.list.contains("foo"));
-		this.listModel.add("bar");
-		this.listModel.add("baz");
-		this.listModel.add("joo");
-		this.listModel.add("jar");
-		this.listModel.add("jaz");
-		assertEquals(6, this.list.size());
-
-		this.verifyList(this.list, this.sortedListModel);
-		assertEquals(this.list, synchList);
-		assertEquals(CollectionTools.list(this.sortedListModel), sortedSynchList);
-	}
-
-	public void testRemoveItem() {
-		List<String> sortedSynchList = new CoordinatedList<String>(this.sortedListModel);
-		List<String> synchList = new CoordinatedList<String>(this.listModel);
-		this.listModel.add("foo");
-		this.listModel.add("bar");
-		this.listModel.add("baz");
-		this.listModel.add("joo");
-		this.listModel.add("jar");
-		this.listModel.add("jaz");
-		this.listModel.remove("jaz");
-		assertFalse(this.list.contains("jaz"));
-		this.listModel.remove("foo");
-		assertFalse(this.list.contains("foo"));
-		assertEquals(4, this.list.size());
-
-		this.verifyList(this.list, this.sortedListModel);
-		assertEquals(this.list, synchList);
-		assertEquals(CollectionTools.list(this.sortedListModel), sortedSynchList);
-	}
-
-	public void testReplaceItem() {
-		List<String> sortedSynchList = new CoordinatedList<String>(this.sortedListModel);
-		List<String> synchList = new CoordinatedList<String>(this.listModel);
-		this.listModel.add("foo");
-		assertTrue(this.list.contains("foo"));
-		this.listModel.add("bar");
-		this.listModel.add("baz");
-		this.listModel.add("joo");
-		this.listModel.add("jar");
-		this.listModel.add("jaz");
-		assertEquals(6, this.list.size());
-		this.listModel.set(3, "ttt");
-		this.listModel.set(4, "xxx");
-		assertTrue(this.list.contains("xxx"));
-
-		this.verifyList(this.list, this.sortedListModel);
-		assertEquals(this.list, synchList);
-		assertEquals(CollectionTools.list(this.sortedListModel), sortedSynchList);
-	}
-
-	public void testListSynch() {
-		this.sortedListModel.addListChangeListener(ListValueModel.LIST_VALUES, new TestListChangeListener() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {/* OK */}
-			@Override
-			public void itemsRemoved(ListRemoveEvent e) {/* OK */}
-			@Override
-			public void itemsReplaced(ListReplaceEvent e) {/* OK */}
-		});
-		this.listModel.add("foo");
-		this.listModel.add("bar");
-		this.listModel.add("baz");
-		this.listModel.add("joo");
-		this.listModel.add("jar");
-		this.listModel.add("jaz");
-		this.listModel.remove("jaz");
-		assertFalse(this.list.contains("jaz"));
-		this.listModel.remove("foo");
-		assertFalse(this.list.contains("foo"));
-		assertEquals(4, this.list.size());
-
-		this.verifyList(this.list, this.sortedListModel);
-	}
-
-	public void testSetComparator() {
-		List<String> sortedSynchList = new CoordinatedList<String>(this.sortedListModel);
-		List<String> synchList = new CoordinatedList<String>(this.listModel);
-		this.listModel.add("foo");
-		assertTrue(this.list.contains("foo"));
-		this.listModel.add("bar");
-		this.listModel.add("baz");
-		this.listModel.add("joo");
-		this.listModel.add("jar");
-		this.listModel.add("jaz");
-		assertEquals(6, this.list.size());
-
-		this.verifyList(this.list, this.sortedListModel);
-		assertEquals(this.list, synchList);
-		assertEquals(CollectionTools.list(this.sortedListModel), sortedSynchList);
-
-		this.sortedListModel.setComparator(new ReverseComparator<String>());
-		this.verifyList(this.list, this.sortedListModel, new ReverseComparator<String>());
-		assertEquals(this.list, synchList);
-	}
-
-	public void testHasListeners() {
-		assertFalse(((AbstractModel) this.sortedListModel).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		CoordinatedList<String> sortedSynchList = new CoordinatedList<String>(this.sortedListModel);
-		assertTrue(((AbstractModel) this.sortedListModel).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		this.sortedListModel.removeListChangeListener(ListValueModel.LIST_VALUES, sortedSynchList);
-		assertFalse(((AbstractModel) this.sortedListModel).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		ChangeListener cl = new ChangeAdapter();
-		this.sortedListModel.addChangeListener(cl);
-		assertTrue(((AbstractModel) this.sortedListModel).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		this.sortedListModel.removeChangeListener(cl);
-		assertFalse(((AbstractModel) this.sortedListModel).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	public void testListChange() {
-		this.listModel.add("fred");
-		this.sortedListModel.addListChangeListener(ListValueModel.LIST_VALUES, new TestListChangeListener() {
-			@Override
-			public void listChanged(ListChangeEvent e) {/* OK */}
-		});
-		this.listModel.setListValues(Arrays.asList(new String[] {"foo", "bar", "baz"}));
-		assertEquals(3, this.sortedListModel.size());
-		this.verifyList(this.list, this.sortedListModel);
-	}
-
-	class TestListChangeListener implements ListChangeListener {
-		public void itemsAdded(ListAddEvent e) {
-			fail("unexpected event");
-		}
-		public void itemsRemoved(ListRemoveEvent e) {
-			fail("unexpected event");
-		}
-		public void itemsReplaced(ListReplaceEvent e) {
-			fail("unexpected event");
-		}
-		public void itemsMoved(ListMoveEvent e) {
-			fail("unexpected event");
-		}
-		public void listCleared(ListClearEvent e) {
-			fail("unexpected event");
-		}
-		public void listChanged(ListChangeEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/StaticCollectionValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/StaticCollectionValueModelTests.java
deleted file mode 100644
index c7d0e9b..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/StaticCollectionValueModelTests.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.Collection;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.model.value.StaticCollectionValueModel;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class StaticCollectionValueModelTests extends TestCase {
-
-	private static final Collection<String> COLLECTION = buildCollection();
-	private static Collection<String> buildCollection() {
-		Collection<String> result = new HashBag<String>();
-		result.add("foo");
-		result.add("bar");
-		return result;
-	}
-
-	private CollectionValueModel<String> collectionHolder;
-
-
-	public StaticCollectionValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.collectionHolder = this.buildCollectionHolder();
-	}
-
-	private CollectionValueModel<String> buildCollectionHolder() {
-		return new StaticCollectionValueModel<String>(COLLECTION);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIterator() {
-		assertEquals(buildCollection(), CollectionTools.bag(this.collectionHolder.iterator()));
-	}
-
-	public void testSize() {
-		assertEquals(buildCollection().size(), this.collectionHolder.size());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/StaticListValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/StaticListValueModelTests.java
deleted file mode 100644
index d7a7d24..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/StaticListValueModelTests.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.List;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.value.StaticListValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class StaticListValueModelTests extends TestCase {
-
-	private static final List<String> LIST = buildList();
-	private static List<String> buildList() {
-		List<String> result = new ArrayList<String>();
-		result.add("foo");
-		result.add("bar");
-		return result;
-	}
-
-	private ListValueModel<String> listHolder;
-
-
-	public StaticListValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.listHolder = new StaticListValueModel<String>(LIST);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testGet() {
-		List<String> expected = buildList();
-		for (int i = 0; i < this.listHolder.size(); i++) {
-			assertEquals(expected.get(i), this.listHolder.get(i));
-		}
-	}
-
-	public void testIterator() {
-		assertEquals(buildList(), CollectionTools.list(this.listHolder.listIterator()));
-	}
-
-	public void testSize() {
-		assertEquals(buildList().size(), this.listHolder.size());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/StaticValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/StaticValueModelTests.java
deleted file mode 100644
index 14e3d9a..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/StaticValueModelTests.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.model.value.StaticPropertyValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class StaticValueModelTests extends TestCase {
-	private PropertyValueModel<String> objectHolder;
-	private static final PropertyValueModel<String> OBJECT_HOLDER = new StaticPropertyValueModel<String>("foo");
-
-	
-	public StaticValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.objectHolder = OBJECT_HOLDER;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testValue() {
-		assertEquals("foo", this.objectHolder.getValue());
-	}
-
-	public void testToString() {
-		assertTrue(this.objectHolder.toString().indexOf("foo") >= 0);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/TransformationListValueModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/TransformationListValueModelAdapterTests.java
deleted file mode 100644
index 83ce590..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/TransformationListValueModelAdapterTests.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationListValueModelAdapter;
-import org.eclipse.jpt.utility.model.event.ListAddEvent;
-import org.eclipse.jpt.utility.model.event.ListChangeEvent;
-import org.eclipse.jpt.utility.model.event.ListClearEvent;
-import org.eclipse.jpt.utility.model.event.ListEvent;
-import org.eclipse.jpt.utility.model.event.ListMoveEvent;
-import org.eclipse.jpt.utility.model.event.ListRemoveEvent;
-import org.eclipse.jpt.utility.model.event.ListReplaceEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class TransformationListValueModelAdapterTests extends TestCase {
-	private SimpleListValueModel<String> listHolder;
-	private ListValueModel<String> transformedListHolder;
-	ListEvent event;
-	String eventType;
-
-	private static final String ADD = "add";
-	private static final String REMOVE = "remove";
-	private static final String REPLACE = "replace";
-	private static final String MOVE = "move";
-	private static final String CLEAR = "clear";
-	private static final String CHANGE = "change";
-
-
-	public TransformationListValueModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.listHolder = new SimpleListValueModel<String>(this.buildList());
-		this.transformedListHolder = this.buildTransformedListHolder(this.listHolder);
-	}
-
-	private List<String> buildList() {
-		List<String> result = new ArrayList<String>();
-		result.add("foo");
-		result.add("bar");
-		result.add("baz");
-		return result;
-	}
-
-	private List<String> buildTransformedList() {
-		return this.transform(this.buildList());
-	}
-
-	private List<String> transform(List<String> list) {
-		List<String> result = new ArrayList<String>(list.size());
-		for (String string : list) {
-			if (string == null) {
-				result.add(null);
-			} else {
-				result.add(string.toUpperCase());
-			}
-		}
-		return result;
-	}
-
-	private List<String> buildAddList() {
-		List<String> result = new ArrayList<String>();
-		result.add("joo");
-		result.add("jar");
-		result.add("jaz");
-		return result;
-	}
-
-	private List<String> buildTransformedAddList() {
-		return this.transform(this.buildAddList());
-	}
-
-//	private List<String> buildRemoveList() {
-//		List<String> result = new ArrayList<String>();
-//		result.add("foo");
-//		result.add("bar");
-//		return result;
-//	}
-//
-//	private List<String> buildTransformedRemoveList() {
-//		return this.transform(this.buildRemoveList());
-//	}
-//
-	ListValueModel<String> buildTransformedListHolder(ListValueModel<String> lvm) {
-		return new TransformationListValueModelAdapter<String, String>(lvm) {
-			@Override
-			protected String transformItem(String s) {
-				return (s == null) ? null : s.toUpperCase();
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testIterator() {
-		this.transformedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-		assertEquals(this.buildTransformedList(), CollectionTools.list(this.transformedListHolder.iterator()));
-	}
-
-	public void testStaleValues() {
-		ListChangeListener listener = this.buildListener();
-		this.transformedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		assertEquals(this.buildTransformedList(), CollectionTools.list(this.transformedListHolder.iterator()));
-
-		this.transformedListHolder.removeListChangeListener(ListValueModel.LIST_VALUES, listener);
-		assertEquals(Collections.EMPTY_LIST, CollectionTools.list(this.transformedListHolder.iterator()));
-	}
-
-	public void testSize() {
-		this.transformedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-		assertEquals(this.buildTransformedList().size(), CollectionTools.size(this.transformedListHolder.iterator()));
-	}
-
-	private boolean transformedListContains(Object item) {
-		return CollectionTools.contains(this.transformedListHolder.iterator(), item);
-	}
-
-	private boolean transformedListContainsAll(Collection<String> items) {
-		return CollectionTools.containsAll(this.transformedListHolder.iterator(), items);
-	}
-
-	private boolean transformedListContainsAny(Collection<String> items) {
-		List<String> transformedList = CollectionTools.list(this.transformedListHolder.iterator());
-		for (Iterator<String> stream = items.iterator(); stream.hasNext(); ) {
-			if (transformedList.contains(stream.next())) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	public void testAdd() {
-		this.transformedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-
-		assertFalse(this.transformedListContains("JOO"));
-		this.listHolder.add(2, "joo");
-		assertTrue(this.transformedListContains("JOO"));
-
-		assertFalse(this.transformedListContains(null));
-		this.listHolder.add(0, null);
-		assertTrue(this.transformedListContains(null));
-	}
-
-	public void testAddAll() {
-		this.transformedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-
-		assertFalse(this.transformedListContainsAny(this.buildTransformedAddList()));
-		this.listHolder.addAll(2, this.buildAddList());
-		assertTrue(this.transformedListContainsAll(this.buildTransformedAddList()));
-	}
-
-	public void testRemove() {
-		this.transformedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-
-		assertTrue(this.transformedListContains("BAR"));
-		this.listHolder.remove(this.buildList().indexOf("bar"));
-		assertFalse(this.transformedListContains("BAR"));
-
-		this.listHolder.add(1, null);
-		assertTrue(this.transformedListContains(null));
-		this.listHolder.remove(1);
-		assertFalse(this.transformedListContains(null));
-	}
-
-	public void testListChangeGeneric() {
-		this.transformedListHolder.addChangeListener(this.buildListener());
-		this.verifyListChange();
-	}
-
-	public void testListChangeNamed() {
-		this.transformedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, this.buildListener());
-		this.verifyListChange();
-	}
-
-	private void verifyListChange() {
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.add(1, "joo");
-		this.verifyEvent(ADD, 1, "JOO");
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.add(1, null);
-		this.verifyEvent(ADD, 1, null);
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.remove(1);
-		this.verifyEvent(REMOVE, 1, null);
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.remove(1);
-		this.verifyEvent(REMOVE, 1, "JOO");
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.addAll(0, this.buildList());
-		this.verifyEvent(ADD);
-		assertEquals(this.buildTransformedList(), CollectionTools.list(((ListAddEvent) this.event).getItems()));
-
-		this.event = null;
-		this.eventType = null;
-		this.listHolder.set(0, "joo");
-		this.verifyEvent(REPLACE);
-		assertFalse(CollectionTools.contains(((ListReplaceEvent) this.event).getNewItems(), "FOO"));
-		assertTrue(CollectionTools.contains(((ListReplaceEvent) this.event).getNewItems(), "JOO"));
-	}
-
-	private ChangeListener buildListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void itemsAdded(ListAddEvent e) {
-				TransformationListValueModelAdapterTests.this.eventType = ADD;
-				TransformationListValueModelAdapterTests.this.event = e;
-			}
-			@Override
-			public void itemsRemoved(ListRemoveEvent e) {
-				TransformationListValueModelAdapterTests.this.eventType = REMOVE;
-				TransformationListValueModelAdapterTests.this.event = e;
-			}
-			@Override
-			public void itemsReplaced(ListReplaceEvent e) {
-				TransformationListValueModelAdapterTests.this.eventType = REPLACE;
-				TransformationListValueModelAdapterTests.this.event = e;
-			}
-			@Override
-			public void itemsMoved(ListMoveEvent e) {
-				TransformationListValueModelAdapterTests.this.eventType = MOVE;
-				TransformationListValueModelAdapterTests.this.event = e;
-			}
-			@Override
-			public void listCleared(ListClearEvent e) {
-				TransformationListValueModelAdapterTests.this.eventType = CLEAR;
-				TransformationListValueModelAdapterTests.this.event = e;
-			}
-			@Override
-			public void listChanged(ListChangeEvent e) {
-				TransformationListValueModelAdapterTests.this.eventType = CHANGE;
-				TransformationListValueModelAdapterTests.this.event = e;
-			}
-		};
-	}
-
-	private void verifyEvent(String type) {
-		assertEquals(type, this.eventType);
-		assertEquals(this.transformedListHolder, this.event.getSource());
-		assertEquals(ListValueModel.LIST_VALUES, this.event.getListName());
-	}
-
-	private void verifyEvent(String type, int index, Object item) {
-		this.verifyEvent(type);
-		if (type == ADD) {
-			assertEquals(index, ((ListAddEvent) this.event).getIndex());
-			assertEquals(item, ((ListAddEvent) this.event).getItems().iterator().next());
-		} else if (type == REMOVE) {
-			assertEquals(index, ((ListRemoveEvent) this.event).getIndex());
-			assertEquals(item, ((ListRemoveEvent) this.event).getItems().iterator().next());
-		}
-	}
-
-	public void testHasListeners() {
-		/*
-		 * adding listeners to the transformed list will cause listeners
-		 * to be added to the wrapped list;
-		 * likewise, removing listeners from the transformed list will
-		 * cause listeners to be removed from the wrapped list
-		 */
-		assertFalse(((AbstractModel) this.listHolder).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		ChangeListener listener = this.buildListener();
-
-		this.transformedListHolder.addListChangeListener(ListValueModel.LIST_VALUES, listener);
-		assertTrue(((AbstractModel) this.listHolder).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		this.transformedListHolder.removeListChangeListener(ListValueModel.LIST_VALUES, listener);
-		assertFalse(((AbstractModel) this.listHolder).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		this.transformedListHolder.addChangeListener(listener);
-		assertTrue(((AbstractModel) this.listHolder).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		this.transformedListHolder.removeChangeListener(listener);
-		assertFalse(((AbstractModel) this.listHolder).hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-
-	/**
-	 * execute the same set of tests again, but by passing a Transformer to the adapter
-	 * (as opposed to overriding #transformItem(Object))
-	 */
-	public static class TransformerTests extends TransformationListValueModelAdapterTests {
-		public TransformerTests(String name) {
-			super(name);
-		}
-		@Override
-		ListValueModel<String> buildTransformedListHolder(ListValueModel<String> lvm) {
-			return new TransformationListValueModelAdapter<String, String>(lvm, this.buildTransformer());
-		}
-		private Transformer<String, String> buildTransformer() {
-			return new Transformer<String, String>() {
-				public String transform(String s) {
-					return (s == null) ? null : s.toUpperCase();
-				}
-			};
-		}
-	}
-	
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/TransformationPropertyValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/TransformationPropertyValueModelTests.java
deleted file mode 100644
index 0aaa6e4..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/TransformationPropertyValueModelTests.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.BidiTransformer;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationWritablePropertyValueModel;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class TransformationPropertyValueModelTests extends TestCase {
-	private WritablePropertyValueModel<String> objectHolder;
-	PropertyChangeEvent event;
-
-	private WritablePropertyValueModel<String> transformationObjectHolder;
-	PropertyChangeEvent transformationEvent;
-
-	public TransformationPropertyValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.objectHolder = new SimplePropertyValueModel<String>("foo");
-		this.transformationObjectHolder = new TransformationWritablePropertyValueModel<String, String>(this.objectHolder, this.buildTransformer());
-	}
-
-	private BidiTransformer<String, String> buildTransformer() {
-		return new BidiTransformer<String, String>() {
-			public String transform(String s) {
-				return (s == null) ? null : s.toUpperCase();
-			}
-			public String reverseTransform(String s) {
-				return (s == null) ? null : s.toLowerCase();
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testValue() {
-		assertEquals("foo", this.objectHolder.getValue());
-		assertEquals("FOO", this.transformationObjectHolder.getValue());
-
-		this.objectHolder.setValue("bar");
-		assertEquals("bar", this.objectHolder.getValue());
-		assertEquals("BAR", this.transformationObjectHolder.getValue());
-
-		this.objectHolder.setValue("baz");
-		assertEquals("baz", this.objectHolder.getValue());
-		assertEquals("BAZ", this.transformationObjectHolder.getValue());
-
-		this.objectHolder.setValue(null);
-		assertNull(this.objectHolder.getValue());
-		assertNull(this.transformationObjectHolder.getValue());
-
-		this.objectHolder.setValue("foo");
-		assertEquals("foo", this.objectHolder.getValue());
-		assertEquals("FOO", this.transformationObjectHolder.getValue());
-	}
-
-	public void testSetValue() {
-		this.transformationObjectHolder.setValue("BAR");
-		assertEquals("bar", this.objectHolder.getValue());
-		assertEquals("BAR", this.transformationObjectHolder.getValue());
-
-		this.transformationObjectHolder.setValue("Foo");
-		assertEquals("foo", this.objectHolder.getValue());
-		assertEquals("FOO", this.transformationObjectHolder.getValue());
-
-		this.transformationObjectHolder.setValue(null);
-		assertNull(this.objectHolder.getValue());
-		assertNull(this.transformationObjectHolder.getValue());
-
-		this.transformationObjectHolder.setValue("baz");
-		assertEquals("baz", this.objectHolder.getValue());
-		assertEquals("BAZ", this.transformationObjectHolder.getValue());
-	}
-
-	public void testLazyListening() {
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-		ChangeListener listener = this.buildTransformationListener();
-		this.transformationObjectHolder.addChangeListener(listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.transformationObjectHolder.removeChangeListener(listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		this.transformationObjectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.transformationObjectHolder.removePropertyChangeListener(PropertyValueModel.VALUE, listener);
-		assertTrue(((AbstractModel) this.objectHolder).hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-	}
-
-	public void testPropertyChange1() {
-		this.objectHolder.addChangeListener(this.buildListener());
-		this.transformationObjectHolder.addChangeListener(this.buildTransformationListener());
-		this.verifyPropertyChanges();
-	}
-
-	public void testPropertyChange2() {
-		this.objectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildListener());
-		this.transformationObjectHolder.addPropertyChangeListener(PropertyValueModel.VALUE, this.buildTransformationListener());
-		this.verifyPropertyChanges();
-	}
-
-	private void verifyPropertyChanges() {
-		this.event = null;
-		this.transformationEvent = null;
-		this.objectHolder.setValue("bar");
-		this.verifyEvent(this.event, this.objectHolder, "foo", "bar");
-		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, "FOO", "BAR");
-
-		this.event = null;
-		this.transformationEvent = null;
-		this.objectHolder.setValue("baz");
-		this.verifyEvent(this.event, this.objectHolder, "bar", "baz");
-		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, "BAR", "BAZ");
-
-		this.event = null;
-		this.transformationEvent = null;
-		this.objectHolder.setValue("Foo");
-		this.verifyEvent(this.event, this.objectHolder, "baz", "Foo");
-		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, "BAZ", "FOO");
-
-		this.event = null;
-		this.transformationEvent = null;
-		this.objectHolder.setValue("FOO");
-		this.verifyEvent(this.event, this.objectHolder, "Foo", "FOO");
-		assertNull(this.transformationEvent);
-
-		this.event = null;
-		this.transformationEvent = null;
-		this.objectHolder.setValue(null);
-		this.verifyEvent(this.event, this.objectHolder, "FOO", null);
-		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, "FOO", null);
-
-		this.event = null;
-		this.transformationEvent = null;
-		this.objectHolder.setValue("bar");
-		this.verifyEvent(this.event, this.objectHolder, null, "bar");
-		this.verifyEvent(this.transformationEvent, this.transformationObjectHolder, null, "BAR");
-	}
-
-	private ChangeListener buildListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				TransformationPropertyValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	private ChangeListener buildTransformationListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				TransformationPropertyValueModelTests.this.transformationEvent = e;
-			}
-		};
-	}
-
-	private void verifyEvent(PropertyChangeEvent e, Object source, Object oldValue, Object newValue) {
-		assertEquals(source, e.getSource());
-		assertEquals(PropertyValueModel.VALUE, e.getPropertyName());
-		assertEquals(oldValue, e.getOldValue());
-		assertEquals(newValue, e.getNewValue());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/TreeAspectAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/TreeAspectAdapterTests.java
deleted file mode 100644
index 4f851b4..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/TreeAspectAdapterTests.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.iterators.ChainIterator;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-import org.eclipse.jpt.utility.internal.iterators.TreeIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TreeAspectAdapter;
-import org.eclipse.jpt.utility.model.event.TreeAddEvent;
-import org.eclipse.jpt.utility.model.event.TreeChangeEvent;
-import org.eclipse.jpt.utility.model.event.TreeClearEvent;
-import org.eclipse.jpt.utility.model.event.TreeEvent;
-import org.eclipse.jpt.utility.model.event.TreeRemoveEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.TreeChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.TreeValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class TreeAspectAdapterTests extends TestCase {
-	private TestSubject subject1;
-	private WritablePropertyValueModel<TestSubject> subjectHolder1;
-	private TreeAspectAdapter<TestSubject, List<TestNode>> aa1;
-	private TreeEvent event1;
-	private TreeChangeListener listener1;
-
-	private TestSubject subject2;
-
-	
-	public TreeAspectAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.subject1 = new TestSubject();
-		TestNode root, node;
-
-		root = this.subject1.getRootNameNode();
-		node = this.subject1.addName(root, "name 1.1");
-		this.subject1.addName(node, "name 1.1.1");
-		this.subject1.addName(node, "name 1.1.2");
-		node = this.subject1.addName(root, "name 1.2");
-		this.subject1.addName(node, "name 1.2.1");
-		node = this.subject1.addName(root, "name 1.3");
-
-		root = this.subject1.getRootDescriptionNode();
-		node = this.subject1.addDescription(root, "description 1.1");
-		this.subject1.addDescription(node, "description 1.1.1");
-		this.subject1.addDescription(node, "description 1.1.2");
-		node = this.subject1.addDescription(root, "description 1.2");
-		this.subject1.addDescription(node, "description 1.2.1");
-		node = this.subject1.addDescription(root, "description 1.3");
-
-		this.subjectHolder1 = new SimplePropertyValueModel<TestSubject>(this.subject1);
-		this.aa1 = this.buildAspectAdapter(this.subjectHolder1);
-		this.listener1 = this.buildValueChangeListener1();
-		this.aa1.addTreeChangeListener(TreeValueModel.NODES, this.listener1);
-		this.event1 = null;
-
-		this.subject2 = new TestSubject();
-
-		root = this.subject2.getRootNameNode();
-		node = this.subject2.addName(root, "name 2.1");
-		this.subject2.addName(node, "name 2.1.1");
-		this.subject2.addName(node, "name 2.1.2");
-		node = this.subject2.addName(root, "name 2.2");
-		this.subject2.addName(node, "name 2.2.1");
-		node = this.subject2.addName(root, "name 2.3");
-
-		root = this.subject2.getRootDescriptionNode();
-		node = this.subject2.addDescription(root, "description 2.1");
-		this.subject2.addDescription(node, "description 2.1.1");
-		this.subject2.addDescription(node, "description 2.1.2");
-		node = this.subject2.addDescription(root, "description 2.2");
-		this.subject2.addDescription(node, "description 2.2.1");
-		node = this.subject2.addDescription(root, "description 2.3");
-	}
-
-	private TreeAspectAdapter<TestSubject, List<TestNode>> buildAspectAdapter(PropertyValueModel<TestSubject> subjectHolder) {
-		return new TreeAspectAdapter<TestSubject, List<TestNode>>(subjectHolder, TestSubject.NAMES_TREE) {
-			// this is not a typical aspect adapter - the value is determined by the aspect name
-			@Override
-			protected Iterator<List<TestNode>> nodes_() {
-				if (this.treeNames[0] == TestSubject.NAMES_TREE) {
-					return this.subject.namePaths();
-				}
-				if (this.treeNames[0] == TestSubject.DESCRIPTIONS_TREE) {
-					return this.subject.descriptionPaths();
-				}
-				throw new IllegalStateException("invalid aspect name: " + this.treeNames[0]);
-			}
-		};
-	}
-
-	private ChangeListener buildValueChangeListener1() {
-		return new ChangeAdapter() {
-			@Override
-			public void nodeAdded(TreeAddEvent e) {
-				TreeAspectAdapterTests.this.value1Changed(e);
-			}
-			@Override
-			public void nodeRemoved(TreeRemoveEvent e) {
-				TreeAspectAdapterTests.this.value1Changed(e);
-			}
-			@Override
-			public void treeCleared(TreeClearEvent e) {
-				TreeAspectAdapterTests.this.value1Changed(e);
-			}
-			@Override
-			public void treeChanged(TreeChangeEvent e) {
-				TreeAspectAdapterTests.this.value1Changed(e);
-			}
-		};
-	}
-
-	void value1Changed(TreeEvent e) {
-		this.event1 = e;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSubjectHolder() {
-		assertNull(this.event1);
-
-		this.subjectHolder1.setValue(this.subject2);
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(TreeValueModel.NODES, this.event1.getTreeName());
-		
-		this.event1 = null;
-		this.subjectHolder1.setValue(null);
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(TreeValueModel.NODES, this.event1.getTreeName());
-		
-		this.event1 = null;
-		this.subjectHolder1.setValue(this.subject1);
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(TreeValueModel.NODES, this.event1.getTreeName());
-	}
-
-	public void testTreeStructureChange() {
-		assertNull(this.event1);
-
-		this.subject1.addTwoNames(this.subject1.getRootNameNode(), "jam", "jaz");
-		assertNotNull(this.event1);
-		assertEquals(this.aa1, this.event1.getSource());
-		assertEquals(TreeValueModel.NODES, this.event1.getTreeName());
-		assertTrue(this.subject1.containsNameNode("jam"));
-		assertTrue(this.subject1.containsNameNode("jaz"));
-	}
-
-	public void testNodes() {
-		assertEquals(this.convertToNames(this.subject1.namePaths()), this.convertToNames(this.aa1.nodes()));
-	}
-
-	private Collection<String> convertToNames(Iterator<List<TestNode>> namePaths) {
-		Collection<String> result = new HashBag<String>();
-		while (namePaths.hasNext()) {
-			List<TestNode> path = namePaths.next();
-			StringBuffer sb = new StringBuffer();
-			sb.append('[');
-			for (int i = 0; i < path.size(); i++) {
-				sb.append(path.get(i).getText());
-				if (i < path.size() - 1) {
-					sb.append(':');
-				}
-			}
-			sb.append(']');
-			result.add(sb.toString());
-		}
-		return result;
-	}
-
-	public void testHasListeners() {
-		assertTrue(this.aa1.hasAnyTreeChangeListeners(TreeValueModel.NODES));
-		assertTrue(this.subject1.hasAnyTreeChangeListeners(TestSubject.NAMES_TREE));
-		this.aa1.removeTreeChangeListener(TreeValueModel.NODES, this.listener1);
-		assertFalse(this.subject1.hasAnyTreeChangeListeners(TestSubject.NAMES_TREE));
-		assertFalse(this.aa1.hasAnyTreeChangeListeners(TreeValueModel.NODES));
-
-		ChangeListener listener2 = this.buildValueChangeListener1();
-		this.aa1.addChangeListener(listener2);
-		assertTrue(this.aa1.hasAnyTreeChangeListeners(TreeValueModel.NODES));
-		assertTrue(this.subject1.hasAnyTreeChangeListeners(TestSubject.NAMES_TREE));
-		this.aa1.removeChangeListener(listener2);
-		assertFalse(this.subject1.hasAnyTreeChangeListeners(TestSubject.NAMES_TREE));
-		assertFalse(this.aa1.hasAnyTreeChangeListeners(TreeValueModel.NODES));
-	}
-
-	// ********** inner classes **********
-	
-	class TestSubject extends AbstractModel {
-		private TestNode rootNameNode;
-		public static final String NAMES_TREE = "names";
-		private TestNode rootDescriptionNode;
-		public static final String DESCRIPTIONS_TREE = "descriptions";
-	
-		public TestSubject() {
-			this.rootNameNode = new TestNode("root name");
-			this.rootDescriptionNode = new TestNode("root description");
-		}
-		public TestNode getRootNameNode() {
-			return this.rootNameNode;
-		}
-		public Iterator<TestNode> nameNodes() {
-			return new TreeIterator<TestNode>(this.rootNameNode) {
-				@Override
-				public Iterator<TestNode> children(TestNode next) {
-					return next.children();
-				}
-			};
-		}
-		public Iterator<List<TestNode>> namePaths() {
-			return new TransformationIterator<TestNode, List<TestNode>>(this.nameNodes()) {
-				@Override
-				protected List<TestNode> transform(TestNode next) {
-					return next.getPath();
-				}
-			};
-		}
-		public TestNode addName(TestNode parent, String name) {
-			TestNode child = new TestNode(name);
-			parent.addChild(child);
-			this.fireNodeAdded(NAMES_TREE, child.getPath());
-			return child;
-		}
-		public void addTwoNames(TestNode parent, String name1, String name2) {
-			parent.addChild(new TestNode(name1));
-			parent.addChild(new TestNode(name2));
-			this.fireTreeChanged(NAMES_TREE, parent.getPath());
-		}
-		public void removeNameNode(TestNode nameNode) {
-			nameNode.getParent().removeChild(nameNode);
-			this.fireNodeRemoved(NAMES_TREE, nameNode.getPath());
-		}
-		public boolean containsNameNode(String name) {
-			return this.nameNode(name) != null;
-		}
-		public TestNode nameNode(String name) {
-			for (Iterator<TestNode> stream = this.nameNodes(); stream.hasNext(); ) {
-				TestNode node = stream.next();
-				if (node.getText().equals(name)) {
-					return node;
-				}
-			}
-			return null;
-		}
-		public TestNode getRootDescriptionNode() {
-			return this.rootDescriptionNode;
-		}
-		public Iterator<TestNode> descriptionNodes() {
-			return new TreeIterator<TestNode>(this.rootDescriptionNode) {
-				@Override
-				public Iterator<TestNode> children(TestNode next) {
-					return next.children();
-				}
-			};
-		}
-		public Iterator<List<TestNode>> descriptionPaths() {
-			return new TransformationIterator<TestNode, List<TestNode>>(this.descriptionNodes()) {
-				@Override
-				protected List<TestNode> transform(TestNode next) {
-					return next.getPath();
-				}
-			};
-		}
-		public TestNode addDescription(TestNode parent, String description) {
-			TestNode child = new TestNode(description);
-			parent.addChild(child);
-			this.fireNodeAdded(DESCRIPTIONS_TREE, child.getPath());
-			return child;
-		}
-		public void removeDescriptionNode(TestNode descriptionNode) {
-			descriptionNode.getParent().removeChild(descriptionNode);
-			this.fireNodeRemoved(DESCRIPTIONS_TREE, descriptionNode.getPath());
-		}
-		public boolean containsDescriptionNode(String name) {
-			for (Iterator<TestNode> stream = this.descriptionNodes(); stream.hasNext(); ) {
-				TestNode node = stream.next();
-				if (node.getText().equals(name)) {
-					return true;
-				}
-			}
-			return false;
-		}
-	}
-	
-	class TestNode {
-		private final String text;
-		private TestNode parent;
-		private final Collection<TestNode> children;
-	
-		public TestNode(String text) {
-			this.text = text;
-			this.children = new HashBag<TestNode>();
-		}
-		public String getText() {
-			return this.text;
-		}
-		public TestNode getParent() {
-			return this.parent;
-		}
-		private void setParent(TestNode parent) {
-			this.parent = parent;
-		}
-		public Iterator<TestNode> children() {
-			return new ReadOnlyIterator<TestNode>(this.children);
-		}
-		public void addChild(TestNode child) {
-			this.children.add(child);
-			child.setParent(this);
-		}
-		public void removeChild(TestNode child) {
-			this.children.remove(child);
-		}
-		public List<TestNode> getPath() {
-			return CollectionTools.reverseList(this.buildAntiPath());
-		}
-		private Iterator<TestNode> buildAntiPath() {
-			return new ChainIterator<TestNode>(this) {
-				@Override
-				protected TestNode nextLink(TestNode currentLink) {
-					return currentLink.getParent();
-				}
-			};
-		}
-		@Override
-		public String toString() {
-			return "TestNode(" + this.text + ")";
-		}
-	}
-	
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ValueCollectionAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ValueCollectionAdapterTests.java
deleted file mode 100644
index f9e5e72..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ValueCollectionAdapterTests.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.ValueCollectionAdapter;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ValueCollectionAdapterTests extends TestCase {
-	private Junk junk;
-	private SimplePropertyValueModel<Junk> junkHolder;
-	private ValueCollectionAdapter<Junk> junkHolder2;
-
-
-	public ValueCollectionAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.junk = new Junk("foo");
-		this.junkHolder = new SimplePropertyValueModel<Junk>(this.junk);
-		this.junkHolder2 = new ValueCollectionAdapter<Junk>(this.junkHolder, Junk.STUFF_COLLECTION);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testWrappedPVM() {
-		Junk junk2 = new Junk("bar");
-		LocalListener l = new LocalListener(this.junkHolder2, this.junk, junk2);
-		this.junkHolder2.addChangeListener(l);
-		this.junkHolder.setValue(junk2);
-		assertTrue(l.eventReceived());
-	}
-
-	public void testHasPropertyChangeListeners() throws Exception {
-		assertFalse(this.junkHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertFalse(this.junkHolder2.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addChangeListener(l);
-		assertTrue(this.junkHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(this.junkHolder2.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		this.junkHolder2.removeChangeListener(l);
-		assertFalse(this.junkHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertFalse(this.junkHolder2.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-	}
-
-	public void testHasStateChangeListeners() throws Exception {
-		assertFalse(this.junk.hasAnyCollectionChangeListeners(Junk.STUFF_COLLECTION));
-		assertFalse(this.junkHolder2.hasAnyStateChangeListeners());
-
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addStateChangeListener(l);
-		assertTrue(this.junk.hasAnyCollectionChangeListeners(Junk.STUFF_COLLECTION));
-		assertTrue(this.junkHolder2.hasAnyStateChangeListeners());
-
-		this.junkHolder2.removeStateChangeListener(l);
-		assertFalse(this.junk.hasAnyCollectionChangeListeners(Junk.STUFF_COLLECTION));
-		assertFalse(this.junkHolder2.hasAnyStateChangeListeners());
-	}
-
-	public void testCollectionAdd() {
-		LocalListener l = new LocalListener(this.junkHolder2);
-		this.junkHolder2.addStateChangeListener(l);
-		this.junk.addStuff("bar");
-		assertTrue(l.eventReceived());
-	}
-
-	public void testCollectionRemove() {
-		LocalListener l = new LocalListener(this.junkHolder2);
-		this.junkHolder2.addStateChangeListener(l);
-		this.junk.removeStuff("foo");
-		assertTrue(l.eventReceived());
-	}
-
-
-	class LocalListener extends ChangeAdapter {
-		private boolean eventReceived = false;
-		private final Object source;
-		private final Object oldValue;
-		private final Object newValue;
-		LocalListener(Object source) {
-			this(source, null, null);
-		}
-		LocalListener(Object source, Object oldValue, Object newValue) {
-			super();
-			this.source = source;
-			this.oldValue = oldValue;
-			this.newValue = newValue;
-		}
-		@Override
-		public void propertyChanged(PropertyChangeEvent e) {
-			this.eventReceived = true;
-			assertEquals(this.source, e.getSource());
-			assertEquals(this.oldValue, e.getOldValue());
-			assertEquals(this.newValue, e.getNewValue());
-			assertEquals(PropertyValueModel.VALUE, e.getPropertyName());
-		}
-		@Override
-		public void stateChanged(StateChangeEvent e) {
-			this.eventReceived = true;
-			assertEquals(this.source, e.getSource());
-		}
-		boolean eventReceived() {
-			return this.eventReceived;
-		}
-	}
-
-
-	private class Junk extends AbstractModel {
-		private Collection<String> stuff;
-			public static final String STUFF_COLLECTION = "stuff";
-
-		public Junk(String stuffItem) {
-			this.stuff = new ArrayList<String>();
-			this.stuff.add(stuffItem);
-		}
-	
-		public void addStuff(String stuffItem) {
-			this.addItemToCollection(stuffItem, this.stuff, STUFF_COLLECTION);
-		}
-		
-		public void removeStuff(String stuffItem) {
-			this.removeItemFromCollection(stuffItem, this.stuff, STUFF_COLLECTION);
-		}
-	
-		@Override
-		public String toString() {
-			return "Junk(" + this.stuff + ")";
-		}
-	
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ValueListAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ValueListAdapterTests.java
deleted file mode 100644
index 89d3c25..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ValueListAdapterTests.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.ValueListAdapter;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ValueListAdapterTests extends TestCase {
-	private Junk junk;
-	private SimplePropertyValueModel<Junk> junkHolder;
-	private ValueListAdapter<Junk> junkHolder2;
-
-	
-	public ValueListAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.junk = new Junk("foo");
-		this.junkHolder = new SimplePropertyValueModel<Junk>(this.junk);
-		this.junkHolder2 = new ValueListAdapter<Junk>(this.junkHolder, Junk.STUFF_LIST);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testWrappedPVM() {
-		Junk junk2 = new Junk("bar");
-		LocalListener l = new LocalListener(this.junkHolder2, this.junk, junk2);
-		this.junkHolder2.addChangeListener(l);
-		this.junkHolder.setValue(junk2);
-		assertTrue(l.eventReceived());
-	}
-
-	public void testHasPropertyChangeListeners() throws Exception {
-		assertFalse(this.junkHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertFalse(this.junkHolder2.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addChangeListener(l);
-		assertTrue(this.junkHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(this.junkHolder2.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		this.junkHolder2.removeChangeListener(l);
-		assertFalse(this.junkHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertFalse(this.junkHolder2.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-	}
-
-	public void testHasStateChangeListeners() throws Exception {
-		assertFalse(this.junk.hasAnyListChangeListeners(Junk.STUFF_LIST));
-		assertFalse(this.junkHolder2.hasAnyStateChangeListeners());
-
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addStateChangeListener(l);
-		assertTrue(this.junk.hasAnyListChangeListeners(Junk.STUFF_LIST));
-		assertTrue(this.junkHolder2.hasAnyStateChangeListeners());
-
-		this.junkHolder2.removeStateChangeListener(l);
-		assertFalse(this.junk.hasAnyListChangeListeners(Junk.STUFF_LIST));
-		assertFalse(this.junkHolder2.hasAnyStateChangeListeners());
-	}
-
-	public void testListAdd() {
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addStateChangeListener(l);
-		this.junk.addStuff("bar");
-		assertTrue(l.eventReceived());
-	}
-
-	public void testListRemove() {
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addStateChangeListener(l);
-		this.junk.removeStuff("foo");
-		assertTrue(l.eventReceived());
-	}
-
-	public void testListReplace() {
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addStateChangeListener(l);
-		this.junk.replaceStuff("foo", "bar");
-		assertTrue(l.eventReceived());
-	}
-
-
-	class LocalListener extends ChangeAdapter {
-		private boolean eventReceived = false;
-		private final Object source;
-		private final Object oldValue;
-		private final Object newValue;
-		LocalListener(Object source) {
-			this(source, null, null);
-		}
-		LocalListener(Object source, Object oldValue, Object newValue) {
-			super();
-			this.source = source;
-			this.oldValue = oldValue;
-			this.newValue = newValue;
-		}
-		@Override
-		public void propertyChanged(PropertyChangeEvent e) {
-			this.eventReceived = true;
-			assertEquals(this.source, e.getSource());
-			assertEquals(this.oldValue, e.getOldValue());
-			assertEquals(this.newValue, e.getNewValue());
-			assertEquals(PropertyValueModel.VALUE, e.getPropertyName());
-		}
-		@Override
-		public void stateChanged(StateChangeEvent e) {
-			this.eventReceived = true;
-			assertEquals(this.source, e.getSource());
-		}
-		boolean eventReceived() {
-			return this.eventReceived;
-		}
-	}
-
-	private class Junk extends AbstractModel {
-		private List<String> stuff;
-			public static final String STUFF_LIST = "stuff";
-
-		public Junk(String stuffItem) {
-			this.stuff = new ArrayList<String>();
-			this.stuff.add(stuffItem);
-		}
-	
-		public void addStuff(String stuffItem) {
-			this.addItemToList(stuffItem, this.stuff, STUFF_LIST);
-		}
-		
-		public void removeStuff(String stuffItem) {
-			this.removeItemFromList(stuffItem, this.stuff, STUFF_LIST);
-		}
-	
-		public void replaceStuff(String oldStuffItem, String newStuffItem) {
-			this.replaceItemInList(oldStuffItem, newStuffItem, this.stuff, STUFF_LIST);
-		}
-	
-		@Override
-		public String toString() {
-			return "Junk(" + this.stuff + ")";
-		}
-	
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ValuePropertyAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ValuePropertyAdapterTests.java
deleted file mode 100644
index e391248..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ValuePropertyAdapterTests.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.ValuePropertyAdapter;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ValuePropertyAdapterTests extends TestCase {
-	private Junk junk;
-	private SimplePropertyValueModel<Junk> junkHolder;
-	private ValuePropertyAdapter<Junk> junkHolder2;
-
-
-	public ValuePropertyAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.junk = new Junk("foo");
-		this.junkHolder = new SimplePropertyValueModel<Junk>(this.junk);
-		this.junkHolder2 = new ValuePropertyAdapter<Junk>(this.junkHolder, Junk.NAME_PROPERTY);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testWrappedPVM() {
-		Junk junk2 = new Junk("bar");
-		LocalListener l = new LocalListener(this.junkHolder2, this.junk, junk2);
-		this.junkHolder2.addChangeListener(l);
-		this.junkHolder.setValue(junk2);
-		assertTrue(l.eventReceived());
-	}
-
-	public void testHasPropertyChangeListeners() throws Exception {
-		assertFalse(this.junkHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertFalse(this.junkHolder2.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addChangeListener(l);
-		assertTrue(this.junkHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(this.junkHolder2.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		this.junkHolder2.removeChangeListener(l);
-		assertFalse(this.junkHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertFalse(this.junkHolder2.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-	}
-
-	public void testHasStateChangeListeners() throws Exception {
-		assertFalse(this.junk.hasAnyPropertyChangeListeners(Junk.NAME_PROPERTY));
-		assertFalse(this.junkHolder2.hasAnyStateChangeListeners());
-
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addStateChangeListener(l);
-		assertTrue(this.junk.hasAnyPropertyChangeListeners(Junk.NAME_PROPERTY));
-		assertTrue(this.junkHolder2.hasAnyStateChangeListeners());
-
-		this.junkHolder2.removeStateChangeListener(l);
-		assertFalse(this.junk.hasAnyPropertyChangeListeners(Junk.NAME_PROPERTY));
-		assertFalse(this.junkHolder2.hasAnyStateChangeListeners());
-	}
-
-	public void testChangeProperty() {
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addStateChangeListener(l);
-		this.junk.setName("bar");
-		assertTrue(l.eventReceived());
-	}
-
-
-	class LocalListener extends ChangeAdapter {
-		private boolean eventReceived = false;
-		private final Object source;
-		private final Object oldValue;
-		private final Object newValue;
-		LocalListener(Object source) {
-			this(source, null, null);
-		}
-		LocalListener(Object source, Object oldValue, Object newValue) {
-			super();
-			this.source = source;
-			this.oldValue = oldValue;
-			this.newValue = newValue;
-		}
-		@Override
-		public void propertyChanged(PropertyChangeEvent e) {
-			this.eventReceived = true;
-			assertEquals(this.source, e.getSource());
-			assertEquals(this.oldValue, e.getOldValue());
-			assertEquals(this.newValue, e.getNewValue());
-			assertEquals(PropertyValueModel.VALUE, e.getPropertyName());
-		}
-		@Override
-		public void stateChanged(StateChangeEvent e) {
-			this.eventReceived = true;
-			assertEquals(this.source, e.getSource());
-		}
-		boolean eventReceived() {
-			return this.eventReceived;
-		}
-	}
-
-	class Junk extends AbstractModel {
-		private String name;
-			public static final String NAME_PROPERTY = "name";
-
-		public Junk(String name) {
-			this.name = name;
-		}
-	
-		public void setName(String name) {
-			String old = this.name;
-			this.name = name;
-			this.firePropertyChanged(NAME_PROPERTY, old, name);
-		}
-		
-		@Override
-		public String toString() {
-			return "Junk(" + this.name + ")";
-		}
-	
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ValueStateAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ValueStateAdapterTests.java
deleted file mode 100644
index e0002e3..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/ValueStateAdapterTests.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.ValueStateAdapter;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.event.StateChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ValueStateAdapterTests extends TestCase {
-	private Junk junk;
-	private SimplePropertyValueModel<Junk> junkHolder;
-	private ValueStateAdapter<Junk> junkHolder2;
-
-
-	public ValueStateAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.junk = new Junk("foo");
-		this.junkHolder = new SimplePropertyValueModel<Junk>(this.junk);
-		this.junkHolder2 = new ValueStateAdapter<Junk>(this.junkHolder);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testWrappedPVM() {
-		Junk junk2 = new Junk("bar");
-		LocalListener l = new LocalListener(this.junkHolder2, this.junk, junk2);
-		this.junkHolder2.addChangeListener(l);
-		this.junkHolder.setValue(junk2);
-		assertTrue(l.eventReceived());
-	}
-
-	public void testHasPropertyChangeListeners() throws Exception {
-		assertFalse(this.junkHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertFalse(this.junkHolder2.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addChangeListener(l);
-		assertTrue(this.junkHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(this.junkHolder2.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		this.junkHolder2.removeChangeListener(l);
-		assertFalse(this.junkHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertFalse(this.junkHolder2.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-	}
-
-	public void testHasStateChangeListeners() throws Exception {
-		assertFalse(this.junk.hasAnyStateChangeListeners());
-		assertFalse(this.junkHolder2.hasAnyStateChangeListeners());
-
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addStateChangeListener(l);
-		assertTrue(this.junk.hasAnyStateChangeListeners());
-		assertTrue(this.junkHolder2.hasAnyStateChangeListeners());
-
-		this.junkHolder2.removeStateChangeListener(l);
-		assertFalse(this.junk.hasAnyStateChangeListeners());
-		assertFalse(this.junkHolder2.hasAnyStateChangeListeners());
-	}
-
-	public void testChangeState() {
-		LocalListener l = new LocalListener(this.junkHolder2, null, this.junk);
-		this.junkHolder2.addChangeListener(l);
-		this.junkHolder2.addStateChangeListener(l);
-		this.junk.setName("bar");
-		assertTrue(l.eventReceived());
-	}
-
-
-	class LocalListener extends ChangeAdapter {
-		private boolean eventReceived = false;
-		private final Object source;
-		private final Object oldValue;
-		private final Object newValue;
-		LocalListener(Object source) {
-			this(source, null, null);
-		}
-		LocalListener(Object source, Object oldValue, Object newValue) {
-			super();
-			this.source = source;
-			this.oldValue = oldValue;
-			this.newValue = newValue;
-		}
-		@Override
-		public void propertyChanged(PropertyChangeEvent e) {
-			this.eventReceived = true;
-			assertEquals(this.source, e.getSource());
-			assertEquals(this.oldValue, e.getOldValue());
-			assertEquals(this.newValue, e.getNewValue());
-			assertEquals(PropertyValueModel.VALUE, e.getPropertyName());
-		}
-		@Override
-		public void stateChanged(StateChangeEvent e) {
-			this.eventReceived = true;
-			assertEquals(this.source, e.getSource());
-		}
-		boolean eventReceived() {
-			return this.eventReceived;
-		}
-	}
-
-	class Junk extends AbstractModel {
-		private String name;
-			public static final String NAME_PROPERTY = "name";
-
-		public Junk(String name) {
-			this.name = name;
-		}
-	
-		public void setName(String name) {
-			this.name = name;
-			this.fireStateChanged();
-		}
-		
-		@Override
-		public String toString() {
-			return "Junk(" + this.name + ")";
-		}
-	
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/prefs/JptUtilityModelValuePrefsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/prefs/JptUtilityModelValuePrefsTests.java
deleted file mode 100644
index 043da07..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/prefs/JptUtilityModelValuePrefsTests.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.prefs;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class JptUtilityModelValuePrefsTests {
-	
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUtilityModelValuePrefsTests.class.getPackage().getName());
-
-		suite.addTestSuite(PreferencesCollectionValueModelTests.class);
-		suite.addTestSuite(PreferencePropertyValueModelTests.class);
-	
-		return suite;
-	}
-	
-	private JptUtilityModelValuePrefsTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-	
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/prefs/PreferencePropertyValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/prefs/PreferencePropertyValueModelTests.java
deleted file mode 100644
index c8dc777..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/prefs/PreferencePropertyValueModelTests.java
+++ /dev/null
@@ -1,398 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.prefs;
-
-import java.util.prefs.NodeChangeEvent;
-import java.util.prefs.NodeChangeListener;
-import java.util.prefs.PreferenceChangeEvent;
-import java.util.prefs.PreferenceChangeListener;
-import java.util.prefs.Preferences;
-
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.prefs.PreferencePropertyValueModel;
-import org.eclipse.jpt.utility.model.Model;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-@SuppressWarnings("nls")
-public class PreferencePropertyValueModelTests extends PreferencesTestCase {
-	private WritablePropertyValueModel<Preferences> nodeHolder;
-	PreferencePropertyValueModel<String> preferenceAdapter;
-	PropertyChangeEvent event;
-	PropertyChangeListener listener;
-	boolean listenerRemoved = false;
-	PreferenceChangeEvent preferenceEvent;
-	private static final String KEY_NAME = "foo";
-	private static final String STRING_VALUE = "original string value";
-
-	public PreferencePropertyValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.testNode.put(KEY_NAME, STRING_VALUE);
-
-		this.nodeHolder = new SimplePropertyValueModel<Preferences>(this.testNode);
-		this.preferenceAdapter = new PreferencePropertyValueModel<String>(this.nodeHolder, KEY_NAME);
-		this.listener = this.buildValueChangeListener();
-		this.preferenceAdapter.addPropertyChangeListener(PropertyValueModel.VALUE, this.listener);
-		this.event = null;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		super.tearDown();
-	}
-
-	private PropertyChangeListener buildValueChangeListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent e) {
-				if (PreferencePropertyValueModelTests.this.event != null) {
-					throw new IllegalStateException("unexpected this.event: " + e);
-				}
-				PreferencePropertyValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	public void testSubjectHolder() throws Exception {
-		assertEquals(STRING_VALUE, this.preferenceAdapter.getValue());
-		assertNull(this.event);
-
-		String ANOTHER_STRING_VALUE = "some other value";
-		Preferences anotherNode = this.classNode.node("another test node");
-		anotherNode.put(KEY_NAME, ANOTHER_STRING_VALUE);
-
-		this.nodeHolder.setValue(anotherNode);
-		this.verifyEvent(STRING_VALUE, ANOTHER_STRING_VALUE);
-		assertEquals(ANOTHER_STRING_VALUE, this.preferenceAdapter.getValue());
-		
-		this.event = null;
-		this.nodeHolder.setValue(null);
-		this.verifyEvent(ANOTHER_STRING_VALUE, null);
-		assertNull(this.preferenceAdapter.getValue());
-		
-		this.event = null;
-		this.nodeHolder.setValue(this.testNode);
-		this.verifyEvent(null, STRING_VALUE);
-		assertEquals(STRING_VALUE, this.preferenceAdapter.getValue());
-	}
-
-	public void testPreferenceChange() throws Exception {
-		assertEquals(STRING_VALUE, this.preferenceAdapter.getValue());
-		assertNull(this.event);
-
-		this.testNode.put(KEY_NAME, STRING_VALUE + STRING_VALUE);
-		this.waitForEventQueueToClear();
-		this.verifyEvent(STRING_VALUE, STRING_VALUE + STRING_VALUE);
-		assertEquals(STRING_VALUE + STRING_VALUE, this.preferenceAdapter.getValue());
-		
-		this.event = null;
-		this.testNode.remove(KEY_NAME);
-		this.waitForEventQueueToClear();
-		this.verifyEvent(STRING_VALUE + STRING_VALUE, null);
-		assertNull(this.preferenceAdapter.getValue());
-		
-		this.event = null;
-		this.testNode.put(KEY_NAME, STRING_VALUE);
-		this.waitForEventQueueToClear();
-		this.verifyEvent(null, STRING_VALUE);
-		assertEquals(STRING_VALUE, this.preferenceAdapter.getValue());
-	}
-
-	public void testValue() throws Exception {
-		assertEquals(STRING_VALUE, this.testNode.get(KEY_NAME, "<missing preference>"));
-		assertEquals(STRING_VALUE, this.preferenceAdapter.getValue());
-	}
-
-	public void testSetValue() throws Exception {
-		String ANOTHER_STRING_VALUE = "some other value";
-		this.preferenceAdapter.setValue(ANOTHER_STRING_VALUE);
-		assertEquals(ANOTHER_STRING_VALUE, this.preferenceAdapter.getValue());
-		assertEquals(ANOTHER_STRING_VALUE, this.testNode.get(KEY_NAME, "<missing preference>"));
-	}
-
-	public void testHasListeners() throws Exception {
-		assertTrue(this.preferenceAdapter.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(this.nodeHasAnyPrefListeners(this.testNode));
-		this.preferenceAdapter.removePropertyChangeListener(PropertyValueModel.VALUE, this.listener);
-		assertFalse(this.nodeHasAnyPrefListeners(this.testNode));
-		assertFalse(this.preferenceAdapter.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		ChangeListener listener2 = this.buildChangeListener();
-		this.preferenceAdapter.addChangeListener(listener2);
-		assertTrue(this.preferenceAdapter.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		assertTrue(this.nodeHasAnyPrefListeners(this.testNode));
-		this.preferenceAdapter.removeChangeListener(listener2);
-		assertFalse(this.nodeHasAnyPrefListeners(this.testNode));
-		assertFalse(this.preferenceAdapter.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-	}
-
-	private ChangeListener buildChangeListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void propertyChanged(PropertyChangeEvent e) {
-				if (PreferencePropertyValueModelTests.this.event != null) {
-					throw new IllegalStateException("unexpected this.event: " + e);
-				}
-				PreferencePropertyValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	public void testRemoveAndReAddPreference() throws Exception {
-		assertEquals(STRING_VALUE, this.testNode.get(KEY_NAME, null));
-		assertEquals(STRING_VALUE, this.preferenceAdapter.getValue());
-		assertNull(this.event);
-
-		// remove the preference entirely...
-		this.testNode.remove(KEY_NAME);
-		this.waitForEventQueueToClear();
-		assertNull(this.testNode.get(KEY_NAME, null));
-		this.verifyEvent(STRING_VALUE, null);
-		assertNull(this.preferenceAdapter.getValue());
-
-		// ...then re-add it with the same key
-		this.event = null;
-		this.testNode.put(KEY_NAME, STRING_VALUE);
-		this.waitForEventQueueToClear();
-		assertEquals(STRING_VALUE, this.testNode.get(KEY_NAME, null));
-		this.verifyEvent(null, STRING_VALUE);
-		assertEquals(STRING_VALUE, this.preferenceAdapter.getValue());
-	}
-
-	public void testDefaultValue() throws Exception {
-		// rebuild the adapter with a default value
-		String DEFAULT_VALUE = "default value";
-		this.preferenceAdapter.removePropertyChangeListener(PropertyValueModel.VALUE, this.listener);
-		this.preferenceAdapter = new PreferencePropertyValueModel<String>(this.nodeHolder, KEY_NAME, DEFAULT_VALUE);
-		this.preferenceAdapter.addPropertyChangeListener(PropertyValueModel.VALUE, this.listener);
-
-		assertEquals(STRING_VALUE, this.testNode.get(KEY_NAME, null));
-		assertEquals(STRING_VALUE, this.preferenceAdapter.getValue());
-		assertNull(this.event);
-
-		// remove the preference entirely...
-		this.testNode.remove(KEY_NAME);
-		this.waitForEventQueueToClear();
-		assertNull(this.testNode.get(KEY_NAME, null));
-		this.verifyEvent(STRING_VALUE, DEFAULT_VALUE);
-		assertEquals(DEFAULT_VALUE, this.preferenceAdapter.getValue());
-
-		// ...then re-add it with the same key
-		this.event = null;
-		this.testNode.put(KEY_NAME, STRING_VALUE);
-		this.waitForEventQueueToClear();
-		assertEquals(STRING_VALUE, this.testNode.get(KEY_NAME, null));
-		this.verifyEvent(DEFAULT_VALUE, STRING_VALUE);
-		assertEquals(STRING_VALUE, this.preferenceAdapter.getValue());
-	}
-
-	public void testUnsynchronizedValue() throws Exception {
-		assertEquals(STRING_VALUE, this.preferenceAdapter.getValue());
-		assertNull(this.event);
-
-		// remove the this.listener so the adapter no longer listens to the preference
-		this.preferenceAdapter.removePropertyChangeListener(PropertyValueModel.VALUE, this.listener);
-
-		this.testNode.put(KEY_NAME, STRING_VALUE + STRING_VALUE);
-		this.waitForEventQueueToClear();
-		// no this.event should have been fired...
-		assertNull(this.event);
-		// ...and the adapter's value should be null
-		assertNull(this.preferenceAdapter.getValue());
-		
-		this.testNode.remove(KEY_NAME);
-		this.waitForEventQueueToClear();
-		assertNull(this.event);
-		assertNull(this.preferenceAdapter.getValue());
-		
-		this.testNode.put(KEY_NAME, STRING_VALUE);
-		this.waitForEventQueueToClear();
-		assertNull(this.event);
-		assertNull(this.preferenceAdapter.getValue());
-
-		// add the this.listener so the adapter synchs
-		this.preferenceAdapter.addPropertyChangeListener(PropertyValueModel.VALUE, this.listener);
-		assertEquals(STRING_VALUE, this.preferenceAdapter.getValue());
-	}
-
-	public void testIntegerPreference() throws Exception {
-		// stop listening to the node and convert it to an integer
-		this.preferenceAdapter.removePropertyChangeListener(PropertyValueModel.VALUE, this.listener);
-
-		PreferencePropertyValueModel<Integer> integerPreferenceAdapter = new PreferencePropertyValueModel<Integer>(this.nodeHolder, KEY_NAME);
-		this.testNode.putInt(KEY_NAME, 123);
-		integerPreferenceAdapter = PreferencePropertyValueModel.forInteger(this.testNode, KEY_NAME, 0);
-		integerPreferenceAdapter.addPropertyChangeListener(PropertyValueModel.VALUE, this.listener);
-		assertEquals(new Integer(123), integerPreferenceAdapter.getValue());
-		assertNull(this.event);
-
-		this.testNode.putInt(KEY_NAME, 246);
-		this.waitForEventQueueToClear();
-		this.verifyEvent(integerPreferenceAdapter, new Integer(123), new Integer(246));
-		assertEquals(new Integer(246), integerPreferenceAdapter.getValue());
-		
-		this.event = null;
-		this.testNode.remove(KEY_NAME);
-		this.waitForEventQueueToClear();
-		this.verifyEvent(integerPreferenceAdapter, new Integer(246), new Integer(0));
-		assertEquals(new Integer(0), integerPreferenceAdapter.getValue());
-		
-		this.event = null;
-		this.testNode.putInt(KEY_NAME, 123);
-		this.waitForEventQueueToClear();
-		this.verifyEvent(integerPreferenceAdapter, new Integer(0), new Integer(123));
-		assertEquals(new Integer(123), integerPreferenceAdapter.getValue());
-	}
-
-	/**
-	 * test a situation where
-	 * - we are listening to the node when it gets removed from the preferences "repository"
-	 * - we get notification that it has been removed
-	 * - we try to remove our this.listener
-	 * - the node will throw an IllegalStateException - the adapter should handle it OK...
-	 */
-	public void testRemoveNode() throws Exception {
-		assertTrue(this.preferenceAdapter.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		Preferences parent = this.testNode.parent();
-		parent.addNodeChangeListener(this.buildParentNodeChangeListener());
-		this.testNode.removeNode();
-		this.testNode.flush();		// this seems to be required for the this.event to trigger...
-		this.waitForEventQueueToClear();
-
-		assertTrue(this.listenerRemoved);
-		assertTrue(this.preferenceAdapter.hasNoPropertyChangeListeners(PropertyValueModel.VALUE));
-	}
-
-	private NodeChangeListener buildParentNodeChangeListener() {
-		return new NodeChangeListener() {
-			public void childAdded(NodeChangeEvent e) {
-				throw new IllegalStateException("unexpected this.event: " + e);
-			}
-			public void childRemoved(NodeChangeEvent e) {
-				if (e.getChild() == PreferencePropertyValueModelTests.this.testNode) {
-					PreferencePropertyValueModelTests.this.preferenceAdapter.removePropertyChangeListener(PropertyValueModel.VALUE, PreferencePropertyValueModelTests.this.listener);
-					// this line of code will not execute if the line above triggers an exception
-					PreferencePropertyValueModelTests.this.listenerRemoved = true;
-				}
-			}
-		};
-	}
-
-	public void testSetSameValue() {
-		assertNull(this.event);
-		assertNull(this.preferenceEvent);
-		this.testNode.addPreferenceChangeListener(this.buildPreferenceChangeListener());
-
-		String ANOTHER_STRING_VALUE = "some other value";
-		this.preferenceAdapter.setValue(ANOTHER_STRING_VALUE);
-
-		this.verifyEvent(STRING_VALUE, ANOTHER_STRING_VALUE);
-		this.waitForEventQueueToClear();
-		this.verifyPreferenceEvent(ANOTHER_STRING_VALUE);
-
-		// now set to *same* value - nothing should happen...
-		this.event = null;
-		this.preferenceEvent = null;
-		this.preferenceAdapter.setValue(ANOTHER_STRING_VALUE);
-
-		assertNull(this.event);
-		assertNull(this.preferenceEvent);
-	}
-
-	public void testSetSameValueForcePassThrough() throws Exception {
-		assertNull(this.event);
-		assertNull(this.preferenceEvent);
-
-		this.preferenceAdapter.removePropertyChangeListener(PropertyValueModel.VALUE, this.listener);
-		this.preferenceAdapter = new AlwaysUpdatePreferencePropertyValueModel<String>(this.nodeHolder, KEY_NAME);
-		this.preferenceAdapter.addPropertyChangeListener(PropertyValueModel.VALUE, this.listener);
-
-		this.testNode.addPreferenceChangeListener(this.buildPreferenceChangeListener());
-
-		String ANOTHER_STRING_VALUE = "some other value";
-		this.preferenceAdapter.setValue(ANOTHER_STRING_VALUE);
-
-		this.verifyEvent(STRING_VALUE, ANOTHER_STRING_VALUE);
-		this.waitForEventQueueToClear();
-		this.verifyPreferenceEvent(ANOTHER_STRING_VALUE);
-
-		// now set to *same* value - only one this.event should fire
-		this.event = null;
-		this.preferenceEvent = null;
-		this.preferenceAdapter.setValue(ANOTHER_STRING_VALUE);
-
-		assertNull(this.event);
-		this.waitForEventQueueToClear();
-		this.verifyPreferenceEvent(ANOTHER_STRING_VALUE);
-		assertNull(this.event);
-	}
-
-	private PreferenceChangeListener buildPreferenceChangeListener() {
-		return new PreferenceChangeListener() {
-			public void preferenceChange(PreferenceChangeEvent evt) {
-				PreferencePropertyValueModelTests.this.preferenceEvent = evt;
-			}
-		};
-	}
-
-	private void verifyEvent(Model source, Object oldValue, Object newValue) {
-		assertNotNull(this.event);
-		assertEquals(source, this.event.getSource());
-		assertEquals(PropertyValueModel.VALUE, this.event.getPropertyName());
-		assertEquals(oldValue, this.event.getOldValue());
-		assertEquals(newValue, this.event.getNewValue());
-	}
-
-	private void verifyEvent(Object oldValue, Object newValue) {
-		this.verifyEvent(this.preferenceAdapter, oldValue, newValue);
-	}
-
-	private void verifyPreferenceEvent(Object newValue) {
-		assertNotNull(this.preferenceEvent);
-		assertEquals(this.testNode, this.preferenceEvent.getSource());
-		assertEquals(KEY_NAME, this.preferenceEvent.getKey());
-		assertEquals(newValue, this.preferenceEvent.getNewValue());
-		assertEquals(newValue, this.testNode.get(KEY_NAME, "<missing preference>"));
-	}
-
-	private boolean nodeHasAnyPrefListeners(Preferences node) throws Exception {
-		PreferenceChangeListener[] prefListeners = (PreferenceChangeListener[]) ReflectionTools.getFieldValue(node, "prefListeners");
-		return prefListeners.length > 0;
-	}
-
-
-	/**
-	 * Use this adapter to test out always passing through the new value
-	 * to the preference.
-	 */
-	private class AlwaysUpdatePreferencePropertyValueModel<P> extends PreferencePropertyValueModel<P> {
-
-		AlwaysUpdatePreferencePropertyValueModel(PropertyValueModel<Preferences> preferencesHolder, String key) {
-			super(preferencesHolder, key);
-		}
-
-		@Override
-		protected boolean shouldSetPreference(Object oldValue, Object newValue) {
-			return true;
-		}
-
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/prefs/PreferencesCollectionValueModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/prefs/PreferencesCollectionValueModelTests.java
deleted file mode 100644
index 390429f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/prefs/PreferencesCollectionValueModelTests.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.prefs;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.prefs.NodeChangeEvent;
-import java.util.prefs.NodeChangeListener;
-import java.util.prefs.PreferenceChangeListener;
-import java.util.prefs.Preferences;
-
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.prefs.PreferencePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.prefs.PreferencesCollectionValueModel;
-import org.eclipse.jpt.utility.model.event.CollectionAddEvent;
-import org.eclipse.jpt.utility.model.event.CollectionChangeEvent;
-import org.eclipse.jpt.utility.model.event.CollectionClearEvent;
-import org.eclipse.jpt.utility.model.event.CollectionEvent;
-import org.eclipse.jpt.utility.model.event.CollectionRemoveEvent;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ChangeAdapter;
-import org.eclipse.jpt.utility.model.listener.ChangeListener;
-import org.eclipse.jpt.utility.model.listener.CollectionChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-@SuppressWarnings("nls")
-public class PreferencesCollectionValueModelTests extends PreferencesTestCase {
-	private Map<String, String> expectedValues;
-	private WritablePropertyValueModel<Preferences> nodeHolder;
-	PreferencesCollectionValueModel<String> preferencesAdapter;
-	CollectionEvent event;
-	CollectionChangeListener listener;
-	private PropertyChangeListener itemListener;
-	boolean listenerRemoved = false;
-	private static final String KEY_NAME_1 = "foo 1";
-	private static final String KEY_NAME_2 = "foo 2";
-	private static final String KEY_NAME_3 = "foo 3";
-	private static final String STRING_VALUE_1 = "original string value 1";
-	private static final String STRING_VALUE_2 = "original string value 2";
-	private static final String STRING_VALUE_3 = "original string value 3";
-
-	public PreferencesCollectionValueModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.expectedValues = new HashMap<String, String>();
-		this.testNode.put(KEY_NAME_1, STRING_VALUE_1);	this.expectedValues.put(KEY_NAME_1, STRING_VALUE_1);
-		this.testNode.put(KEY_NAME_2, STRING_VALUE_2);	this.expectedValues.put(KEY_NAME_2, STRING_VALUE_2);
-		this.testNode.put(KEY_NAME_3, STRING_VALUE_3);	this.expectedValues.put(KEY_NAME_3, STRING_VALUE_3);
-
-		this.nodeHolder = new SimplePropertyValueModel<Preferences>(this.testNode);
-		this.preferencesAdapter = new PreferencesCollectionValueModel<String>(this.nodeHolder);
-		this.listener = this.buildCollectionChangeListener();
-		this.itemListener = this.buildItemListener();
-		this.preferencesAdapter.addCollectionChangeListener(CollectionValueModel.VALUES, this.listener);
-		this.event = null;
-	}
-
-	private CollectionChangeListener buildCollectionChangeListener() {
-		return new CollectionChangeListener() {
-			public void collectionChanged(CollectionChangeEvent e) {
-				this.logEvent(e);
-			}
-			public void collectionCleared(CollectionClearEvent e) {
-				this.logEvent(e);
-			}
-			public void itemsAdded(CollectionAddEvent e) {
-				this.logEvent(e);
-			}
-			public void itemsRemoved(CollectionRemoveEvent e) {
-				this.logEvent(e);
-			}
-			private void logEvent(CollectionEvent e) {
-				if (PreferencesCollectionValueModelTests.this.event != null) {
-					throw new IllegalStateException("unexpected this.event: " + e);
-				}
-				PreferencesCollectionValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	private PropertyChangeListener buildItemListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent e) {
-				throw new IllegalStateException("unexpected this.event: " + e);
-			}
-		};
-	}
-
-	public void testSubjectHolder() throws Exception {
-		this.verifyAdapter(this.preferencesAdapter);
-		assertNull(this.event);
-
-		String ANOTHER_KEY_NAME_1 = "another key 1";
-		String ANOTHER_KEY_NAME_2 = "another key 2";
-		String ANOTHER_KEY_NAME_3 = "another key 3";
-		String ANOTHER_STRING_VALUE_1 = "another string value 1";
-		String ANOTHER_STRING_VALUE_2 = "another string value 2";
-		String ANOTHER_STRING_VALUE_3 = "another string value 3";
-		Preferences anotherNode = this.classNode.node("another test node");
-		this.expectedValues.clear();
-		anotherNode.put(ANOTHER_KEY_NAME_1, ANOTHER_STRING_VALUE_1);	this.expectedValues.put(ANOTHER_KEY_NAME_1, ANOTHER_STRING_VALUE_1);
-		anotherNode.put(ANOTHER_KEY_NAME_2, ANOTHER_STRING_VALUE_2);	this.expectedValues.put(ANOTHER_KEY_NAME_2, ANOTHER_STRING_VALUE_2);
-		anotherNode.put(ANOTHER_KEY_NAME_3, ANOTHER_STRING_VALUE_3);	this.expectedValues.put(ANOTHER_KEY_NAME_3, ANOTHER_STRING_VALUE_3);
-
-		this.nodeHolder.setValue(anotherNode);
-		// collectionChanged does not pass any items in the this.event
-		this.verifyEvent();
-		this.verifyAdapter(this.preferencesAdapter);
-		
-		this.event = null;
-		this.expectedValues.clear();
-		this.nodeHolder.setValue(null);
-		this.verifyEvent();
-		assertFalse(this.preferencesAdapter.iterator().hasNext());
-		
-		this.event = null;
-		this.nodeHolder.setValue(this.testNode);
-		this.verifyEvent();
-		this.expectedValues.clear();
-		this.expectedValues.put(KEY_NAME_1, STRING_VALUE_1);
-		this.expectedValues.put(KEY_NAME_2, STRING_VALUE_2);
-		this.expectedValues.put(KEY_NAME_3, STRING_VALUE_3);
-		this.verifyAdapter(this.preferencesAdapter);
-	}
-
-	public void testAddPreference() throws Exception {
-		this.verifyAdapter(this.preferencesAdapter);
-		assertNull(this.event);
-
-		String ANOTHER_KEY_NAME = "another key";
-		String ANOTHER_STRING_VALUE = "another string value";
-		this.testNode.put(ANOTHER_KEY_NAME, ANOTHER_STRING_VALUE);
-		this.waitForEventQueueToClear();
-		Map<String, String> expectedItems = new HashMap<String, String>();
-		expectedItems.put(ANOTHER_KEY_NAME, ANOTHER_STRING_VALUE);
-		this.verifyEvent(expectedItems);
-		this.expectedValues.put(ANOTHER_KEY_NAME, ANOTHER_STRING_VALUE);
-		this.verifyAdapter(this.preferencesAdapter);
-	}
-
-	public void testRemovePreference() throws Exception {
-		this.verifyAdapter(this.preferencesAdapter);
-		assertNull(this.event);
-
-		this.testNode.remove(KEY_NAME_2);
-		this.waitForEventQueueToClear();
-
-		assertNotNull(this.event);
-		assertEquals(this.preferencesAdapter, this.event.getSource());
-		assertEquals(CollectionValueModel.VALUES, this.event.getCollectionName());
-		assertEquals(1, ((CollectionRemoveEvent) this.event).getItemsSize());
-		@SuppressWarnings("unchecked")
-		String key = ((PreferencePropertyValueModel<String>) ((CollectionRemoveEvent) this.event).getItems().iterator().next()).getKey();
-		assertEquals(KEY_NAME_2, key);
-
-		this.expectedValues.remove(KEY_NAME_2);
-		this.verifyAdapter(this.preferencesAdapter);
-	}
-
-	public void testChangePreference() throws Exception {
-		this.verifyAdapter(this.preferencesAdapter);
-		assertNull(this.event);
-
-		String DIFFERENT = "something completely different";
-		this.testNode.put(KEY_NAME_2, DIFFERENT);
-		this.waitForEventQueueToClear();
-
-		assertNull(this.event);
-
-		this.expectedValues.put(KEY_NAME_2, DIFFERENT);
-		this.verifyAdapter(this.preferencesAdapter);
-	}
-
-	public void testValues() throws Exception {
-		this.verifyNode(this.testNode);
-		this.verifyAdapter(this.preferencesAdapter);
-	}
-
-	/**
-	 * test a situation where
-	 * - we are listening to the node when it gets removed from the preferences "repository"
-	 * - we get notification that it has been removed
-	 * - we try to remove our this.listener
-	 * - the node will throw an IllegalStateException - the adapter should handle it OK...
-	 */
-	public void testRemoveNode() throws Exception {
-		assertTrue(this.preferencesAdapter.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-
-		Preferences parent = this.testNode.parent();
-		parent.addNodeChangeListener(this.buildParentNodeChangeListener());
-		this.testNode.removeNode();
-		this.testNode.flush();		// this seems to be required for the this.event to trigger...
-		this.waitForEventQueueToClear();
-
-		assertTrue(this.listenerRemoved);
-		assertFalse(this.preferencesAdapter.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-	}
-
-	private NodeChangeListener buildParentNodeChangeListener() {
-		return new NodeChangeListener() {
-			public void childAdded(NodeChangeEvent e) {
-				throw new IllegalStateException("unexpected this.event: " + e);
-			}
-			public void childRemoved(NodeChangeEvent e) {
-				if (e.getChild() == PreferencesCollectionValueModelTests.this.testNode) {
-					PreferencesCollectionValueModelTests.this.preferencesAdapter.removeCollectionChangeListener(CollectionValueModel.VALUES, PreferencesCollectionValueModelTests.this.listener);
-					// this line of code will not execute if the line above triggers an exception
-					PreferencesCollectionValueModelTests.this.listenerRemoved = true;
-				}
-			}
-		};
-	}
-
-	public void testHasListeners() throws Exception {
-		assertTrue(this.preferencesAdapter.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		assertTrue(this.nodeHasAnyPrefListeners(this.testNode));
-		this.preferencesAdapter.removeCollectionChangeListener(CollectionValueModel.VALUES, this.listener);
-		assertFalse(this.nodeHasAnyPrefListeners(this.testNode));
-		assertFalse(this.preferencesAdapter.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-
-		ChangeListener listener2 = this.buildChangeListener();
-		this.preferencesAdapter.addChangeListener(listener2);
-		assertTrue(this.preferencesAdapter.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-		assertTrue(this.nodeHasAnyPrefListeners(this.testNode));
-		this.preferencesAdapter.removeChangeListener(listener2);
-		assertFalse(this.nodeHasAnyPrefListeners(this.testNode));
-		assertFalse(this.preferencesAdapter.hasAnyCollectionChangeListeners(CollectionValueModel.VALUES));
-	}
-
-	private ChangeListener buildChangeListener() {
-		return new ChangeAdapter() {
-			@Override
-			public void collectionChanged(CollectionChangeEvent e) {
-				this.logEvent(e);
-			}
-			@Override
-			public void collectionCleared(CollectionClearEvent e) {
-				this.logEvent(e);
-			}
-			@Override
-			public void itemsAdded(CollectionAddEvent e) {
-				this.logEvent(e);
-			}
-			@Override
-			public void itemsRemoved(CollectionRemoveEvent e) {
-				this.logEvent(e);
-			}
-			private void logEvent(CollectionEvent e) {
-				if (PreferencesCollectionValueModelTests.this.event != null) {
-					throw new IllegalStateException("unexpected this.event: " + e);
-				}
-				PreferencesCollectionValueModelTests.this.event = e;
-			}
-		};
-	}
-
-	private void verifyEvent(Map<String, String> items) {
-		this.verifyEvent();
-		assertEquals(items.size(), ((CollectionAddEvent) this.event).getItemsSize());
-		@SuppressWarnings("unchecked")
-		Iterable<PreferencePropertyValueModel<String>> eventItems = (Iterable<PreferencePropertyValueModel<String>>) ((CollectionAddEvent) this.event).getItems();
-		this.verifyItems(items, eventItems);
-	}
-
-	private void verifyEvent() {
-		assertNotNull(this.event);
-		assertEquals(this.preferencesAdapter, this.event.getSource());
-		assertEquals(CollectionValueModel.VALUES, this.event.getCollectionName());
-	}
-
-	private void verifyNode(Preferences node) throws Exception {
-		String[] keys = node.keys();
-		assertEquals(this.expectedValues.size(), keys.length);
-		for (int i = 0; i < keys.length; i++) {
-			assertEquals(this.expectedValues.get(keys[i]), node.get(keys[i], "<missing preference>"));
-		}
-	}
-
-	private void verifyAdapter(PreferencesCollectionValueModel<String> cvm) {
-		assertEquals(this.expectedValues.size(), cvm.size());
-		this.verifyItems(this.expectedValues, cvm);
-	}
-
-	private void verifyItems(Map<String, String> expected, Iterable<PreferencePropertyValueModel<String>> actual) {
-		for (PreferencePropertyValueModel<String> model : actual) {
-			model.addPropertyChangeListener(PropertyValueModel.VALUE, this.itemListener);
-			assertEquals(expected.get(model.getKey()), model.getValue());
-			model.removePropertyChangeListener(PropertyValueModel.VALUE, this.itemListener);
-		}
-	}
-
-	private boolean nodeHasAnyPrefListeners(Preferences node) throws Exception {
-		PreferenceChangeListener[] prefListeners = (PreferenceChangeListener[]) ReflectionTools.getFieldValue(node, "prefListeners");
-		return prefListeners.length > 0;
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/prefs/PreferencesTestCase.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/prefs/PreferencesTestCase.java
deleted file mode 100644
index 7f23c7d..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/prefs/PreferencesTestCase.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.prefs;
-
-import java.util.EventObject;
-import java.util.List;
-import java.util.prefs.AbstractPreferences;
-import java.util.prefs.Preferences;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-/**
- * set up and tear down a test node for any subclass that
- * needs to test preferences-related stuff
- */
-@SuppressWarnings("nls")
-public abstract class PreferencesTestCase extends TestCase {
-	protected Preferences classNode;
-	public Preferences testNode;
-	protected static final String TEST_NODE_NAME = "test node";
-
-	public PreferencesTestCase(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		Preferences packageNode = Preferences.userNodeForPackage(this.getClass());
-		this.classNode = packageNode.node(this.getClass().getSimpleName());
-		// clean out any leftover crap...
-		if ((this.classNode.keys().length > 0) || (this.classNode.childrenNames().length > 0)) {
-			this.classNode.removeNode();
-			// ...and re-create the node
-			this.classNode = packageNode.node(this.getClass().getSimpleName());
-		}
-		this.testNode = this.classNode.node(TEST_NODE_NAME);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		// wait for all the events to be delivered before tearing down
-		this.waitForEventQueueToClear();
-		Preferences node = this.classNode.parent();
-		this.classNode.removeNode();
-		while (this.nodeIsVestigial(node)) {
-			Preferences parent = node.parent();
-			node.removeNode();
-			node = parent;
-		}
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	private boolean nodeIsVestigial(Preferences node) throws Exception {
-		return (node != null)
-			&& (node.keys().length == 0)
-			&& (node.childrenNames().length == 0)
-			&& (node != Preferences.userRoot());
-	}
-
-	protected void waitForEventQueueToClear() {
-		while ( ! this.preferencesEventQueue().isEmpty()) {
-			TestTools.sleep(100);
-		}
-		TestTools.sleep(100);
-	}
-
-	@SuppressWarnings("unchecked")
-	private List<EventObject> preferencesEventQueue() {
-		return (List<EventObject>) ReflectionTools.getStaticFieldValue(AbstractPreferences.class, "eventQueue");
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/CheckBoxModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/CheckBoxModelAdapterTests.java
deleted file mode 100644
index f29d911..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/CheckBoxModelAdapterTests.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import javax.swing.ButtonModel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.EventListenerList;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.CheckBoxModelAdapter;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class CheckBoxModelAdapterTests extends TestCase {
-	private WritablePropertyValueModel<Boolean> booleanHolder;
-	private ButtonModel buttonModelAdapter;
-	boolean eventFired;
-
-	public CheckBoxModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.booleanHolder = new SimplePropertyValueModel<Boolean>(Boolean.TRUE);
-		this.buttonModelAdapter = new CheckBoxModelAdapter(this.booleanHolder) {
-			@Override
-			protected PropertyChangeListener buildBooleanChangeListener() {
-				return this.buildBooleanChangeListener_();
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSetSelected() throws Exception {
-		this.eventFired = false;
-		this.buttonModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				CheckBoxModelAdapterTests.this.eventFired = true;
-			}
-		});
-		this.buttonModelAdapter.setSelected(false);
-		assertTrue(this.eventFired);
-		assertEquals(Boolean.FALSE, this.booleanHolder.getValue());
-	}
-
-	public void testSetValue() throws Exception {
-		this.eventFired = false;
-		this.buttonModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				CheckBoxModelAdapterTests.this.eventFired = true;
-			}
-		});
-		assertTrue(this.buttonModelAdapter.isSelected());
-		this.booleanHolder.setValue(Boolean.FALSE);
-		assertTrue(this.eventFired);
-		assertFalse(this.buttonModelAdapter.isSelected());
-	}
-
-	public void testDefaultValue() throws Exception {
-		this.eventFired = false;
-		this.buttonModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				CheckBoxModelAdapterTests.this.eventFired = true;
-			}
-		});
-		assertTrue(this.buttonModelAdapter.isSelected());
-		this.booleanHolder.setValue(null);
-		assertTrue(this.eventFired);
-		assertFalse(this.buttonModelAdapter.isSelected());
-
-		this.eventFired = false;
-		this.booleanHolder.setValue(Boolean.FALSE);
-		assertFalse(this.eventFired);
-		assertFalse(this.buttonModelAdapter.isSelected());
-	}
-
-	public void testHasListeners() throws Exception {
-		SimplePropertyValueModel<Boolean> localBooleanHolder = (SimplePropertyValueModel<Boolean>) this.booleanHolder;
-		assertFalse(localBooleanHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.buttonModelAdapter);
-
-		ChangeListener listener = new TestChangeListener();
-		this.buttonModelAdapter.addChangeListener(listener);
-		assertTrue(localBooleanHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasListeners(this.buttonModelAdapter);
-
-		this.buttonModelAdapter.removeChangeListener(listener);
-		assertFalse(localBooleanHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.buttonModelAdapter);
-	}
-
-	private void verifyHasNoListeners(Object model) throws Exception {
-		EventListenerList listenerList = (EventListenerList) ReflectionTools.getFieldValue(model, "listenerList");
-		assertEquals(0, listenerList.getListenerList().length);
-	}
-
-	private void verifyHasListeners(Object model) throws Exception {
-		EventListenerList listenerList = (EventListenerList) ReflectionTools.getFieldValue(model, "listenerList");
-		assertFalse(listenerList.getListenerList().length == 0);
-	}
-
-
-	// ********** member class **********
-	private class TestChangeListener implements ChangeListener {
-		TestChangeListener() {
-			super();
-		}
-		public void stateChanged(ChangeEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/CheckBoxModelAdapterUITest.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/CheckBoxModelAdapterUITest.java
deleted file mode 100644
index 7dcf113..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/CheckBoxModelAdapterUITest.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.ButtonModel;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.WindowConstants;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.CheckBoxModelAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * Play around with a set of check boxes.
- */
-@SuppressWarnings("nls")
-public class CheckBoxModelAdapterUITest {
-
-	private TestModel testModel;
-	private WritablePropertyValueModel<TestModel> testModelHolder;
-	private WritablePropertyValueModel<Boolean> flag1Holder;
-	private WritablePropertyValueModel<Boolean> flag2Holder;
-	private WritablePropertyValueModel<Boolean> notFlag2Holder;
-	private ButtonModel flag1ButtonModel;
-	private ButtonModel flag2ButtonModel;
-	private ButtonModel notFlag2ButtonModel;
-
-	public static void main(String[] args) throws Exception {
-		new CheckBoxModelAdapterUITest().exec();
-	}
-
-	private CheckBoxModelAdapterUITest() {
-		super();
-	}
-
-	private void exec() throws Exception {
-		this.testModel = new TestModel(true, true);
-		this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel);
-		this.flag1Holder = this.buildFlag1Holder(this.testModelHolder);
-		this.flag1ButtonModel = this.buildCheckBoxModelAdapter(this.flag1Holder);
-		this.flag2Holder = this.buildFlag2Holder(this.testModelHolder);
-		this.flag2ButtonModel = this.buildCheckBoxModelAdapter(this.flag2Holder);
-		this.notFlag2Holder = this.buildNotFlag2Holder(this.testModelHolder);
-		this.notFlag2ButtonModel = this.buildCheckBoxModelAdapter(this.notFlag2Holder);
-		this.openWindow();
-	}
-
-	private WritablePropertyValueModel<Boolean> buildFlag1Holder(PropertyValueModel<TestModel> vm) {
-		return new PropertyAspectAdapter<TestModel, Boolean>(vm, TestModel.FLAG1_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.isFlag1());
-			}
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setFlag1(value.booleanValue());
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Boolean> buildFlag2Holder(PropertyValueModel<TestModel> vm) {
-		return new PropertyAspectAdapter<TestModel, Boolean>(vm, TestModel.FLAG2_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.isFlag2());
-			}
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setFlag2(value.booleanValue());
-			}
-		};
-	}
-
-	private WritablePropertyValueModel<Boolean> buildNotFlag2Holder(PropertyValueModel<TestModel> vm) {
-		return new PropertyAspectAdapter<TestModel, Boolean>(vm, TestModel.NOT_FLAG2_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.isNotFlag2());
-			}
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setNotFlag2(value.booleanValue());
-			}
-		};
-	}
-
-	private ButtonModel buildCheckBoxModelAdapter(WritablePropertyValueModel<Boolean> booleanHolder) {
-		return new CheckBoxModelAdapter(booleanHolder);
-	}
-
-	private void openWindow() {
-		JFrame window = new JFrame(this.getClass().getName());
-		window.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		window.addWindowListener(this.buildWindowListener());
-		window.getContentPane().add(this.buildMainPanel(), "Center");
-		window.setSize(400, 100);
-		window.setVisible(true);
-	}
-
-	private WindowListener buildWindowListener() {
-		return new WindowAdapter() {
-			@Override
-			public void windowClosing(WindowEvent e) {
-				e.getWindow().setVisible(false);
-				System.exit(0);
-			}
-		};
-	}
-
-	private Component buildMainPanel() {
-		JPanel mainPanel = new JPanel(new BorderLayout());
-		mainPanel.add(this.buildCheckBoxPanel(), BorderLayout.NORTH);
-		mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH);
-		return mainPanel;
-	}
-
-	private Component buildCheckBoxPanel() {
-		JPanel taskListPanel = new JPanel(new GridLayout(1, 0));
-		taskListPanel.add(this.buildFlag1CheckBox());
-		taskListPanel.add(this.buildFlag2CheckBox());
-		taskListPanel.add(this.buildNotFlag2CheckBox());
-		taskListPanel.add(this.buildUnattachedCheckBox());
-		return taskListPanel;
-	}
-
-	private JCheckBox buildFlag1CheckBox() {
-		JCheckBox checkBox = new JCheckBox();
-		checkBox.setText("flag 1");
-		checkBox.setModel(this.flag1ButtonModel);
-		return checkBox;
-	}
-
-	private JCheckBox buildFlag2CheckBox() {
-		JCheckBox checkBox = new JCheckBox();
-		checkBox.setText("flag 2");
-		checkBox.setModel(this.flag2ButtonModel);
-		return checkBox;
-	}
-
-	private JCheckBox buildNotFlag2CheckBox() {
-		JCheckBox checkBox = new JCheckBox();
-		checkBox.setText("not flag 2");
-		checkBox.setModel(this.notFlag2ButtonModel);
-		return checkBox;
-	}
-
-	private JCheckBox buildUnattachedCheckBox() {
-		JCheckBox checkBox = new JCheckBox("unattached");
-		checkBox.getModel().addItemListener(this.buildUnattachedItemListener());
-		return checkBox;
-	}
-
-	private ItemListener buildUnattachedItemListener() {
-		return new ItemListener() {
-			public void itemStateChanged(ItemEvent e) {
-				System.out.println("unattached state changed: " + e);
-			}
-		};
-	}
-
-	private Component buildControlPanel() {
-		JPanel controlPanel = new JPanel(new GridLayout(1, 0));
-		controlPanel.add(this.buildFlipFlag1Button());
-		controlPanel.add(this.buildClearModelButton());
-		controlPanel.add(this.buildRestoreModelButton());
-		controlPanel.add(this.buildPrintModelButton());
-		return controlPanel;
-	}
-
-	private JButton buildFlipFlag1Button() {
-		return new JButton(this.buildFlipFlag1Action());
-	}
-
-	private Action buildFlipFlag1Action() {
-		Action action = new AbstractAction("flip flag 1") {
-			public void actionPerformed(ActionEvent event) {
-				CheckBoxModelAdapterUITest.this.flipFlag1();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void flipFlag1() {
-		this.testModel.setFlag1( ! this.testModel.isFlag1());
-	}
-
-	private JButton buildClearModelButton() {
-		return new JButton(this.buildClearModelAction());
-	}
-
-	private Action buildClearModelAction() {
-		Action action = new AbstractAction("clear model") {
-			public void actionPerformed(ActionEvent event) {
-				CheckBoxModelAdapterUITest.this.clearModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void clearModel() {
-		this.testModelHolder.setValue(null);
-	}
-
-	private JButton buildRestoreModelButton() {
-		return new JButton(this.buildRestoreModelAction());
-	}
-
-	private Action buildRestoreModelAction() {
-		Action action = new AbstractAction("restore model") {
-			public void actionPerformed(ActionEvent event) {
-				CheckBoxModelAdapterUITest.this.restoreModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void restoreModel() {
-		this.testModelHolder.setValue(this.testModel);
-	}
-
-	private JButton buildPrintModelButton() {
-		return new JButton(this.buildPrintModelAction());
-	}
-
-	private Action buildPrintModelAction() {
-		Action action = new AbstractAction("print model") {
-			public void actionPerformed(ActionEvent event) {
-				CheckBoxModelAdapterUITest.this.printModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void printModel() {
-		System.out.println("flag 1: " + this.testModel.isFlag1());
-		System.out.println("flag 2: " + this.testModel.isFlag2());
-		System.out.println("not flag 2: " + this.testModel.isNotFlag2());
-		System.out.println("***");
-	}
-
-
-	private class TestModel extends AbstractModel {
-		private boolean flag1;
-			public static final String FLAG1_PROPERTY = "flag1";
-		private boolean flag2;
-			public static final String FLAG2_PROPERTY = "flag2";
-		private boolean notFlag2;
-			public static final String NOT_FLAG2_PROPERTY = "notFlag2";
-	
-		public TestModel(boolean flag1, boolean flag2) {
-			this.flag1 = flag1;
-			this.flag2 = flag2;
-			this.notFlag2 = ! flag2;
-		}
-		public boolean isFlag1() {
-			return this.flag1;
-		}
-		public void setFlag1(boolean flag1) {
-			boolean old = this.flag1;
-			this.flag1 = flag1;
-			this.firePropertyChanged(FLAG1_PROPERTY, old, flag1);
-		}
-		public boolean isFlag2() {
-			return this.flag2;
-		}
-		public void setFlag2(boolean flag2) {
-			boolean old = this.flag2;
-			this.flag2 = flag2;
-			this.firePropertyChanged(FLAG2_PROPERTY, old, flag2);
-	
-			old = this.notFlag2;
-			this.notFlag2 = ! flag2;
-			this.firePropertyChanged(NOT_FLAG2_PROPERTY, old, this.notFlag2);
-		}
-		public boolean isNotFlag2() {
-			return this.notFlag2;
-		}
-		public void setNotFlag2(boolean notFlag2) {
-			this.setFlag2( ! notFlag2);
-		}
-		@Override
-		public String toString() {
-			return "TestModel(" + this.isFlag1() + " - " + this.isFlag2() + ")";
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ComboBoxModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ComboBoxModelAdapterTests.java
deleted file mode 100644
index 0bc9a57..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ComboBoxModelAdapterTests.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import javax.swing.ComboBoxModel;
-import javax.swing.ListModel;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ComboBoxModelAdapter;
-import org.eclipse.jpt.utility.internal.swing.Displayable;
-import org.eclipse.jpt.utility.internal.swing.SimpleDisplayable;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.model.value.CoordinatedList;
-
-@SuppressWarnings("nls")
-public class ComboBoxModelAdapterTests extends TestCase {
-
-	public ComboBoxModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		// nothing yet...
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		// nothing yet...
-		super.tearDown();
-	}
-
-	public void testHasListeners() throws Exception {
-		SimpleListValueModel<Displayable> listHolder = this.buildListHolder();
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		SimplePropertyValueModel<Object> selectionHolder = new SimplePropertyValueModel<Object>(listHolder.iterator().next());
-		assertFalse(selectionHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-
-		ComboBoxModel comboBoxModel = new ComboBoxModelAdapter(listHolder, selectionHolder);
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(selectionHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(comboBoxModel);
-
-		CoordinatedList<Displayable> synchList = new CoordinatedList<Displayable>(comboBoxModel);
-		PropertyChangeListener selectionListener = this.buildSelectionListener();
-		selectionHolder.addPropertyChangeListener(PropertyValueModel.VALUE, selectionListener);
-		assertTrue(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(selectionHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasListeners(comboBoxModel);
-
-		comboBoxModel.removeListDataListener(synchList);
-		selectionHolder.removePropertyChangeListener(PropertyValueModel.VALUE, selectionListener);
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertFalse(selectionHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(comboBoxModel);
-	}
-
-	private PropertyChangeListener buildSelectionListener() {
-		return new PropertyChangeListener() {
-			public void propertyChanged(PropertyChangeEvent evt) {
-				// do nothing...
-			}
-		};
-	}
-
-	private void verifyHasNoListeners(ListModel listModel) throws Exception {
-		boolean hasNoListeners = ((Boolean) ReflectionTools.executeMethod(listModel, "hasNoListDataListeners")).booleanValue();
-		assertTrue(hasNoListeners);
-	}
-
-	private void verifyHasListeners(ListModel listModel) throws Exception {
-		boolean hasListeners = ((Boolean) ReflectionTools.executeMethod(listModel, "hasListDataListeners")).booleanValue();
-		assertTrue(hasListeners);
-	}
-
-	private SimpleListValueModel<Displayable> buildListHolder() {
-		return new SimpleListValueModel<Displayable>(this.buildList());
-	}
-
-	private List<Displayable> buildList() {
-		List<Displayable> list = new ArrayList<Displayable>();
-		this.populateCollection(list);
-		return list;
-	}
-
-	private void populateCollection(Collection<Displayable> c) {
-		c.add(new SimpleDisplayable("foo"));
-		c.add(new SimpleDisplayable("bar"));
-		c.add(new SimpleDisplayable("baz"));
-		c.add(new SimpleDisplayable("joo"));
-		c.add(new SimpleDisplayable("jar"));
-		c.add(new SimpleDisplayable("jaz"));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ComboBoxModelAdapterUITest.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ComboBoxModelAdapterUITest.java
deleted file mode 100644
index afae125..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ComboBoxModelAdapterUITest.java
+++ /dev/null
@@ -1,393 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.ComboBoxModel;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.ListCellRenderer;
-import javax.swing.UIManager;
-import javax.swing.WindowConstants;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ComboBoxModelAdapter;
-import org.eclipse.jpt.utility.internal.swing.FilteringListBrowser;
-import org.eclipse.jpt.utility.internal.swing.ListChooser;
-import org.eclipse.jpt.utility.internal.swing.SimpleListCellRenderer;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-
-/**
- * Play around with a set of combo-boxes.
- * 
- * DefaultLongListBrowserDialogUITest subclasses this class; so be
- * careful when making changes.
- */
-@SuppressWarnings("nls")
-public class ComboBoxModelAdapterUITest {
-
-	protected JFrame window;
-	private TestModel testModel;
-	private WritablePropertyValueModel<TestModel> testModelHolder;
-	private WritablePropertyValueModel<Object> colorHolder;
-	private SimpleListValueModel<String> colorListHolder;
-	protected ComboBoxModel colorComboBoxModel;
-	private int nextColorNumber = 0;
-
-	public static void main(String[] args) throws Exception {
-		new ComboBoxModelAdapterUITest().exec();
-	}
-
-	protected ComboBoxModelAdapterUITest() {
-		super();
-	}
-
-	protected void exec() throws Exception {
-		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-//		UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());	// Metal LAF
-//		UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel.class.getName());
-//		UIManager.setLookAndFeel(com.sun.java.swing.plaf.motif.MotifLookAndFeel.class.getName());
-//		UIManager.setLookAndFeel(oracle.bali.ewt.olaf.OracleLookAndFeel.class.getName());
-		this.testModel = this.buildTestModel();
-		this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel);
-		this.colorHolder = this.buildColorHolder(this.testModelHolder);
-		this.colorListHolder = this.buildColorListHolder();
-		this.colorComboBoxModel = this.buildComboBoxModelAdapter(this.colorListHolder, this.colorHolder);
-		this.openWindow();
-	}
-
-	private WritablePropertyValueModel<Object> buildColorHolder(PropertyValueModel<TestModel> vm) {
-		return new PropertyAspectAdapter<TestModel, Object>(vm, TestModel.COLOR_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getColor();
-			}
-			@Override
-			protected void setValue_(Object value) {
-				this.subject.setColor((String) value);
-			}
-		};
-	}
-
-	protected TestModel buildTestModel() {
-		return new TestModel();
-	}
-
-	private SimpleListValueModel<String> buildColorListHolder() {
-		return new SimpleListValueModel<String>(TestModel.validColors());
-//		return new AbstractReadOnlyListValueModel() {
-//			public Object value() {
-//				return new ArrayListIterator(TestModel.VALID_COLORS);
-//			}
-//			public int size() {
-//				return TestModel.VALID_COLORS.length;
-//			}
-//		};
-	}
-
-	protected ListValueModel<String> uiColorListHolder() {
-		return this.colorListHolder;
-	}
-
-	private ComboBoxModel buildComboBoxModelAdapter(ListValueModel<String> listHolder, WritablePropertyValueModel<Object> selectionHolder) {
-		return new ComboBoxModelAdapter(listHolder, selectionHolder);
-	}
-
-	private void openWindow() {
-		this.window = new JFrame(this.getClass().getSimpleName());
-		this.window.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		this.window.addWindowListener(this.buildWindowListener());
-		this.window.getContentPane().add(this.buildMainPanel(), "Center");
-		this.window.setLocation(300, 300);
-		this.window.setSize(400, 150);
-		this.window.setVisible(true);
-	}
-
-	private WindowListener buildWindowListener() {
-		return new WindowAdapter() {
-			@Override
-			public void windowClosing(WindowEvent e) {
-				e.getWindow().setVisible(false);
-				System.exit(0);
-			}
-		};
-	}
-
-	private Component buildMainPanel() {
-		JPanel mainPanel = new JPanel(new BorderLayout());
-		mainPanel.add(this.buildComboBoxPanel(), BorderLayout.NORTH);
-		mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH);
-		return mainPanel;
-	}
-
-	protected JPanel buildComboBoxPanel() {
-		JPanel panel = new JPanel(new GridLayout(1, 0));
-		panel.add(this.buildComboBox());
-		panel.add(this.buildComboBox());
-		panel.add(this.buildListChooser1());
-		panel.add(this.buildListChooser2());
-		return panel;
-	}
-
-	private JComboBox buildComboBox() {
-		JComboBox comboBox = new JComboBox(this.colorComboBoxModel);
-		comboBox.setRenderer(this.buildComboBoxRenderer());
-		return comboBox;
-	}
-
-	protected ListCellRenderer buildComboBoxRenderer() {
-		return new SimpleListCellRenderer() {
-			@Override
-			protected String buildText(Object value) {
-				return super.buildText(value);
-			}
-		};
-	}
-
-	private ListChooser buildListChooser1() {
-		return new LocalListChooser1(this.colorComboBoxModel);
-	}
-
-	private ListChooser buildListChooser2() {
-		return new LocalListChooser2(this.colorComboBoxModel);
-	}
-
-	private Component buildControlPanel() {
-		JPanel controlPanel = new JPanel(new GridLayout(2, 0));
-		controlPanel.add(this.buildResetColorButton());
-		controlPanel.add(this.buildClearModelButton());
-		controlPanel.add(this.buildRestoreModelButton());
-		controlPanel.add(this.buildPrintModelButton());
-		controlPanel.add(this.buildAddTenButton());
-		controlPanel.add(this.buildRemoveTenButton());
-		return controlPanel;
-	}
-
-	// ********** reset color button **********
-	private JButton buildResetColorButton() {
-		return new JButton(this.buildResetColorAction());
-	}
-
-	private Action buildResetColorAction() {
-		Action action = new AbstractAction("reset color") {
-			public void actionPerformed(ActionEvent event) {
-				ComboBoxModelAdapterUITest.this.resetColor();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void resetColor() {
-		this.testModel.setColor(TestModel.DEFAULT_COLOR);
-	}
-
-	// ********** clear model button **********
-	private JButton buildClearModelButton() {
-		return new JButton(this.buildClearModelAction());
-	}
-
-	private Action buildClearModelAction() {
-		Action action = new AbstractAction("clear model") {
-			public void actionPerformed(ActionEvent event) {
-				ComboBoxModelAdapterUITest.this.clearModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void clearModel() {
-		this.testModelHolder.setValue(null);
-	}
-
-	// ********** restore model button **********
-	private JButton buildRestoreModelButton() {
-		return new JButton(this.buildRestoreModelAction());
-	}
-
-	private Action buildRestoreModelAction() {
-		Action action = new AbstractAction("restore model") {
-			public void actionPerformed(ActionEvent event) {
-				ComboBoxModelAdapterUITest.this.restoreModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void restoreModel() {
-		this.testModelHolder.setValue(this.testModel);
-	}
-
-	// ********** print model button **********
-	private JButton buildPrintModelButton() {
-		return new JButton(this.buildPrintModelAction());
-	}
-
-	private Action buildPrintModelAction() {
-		Action action = new AbstractAction("print model") {
-			public void actionPerformed(ActionEvent event) {
-				ComboBoxModelAdapterUITest.this.printModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void printModel() {
-		System.out.println(this.testModel);
-	}
-
-	// ********** add 20 button **********
-	private JButton buildAddTenButton() {
-		return new JButton(this.buildAddTenAction());
-	}
-
-	private Action buildAddTenAction() {
-		Action action = new AbstractAction("add 20") {
-			public void actionPerformed(ActionEvent event) {
-				ComboBoxModelAdapterUITest.this.addTen();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void addTen() {
-		for (int i = this.nextColorNumber; i < this.nextColorNumber + 20; i++) {
-			this.colorListHolder.add(this.colorListHolder.size(), "color" + i);
-		}
-		this.nextColorNumber += 20;
-	}
-
-	// ********** remove 20 button **********
-	private JButton buildRemoveTenButton() {
-		return new JButton(this.buildRemoveTenAction());
-	}
-
-	private Action buildRemoveTenAction() {
-		Action action = new AbstractAction("remove 20") {
-			public void actionPerformed(ActionEvent event) {
-				ComboBoxModelAdapterUITest.this.removeTen();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void removeTen() {
-		for (int i = 0; i < 20; i++) {
-			if (this.colorListHolder.size() > 0) {
-				this.colorListHolder.remove(this.colorListHolder.size() - 1);
-			}
-		}
-	}
-
-
-	protected static class TestModel extends AbstractModel {
-		private String color;
-			public static final String COLOR_PROPERTY = "color";
-			public static final String RED = "red";
-			public static final String ORANGE = "orange";
-			public static final String YELLOW = "yellow";
-			public static final String GREEN = "green";
-			public static final String BLUE = "blue";
-			public static final String INDIGO = "indigo";
-			public static final String VIOLET = "violet";
-			public static final String DEFAULT_COLOR = RED;
-			public static List<String> validColors;
-			public static final String[] DEFAULT_VALID_COLORS = {
-				RED,
-				ORANGE,
-				YELLOW,
-				GREEN,
-				BLUE,
-				INDIGO,
-				VIOLET
-			};
-	
-		public static List<String> validColors() {
-			if (validColors == null) {
-				validColors = buildDefaultValidColors();
-			}
-			return validColors;
-		}
-		public static List<String> buildDefaultValidColors() {
-			List<String> result = new ArrayList<String>();
-			CollectionTools.addAll(result, DEFAULT_VALID_COLORS);
-			return result;
-		}
-	
-		public TestModel() {
-			this(DEFAULT_COLOR);
-		}
-		public TestModel(String color) {
-			this.color = color;
-		}
-		public String getColor() {
-			return this.color;
-		}
-		public void setColor(String color) {
-			this.checkColor(color);
-			Object old = this.color;
-			this.color = color;
-			this.firePropertyChanged(COLOR_PROPERTY, old, color);
-		}
-		public void checkColor(String c) {
-			if ( ! validColors().contains(c)) {
-				throw new IllegalArgumentException(c);
-			}
-		}
-		@Override
-		public String toString() {
-			return "TestModel(" + this.color + ")";
-		}
-	}
-
-
-	private class LocalListChooser1 extends ListChooser {
-		public LocalListChooser1(ComboBoxModel model) {
-			super(model);
-		}
-	}
-
-
-	private class LocalListChooser2 extends ListChooser {
-		public LocalListChooser2(ComboBoxModel model) {
-			super(model);
-		}
-		@Override
-		protected ListBrowser buildBrowser() {
-			return new FilteringListBrowser<String>();
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ComboBoxModelAdapterUITest2.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ComboBoxModelAdapterUITest2.java
deleted file mode 100644
index afc1c15..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ComboBoxModelAdapterUITest2.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import javax.swing.ListCellRenderer;
-import org.eclipse.jpt.utility.internal.model.value.ExtendedListValueModelWrapper;
-import org.eclipse.jpt.utility.internal.swing.SimpleListCellRenderer;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-
-/**
- * 
- */
-@SuppressWarnings("nls")
-public class ComboBoxModelAdapterUITest2 extends ComboBoxModelAdapterUITest {
-
-	public static void main(String[] args) throws Exception {
-		new ComboBoxModelAdapterUITest2().exec();
-	}
-
-	public ComboBoxModelAdapterUITest2() {
-		super();
-	}
-
-	/**
-	 * use a different model that allows the color to be set to null
-	 */
-	@Override
-	protected TestModel buildTestModel() {
-		return new TestModel2();
-	}
-
-	/**
-	 * add a null to the front of the list
-	 */
-	@Override
-	protected ListValueModel<String> uiColorListHolder() {
-		// the default is to prepend the wrapped list with a null item
-		return new ExtendedListValueModelWrapper<String>(super.uiColorListHolder());
-	}
-
-	/**
-	 * convert null to some text
-	 */
-	@Override
-	protected ListCellRenderer buildComboBoxRenderer() {
-		return new SimpleListCellRenderer() {
-			@Override
-			protected String buildText(Object value) {
-				return (value == null) ? "<none selected>" : super.buildText(value);
-			}
-		};
-	}
-
-
-	protected static class TestModel2 extends TestModel {
-		/**
-		 * null is OK here
-		 */
-		@Override
-		public void checkColor(String color) {
-			if (color == null) {
-				return;
-			}
-			super.checkColor(color);
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/DateSpinnerModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/DateSpinnerModelAdapterTests.java
deleted file mode 100644
index a24b75b..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/DateSpinnerModelAdapterTests.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.util.Date;
-import javax.swing.SpinnerModel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.DateSpinnerModelAdapter;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class DateSpinnerModelAdapterTests extends TestCase {
-	private WritablePropertyValueModel<Object> valueHolder;
-	private SpinnerModel spinnerModelAdapter;
-	boolean eventFired;
-
-	public DateSpinnerModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.valueHolder = new SimplePropertyValueModel<Object>(new Date());
-		this.spinnerModelAdapter = new DateSpinnerModelAdapter(this.valueHolder) {
-			@Override
-			protected PropertyChangeListener buildDateChangeListener() {
-				return this.buildDateChangeListener_();
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSetValueSpinnerModel() throws Exception {
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				DateSpinnerModelAdapterTests.this.eventFired = true;
-			}
-		});
-		Date newDate = new Date();
-		newDate.setTime(777777);
-		this.spinnerModelAdapter.setValue(newDate);
-		assertTrue(this.eventFired);
-		assertEquals(777777, ((Date) this.valueHolder.getValue()).getTime());
-	}
-
-	public void testSetValueValueHolder() throws Exception {
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				DateSpinnerModelAdapterTests.this.eventFired = true;
-			}
-		});
-		Date newDate = new Date();
-		newDate.setTime(777777);
-		this.valueHolder.setValue(newDate);
-		assertTrue(this.eventFired);
-		assertEquals(777777, ((Date) this.spinnerModelAdapter.getValue()).getTime());
-	}
-
-	public void testDefaultValue() throws Exception {
-		Date newDate = new Date();
-		newDate.setTime(777777);
-		this.valueHolder.setValue(newDate);
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				DateSpinnerModelAdapterTests.this.eventFired = true;
-			}
-		});
-		assertEquals(777777, ((Date) this.spinnerModelAdapter.getValue()).getTime());
-		this.valueHolder.setValue(null);
-		assertTrue(this.eventFired);
-		assertFalse(((Date) this.spinnerModelAdapter.getValue()).getTime() == 777777);
-	}
-
-	public void testHasListeners() throws Exception {
-		SimplePropertyValueModel<Object> localValueHolder = (SimplePropertyValueModel<Object>) this.valueHolder;
-		assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.spinnerModelAdapter);
-
-		ChangeListener listener = new TestChangeListener();
-		this.spinnerModelAdapter.addChangeListener(listener);
-		assertTrue(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasListeners(this.spinnerModelAdapter);
-
-		this.spinnerModelAdapter.removeChangeListener(listener);
-		assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.spinnerModelAdapter);
-	}
-
-	private void verifyHasNoListeners(SpinnerModel adapter) throws Exception {
-		assertEquals(0, ((DateSpinnerModelAdapter) adapter).getChangeListeners().length);
-	}
-
-	private void verifyHasListeners(Object adapter) throws Exception {
-		assertFalse(((DateSpinnerModelAdapter) adapter).getChangeListeners().length == 0);
-	}
-
-	public void testNullInitialValue() {
-		Date today = new Date();
-		this.valueHolder = new SimplePropertyValueModel<Object>();
-		this.spinnerModelAdapter = new DateSpinnerModelAdapter(this.valueHolder, today) {
-			@Override
-			protected PropertyChangeListener buildDateChangeListener() {
-				return this.buildDateChangeListener_();
-			}
-		};
-
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				DateSpinnerModelAdapterTests.this.eventFired = true;
-			}
-		});
-		assertEquals(today, this.spinnerModelAdapter.getValue());
-
-		Date newDate = new Date();
-		newDate.setTime(777777);
-		this.valueHolder.setValue(newDate);
-
-		assertTrue(this.eventFired);
-		assertEquals(777777, ((Date) this.spinnerModelAdapter.getValue()).getTime());
-	}
-
-
-	// ********** inner class **********
-	private class TestChangeListener implements ChangeListener {
-		TestChangeListener() {
-			super();
-		}
-		public void stateChanged(ChangeEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/DocumentAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/DocumentAdapterTests.java
deleted file mode 100644
index e980515..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/DocumentAdapterTests.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.event.DocumentEvent.EventType;
-import javax.swing.text.Document;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.DocumentAdapter;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class DocumentAdapterTests extends TestCase {
-	private WritablePropertyValueModel<String> stringHolder;
-	Document documentAdapter;
-	boolean eventFired;
-
-	public DocumentAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.stringHolder = new SimplePropertyValueModel<String>("0123456789");
-		this.documentAdapter = new DocumentAdapter(this.stringHolder) {
-			@Override
-			protected PropertyChangeListener buildStringListener() {
-				return this.buildStringListener_();
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testRemove() throws Exception {
-		this.eventFired = false;
-		this.documentAdapter.addDocumentListener(new TestDocumentListener() {
-			@Override
-			public void removeUpdate(DocumentEvent e) {
-				DocumentAdapterTests.this.eventFired = true;
-				assertEquals(EventType.REMOVE, e.getType());
-				assertEquals(DocumentAdapterTests.this.documentAdapter, e.getDocument());
-				// this will be the removal of "23456"
-				assertEquals(2, e.getOffset());
-				assertEquals(5, e.getLength());
-			}
-		});
-		this.documentAdapter.remove(2, 5);
-		assertTrue(this.eventFired);
-		assertEquals("01789", this.stringHolder.getValue());
-	}
-
-	public void testInsert() throws Exception {
-		this.eventFired = false;
-		this.documentAdapter.addDocumentListener(new TestDocumentListener() {
-			@Override
-			public void insertUpdate(DocumentEvent e) {
-				DocumentAdapterTests.this.eventFired = true;
-				assertEquals(EventType.INSERT, e.getType());
-				assertEquals(DocumentAdapterTests.this.documentAdapter, e.getDocument());
-				// this will be the insert of "xxxxxx"
-				assertEquals(2, e.getOffset());
-				assertEquals(5, e.getLength());
-			}
-		});
-		this.documentAdapter.insertString(2, "xxxxx", null);
-		assertTrue(this.eventFired);
-		assertEquals("01xxxxx23456789", this.stringHolder.getValue());
-	}
-
-	public void testSetValue() throws Exception {
-		this.eventFired = false;
-		this.documentAdapter.addDocumentListener(new TestDocumentListener() {
-			@Override
-			public void insertUpdate(DocumentEvent e) {
-				DocumentAdapterTests.this.eventFired = true;
-				assertEquals(EventType.INSERT, e.getType());
-				assertEquals(DocumentAdapterTests.this.documentAdapter, e.getDocument());
-				// this will be the insert of "foo"
-				assertEquals(0, e.getOffset());
-				assertEquals(3, e.getLength());
-			}
-			@Override
-			public void removeUpdate(DocumentEvent e) {
-				assertEquals(EventType.REMOVE, e.getType());
-				assertEquals(DocumentAdapterTests.this.documentAdapter, e.getDocument());
-				// this will be the removal of "0123456789"
-				assertEquals(0, e.getOffset());
-				assertEquals(10, e.getLength());
-			}
-		});
-		assertEquals("0123456789", this.documentAdapter.getText(0, this.documentAdapter.getLength()));
-		this.stringHolder.setValue("foo");
-		assertTrue(this.eventFired);
-		assertEquals("foo", this.documentAdapter.getText(0, this.documentAdapter.getLength()));
-	}
-
-	public void testHasListeners() throws Exception {
-		SimplePropertyValueModel<String> localStringHolder = (SimplePropertyValueModel<String>) this.stringHolder;
-		assertFalse(localStringHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.documentAdapter);
-
-		DocumentListener listener = new TestDocumentListener();
-		this.documentAdapter.addDocumentListener(listener);
-		assertTrue(localStringHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasListeners(this.documentAdapter);
-
-		this.documentAdapter.removeDocumentListener(listener);
-		assertFalse(localStringHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.documentAdapter);
-	}
-
-	private void verifyHasNoListeners(Object document) throws Exception {
-		Object delegate = ReflectionTools.getFieldValue(document, "delegate");
-		Object[] listeners = (Object[]) ReflectionTools.executeMethod(delegate, "getDocumentListeners");
-		assertEquals(0, listeners.length);
-	}
-
-	private void verifyHasListeners(Object document) throws Exception {
-		Object delegate = ReflectionTools.getFieldValue(document, "delegate");
-		Object[] listeners = (Object[]) ReflectionTools.executeMethod(delegate, "getDocumentListeners");
-		assertFalse(listeners.length == 0);
-	}
-
-
-private class TestDocumentListener implements DocumentListener {
-	TestDocumentListener() {
-		super();
-	}
-	public void changedUpdate(DocumentEvent e) {
-		fail("unexpected event");
-	}
-	public void insertUpdate(DocumentEvent e) {
-		fail("unexpected event");
-	}
-	public void removeUpdate(DocumentEvent e) {
-		fail("unexpected event");
-	}
-}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/DocumentAdapterUITest.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/DocumentAdapterUITest.java
deleted file mode 100644
index c57649b..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/DocumentAdapterUITest.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import javax.swing.WindowConstants;
-import javax.swing.text.AbstractDocument;
-import javax.swing.text.AttributeSet;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Document;
-import javax.swing.text.PlainDocument;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.DocumentAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * Play around with a set of entry fields.
- */
-@SuppressWarnings("nls")
-public class DocumentAdapterUITest {
-
-	private TestModel testModel;
-		private static final String DEFAULT_NAME = "Scooby Doo";
-	private WritablePropertyValueModel<TestModel> testModelHolder;
-	private WritablePropertyValueModel<String> nameHolder;
-	private Document nameDocument;
-	private Document upperCaseNameDocument;
-
-	public static void main(String[] args) throws Exception {
-		new DocumentAdapterUITest().exec();
-	}
-
-	private DocumentAdapterUITest() {
-		super();
-	}
-
-	private void exec() throws Exception {
-		this.testModel = new TestModel(DEFAULT_NAME);
-		this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel);
-		this.nameHolder = this.buildNameHolder(this.testModelHolder);
-		this.nameDocument = this.buildNameDocument(this.nameHolder);
-		this.upperCaseNameDocument = this.buildUpperCaseNameDocument(this.nameHolder);
-		this.openWindow();
-	}
-
-	private WritablePropertyValueModel<String> buildNameHolder(PropertyValueModel<TestModel> vm) {
-		return new PropertyAspectAdapter<TestModel, String>(vm, TestModel.NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getName();
-			}
-			@Override
-			protected void setValue_(String value) {
-				this.subject.setName(value);
-			}
-		};
-	}
-
-	private Document buildNameDocument(WritablePropertyValueModel<String> stringHolder) {
-		return new DocumentAdapter(stringHolder);
-	}
-
-	private Document buildUpperCaseNameDocument(WritablePropertyValueModel<String> stringHolder) {
-		return new DocumentAdapter(stringHolder, this.buildUpperCaseNameDocumentDelegate());
-	}
-
-	private AbstractDocument buildUpperCaseNameDocumentDelegate() {
-		return new PlainDocument() {
-			@Override
-			public void insertString(int offset, String string, AttributeSet a) throws BadLocationException {
-				if (string == null) {
-					return;
-				}
-				char[] upper = string.toCharArray();
-				for (int i = 0; i < upper.length; i++) {
-					upper[i] = Character.toUpperCase(upper[i]);
-				}
-				super.insertString(offset, new String(upper), a);
-			}
-		};
-	}
-
-	private void openWindow() {
-		JFrame window = new JFrame(this.getClass().getName());
-		window.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		window.addWindowListener(this.buildWindowListener());
-		window.getContentPane().add(this.buildMainPanel(), "Center");
-		window.setSize(400, 100);
-		window.setVisible(true);
-	}
-
-	private WindowListener buildWindowListener() {
-		return new WindowAdapter() {
-			@Override
-			public void windowClosing(WindowEvent e) {
-				e.getWindow().setVisible(false);
-				System.exit(0);
-			}
-		};
-	}
-
-	private Component buildMainPanel() {
-		JPanel mainPanel = new JPanel(new BorderLayout());
-		mainPanel.add(this.buildTextFieldPanel(), BorderLayout.NORTH);
-		mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH);
-		return mainPanel;
-	}
-
-	private Component buildTextFieldPanel() {
-		JPanel taskListPanel = new JPanel(new GridLayout(1, 0));
-		taskListPanel.add(this.buildNameTextField());
-		taskListPanel.add(this.buildReadOnlyNameTextField());
-		taskListPanel.add(this.buildUpperCaseNameTextField());
-		return taskListPanel;
-	}
-
-	private JTextField buildNameTextField() {
-		return new JTextField(this.nameDocument, null, 0);
-	}
-
-	private JTextField buildReadOnlyNameTextField() {
-		JTextField nameTextField = this.buildNameTextField();
-		nameTextField.setEditable(false);
-		return nameTextField;
-	}
-
-	private JTextField buildUpperCaseNameTextField() {
-		return new JTextField(this.upperCaseNameDocument, null, 0);
-	}
-
-	private Component buildControlPanel() {
-		JPanel controlPanel = new JPanel(new GridLayout(1, 0));
-		controlPanel.add(this.buildResetNameButton());
-		controlPanel.add(this.buildClearModelButton());
-		controlPanel.add(this.buildRestoreModelButton());
-		controlPanel.add(this.buildPrintModelButton());
-		return controlPanel;
-	}
-
-	private JButton buildResetNameButton() {
-		return new JButton(this.buildResetNameAction());
-	}
-
-	private Action buildResetNameAction() {
-		Action action = new AbstractAction("reset name") {
-			public void actionPerformed(ActionEvent event) {
-				DocumentAdapterUITest.this.resetName();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void resetName() {
-		this.testModel.setName(DEFAULT_NAME);
-	}
-
-	private JButton buildClearModelButton() {
-		return new JButton(this.buildClearModelAction());
-	}
-
-	private Action buildClearModelAction() {
-		Action action = new AbstractAction("clear model") {
-			public void actionPerformed(ActionEvent event) {
-				DocumentAdapterUITest.this.clearModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void clearModel() {
-		this.testModelHolder.setValue(null);
-	}
-
-	private JButton buildRestoreModelButton() {
-		return new JButton(this.buildRestoreModelAction());
-	}
-
-	private Action buildRestoreModelAction() {
-		Action action = new AbstractAction("restore model") {
-			public void actionPerformed(ActionEvent event) {
-				DocumentAdapterUITest.this.restoreModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void restoreModel() {
-		this.testModelHolder.setValue(this.testModel);
-	}
-
-	private JButton buildPrintModelButton() {
-		return new JButton(this.buildPrintModelAction());
-	}
-
-	private Action buildPrintModelAction() {
-		Action action = new AbstractAction("print model") {
-			public void actionPerformed(ActionEvent event) {
-				DocumentAdapterUITest.this.printModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void printModel() {
-		System.out.println("name: " + this.testModel.getName());
-	}
-
-
-	private class TestModel extends AbstractModel {
-		private String name;
-			public static final String NAME_PROPERTY = "name";
-	
-		public TestModel(String name) {
-			this.name = name;
-		}
-		public String getName() {
-			return this.name;
-		}
-		public void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(NAME_PROPERTY, old, name);
-		}
-		@Override
-		public String toString() {
-			return "TestModel(" + this.getName() + ")";
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/JptUtilityModelValueSwingTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/JptUtilityModelValueSwingTests.java
deleted file mode 100644
index b531bd3..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/JptUtilityModelValueSwingTests.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class JptUtilityModelValueSwingTests {
-	
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUtilityModelValueSwingTests.class.getPackage().getName());
-
-		suite.addTestSuite(CheckBoxModelAdapterTests.class);
-		suite.addTestSuite(ComboBoxModelAdapterTests.class);
-		suite.addTestSuite(DateSpinnerModelAdapterTests.class);
-		suite.addTestSuite(DocumentAdapterTests.class);
-		suite.addTestSuite(ListModelAdapterTests.class);
-		suite.addTestSuite(ListSpinnerModelAdapterTests.class);
-		suite.addTestSuite(NumberSpinnerModelAdapterTests.class);
-		suite.addTestSuite(ObjectListSelectionModelTests.class);
-		suite.addTestSuite(PrimitiveListTreeModelTests.class);
-		suite.addTestSuite(RadioButtonModelAdapterTests.class);
-		suite.addTestSuite(SpinnerModelAdapterTests.class);
-		suite.addTestSuite(TableModelAdapterTests.class);
-		suite.addTestSuite(TreeModelAdapterTests.class);
-	
-		return suite;
-	}
-	
-	private JptUtilityModelValueSwingTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-	
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ListModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ListModelAdapterTests.java
deleted file mode 100644
index 86f3b69..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ListModelAdapterTests.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import javax.swing.ListModel;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.Bag;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelWrapper;
-import org.eclipse.jpt.utility.internal.model.value.swing.ListModelAdapter;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.model.value.CoordinatedList;
-
-@SuppressWarnings("nls")
-public class ListModelAdapterTests extends TestCase {
-
-	public ListModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		// nothing yet...
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		// nothing yet...
-		super.tearDown();
-	}
-
-	private ListModelAdapter buildListModel(ListValueModel<String> listHolder) {
-		return new ListModelAdapter(listHolder) {
-			@Override
-			protected ListChangeListener buildListChangeListener() {
-				return this.buildListChangeListener_();
-			}
-		};
-	}
-
-	private ListModel buildListModel(CollectionValueModel<String> collectionHolder) {
-		return new ListModelAdapter(collectionHolder) {
-			@Override
-			protected ListChangeListener buildListChangeListener() {
-				return this.buildListChangeListener_();
-			}
-		};
-	}
-
-	public void testCollectionSynchronization() {
-		SimpleCollectionValueModel<String> collectionHolder = this.buildCollectionHolder();
-		ListModel listModel = this.buildListModel(collectionHolder);
-		CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
-		assertEquals(6, synchList.size());
-		this.compare(listModel, synchList);
-
-		collectionHolder.add("tom");
-		collectionHolder.add("dick");
-		collectionHolder.add("harry");
-		collectionHolder.add(null);
-		assertEquals(10, synchList.size());
-		this.compare(listModel, synchList);
-
-		collectionHolder.remove("foo");
-		collectionHolder.remove("jar");
-		collectionHolder.remove("harry");
-		collectionHolder.remove(null);
-		assertEquals(6, synchList.size());
-		this.compare(listModel, synchList);
-	}
-
-	public void testListSynchronization() {
-		SimpleListValueModel<String> listHolder = this.buildListHolder();
-		ListModel listModel = this.buildListModel(listHolder);
-		CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
-		assertEquals(6, synchList.size());
-		this.compare(listModel, synchList);
-
-		listHolder.add(6, "tom");
-		listHolder.add(7, "dick");
-		listHolder.add(8, "harry");
-		listHolder.add(9, null);
-		assertEquals(10, synchList.size());
-		this.compare(listModel, synchList);
-
-		listHolder.remove(9);
-		listHolder.remove(8);
-		listHolder.remove(4);
-		listHolder.remove(0);
-		assertEquals(6, synchList.size());
-		this.compare(listModel, synchList);
-	}
-
-	public void testSetModel() {
-		SimpleListValueModel<String> listHolder1 = this.buildListHolder();
-		ListModelAdapter listModel = this.buildListModel(listHolder1);
-		CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
-		assertTrue(listHolder1.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		assertEquals(6, synchList.size());
-		this.compare(listModel, synchList);
-
-		SimpleListValueModel<String> listHolder2 = this.buildListHolder2();
-		listModel.setModel(listHolder2);
-		assertEquals(3, synchList.size());
-		this.compare(listModel, synchList);
-		assertTrue(listHolder1.hasNoListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(listHolder2.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		listModel.setModel(new SimpleListValueModel<String>());
-		assertEquals(0, synchList.size());
-		this.compare(listModel, synchList);
-		assertTrue(listHolder1.hasNoListChangeListeners(ListValueModel.LIST_VALUES));
-		assertTrue(listHolder2.hasNoListChangeListeners(ListValueModel.LIST_VALUES));
-	}
-
-	private void compare(ListModel listModel, List<String> list) {
-		assertEquals(listModel.getSize(), list.size());
-		for (int i = 0; i < listModel.getSize(); i++) {
-			assertEquals(listModel.getElementAt(i), list.get(i));
-		}
-	}
-
-	public void testCollectionSort() {
-		this.verifyCollectionSort(null);
-	}
-
-	public void testListSort() {
-		this.verifyListSort(null);
-	}
-
-	public void testCustomCollectionSort() {
-		this.verifyCollectionSort(this.buildCustomComparator());
-	}
-
-	public void testCustomListSort() {
-		this.verifyListSort(this.buildCustomComparator());
-	}
-
-	private Comparator<String> buildCustomComparator() {
-		// sort with reverse order
-		return new Comparator<String>() {
-			public int compare(String s1, String s2) {
-				return s2.compareTo(s1);
-			}
-		};
-	}
-
-	private void verifyCollectionSort(Comparator<String> comparator) {
-		SimpleCollectionValueModel<String> collectionHolder = this.buildCollectionHolder();
-		ListModel listModel = this.buildListModel(new SortedListValueModelAdapter<String>(collectionHolder, comparator));
-		CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
-		assertEquals(6, synchList.size());
-		this.compareSort(listModel, synchList, comparator);
-
-		collectionHolder.add("tom");
-		collectionHolder.add("dick");
-		collectionHolder.add("harry");
-		assertEquals(9, synchList.size());
-		this.compareSort(listModel, synchList, comparator);
-
-		collectionHolder.remove("foo");
-		collectionHolder.remove("jar");
-		collectionHolder.remove("harry");
-		assertEquals(6, synchList.size());
-		this.compareSort(listModel, synchList, comparator);
-	}
-
-	private void verifyListSort(Comparator<String> comparator) {
-		SimpleListValueModel<String> listHolder = this.buildListHolder();
-		ListModel listModel = this.buildListModel(new SortedListValueModelWrapper<String>(listHolder, comparator));
-		CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
-		assertEquals(6, synchList.size());
-		this.compareSort(listModel, synchList, comparator);
-
-		listHolder.add(0, "tom");
-		listHolder.add(0, "dick");
-		listHolder.add(0, "harry");
-		assertEquals(9, synchList.size());
-		this.compareSort(listModel, synchList, comparator);
-
-		listHolder.remove(8);
-		listHolder.remove(4);
-		listHolder.remove(0);
-		listHolder.remove(5);
-		assertEquals(5, synchList.size());
-		this.compareSort(listModel, synchList, comparator);
-	}
-
-	private void compareSort(ListModel listModel, List<String> list, Comparator<String> comparator) {
-		SortedSet<String> ss = new TreeSet<String>(comparator);
-		for (int i = 0; i < listModel.getSize(); i++) {
-			ss.add((String) listModel.getElementAt(i));
-		}
-		assertEquals(ss.size(), list.size());
-		for (Iterator<String> stream1 = ss.iterator(), stream2 = list.iterator(); stream1.hasNext(); ) {
-			assertEquals(stream1.next(), stream2.next());
-		}
-	}
-
-	public void testHasListeners() throws Exception {
-		SimpleListValueModel<String> listHolder = this.buildListHolder();
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-
-		ListModel listModel = this.buildListModel(listHolder);
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		this.verifyHasNoListeners(listModel);
-
-		CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
-		assertTrue(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		this.verifyHasListeners(listModel);
-
-		listModel.removeListDataListener(synchList);
-		assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
-		this.verifyHasNoListeners(listModel);
-	}
-
-	public void testGetSize() throws Exception {
-		SimpleListValueModel<String> listHolder = this.buildListHolder();
-		ListModel listModel = this.buildListModel(listHolder);
-		this.verifyHasNoListeners(listModel);
-		assertEquals(6, listModel.getSize());
-
-		CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
-		this.verifyHasListeners(listModel);
-		assertEquals(6, listModel.getSize());
-
-		listModel.removeListDataListener(synchList);
-		this.verifyHasNoListeners(listModel);
-		assertEquals(6, listModel.getSize());
-	}
-
-	public void testGetElementAt() throws Exception {
-		SimpleListValueModel<String> listHolder = this.buildListHolder();
-		ListModel listModel = this.buildListModel(new SortedListValueModelWrapper<String>(listHolder));
-		CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
-		this.verifyHasListeners(listModel);
-		assertEquals("bar", listModel.getElementAt(0));
-		assertEquals("bar", synchList.get(0));
-	}
-
-	private void verifyHasNoListeners(ListModel listModel) throws Exception {
-		boolean hasNoListeners = ((Boolean) ReflectionTools.executeMethod(listModel, "hasNoListDataListeners")).booleanValue();
-		assertTrue(hasNoListeners);
-	}
-
-	private void verifyHasListeners(ListModel listModel) throws Exception {
-		boolean hasListeners = ((Boolean) ReflectionTools.executeMethod(listModel, "hasListDataListeners")).booleanValue();
-		assertTrue(hasListeners);
-	}
-
-	private SimpleCollectionValueModel<String> buildCollectionHolder() {
-		return new SimpleCollectionValueModel<String>(this.buildCollection());
-	}
-
-	private Collection<String> buildCollection() {
-		Bag<String> bag = new HashBag<String>();
-		this.populateCollection(bag);
-		return bag;
-	}
-
-	private SimpleListValueModel<String> buildListHolder() {
-		return new SimpleListValueModel<String>(this.buildList());
-	}
-
-	private List<String> buildList() {
-		List<String> list = new ArrayList<String>();
-		this.populateCollection(list);
-		return list;
-	}
-
-	private void populateCollection(Collection<String> c) {
-		c.add("foo");
-		c.add("bar");
-		c.add("baz");
-		c.add("joo");
-		c.add("jar");
-		c.add("jaz");
-	}
-
-	private SimpleListValueModel<String> buildListHolder2() {
-		return new SimpleListValueModel<String>(this.buildList2());
-	}
-
-	private List<String> buildList2() {
-		List<String> list = new ArrayList<String>();
-		this.populateCollection2(list);
-		return list;
-	}
-
-	private void populateCollection2(Collection<String> c) {
-		c.add("tom");
-		c.add("dick");
-		c.add("harry");
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ListModelAdapterUITest.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ListModelAdapterUITest.java
deleted file mode 100644
index 168ee48..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ListModelAdapterUITest.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.TextField;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-import java.util.ListIterator;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.ListModel;
-import javax.swing.WindowConstants;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelWrapper;
-import org.eclipse.jpt.utility.internal.model.value.swing.ListModelAdapter;
-import org.eclipse.jpt.utility.internal.swing.Displayable;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * an example UI for testing various permutations of the ListModelAdapter
- */
-@SuppressWarnings("nls")
-public class ListModelAdapterUITest {
-
-	private WritablePropertyValueModel<TaskList> taskListHolder;
-	private TextField taskTextField;
-
-	public static void main(String[] args) throws Exception {
-		new ListModelAdapterUITest().exec(args);
-	}
-
-	private ListModelAdapterUITest() {
-		super();
-	}
-
-	private void exec(@SuppressWarnings("unused") String[] args) throws Exception {
-		this.taskListHolder = new SimplePropertyValueModel<TaskList>(new TaskList());
-		this.openWindow();
-	}
-
-	private void openWindow() {
-		JFrame window = new JFrame(this.getClass().getName());
-		window.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		window.addWindowListener(this.buildWindowListener());
-		window.getContentPane().add(this.buildMainPanel(), "Center");
-		window.setSize(800, 400);
-		window.setVisible(true);
-	}
-
-	private WindowListener buildWindowListener() {
-		return new WindowAdapter() {
-			@Override
-			public void windowClosing(WindowEvent e) {
-				e.getWindow().setVisible(false);
-				System.exit(0);
-			}
-		};
-	}
-
-	private Component buildMainPanel() {
-		JPanel mainPanel = new JPanel(new BorderLayout());
-		mainPanel.add(this.buildTaskListPanel(), BorderLayout.CENTER);
-		mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH);
-		return mainPanel;
-	}
-
-	private Component buildTaskListPanel() {
-		JPanel taskListPanel = new JPanel(new GridLayout(0, 1));
-		taskListPanel.add(this.buildPrimitiveTaskListPanel());
-		taskListPanel.add(this.buildDisplayableTaskListPanel());
-		return taskListPanel;
-	}
-
-	private Component buildPrimitiveTaskListPanel() {
-		JPanel taskListPanel = new JPanel(new GridLayout(1, 0));
-		taskListPanel.add(this.buildUnsortedPrimitiveListPanel());
-		taskListPanel.add(this.buildStandardSortedPrimitiveListPanel());
-		taskListPanel.add(this.buildCustomSortedPrimitiveListPanel());
-		return taskListPanel;
-	}
-
-	private Component buildDisplayableTaskListPanel() {
-		JPanel taskListPanel = new JPanel(new GridLayout(1, 0));
-		taskListPanel.add(this.buildUnsortedDisplayableListPanel());
-		taskListPanel.add(this.buildStandardSortedDisplayableListPanel());
-		taskListPanel.add(this.buildCustomSortedDisplayableListPanel());
-		return taskListPanel;
-	}
-
-	private Component buildUnsortedPrimitiveListPanel() {
-		return this.buildListPanel("primitive unsorted", this.buildUnsortedPrimitiveListModel());
-	}
-
-	private Component buildStandardSortedPrimitiveListPanel() {
-		return this.buildListPanel("primitive sorted", this.buildStandardSortedPrimitiveListModel());
-	}
-
-	private Component buildCustomSortedPrimitiveListPanel() {
-		return this.buildListPanel("primitive reverse sorted", this.buildCustomSortedPrimitiveListModel());
-	}
-
-	private Component buildUnsortedDisplayableListPanel() {
-		return this.buildListPanel("displayable unsorted", this.buildUnsortedDisplayableListModel());
-	}
-
-	private Component buildStandardSortedDisplayableListPanel() {
-		return this.buildListPanel("displayable sorted", this.buildStandardSortedDisplayableListModel());
-	}
-
-	private Component buildCustomSortedDisplayableListPanel() {
-		return this.buildListPanel("displayable reverse sorted", this.buildCustomSortedDisplayableListModel());
-	}
-
-	private ListModel buildUnsortedPrimitiveListModel() {
-		return new ListModelAdapter(this.buildPrimitiveTaskListAdapter());
-	}
-
-	private ListModel buildStandardSortedPrimitiveListModel() {
-		return new ListModelAdapter(new SortedListValueModelWrapper<String>(this.buildPrimitiveTaskListAdapter()));
-	}
-
-	private ListModel buildCustomSortedPrimitiveListModel() {
-		return new ListModelAdapter(new SortedListValueModelWrapper<String>(this.buildPrimitiveTaskListAdapter(), this.buildCustomStringComparator()));
-	}
-
-	private ListModel buildUnsortedDisplayableListModel() {
-		return new ListModelAdapter(this.buildDisplayableTaskListAdapter());
-	}
-
-	private ListModel buildStandardSortedDisplayableListModel() {
-		return new ListModelAdapter(new SortedListValueModelWrapper<Task>(this.buildDisplayableTaskListAdapter()));
-	}
-
-	private ListModel buildCustomSortedDisplayableListModel() {
-		return new ListModelAdapter(new SortedListValueModelWrapper<Task>(this.buildDisplayableTaskListAdapter(), this.buildCustomTaskObjectComparator()));
-	}
-
-	private Component buildListPanel(String label, ListModel listModel) {
-		JPanel listPanel = new JPanel(new BorderLayout());
-		JLabel listLabel = new JLabel("  " + label);
-		listPanel.add(listLabel, BorderLayout.NORTH);
-
-		JList listBox = new JList();
-		listBox.setModel(listModel);
-		listBox.setDoubleBuffered(true);
-		listLabel.setLabelFor(listBox);
-		listPanel.add(new JScrollPane(listBox), BorderLayout.CENTER);
-		return listPanel;
-	}
-
-	private Comparator<String> buildCustomStringComparator() {
-		return new Comparator<String>() {
-			public int compare(String s1, String s2) {
-				return s2.compareTo(s1);
-			}
-		};
-	}
-
-	private Comparator<Task> buildCustomTaskObjectComparator() {
-		return new Comparator<Task>() {
-			public int compare(Task to1, Task to2) {
-				return to2.displayString().compareTo(to1.displayString());
-			}
-		};
-	}
-
-	private ListValueModel<String> buildPrimitiveTaskListAdapter() {
-		return new ListAspectAdapter<TaskList, String>(TaskList.TASK_NAMES_LIST, this.taskList()) {
-			@Override
-			protected ListIterator<String> listIterator_() {
-				return this.subject.taskNames();
-			}
-		};
-	}
-
-	private ListValueModel<Task> buildDisplayableTaskListAdapter() {
-		return new ListAspectAdapter<TaskList, Task>(TaskList.TASKS_LIST, this.taskList()) {
-			@Override
-			protected ListIterator<Task> listIterator_() {
-				return this.subject.tasks();
-			}
-		};
-	}
-
-	private Component buildControlPanel() {
-		JPanel controlPanel = new JPanel(new BorderLayout());
-		controlPanel.add(this.buildAddRemoveTaskPanel(), BorderLayout.CENTER);
-		controlPanel.add(this.buildClearButton(), BorderLayout.EAST);
-		return controlPanel;
-	}
-
-	private Component buildAddRemoveTaskPanel() {
-		JPanel addRemoveTaskPanel = new JPanel(new BorderLayout());
-		addRemoveTaskPanel.add(this.buildAddButton(), BorderLayout.WEST);
-		addRemoveTaskPanel.add(this.buildTaskTextField(), BorderLayout.CENTER);
-		addRemoveTaskPanel.add(this.buildRemoveButton(), BorderLayout.EAST);
-		return addRemoveTaskPanel;
-	}
-
-	private String getTask() {
-		return this.taskTextField.getText();
-	}
-
-	private TaskList taskList() {
-		return this.taskListHolder.getValue();
-	}
-
-	void addTask() {
-		String task = this.getTask();
-		if (task.length() != 0) {
-			this.taskList().addTask(task);
-		}
-	}
-
-	void removeTask() {
-		String task = this.getTask();
-		if (task.length() != 0) {
-			this.taskList().removeTask(task);
-		}
-	}
-
-	void clearTasks() {
-		this.taskList().clearTasks();
-	}
-
-	private TextField buildTaskTextField() {
-		this.taskTextField = new TextField();
-		return this.taskTextField;
-	}
-
-	private JButton buildAddButton() {
-		return new JButton(this.buildAddAction());
-	}
-
-	private Action buildAddAction() {
-		Action action = new AbstractAction("add") {
-			public void actionPerformed(ActionEvent event) {
-				ListModelAdapterUITest.this.addTask();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	private JButton buildRemoveButton() {
-		return new JButton(this.buildRemoveAction());
-	}
-
-	private Action buildRemoveAction() {
-		Action action = new AbstractAction("remove") {
-			public void actionPerformed(ActionEvent event) {
-				ListModelAdapterUITest.this.removeTask();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	private JButton buildClearButton() {
-		return new JButton(this.buildClearAction());
-	}
-
-	private Action buildClearAction() {
-		Action action = new AbstractAction("clear") {
-			public void actionPerformed(ActionEvent event) {
-				ListModelAdapterUITest.this.clearTasks();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	public class TaskList extends AbstractModel {
-		private List<String> taskNames = new ArrayList<String>();
-		private List<Task> taskObjects = new ArrayList<Task>();
-		public static final String TASK_NAMES_LIST = "taskNames";
-		public static final String TASKS_LIST = "tasks";
-		TaskList() {
-			super();
-		}
-		public ListIterator<String> taskNames() {
-			return this.taskNames.listIterator();
-		}
-		public ListIterator<Task> tasks() {
-			return this.taskObjects.listIterator();
-		}
-		public void addTask(String taskName) {
-			int index = this.taskNames.size();
-			this.taskNames.add(index, taskName);
-			this.fireItemAdded(TASK_NAMES_LIST, index, taskName);
-	
-			Task taskObject = new Task(taskName);
-			this.taskObjects.add(index, taskObject);
-			this.fireItemAdded(TASKS_LIST, index, taskObject);
-		}		
-		public void removeTask(String taskName) {
-			int index = this.taskNames.indexOf(taskName);
-			if (index != -1) {
-				Object removedTask = this.taskNames.remove(index);
-				this.fireItemRemoved(TASK_NAMES_LIST, index, removedTask);
-				// assume the indexes match...
-				Object removedTaskObject = this.taskObjects.remove(index);
-				this.fireItemRemoved(TASKS_LIST, index, removedTaskObject);
-			}
-		}
-		public void clearTasks() {
-			this.taskNames.clear();
-			this.fireListChanged(TASK_NAMES_LIST, this.taskNames);
-			this.taskObjects.clear();
-			this.fireListChanged(TASKS_LIST, this.taskObjects);
-		}
-	}
-
-	public class Task extends AbstractModel implements Displayable {
-		private String name;
-		private Date creationTimeStamp;
-		public Task(String name) {
-			this.name = name;
-			this.creationTimeStamp = new Date();
-		}
-		public String displayString() {
-			return this.name + ": " + this.creationTimeStamp.getTime();
-		}
-		public Icon icon() {
-			return null;
-		}
-		public String getName() {
-			return this.name;
-		}
-		public void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(DISPLAY_STRING_PROPERTY, old, name);
-		}
-		@Override
-		public String toString() {
-			return StringTools.buildToStringFor(this, this.displayString());
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ListSpinnerModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ListSpinnerModelAdapterTests.java
deleted file mode 100644
index 087fefc..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ListSpinnerModelAdapterTests.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import javax.swing.SpinnerModel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ListSpinnerModelAdapter;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ListSpinnerModelAdapterTests extends TestCase {
-	private WritablePropertyValueModel<Object> valueHolder;
-	private SpinnerModel spinnerModelAdapter;
-	boolean eventFired;
-	private static final String[] VALUE_LIST = {"red", "green", "blue"};
-	private static final String DEFAULT_VALUE = VALUE_LIST[0];
-
-	public ListSpinnerModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.valueHolder = new SimplePropertyValueModel<Object>(DEFAULT_VALUE);
-		this.spinnerModelAdapter = new ListSpinnerModelAdapter(this.valueHolder, VALUE_LIST) {
-			@Override
-			protected PropertyChangeListener buildValueChangeListener() {
-				return this.buildValueChangeListener_();
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSetValueSpinnerModel() throws Exception {
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				ListSpinnerModelAdapterTests.this.eventFired = true;
-			}
-		});
-		assertEquals(DEFAULT_VALUE, this.valueHolder.getValue());
-		this.spinnerModelAdapter.setValue(VALUE_LIST[2]);
-		assertTrue(this.eventFired);
-		assertEquals(VALUE_LIST[2], this.valueHolder.getValue());
-	}
-
-	public void testSetValueValueHolder() throws Exception {
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				ListSpinnerModelAdapterTests.this.eventFired = true;
-			}
-		});
-		assertEquals(DEFAULT_VALUE, this.spinnerModelAdapter.getValue());
-		this.valueHolder.setValue(VALUE_LIST[2]);
-		assertTrue(this.eventFired);
-		assertEquals(VALUE_LIST[2], this.spinnerModelAdapter.getValue());
-	}
-
-	public void testDefaultValue() throws Exception {
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				ListSpinnerModelAdapterTests.this.eventFired = true;
-			}
-		});
-		assertEquals(DEFAULT_VALUE, this.spinnerModelAdapter.getValue());
-
-		this.valueHolder.setValue(VALUE_LIST[2]);
-		assertTrue(this.eventFired);
-		assertEquals(VALUE_LIST[2], this.spinnerModelAdapter.getValue());
-
-		this.eventFired = false;
-		this.valueHolder.setValue(null);
-		assertTrue(this.eventFired);
-		assertEquals(VALUE_LIST[0], this.spinnerModelAdapter.getValue());
-	}
-
-	public void testHasListeners() throws Exception {
-		SimplePropertyValueModel<Object> localValueHolder = (SimplePropertyValueModel<Object>) this.valueHolder;
-		assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.spinnerModelAdapter);
-
-		ChangeListener listener = new TestChangeListener();
-		this.spinnerModelAdapter.addChangeListener(listener);
-		assertTrue(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasListeners(this.spinnerModelAdapter);
-
-		this.spinnerModelAdapter.removeChangeListener(listener);
-		assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.spinnerModelAdapter);
-	}
-
-	private void verifyHasNoListeners(SpinnerModel adapter) throws Exception {
-		assertEquals(0, ((ListSpinnerModelAdapter) adapter).getChangeListeners().length);
-	}
-
-	private void verifyHasListeners(Object adapter) throws Exception {
-		assertFalse(((ListSpinnerModelAdapter) adapter).getChangeListeners().length == 0);
-	}
-
-
-	private class TestChangeListener implements ChangeListener {
-		TestChangeListener() {
-			super();
-		}
-		public void stateChanged(ChangeEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/NumberSpinnerModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/NumberSpinnerModelAdapterTests.java
deleted file mode 100644
index 1debef8..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/NumberSpinnerModelAdapterTests.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import javax.swing.SpinnerModel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.NumberSpinnerModelAdapter;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class NumberSpinnerModelAdapterTests extends TestCase {
-	private WritablePropertyValueModel<Number> valueHolder;
-	private SpinnerModel spinnerModelAdapter;
-	boolean eventFired;
-
-	public NumberSpinnerModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.valueHolder = new SimplePropertyValueModel<Number>(new Integer(0));
-		this.spinnerModelAdapter = new NumberSpinnerModelAdapter(this.valueHolder, -33, 33, 1) {
-			@Override
-			protected PropertyChangeListener buildNumberChangeListener() {
-				return this.buildNumberChangeListener_();
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSetValueSpinnerModel() throws Exception {
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				NumberSpinnerModelAdapterTests.this.eventFired = true;
-			}
-		});
-		this.spinnerModelAdapter.setValue(new Integer(5));
-		assertTrue(this.eventFired);
-		assertEquals(new Integer(5), this.valueHolder.getValue());
-	}
-
-	public void testSetValueValueHolder() throws Exception {
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				NumberSpinnerModelAdapterTests.this.eventFired = true;
-			}
-		});
-		assertEquals(new Integer(0), this.spinnerModelAdapter.getValue());
-		this.valueHolder.setValue(new Integer(7));
-		assertTrue(this.eventFired);
-		assertEquals(new Integer(7), this.spinnerModelAdapter.getValue());
-	}
-
-	public void testDefaultValue() throws Exception {
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				NumberSpinnerModelAdapterTests.this.eventFired = true;
-			}
-		});
-		assertEquals(new Integer(0), this.spinnerModelAdapter.getValue());
-		this.valueHolder.setValue(null);
-		assertTrue(this.eventFired);
-		assertEquals(new Integer(-33), this.spinnerModelAdapter.getValue());
-	}
-
-	public void testHasListeners() throws Exception {
-		SimplePropertyValueModel<Number> localValueHolder = (SimplePropertyValueModel<Number>) this.valueHolder;
-		assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.spinnerModelAdapter);
-
-		ChangeListener listener = new TestChangeListener();
-		this.spinnerModelAdapter.addChangeListener(listener);
-		assertTrue(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasListeners(this.spinnerModelAdapter);
-
-		this.spinnerModelAdapter.removeChangeListener(listener);
-		assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.spinnerModelAdapter);
-	}
-
-	private void verifyHasNoListeners(SpinnerModel adapter) throws Exception {
-		assertEquals(0, ((NumberSpinnerModelAdapter) adapter).getChangeListeners().length);
-	}
-
-	private void verifyHasListeners(Object adapter) throws Exception {
-		assertFalse(((NumberSpinnerModelAdapter) adapter).getChangeListeners().length == 0);
-	}
-
-	public void testNullInitialValue() {
-		this.valueHolder = new SimplePropertyValueModel<Number>();
-		this.spinnerModelAdapter = new NumberSpinnerModelAdapter(this.valueHolder, new Integer(-33), new Integer(33), new Integer(1), new Integer(0)) {
-			@Override
-			protected PropertyChangeListener buildNumberChangeListener() {
-				return this.buildNumberChangeListener_();
-			}
-		};
-
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				NumberSpinnerModelAdapterTests.this.eventFired = true;
-			}
-		});
-		assertEquals(new Integer(0), this.spinnerModelAdapter.getValue());
-		this.valueHolder.setValue(new Integer(7));
-		assertTrue(this.eventFired);
-		assertEquals(new Integer(7), this.spinnerModelAdapter.getValue());
-	}
-
-
-	// ********** inner class **********
-	private class TestChangeListener implements ChangeListener {
-		TestChangeListener() {
-			super();
-		}
-		public void stateChanged(ChangeEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ObjectListSelectionModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ObjectListSelectionModelTests.java
deleted file mode 100644
index 8a60f65..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ObjectListSelectionModelTests.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import javax.swing.DefaultListModel;
-import javax.swing.ListModel;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.model.value.swing.ObjectListSelectionModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class ObjectListSelectionModelTests extends TestCase {
-	private DefaultListModel listModel;
-	private ObjectListSelectionModel selectionModel;
-
-	public ObjectListSelectionModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.listModel = this.buildListModel();
-		this.selectionModel = this.buildSelectionModel(this.listModel);
-	}
-
-	private DefaultListModel buildListModel() {
-		DefaultListModel lm = new DefaultListModel();
-		lm.addElement("foo");
-		lm.addElement("bar");
-		lm.addElement("baz");
-		return lm;
-	}
-
-	private ObjectListSelectionModel buildSelectionModel(ListModel lm) {
-		return new ObjectListSelectionModel(lm);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testListDataListener() {
-		this.selectionModel.addListSelectionListener(this.buildListSelectionListener());
-		this.selectionModel.setSelectionInterval(0, 0);
-		assertEquals("foo", this.selectionModel.selectedValue());
-		this.listModel.set(0, "jar");
-		assertEquals("jar", this.selectionModel.selectedValue());
-	}
-
-	public void testGetSelectedValue() {
-		this.selectionModel.setSelectionInterval(0, 0);
-		assertEquals("foo", this.selectionModel.selectedValue());
-	}
-
-	public void testGetSelectedValues() {
-		this.selectionModel.setSelectionInterval(0, 0);
-		this.selectionModel.addSelectionInterval(2, 2);
-		assertEquals(2, this.selectionModel.selectedValues().length);
-		assertTrue(ArrayTools.contains(this.selectionModel.selectedValues(), "foo"));
-		assertTrue(ArrayTools.contains(this.selectionModel.selectedValues(), "baz"));
-	}
-
-	public void testSetSelectedValue() {
-		this.selectionModel.setSelectedValue("foo");
-		assertEquals(0, this.selectionModel.getMinSelectionIndex());
-		assertEquals(0, this.selectionModel.getMaxSelectionIndex());
-	}
-
-	public void testSetSelectedValues() {
-		this.selectionModel.setSelectedValues(new Object[] {"foo", "baz"});
-		assertEquals(0, this.selectionModel.getMinSelectionIndex());
-		assertEquals(2, this.selectionModel.getMaxSelectionIndex());
-	}
-
-	public void testAddSelectedValue() {
-		this.listModel.addElement("joo");
-		this.listModel.addElement("jar");
-		this.listModel.addElement("jaz");
-		this.selectionModel.setSelectedValue("foo");
-		this.selectionModel.addSelectedValue("jaz");
-		assertEquals(0, this.selectionModel.getMinSelectionIndex());
-		assertEquals(5, this.selectionModel.getMaxSelectionIndex());
-		assertTrue(this.selectionModel.isSelectedIndex(0));
-		assertFalse(this.selectionModel.isSelectedIndex(1));
-		assertFalse(this.selectionModel.isSelectedIndex(2));
-		assertFalse(this.selectionModel.isSelectedIndex(3));
-		assertFalse(this.selectionModel.isSelectedIndex(4));
-		assertTrue(this.selectionModel.isSelectedIndex(5));
-	}
-
-	public void testAddSelectedValues() {
-		this.listModel.addElement("joo");
-		this.listModel.addElement("jar");
-		this.listModel.addElement("jaz");
-		this.selectionModel.setSelectedValue("foo");
-		this.selectionModel.addSelectedValues(new Object[] {"bar", "jar"});
-		assertEquals(0, this.selectionModel.getMinSelectionIndex());
-		assertEquals(4, this.selectionModel.getMaxSelectionIndex());
-		assertTrue(this.selectionModel.isSelectedIndex(0));
-		assertTrue(this.selectionModel.isSelectedIndex(1));
-		assertFalse(this.selectionModel.isSelectedIndex(2));
-		assertFalse(this.selectionModel.isSelectedIndex(3));
-		assertTrue(this.selectionModel.isSelectedIndex(4));
-		assertFalse(this.selectionModel.isSelectedIndex(5));
-	}
-
-	public void testRemoveSelectedValue() {
-		this.listModel.addElement("joo");
-		this.listModel.addElement("jar");
-		this.listModel.addElement("jaz");
-		this.selectionModel.setSelectedValues(new Object[] {"foo", "baz", "jar"});
-		this.selectionModel.removeSelectedValue("jar");
-		assertEquals(0, this.selectionModel.getMinSelectionIndex());
-		assertEquals(2, this.selectionModel.getMaxSelectionIndex());
-		assertTrue(this.selectionModel.isSelectedIndex(0));
-		assertFalse(this.selectionModel.isSelectedIndex(1));
-		assertTrue(this.selectionModel.isSelectedIndex(2));
-		assertFalse(this.selectionModel.isSelectedIndex(3));
-		assertFalse(this.selectionModel.isSelectedIndex(4));
-		assertFalse(this.selectionModel.isSelectedIndex(5));
-	}
-
-	public void testRemoveSelectedValues() {
-		this.listModel.addElement("joo");
-		this.listModel.addElement("jar");
-		this.listModel.addElement("jaz");
-		this.selectionModel.setSelectedValues(new Object[] {"foo", "baz", "joo", "jar"});
-		this.selectionModel.removeSelectedValues(new Object[] {"foo", "joo"});
-		assertEquals(2, this.selectionModel.getMinSelectionIndex());
-		assertEquals(4, this.selectionModel.getMaxSelectionIndex());
-		assertFalse(this.selectionModel.isSelectedIndex(0));
-		assertFalse(this.selectionModel.isSelectedIndex(1));
-		assertTrue(this.selectionModel.isSelectedIndex(2));
-		assertFalse(this.selectionModel.isSelectedIndex(3));
-		assertTrue(this.selectionModel.isSelectedIndex(4));
-		assertFalse(this.selectionModel.isSelectedIndex(5));
-	}
-
-	public void testGetAnchorSelectedValue() {
-		this.selectionModel.setAnchorSelectionIndex(1);
-		assertEquals("bar", this.selectionModel.getAnchorSelectedValue());
-	}
-
-	public void testGetLeadSelectedValue() {
-		this.selectionModel.setSelectedValue("bar");
-		assertEquals("bar", this.selectionModel.getLeadSelectedValue());
-		this.selectionModel.setSelectedValues(new Object[] {"foo", "baz"});
-		assertEquals("baz", this.selectionModel.getLeadSelectedValue());
-	}
-
-	public void testGetMinMaxSelectedValue() {
-		this.listModel.addElement("joo");
-		this.listModel.addElement("jar");
-		this.listModel.addElement("jaz");
-		this.selectionModel.setSelectedValue("foo");
-		this.selectionModel.addSelectedValues(new Object[] {"bar", "jar"});
-		assertEquals("foo", this.selectionModel.getMinSelectedValue());
-		assertEquals("jar", this.selectionModel.getMaxSelectedValue());
-	}
-
-	public void testValueIsSelected() {
-		this.listModel.addElement("joo");
-		this.listModel.addElement("jar");
-		this.listModel.addElement("jaz");
-		this.selectionModel.setSelectedValue("foo");
-		this.selectionModel.addSelectedValues(new Object[] {"bar", "jar"});
-		assertTrue(this.selectionModel.valueIsSelected("foo"));
-		assertTrue(this.selectionModel.valueIsSelected("bar"));
-		assertTrue(this.selectionModel.valueIsSelected("jar"));
-		assertFalse(this.selectionModel.valueIsSelected("baz"));
-	}
-
-	public void testHasListeners() throws Exception {
-		ListSelectionListener listener = this.buildListSelectionListener();
-		assertEquals(0, this.listModel.getListDataListeners().length);
-		this.selectionModel.addListSelectionListener(listener);
-		assertEquals(1, this.listModel.getListDataListeners().length);
-		this.selectionModel.removeListSelectionListener(listener);
-		assertEquals(0, this.listModel.getListDataListeners().length);
-	}
-
-	private ListSelectionListener buildListSelectionListener() {
-		return new ListSelectionListener() {
-			public void valueChanged(ListSelectionEvent e) {
-				// do nothing for now...
-			}
-		};
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/PrimitiveListTreeModelTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/PrimitiveListTreeModelTests.java
deleted file mode 100644
index bbeac0e..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/PrimitiveListTreeModelTests.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.ListIterator;
-import javax.swing.event.TreeModelEvent;
-import javax.swing.event.TreeModelListener;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.TreeModel;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyListIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.PrimitiveListTreeModel;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class PrimitiveListTreeModelTests extends TestCase {
-	TestModel testModel;
-	private TreeModel treeModel;
-
-	public PrimitiveListTreeModelTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.testModel = this.buildTestModel();
-		this.treeModel = this.buildTreeModel();
-	}
-
-	private TestModel buildTestModel() {
-		return new TestModel();
-	}
-
-	private TreeModel buildTreeModel() {
-		return new PrimitiveListTreeModel(this.buildListValueModel()) {
-			@Override
-			protected void primitiveChanged(int index, Object newValue) {
-				if ( ! newValue.equals("")) {
-					PrimitiveListTreeModelTests.this.testModel.replaceName(index, (String) newValue);
-				}
-			}
-			@Override
-			protected ListChangeListener buildListChangeListener() {
-				return this.buildListChangeListener_();
-			}
-		};
-	}
-
-	private ListValueModel<?> buildListValueModel() {
-		return new ListAspectAdapter<TestModel, String>(TestModel.NAMES_LIST, this.testModel) {
-			@Override
-			protected ListIterator<String> listIterator_() {
-				return this.subject.names();
-			}
-			@Override
-			public String get(int index) {
-				return this.subject.getName(index);
-			}
-			@Override
-			public int size() {
-				return this.subject.namesSize();
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testAddPrimitive() {
-		this.treeModel.addTreeModelListener(new TestTreeModelListener() {
-			@Override
-			public void treeNodesInserted(TreeModelEvent e) {
-				PrimitiveListTreeModelTests.this.verifyTreeModelEvent(e, new int[] {0}, new String[] {"foo"});
-			}
-		});
-		this.testModel.addName("foo");
-	}
-
-	public void testRemovePrimitive() {
-		this.testModel.addName("foo");
-		this.testModel.addName("bar");
-		this.testModel.addName("baz");
-		this.treeModel.addTreeModelListener(new TestTreeModelListener() {
-			@Override
-			public void treeNodesRemoved(TreeModelEvent e) {
-				PrimitiveListTreeModelTests.this.verifyTreeModelEvent(e, new int[] {1}, new String[] {"bar"});
-			}
-		});
-		String name = this.testModel.removeName(1);
-		assertEquals("bar", name);
-	}
-
-	public void testReplacePrimitive() {
-		this.testModel.addName("foo");
-		this.testModel.addName("bar");
-		this.testModel.addName("baz");
-		this.treeModel.addTreeModelListener(new TestTreeModelListener() {
-			@Override
-			public void treeNodesChanged(TreeModelEvent e) {
-				PrimitiveListTreeModelTests.this.verifyTreeModelEvent(e, new int[] {1}, new String[] {"jar"});
-			}
-		});
-		String name = this.testModel.replaceName(1, "jar");
-		assertEquals("bar", name);
-	}
-
-	void verifyTreeModelEvent(TreeModelEvent e, int[] expectedChildIndices, String[] expectedNames) {
-		assertTrue(Arrays.equals(expectedChildIndices, e.getChildIndices()));
-		Object[] actualChildren = e.getChildren();
-		assertEquals(expectedNames.length, actualChildren.length);
-		for (int i = 0; i < expectedNames.length; i++) {
-			DefaultMutableTreeNode node = (DefaultMutableTreeNode) actualChildren[i];
-			assertEquals(expectedNames[i], node.getUserObject());
-		}
-		assertEquals(1, e.getPath().length);
-		assertEquals(this.treeModel.getRoot(), e.getPath()[0]);
-		assertEquals(this.treeModel, e.getSource());
-	}
-
-
-// ********** inner classes **********
-
-	class TestModel extends AbstractModel {
-		private final List<String> names;
-			static final String NAMES_LIST = "names";
-	
-		TestModel() {
-			super();
-			this.names = new ArrayList<String>();
-		}
-	
-		public ListIterator<String> names() {
-			return new ReadOnlyListIterator<String>(this.names);
-		}
-		public int namesSize() {
-			return this.names.size();
-		}
-		public String getName(int index) {
-			return this.names.get(index);
-		}
-		public void addName(int index, String name) {
-			this.addItemToList(index, name, this.names, NAMES_LIST);
-		}
-		public void addName(String name) {
-			this.addName(this.namesSize(), name);
-		}
-		public void addNames(int index, List<String> list) {
-			this.addItemsToList(index, this.names, list, NAMES_LIST);
-		}
-		public void addNames(List<String> list) {
-			this.addNames(this.namesSize(), list);
-		}
-		public String removeName(int index) {
-			return this.removeItemFromList(index, this.names, NAMES_LIST);
-		}
-		public List<String> removeNames(int index, int length) {
-			return this.removeItemsFromList(index, length, this.names, NAMES_LIST);
-		}
-		public String replaceName(int index, String newName) {
-			return this.setItemInList(index, newName, this.names, NAMES_LIST);
-		}
-	}
-	
-	
-	public class TestTreeModelListener implements TreeModelListener {
-		public void treeNodesChanged(TreeModelEvent e) {
-			fail("unexpected event");
-		}
-		public void treeNodesInserted(TreeModelEvent e) {
-			fail("unexpected event");
-		}
-		public void treeNodesRemoved(TreeModelEvent e) {
-			fail("unexpected event");
-		}
-		public void treeStructureChanged(TreeModelEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/RadioButtonModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/RadioButtonModelAdapterTests.java
deleted file mode 100644
index 908f4be..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/RadioButtonModelAdapterTests.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import javax.swing.ButtonModel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.EventListenerList;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.RadioButtonModelAdapter;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class RadioButtonModelAdapterTests extends TestCase {
-	private WritablePropertyValueModel<Object> valueHolder;
-
-	private ButtonModel redButtonModelAdapter;
-	private ChangeListener redListener;
-	boolean redEventFired;
-
-	private ButtonModel greenButtonModelAdapter;
-	private ChangeListener greenListener;
-	boolean greenEventFired;
-
-	private ButtonModel blueButtonModelAdapter;
-	private ChangeListener blueListener;
-	boolean blueEventFired;
-
-//	private ButtonGroup buttonGroup;	// DO NOT use a ButtonGroup
-
-	private static final String RED = "red";
-	private static final String GREEN = "green";
-	private static final String BLUE = "blue";
-
-	public RadioButtonModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.valueHolder = new SimplePropertyValueModel<Object>(null);
-//		buttonGroup = new ButtonGroup();
-
-		this.redButtonModelAdapter = this.buildButtonModel(this.valueHolder, RED);
-//		this.redButtonModelAdapter.setGroup(buttonGroup);
-		this.redListener = new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				RadioButtonModelAdapterTests.this.redEventFired = true;
-			}
-		};
-
-		this.greenButtonModelAdapter = this.buildButtonModel(this.valueHolder, GREEN);
-//		this.greenButtonModelAdapter.setGroup(buttonGroup);
-		this.greenListener = new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				RadioButtonModelAdapterTests.this.greenEventFired = true;
-			}
-		};
-
-		this.blueButtonModelAdapter = this.buildButtonModel(this.valueHolder, BLUE);
-//		this.blueButtonModelAdapter.setGroup(buttonGroup);
-		this.blueListener = new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				RadioButtonModelAdapterTests.this.blueEventFired = true;
-			}
-		};
-		
-		this.clearFlags();
-	}
-
-	private ButtonModel buildButtonModel(WritablePropertyValueModel<Object> pvm, Object buttonValue) {
-		return new RadioButtonModelAdapter(pvm, buttonValue) {
-			@Override
-			protected PropertyChangeListener buildBooleanChangeListener() {
-				return this.buildBooleanChangeListener_();
-			}
-		};
-	}
-
-	private void listenToModelAdapters() {
-		this.redButtonModelAdapter.addChangeListener(this.redListener);
-		this.greenButtonModelAdapter.addChangeListener(this.greenListener);
-		this.blueButtonModelAdapter.addChangeListener(this.blueListener);
-	}
-
-	private void clearFlags() {
-		this.redEventFired = false;
-		this.greenEventFired = false;
-		this.blueEventFired = false;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSetSelected() throws Exception {
-		this.listenToModelAdapters();
-
-		this.greenButtonModelAdapter.setSelected(true);
-		assertFalse(this.redEventFired);
-		assertTrue(this.greenEventFired);
-		assertFalse(this.blueEventFired);
-		assertEquals(GREEN, this.valueHolder.getValue());
-
-		this.clearFlags();
-		this.blueButtonModelAdapter.setSelected(true);
-		assertFalse(this.redEventFired);
-		assertTrue(this.greenEventFired);
-		assertTrue(this.blueEventFired);
-		assertEquals(BLUE, this.valueHolder.getValue());
-
-		this.clearFlags();
-		this.redButtonModelAdapter.setSelected(true);
-		assertTrue(this.redEventFired);
-		assertFalse(this.greenEventFired);
-		assertTrue(this.blueEventFired);
-		assertEquals(RED, this.valueHolder.getValue());
-	}
-
-	public void testSetValue() throws Exception {
-		this.listenToModelAdapters();
-
-		this.greenButtonModelAdapter.setSelected(true);
-
-		this.clearFlags();
-		this.valueHolder.setValue(BLUE);
-		assertFalse(this.redEventFired);
-		assertTrue(this.greenEventFired);
-		assertTrue(this.blueEventFired);
-		assertFalse(this.redButtonModelAdapter.isSelected());
-		assertFalse(this.greenButtonModelAdapter.isSelected());
-		assertTrue(this.blueButtonModelAdapter.isSelected());
-
-		this.clearFlags();
-		this.valueHolder.setValue(RED);
-		assertTrue(this.redEventFired);
-		assertFalse(this.greenEventFired);
-		assertTrue(this.blueEventFired);
-		assertTrue(this.redButtonModelAdapter.isSelected());
-		assertFalse(this.greenButtonModelAdapter.isSelected());
-		assertFalse(this.blueButtonModelAdapter.isSelected());
-	}
-
-	public void testDefaultValue() throws Exception {
-		this.listenToModelAdapters();
-
-		this.valueHolder.setValue(GREEN);
-		assertFalse(this.redButtonModelAdapter.isSelected());
-		assertTrue(this.greenButtonModelAdapter.isSelected());
-		assertFalse(this.blueButtonModelAdapter.isSelected());
-
-		this.clearFlags();
-		this.valueHolder.setValue(null);
-		assertFalse(this.redEventFired);
-		assertTrue(this.greenEventFired);
-		assertFalse(this.blueEventFired);
-		assertFalse(this.redButtonModelAdapter.isSelected());
-		assertFalse(this.greenButtonModelAdapter.isSelected());
-		assertFalse(this.blueButtonModelAdapter.isSelected());
-
-		this.clearFlags();
-		this.valueHolder.setValue(BLUE);
-		assertFalse(this.redEventFired);
-		assertFalse(this.greenEventFired);
-		assertTrue(this.blueEventFired);
-		assertFalse(this.redButtonModelAdapter.isSelected());
-		assertFalse(this.greenButtonModelAdapter.isSelected());
-		assertTrue(this.blueButtonModelAdapter.isSelected());
-	}
-
-	public void testHasListeners() throws Exception {
-		SimplePropertyValueModel<Object> localValueHolder = (SimplePropertyValueModel<Object>) this.valueHolder;
-		assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.redButtonModelAdapter);
-		this.verifyHasNoListeners(this.greenButtonModelAdapter);
-		this.verifyHasNoListeners(this.blueButtonModelAdapter);
-
-		ChangeListener listener = new TestChangeListener();
-		this.redButtonModelAdapter.addChangeListener(listener);
-		assertTrue(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasListeners(this.redButtonModelAdapter);
-		this.verifyHasNoListeners(this.greenButtonModelAdapter);
-		this.verifyHasNoListeners(this.blueButtonModelAdapter);
-
-		this.redButtonModelAdapter.removeChangeListener(listener);
-		assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.redButtonModelAdapter);
-		this.verifyHasNoListeners(this.greenButtonModelAdapter);
-		this.verifyHasNoListeners(this.blueButtonModelAdapter);
-	}
-
-	private void verifyHasNoListeners(Object model) throws Exception {
-		EventListenerList listenerList = (EventListenerList) ReflectionTools.getFieldValue(model, "listenerList");
-		assertEquals(0, listenerList.getListenerList().length);
-	}
-
-	private void verifyHasListeners(Object model) throws Exception {
-		EventListenerList listenerList = (EventListenerList) ReflectionTools.getFieldValue(model, "listenerList");
-		assertFalse(listenerList.getListenerList().length == 0);
-	}
-
-
-	private class TestChangeListener implements ChangeListener {
-		TestChangeListener() {
-			super();
-		}
-		public void stateChanged(ChangeEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/RadioButtonModelAdapterUITest.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/RadioButtonModelAdapterUITest.java
deleted file mode 100644
index fba6f62..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/RadioButtonModelAdapterUITest.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.ButtonModel;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.WindowConstants;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.RadioButtonModelAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-
-/**
- * Play around with a set of radio buttons.
- */
-@SuppressWarnings("nls")
-public class RadioButtonModelAdapterUITest {
-
-	private TestModel testModel;
-	private WritablePropertyValueModel<TestModel> testModelHolder;
-	private WritablePropertyValueModel<Object> colorHolder;
-	private ButtonModel redButtonModel;
-	private ButtonModel greenButtonModel;
-	private ButtonModel blueButtonModel;
-
-	public static void main(String[] args) throws Exception {
-		new RadioButtonModelAdapterUITest().exec();
-	}
-
-	private RadioButtonModelAdapterUITest() {
-		super();
-	}
-
-	private void exec() throws Exception {
-		this.testModel = new TestModel();
-		this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel);
-		this.colorHolder = this.buildColorHolder(this.testModelHolder);
-		this.redButtonModel = this.buildRadioButtonModelAdapter(this.colorHolder, TestModel.RED);
-		this.greenButtonModel = this.buildRadioButtonModelAdapter(this.colorHolder, TestModel.GREEN);
-		this.blueButtonModel = this.buildRadioButtonModelAdapter(this.colorHolder, TestModel.BLUE);
-		this.openWindow();
-	}
-
-	private WritablePropertyValueModel<Object> buildColorHolder(PropertyValueModel<TestModel> subjectHolder) {
-		return new PropertyAspectAdapter<TestModel, Object>(subjectHolder, TestModel.COLOR_PROPERTY) {
-			@Override
-			protected Object buildValue_() {
-				return this.subject.getColor();
-			}
-			@Override
-			protected void setValue_(Object value) {
-				this.subject.setColor((String) value);
-			}
-		};
-	}
-
-	private ButtonModel buildRadioButtonModelAdapter(WritablePropertyValueModel<Object> colorPVM, String color) {
-		return new RadioButtonModelAdapter(colorPVM, color);
-	}
-
-	private void openWindow() {
-		JFrame window = new JFrame(this.getClass().getName());
-		window.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		window.addWindowListener(this.buildWindowListener());
-		window.getContentPane().add(this.buildMainPanel(), "Center");
-		window.setSize(400, 100);
-		window.setLocation(200, 200);
-		window.setVisible(true);
-	}
-
-	private WindowListener buildWindowListener() {
-		return new WindowAdapter() {
-			@Override
-			public void windowClosing(WindowEvent e) {
-				e.getWindow().setVisible(false);
-				System.exit(0);
-			}
-		};
-	}
-
-	private Component buildMainPanel() {
-		JPanel mainPanel = new JPanel(new BorderLayout());
-		mainPanel.add(this.buildRadioButtonPanel(), BorderLayout.NORTH);
-		mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH);
-		return mainPanel;
-	}
-
-	private Component buildRadioButtonPanel() {
-		JPanel taskListPanel = new JPanel(new GridLayout(1, 0));
-		taskListPanel.add(this.buildRedRadioButton());
-		taskListPanel.add(this.buildGreenRadioButton());
-		taskListPanel.add(this.buildBlueRadioButton());
-		return taskListPanel;
-	}
-
-	private JRadioButton buildRedRadioButton() {
-		JRadioButton radioButton = new JRadioButton();
-		radioButton.setText("red");
-		radioButton.setModel(this.redButtonModel);
-		return radioButton;
-	}
-
-	private JRadioButton buildGreenRadioButton() {
-		JRadioButton radioButton = new JRadioButton();
-		radioButton.setText("green");
-		radioButton.setModel(this.greenButtonModel);
-		return radioButton;
-	}
-
-	private JRadioButton buildBlueRadioButton() {
-		JRadioButton radioButton = new JRadioButton();
-		radioButton.setText("blue");
-		radioButton.setModel(this.blueButtonModel);
-		return radioButton;
-	}
-
-	private Component buildControlPanel() {
-		JPanel controlPanel = new JPanel(new GridLayout(1, 0));
-		controlPanel.add(this.buildResetColorButton());
-		controlPanel.add(this.buildClearModelButton());
-		controlPanel.add(this.buildRestoreModelButton());
-		controlPanel.add(this.buildPrintModelButton());
-		return controlPanel;
-	}
-
-	private JButton buildResetColorButton() {
-		return new JButton(this.buildResetColorAction());
-	}
-
-	private Action buildResetColorAction() {
-		Action action = new AbstractAction("reset color") {
-			public void actionPerformed(ActionEvent event) {
-				RadioButtonModelAdapterUITest.this.resetColor();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void resetColor() {
-		this.testModel.setColor(TestModel.DEFAULT_COLOR);
-	}
-
-	private JButton buildClearModelButton() {
-		return new JButton(this.buildClearModelAction());
-	}
-
-	private Action buildClearModelAction() {
-		Action action = new AbstractAction("clear model") {
-			public void actionPerformed(ActionEvent event) {
-				RadioButtonModelAdapterUITest.this.clearModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void clearModel() {
-		this.testModelHolder.setValue(null);
-	}
-
-	private JButton buildRestoreModelButton() {
-		return new JButton(this.buildRestoreModelAction());
-	}
-
-	private Action buildRestoreModelAction() {
-		Action action = new AbstractAction("restore model") {
-			public void actionPerformed(ActionEvent event) {
-				RadioButtonModelAdapterUITest.this.restoreModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void restoreModel() {
-		this.testModelHolder.setValue(this.testModel);
-	}
-
-	private JButton buildPrintModelButton() {
-		return new JButton(this.buildPrintModelAction());
-	}
-
-	private Action buildPrintModelAction() {
-		Action action = new AbstractAction("print model") {
-			public void actionPerformed(ActionEvent event) {
-				RadioButtonModelAdapterUITest.this.printModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void printModel() {
-		System.out.println(this.testModel);
-	}
-
-
-	private static class TestModel extends AbstractModel {
-		private String color;
-			public static final String COLOR_PROPERTY = "color";
-			public static final String RED = "red";
-			public static final String GREEN = "green";
-			public static final String BLUE = "blue";
-			public static final String DEFAULT_COLOR = RED;
-			public static final String[] VALID_COLORS = {
-				RED,
-				GREEN,
-				BLUE
-			};
-	
-		public TestModel() {
-			this(DEFAULT_COLOR);
-		}
-		public TestModel(String color) {
-			this.color = color;
-		}
-		public String getColor() {
-			return this.color;
-		}
-		public void setColor(String color) {
-			if ( ! ArrayTools.contains(VALID_COLORS, color)) {
-				throw new IllegalArgumentException(color);
-			}
-			Object old = this.color;
-			this.color = color;
-			this.firePropertyChanged(COLOR_PROPERTY, old, color);
-		}
-		@Override
-		public String toString() {
-			return "TestModel(" + this.color + ")";
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ReadOnlyTableModelAdapterUITest.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ReadOnlyTableModelAdapterUITest.java
deleted file mode 100644
index 3bfb66f..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/ReadOnlyTableModelAdapterUITest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import org.eclipse.jpt.utility.internal.model.value.swing.ColumnAdapter;
-import org.eclipse.jpt.utility.tests.internal.model.value.swing.TableModelAdapterTests.PersonColumnAdapter;
-
-/**
- * Make it easy to test the table model adapter and
- * renderers without any editing allowed.
- */
-public class ReadOnlyTableModelAdapterUITest extends TableModelAdapterUITest {
-
-	public static void main(String[] args) throws Exception {
-		new ReadOnlyTableModelAdapterUITest().exec(args);
-	}
-
-	protected ReadOnlyTableModelAdapterUITest() {
-		super();
-	}
-
-	@Override
-	protected ColumnAdapter buildColumnAdapter() {
-		return new PersonColumnAdapter() {
-			@Override
-			public boolean columnIsEditable(int index) {
-				return false;
-			}
-		};
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/SpinnerModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/SpinnerModelAdapterTests.java
deleted file mode 100644
index 3d9ac73..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/SpinnerModelAdapterTests.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import javax.swing.SpinnerModel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.SpinnerModelAdapter;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class SpinnerModelAdapterTests extends TestCase {
-	private WritablePropertyValueModel<Object> valueHolder;
-	SpinnerModel spinnerModelAdapter;
-	boolean eventFired;
-
-	public SpinnerModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.valueHolder = new SimplePropertyValueModel<Object>(new Integer(0));
-		this.spinnerModelAdapter = new SpinnerModelAdapter(this.valueHolder) {
-			@Override
-			protected PropertyChangeListener buildValueListener() {
-				return this.buildValueListener_();
-			}
-		};
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testSetValueSpinnerModel() throws Exception {
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				SpinnerModelAdapterTests.this.eventFired = true;
-				assertEquals(SpinnerModelAdapterTests.this.spinnerModelAdapter, e.getSource());
-			}
-		});
-		this.spinnerModelAdapter.setValue(new Integer(5));
-		assertTrue(this.eventFired);
-		assertEquals(new Integer(5), this.valueHolder.getValue());
-	}
-
-	public void testSetValueValueHolder() throws Exception {
-		this.eventFired = false;
-		this.spinnerModelAdapter.addChangeListener(new TestChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent e) {
-				SpinnerModelAdapterTests.this.eventFired = true;
-				assertEquals(SpinnerModelAdapterTests.this.spinnerModelAdapter, e.getSource());
-			}
-		});
-		assertEquals(new Integer(0), this.spinnerModelAdapter.getValue());
-		this.valueHolder.setValue(new Integer(7));
-		assertTrue(this.eventFired);
-		assertEquals(new Integer(7), this.spinnerModelAdapter.getValue());
-	}
-
-	public void testHasListeners() throws Exception {
-		SimplePropertyValueModel<Object> localValueHolder = (SimplePropertyValueModel<Object>) this.valueHolder;
-		assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.spinnerModelAdapter);
-
-		ChangeListener listener = new TestChangeListener();
-		this.spinnerModelAdapter.addChangeListener(listener);
-		assertTrue(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasListeners(this.spinnerModelAdapter);
-
-		this.spinnerModelAdapter.removeChangeListener(listener);
-		assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE));
-		this.verifyHasNoListeners(this.spinnerModelAdapter);
-	}
-
-	private void verifyHasNoListeners(Object adapter) throws Exception {
-		Object delegate = ReflectionTools.getFieldValue(adapter, "delegate");
-		Object[] listeners = (Object[]) ReflectionTools.executeMethod(delegate, "getChangeListeners");
-		assertEquals(0, listeners.length);
-	}
-
-	private void verifyHasListeners(Object adapter) throws Exception {
-		Object delegate = ReflectionTools.getFieldValue(adapter, "delegate");
-		Object[] listeners = (Object[]) ReflectionTools.executeMethod(delegate, "getChangeListeners");
-		assertFalse(listeners.length == 0);
-	}
-
-
-	private class TestChangeListener implements ChangeListener {
-		TestChangeListener() {
-			super();
-		}
-		public void stateChanged(ChangeEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/SpinnerModelAdapterUITest.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/SpinnerModelAdapterUITest.java
deleted file mode 100644
index 83d340e..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/SpinnerModelAdapterUITest.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import java.util.Calendar;
-import java.util.Date;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.JSpinner;
-import javax.swing.SpinnerModel;
-import javax.swing.WindowConstants;
-
-import org.eclipse.jpt.utility.internal.ArrayTools;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.DateSpinnerModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.ListSpinnerModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.NumberSpinnerModelAdapter;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-/**
- * Play around with a set of spinners.
- */
-@SuppressWarnings("nls")
-public class SpinnerModelAdapterUITest {
-
-	private TestModel testModel;
-	private WritablePropertyValueModel<TestModel> testModelHolder;
-
-	private WritablePropertyValueModel<Object> birthDateHolder;
-	private SpinnerModel birthDateSpinnerModel;
-
-	private WritablePropertyValueModel<Number> ageHolder;
-	private SpinnerModel ageSpinnerModel;
-
-	private WritablePropertyValueModel<Object> eyeColorHolder;
-	private SpinnerModel eyeColorSpinnerModel;
-
-
-	public static void main(String[] args) throws Exception {
-		new SpinnerModelAdapterUITest().exec();
-	}
-
-	private SpinnerModelAdapterUITest() {
-		super();
-	}
-
-	private void exec() throws Exception {
-		this.testModel = new TestModel();
-		this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel);
-
-		this.birthDateHolder = this.buildBirthDateHolder(this.testModelHolder);
-		this.birthDateSpinnerModel = this.buildBirthDateSpinnerModel(this.birthDateHolder);
-
-		this.ageHolder = this.buildAgeHolder(this.testModelHolder);
-		this.ageSpinnerModel = this.buildAgeSpinnerModel(this.ageHolder);
-
-		this.eyeColorHolder = this.buildEyeColorHolder(this.testModelHolder);
-		this.eyeColorSpinnerModel = this.buildEyeColorSpinnerModel(this.eyeColorHolder);
-
-		this.openWindow();
-	}
-
-	private WritablePropertyValueModel<Object> buildBirthDateHolder(PropertyValueModel<TestModel> vm) {
-		return new PropertyAspectAdapter<TestModel, Object>(vm, TestModel.BIRTH_DATE_PROPERTY) {
-			@Override
-			protected Object buildValue_() {
-				return this.subject.getBirthDate();
-			}
-			@Override
-			protected void setValue_(Object value) {
-				this.subject.setBirthDate((Date) value);
-			}
-		};
-	}
-
-	private SpinnerModel buildBirthDateSpinnerModel(WritablePropertyValueModel<Object> valueHolder) {
-		return new DateSpinnerModelAdapter(valueHolder);
-	}
-
-	private WritablePropertyValueModel<Number> buildAgeHolder(PropertyValueModel<TestModel> vm) {
-		return new PropertyAspectAdapter<TestModel, Number>(vm, TestModel.AGE_PROPERTY) {
-			@Override
-			protected Number buildValue_() {
-				return new Integer(this.subject.getAge());
-			}
-			@Override
-			protected void setValue_(Number value) {
-				this.subject.setAge(value.intValue());
-			}
-		};
-	}
-
-	private SpinnerModel buildAgeSpinnerModel(WritablePropertyValueModel<Number> valueHolder) {
-		return new NumberSpinnerModelAdapter(valueHolder, valueHolder.getValue().intValue(), TestModel.MIN_AGE, TestModel.MAX_AGE, 1);
-	}
-
-	private WritablePropertyValueModel<Object> buildEyeColorHolder(PropertyValueModel<TestModel> vm) {
-		return new PropertyAspectAdapter<TestModel, Object>(vm, TestModel.EYE_COLOR_PROPERTY) {
-			@Override
-			protected Object buildValue_() {
-				return this.subject.getEyeColor();
-			}
-			@Override
-			protected void setValue_(Object value) {
-				this.subject.setEyeColor((String) value);
-			}
-		};
-	}
-
-	private SpinnerModel buildEyeColorSpinnerModel(WritablePropertyValueModel<Object> valueHolder) {
-		return new ListSpinnerModelAdapter(valueHolder, TestModel.VALID_EYE_COLORS);
-	}
-
-	private void openWindow() {
-		JFrame window = new JFrame(this.getClass().getName());
-		window.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		window.addWindowListener(this.buildWindowListener());
-		window.getContentPane().add(this.buildMainPanel(), "Center");
-		window.setSize(600, 100);
-		window.setVisible(true);
-	}
-
-	private WindowListener buildWindowListener() {
-		return new WindowAdapter() {
-			@Override
-			public void windowClosing(WindowEvent e) {
-				e.getWindow().setVisible(false);
-				System.exit(0);
-			}
-		};
-	}
-
-	private Component buildMainPanel() {
-		JPanel mainPanel = new JPanel(new BorderLayout());
-		mainPanel.add(this.buildSpinnerPanel(), BorderLayout.NORTH);
-		mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH);
-		return mainPanel;
-	}
-
-	private Component buildSpinnerPanel() {
-		JPanel taskListPanel = new JPanel(new GridLayout(1, 0));
-		taskListPanel.add(this.buildBirthDateSpinner());
-		taskListPanel.add(this.buildAgeSpinner());
-		taskListPanel.add(this.buildEyeColorSpinner());
-		return taskListPanel;
-	}
-
-	private JSpinner buildBirthDateSpinner() {
-		return new JSpinner(this.birthDateSpinnerModel);
-	}
-
-	private JSpinner buildAgeSpinner() {
-		return new JSpinner(this.ageSpinnerModel);
-	}
-
-	private JSpinner buildEyeColorSpinner() {
-		return new JSpinner(this.eyeColorSpinnerModel);
-	}
-
-	private Component buildControlPanel() {
-		JPanel controlPanel = new JPanel(new GridLayout(1, 0));
-		controlPanel.add(this.buildResetModelButton());
-		controlPanel.add(this.buildClearModelButton());
-		controlPanel.add(this.buildRestoreModelButton());
-		controlPanel.add(this.buildPrintModelButton());
-		return controlPanel;
-	}
-
-	private JButton buildResetModelButton() {
-		return new JButton(this.buildResetModelAction());
-	}
-
-	private Action buildResetModelAction() {
-		Action action = new AbstractAction("reset model") {
-			public void actionPerformed(ActionEvent event) {
-				SpinnerModelAdapterUITest.this.resetModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void resetModel() {
-		this.testModel.setBirthDate(TestModel.DEFAULT_BIRTH_DATE);
-		this.testModel.setEyeColor(TestModel.DEFAULT_EYE_COLOR);
-	}
-
-	private JButton buildClearModelButton() {
-		return new JButton(this.buildClearModelAction());
-	}
-
-	private Action buildClearModelAction() {
-		Action action = new AbstractAction("clear model") {
-			public void actionPerformed(ActionEvent event) {
-				SpinnerModelAdapterUITest.this.clearModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void clearModel() {
-		this.testModelHolder.setValue(null);
-	}
-
-	private JButton buildRestoreModelButton() {
-		return new JButton(this.buildRestoreModelAction());
-	}
-
-	private Action buildRestoreModelAction() {
-		Action action = new AbstractAction("restore model") {
-			public void actionPerformed(ActionEvent event) {
-				SpinnerModelAdapterUITest.this.restoreModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void restoreModel() {
-		this.testModelHolder.setValue(this.testModel);
-	}
-
-	private JButton buildPrintModelButton() {
-		return new JButton(this.buildPrintModelAction());
-	}
-
-	private Action buildPrintModelAction() {
-		Action action = new AbstractAction("print model") {
-			public void actionPerformed(ActionEvent event) {
-				SpinnerModelAdapterUITest.this.printModel();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void printModel() {
-		System.out.println("birth date: " + this.testModel.getBirthDate());
-		System.out.println("age: " + this.testModel.getAge());
-		System.out.println("eyes: " + this.testModel.getEyeColor());
-	}
-
-
-	static class TestModel extends AbstractModel {
-		private Calendar birthCal = Calendar.getInstance();
-			// "virtual" properties
-			public static final String BIRTH_DATE_PROPERTY = "birthDate";
-			public static final String AGE_PROPERTY = "age";
-			public static final Date DEFAULT_BIRTH_DATE = new Date();
-			public static final int DEFAULT_AGE = 0;
-			public static final int MIN_AGE = 0;
-			public static final int MAX_AGE = 150;
-		private String eyeColor;
-			public static final String EYE_COLOR_PROPERTY = "eyeColor";
-			public static final String[] VALID_EYE_COLORS = {"blue", "brown", "green", "hazel", "pink"};
-			public static final String DEFAULT_EYE_COLOR = VALID_EYE_COLORS[3];
-	
-		TestModel() {
-			this(DEFAULT_BIRTH_DATE, DEFAULT_EYE_COLOR);
-		}
-		public TestModel(Date birthDate, String eyeColor) {
-			this.setBirthDate(birthDate);
-			this.setEyeColor(eyeColor);
-		}
-		public Date getBirthDate() {
-			return (Date) this.birthCal.getTime().clone();
-		}
-		public void setBirthDate(Date birthDate) {
-			Date oldBirthDate = this.getBirthDate();
-			int oldAge = this.getAge();
-			this.birthCal.setTimeInMillis(birthDate.getTime());
-			int newAge = this.getAge();
-			if (newAge < MIN_AGE || newAge > MAX_AGE) {
-				throw new IllegalArgumentException(birthDate.toString());
-			}
-			this.firePropertyChanged(BIRTH_DATE_PROPERTY, oldBirthDate, this.getBirthDate());
-			this.firePropertyChanged(AGE_PROPERTY, oldAge, newAge);
-		}
-		public int getAge() {
-			Calendar currentCal = Calendar.getInstance();
-			int age = currentCal.get(Calendar.YEAR) - this.birthCal.get(Calendar.YEAR);
-			if (currentCal.get(Calendar.MONTH) < this.birthCal.get(Calendar.MONTH)) {
-				age--;
-			} else if (currentCal.get(Calendar.MONTH) == this.birthCal.get(Calendar.MONTH)) {
-				if (currentCal.get(Calendar.DAY_OF_MONTH) < this.birthCal.get(Calendar.DAY_OF_MONTH)) {
-					age--;
-				}
-			}
-			return age;
-		}
-		public void setAge(int newAge) {
-			if (newAge < MIN_AGE || newAge > MAX_AGE) {
-				throw new IllegalArgumentException(String.valueOf(newAge));
-			}
-	
-			int oldAge = this.getAge();
-			int delta = newAge - oldAge;
-	
-			Calendar newBirthCal = Calendar.getInstance();
-			newBirthCal.setTimeInMillis(this.birthCal.getTime().getTime());
-			// if the age increased, the birth date must be "decreased"; and vice versa
-			newBirthCal.set(Calendar.YEAR, newBirthCal.get(Calendar.YEAR) - delta);
-			this.setBirthDate(newBirthCal.getTime());
-		}
-		public String getEyeColor() {
-			return this.eyeColor;
-		}
-		public void setEyeColor(String eyeColor) {
-			if ( ! ArrayTools.contains(VALID_EYE_COLORS, eyeColor)) {
-				throw new IllegalArgumentException(eyeColor);
-			}
-			Object old = this.eyeColor;
-			this.eyeColor = eyeColor;
-			this.firePropertyChanged(EYE_COLOR_PROPERTY, old, eyeColor);
-		}
-		@Override
-		public String toString() {
-			return "TestModel(birth: " + this.getBirthDate() + " - eyes: " + this.eyeColor + ")";
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/TableModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/TableModelAdapterTests.java
deleted file mode 100644
index ce51ef0..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/TableModelAdapterTests.java
+++ /dev/null
@@ -1,641 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.text.DateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import javax.swing.event.TableModelEvent;
-import javax.swing.event.TableModelListener;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.CollectionAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.ColumnAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.TableModelAdapter;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class TableModelAdapterTests extends TestCase {
-	private Crowd crowd;
-	TableModelEvent event;
-
-	public TableModelAdapterTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.crowd = this.buildCrowd();
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testGetRowCount() throws Exception {
-		TableModelAdapter<Person> tableModelAdapter =  this.buildTableModelAdapter();
-		assertEquals(0, tableModelAdapter.getRowCount());
-		// we need to add a listener to wake up the adapter
-		tableModelAdapter.addTableModelListener(this.buildTableModelListener());
-		assertEquals(this.crowd.peopleSize(), tableModelAdapter.getRowCount());
-	}
-
-	public void testGetColumnCount() throws Exception {
-		TableModelAdapter<Person> tableModelAdapter =  this.buildTableModelAdapter();
-		assertEquals(PersonColumnAdapter.COLUMN_COUNT, tableModelAdapter.getColumnCount());
-	}
-
-	public void testGetValueAt() throws Exception {
-		TableModelAdapter<Person> tableModelAdapter =  this.buildTableModelAdapter();
-		tableModelAdapter.addTableModelListener(this.buildTableModelListener());
-
-		List<String> sortedNames = this.sortedNames();
-		for (int i = 0; i < this.crowd.peopleSize(); i++) {
-			assertEquals(sortedNames.get(i), tableModelAdapter.getValueAt(i, PersonColumnAdapter.NAME_COLUMN));
-		}
-	}
-
-	public void testSetValueAt() throws Exception {
-		TableModelAdapter<Person> tableModelAdapter =  this.buildTableModelAdapter();
-		this.event = null;
-		tableModelAdapter.addTableModelListener(new TestTableModelListener() {
-			@Override
-			public void tableChanged(TableModelEvent e) {
-				TableModelAdapterTests.this.event = e;
-			}
-		});
-
-		Person person = this.crowd.personNamed("Gollum");
-		assertEquals(Person.EYE_COLOR_BLUE, person.getEyeColor());
-		assertFalse(person.isEvil());
-		assertEquals(0, person.getRank());
-
-		for (int i = 0; i < tableModelAdapter.getRowCount(); i++) {
-			if (tableModelAdapter.getValueAt(i, PersonColumnAdapter.NAME_COLUMN).equals("Gollum")) {
-				tableModelAdapter.setValueAt(Person.EYE_COLOR_HAZEL, i, PersonColumnAdapter.EYE_COLOR_COLUMN);
-				tableModelAdapter.setValueAt(Boolean.TRUE, i, PersonColumnAdapter.EVIL_COLUMN);
-				tableModelAdapter.setValueAt(new Integer(-1), i, PersonColumnAdapter.RANK_COLUMN);
-				break;
-			}
-		}
-		assertNotNull(this.event);
-		assertEquals(Person.EYE_COLOR_HAZEL, person.getEyeColor());
-		assertTrue(person.isEvil());
-		assertEquals(-1, person.getRank());
-	}
-
-	public void testAddRow() throws Exception {
-		TableModelAdapter<Person> tableModelAdapter =  this.buildTableModelAdapter();
-		this.event = null;
-		tableModelAdapter.addTableModelListener(this.buildSingleEventListener());
-		// add a person to the end of the list so we only trigger one event
-		this.crowd.addPerson("Zzzzz");
-		assertNotNull(this.event);
-		assertEquals(TableModelEvent.INSERT, this.event.getType());
-		assertEquals(TableModelEvent.ALL_COLUMNS, this.event.getColumn());
-	}
-
-	public void testRemoveRow() throws Exception {
-		TableModelAdapter<Person> tableModelAdapter =  this.buildTableModelAdapter();
-		this.event = null;
-		tableModelAdapter.addTableModelListener(this.buildSingleEventListener());
-		// removing a person should only trigger one event, since a re-sort is not needed
-		this.crowd.removePerson(this.crowd.personNamed("Gollum"));
-		assertNotNull(this.event);
-		assertEquals(TableModelEvent.DELETE, this.event.getType());
-		assertEquals(TableModelEvent.ALL_COLUMNS, this.event.getColumn());
-	}
-
-	public void testChangeCell() throws Exception {
-		TableModelAdapter<Person> tableModelAdapter =  this.buildTableModelAdapter();
-		this.event = null;
-		tableModelAdapter.addTableModelListener(this.buildSingleEventListener());
-		// add a person to the end of the list so we only trigger one event
-		Person person = this.crowd.personNamed("Gollum");
-		person.setEvil(true);
-		assertNotNull(this.event);
-		assertEquals(TableModelEvent.UPDATE, this.event.getType());
-		assertEquals(PersonColumnAdapter.EVIL_COLUMN, this.event.getColumn());
-	}
-
-	public void testLazyListListener() throws Exception {
-		TableModelAdapter<Person> tableModelAdapter =  this.buildTableModelAdapter();
-		TableModelListener listener = this.buildTableModelListener();
-		assertTrue(this.crowd.hasNoCollectionChangeListeners(Crowd.PEOPLE_COLLECTION));
-		tableModelAdapter.addTableModelListener(listener);
-		assertTrue(this.crowd.hasAnyCollectionChangeListeners(Crowd.PEOPLE_COLLECTION));
-		tableModelAdapter.removeTableModelListener(listener);
-		assertTrue(this.crowd.hasNoCollectionChangeListeners(Crowd.PEOPLE_COLLECTION));
-	}
-
-	public void testLazyCellListener() throws Exception {
-		TableModelAdapter<Person> tableModelAdapter =  this.buildTableModelAdapter();
-		TableModelListener listener = this.buildTableModelListener();
-		Person person = this.crowd.personNamed("Gollum");
-		assertTrue(person.hasNoPropertyChangeListeners(Person.NAME_PROPERTY));
-		assertTrue(person.hasNoPropertyChangeListeners(Person.BIRTH_DATE_PROPERTY));
-		assertTrue(person.hasNoPropertyChangeListeners(Person.EYE_COLOR_PROPERTY));
-		assertTrue(person.hasNoPropertyChangeListeners(Person.EVIL_PROPERTY));
-		assertTrue(person.hasNoPropertyChangeListeners(Person.RANK_PROPERTY));
-
-		tableModelAdapter.addTableModelListener(listener);
-		assertTrue(person.hasAnyPropertyChangeListeners(Person.NAME_PROPERTY));
-		assertTrue(person.hasAnyPropertyChangeListeners(Person.BIRTH_DATE_PROPERTY));
-		assertTrue(person.hasAnyPropertyChangeListeners(Person.EYE_COLOR_PROPERTY));
-		assertTrue(person.hasAnyPropertyChangeListeners(Person.EVIL_PROPERTY));
-		assertTrue(person.hasAnyPropertyChangeListeners(Person.RANK_PROPERTY));
-
-		tableModelAdapter.removeTableModelListener(listener);
-		assertTrue(person.hasNoPropertyChangeListeners(Person.NAME_PROPERTY));
-		assertTrue(person.hasNoPropertyChangeListeners(Person.BIRTH_DATE_PROPERTY));
-		assertTrue(person.hasNoPropertyChangeListeners(Person.EYE_COLOR_PROPERTY));
-		assertTrue(person.hasNoPropertyChangeListeners(Person.EVIL_PROPERTY));
-		assertTrue(person.hasNoPropertyChangeListeners(Person.RANK_PROPERTY));
-	}
-
-	private TableModelAdapter<Person> buildTableModelAdapter() {
-		return new TableModelAdapter<Person>(this.buildSortedPeopleAdapter(), this.buildColumnAdapter()) {
-			@Override
-			protected PropertyChangeListener buildCellListener() {
-				return this.buildCellListener_();
-			}
-			@Override
-			protected ListChangeListener buildListChangeListener() {
-				return this.buildListChangeListener_();
-			}
-		};
-	}
-
-	private ListValueModel<Person> buildSortedPeopleAdapter() {
-		return new SortedListValueModelAdapter<Person>(this.buildPeopleAdapter());
-	}
-
-	private CollectionValueModel<Person> buildPeopleAdapter() {
-		return new CollectionAspectAdapter<Crowd, Person>(Crowd.PEOPLE_COLLECTION, this.crowd) {
-			@Override
-			protected Iterator<Person> iterator_() {
-				return this.subject.people();
-			}
-			@Override
-			protected int size_() {
-				return this.subject.peopleSize();
-			}
-		};
-	}
-
-	private Crowd buildCrowd() {
-		Crowd result = new Crowd();
-		result.addPerson("Bilbo");
-		result.addPerson("Gollum");
-		result.addPerson("Frodo");
-		result.addPerson("Samwise");
-		return result;
-	}
-
-	private ColumnAdapter buildColumnAdapter() {
-		return new PersonColumnAdapter();
-	}
-
-	private TableModelListener buildTableModelListener() {
-		return new TestTableModelListener();
-	}
-
-	private List<String> sortedNames() {
-		return new ArrayList<String>(CollectionTools.sortedSet(this.crowd.peopleNames()));
-	}
-
-	private TableModelListener buildSingleEventListener() {
-		return new TestTableModelListener() {
-			@Override
-			public void tableChanged(TableModelEvent e) {
-				// we expect only a single event
-				if (TableModelAdapterTests.this.event == null) {
-					TableModelAdapterTests.this.event = e;
-				} else {
-					fail("unexpected event");
-				}
-			}
-		};
-	}
-
-
-	// ********** classes **********
-
-	public static class PersonColumnAdapter implements ColumnAdapter {
-		public static final int COLUMN_COUNT = 7;
-	
-		public static final int NAME_COLUMN = 0;
-		public static final int BIRTH_DATE_COLUMN = 1;
-		public static final int GONE_WEST_DATE_COLUMN = 2;
-		public static final int EYE_COLOR_COLUMN = 3;
-		public static final int EVIL_COLUMN = 4;
-		public static final int RANK_COLUMN = 5;
-		public static final int ADVENTURE_COUNT_COLUMN = 6;
-	
-		private static final String[] COLUMN_NAMES = new String[] {
-			"Name",
-			"Birth",
-			"Gone West",
-			"Eyes",
-			"Evil",
-			"Rank",
-			"Adventures"
-		};
-	
-	
-		public int columnCount() {
-			return COLUMN_COUNT;
-		}
-	
-		public String columnName(int index) {
-			return COLUMN_NAMES[index];
-		}
-	
-		public Class<?> columnClass(int index) {
-			switch (index) {
-				case NAME_COLUMN:					return Object.class;
-				case BIRTH_DATE_COLUMN:			return Date.class;
-				case GONE_WEST_DATE_COLUMN:	return Date.class;
-				case EYE_COLOR_COLUMN:			return Object.class;
-				case EVIL_COLUMN:					return Boolean.class;
-				case RANK_COLUMN:					return Integer.class;
-				case ADVENTURE_COUNT_COLUMN:return Integer.class;
-				default: 									return Object.class;
-			}
-		}
-	
-		public boolean columnIsEditable(int index) {
-			return index != NAME_COLUMN;
-		}
-	
-		public WritablePropertyValueModel<Object>[] cellModels(Object subject) {
-			Person person = (Person) subject;
-			@SuppressWarnings("unchecked")
-			WritablePropertyValueModel<Object>[] result = new WritablePropertyValueModel[COLUMN_COUNT];
-	
-			result[NAME_COLUMN] = this.buildNameAdapter(person);
-			result[BIRTH_DATE_COLUMN] = this.buildBirthDateAdapter(person);
-			result[GONE_WEST_DATE_COLUMN] = this.buildGoneWestDateAdapter(person);
-			result[EYE_COLOR_COLUMN] = this.buildEyeColorAdapter(person);
-			result[EVIL_COLUMN] = this.buildEvilAdapter(person);
-			result[RANK_COLUMN] = this.buildRankAdapter(person);
-			result[ADVENTURE_COUNT_COLUMN] = this.buildAdventureCountAdapter(person);
-	
-			return result;
-		}
-	
-		private WritablePropertyValueModel<Object> buildNameAdapter(Person person) {
-			return new PropertyAspectAdapter<Person, Object>(Person.NAME_PROPERTY, person) {
-				@Override
-				protected String buildValue_() {
-					return this.subject.getName();
-				}
-				@Override
-				protected void setValue_(Object value) {
-					this.subject.setName((String) value);
-				}
-			};
-		}
-	
-		private WritablePropertyValueModel<Object> buildBirthDateAdapter(Person person) {
-			return new PropertyAspectAdapter<Person, Object>(Person.BIRTH_DATE_PROPERTY, person) {
-				@Override
-				protected Date buildValue_() {
-					return this.subject.getBirthDate();
-				}
-				@Override
-				protected void setValue_(Object value) {
-					this.subject.setBirthDate((Date) value);
-				}
-			};
-		}
-	
-		private WritablePropertyValueModel<Object> buildGoneWestDateAdapter(Person person) {
-			return new PropertyAspectAdapter<Person, Object>(Person.GONE_WEST_DATE_PROPERTY, person) {
-				@Override
-				protected Date buildValue_() {
-					return this.subject.getGoneWestDate();
-				}
-				@Override
-				protected void setValue_(Object value) {
-					this.subject.setGoneWestDate((Date) value);
-				}
-			};
-		}
-	
-		private WritablePropertyValueModel<Object> buildEyeColorAdapter(Person person) {
-			return new PropertyAspectAdapter<Person, Object>(Person.EYE_COLOR_PROPERTY, person) {
-				@Override
-				protected String buildValue_() {
-					return this.subject.getEyeColor();
-				}
-				@Override
-				protected void setValue_(Object value) {
-					this.subject.setEyeColor((String) value);
-				}
-			};
-		}
-	
-		private WritablePropertyValueModel<Object> buildEvilAdapter(Person person) {
-			return new PropertyAspectAdapter<Person, Object>(Person.EVIL_PROPERTY, person) {
-				@Override
-				protected Boolean buildValue_() {
-					return Boolean.valueOf(this.subject.isEvil());
-				}
-				@Override
-				protected void setValue_(Object value) {
-					this.subject.setEvil(((Boolean)value).booleanValue());
-				}
-			};
-		}
-	
-		private WritablePropertyValueModel<Object> buildRankAdapter(Person person) {
-			return new PropertyAspectAdapter<Person, Object>(Person.RANK_PROPERTY, person) {
-				@Override
-				protected Integer buildValue_() {
-					return new Integer(this.subject.getRank());
-				}
-				@Override
-				protected void setValue_(Object value) {
-					this.subject.setRank(((Integer) value).intValue());
-				}
-			};
-		}
-	
-		private WritablePropertyValueModel<Object> buildAdventureCountAdapter(Person person) {
-			return new PropertyAspectAdapter<Person, Object>(Person.ADVENTURE_COUNT_PROPERTY, person) {
-				@Override
-				protected Integer buildValue_() {
-					return new Integer(this.subject.getAdventureCount());
-				}
-				@Override
-				protected void setValue_(Object value) {
-					this.subject.setAdventureCount(((Integer) value).intValue());
-				}
-			};
-		}
-	
-	}
-
-
-	public static class Crowd extends AbstractModel {
-		private final Collection<Person> people;
-			public static final String PEOPLE_COLLECTION = "people";
-	
-		public Crowd() {
-			super();
-			this.people = new ArrayList<Person>();
-		}
-	
-	
-		public Iterator<Person> people() {
-			return new CloneIterator<Person>(this.people) {
-				@Override
-				protected void remove(Person person) {
-					Crowd.this.removePerson(person);
-				}
-			};
-		}
-	
-		public int peopleSize() {
-			return this.people.size();
-		}
-	
-		public Person addPerson(String name) {
-			this.checkPersonName(name);
-			return this.addPerson(new Person(this, name));
-		}
-	
-		private Person addPerson(Person person) {
-			this.addItemToCollection(person, this.people, PEOPLE_COLLECTION);
-			return person;
-		}
-	
-		public void removePerson(Person person) {
-			this.removeItemFromCollection(person, this.people, PEOPLE_COLLECTION);
-		}
-	
-		public void removePeople(Collection<Person> persons) {
-			this.removeItemsFromCollection(persons, this.people, PEOPLE_COLLECTION);
-		}
-	
-		public void removePeople(Iterator<Person> persons) {
-			this.removeItemsFromCollection(persons, this.people, PEOPLE_COLLECTION);
-		}
-	
-		void checkPersonName(String personName) {
-			if (personName == null) {
-				throw new NullPointerException();
-			}
-			if (CollectionTools.contains(this.peopleNames(), personName)) {
-				throw new IllegalArgumentException(personName);
-			}
-		}
-	
-		public Iterator<String> peopleNames() {
-			return new TransformationIterator<Person, String>(this.people.iterator()) {
-				@Override
-				protected String transform(Person person) {
-					return person.getName();
-				}
-			};
-		}
-	
-		public Person personNamed(String name) {
-			for (Iterator<Person> stream = this.people.iterator(); stream.hasNext(); ) {
-				Person person = stream.next();
-				if (person.getName().equals(name)) {
-					return person;
-				}
-			}
-			return null;
-		}
-	
-		@Override
-		public String toString() {
-			return StringTools.buildToStringFor(this, String.valueOf(this.people.size()) + " people");
-		}
-	
-	}
-	
-	
-	public static class Person extends AbstractModel implements Comparable<Person> {
-		private Crowd crowd;
-		private String name;
-			public static final String NAME_PROPERTY= "name";
-		private Date birthDate;
-			public static final String BIRTH_DATE_PROPERTY= "birthDate";
-		private Date goneWestDate;
-			public static final String GONE_WEST_DATE_PROPERTY= "goneWestDate";
-		private String eyeColor;
-			public static final String EYE_COLOR_PROPERTY= "eyeColor";
-			public static final String EYE_COLOR_BLUE = "blue";
-			public static final String EYE_COLOR_GREEN = "green";
-			public static final String EYE_COLOR_BROWN = "brown";
-			public static final String EYE_COLOR_HAZEL = "hazel";
-			public static final String EYE_COLOR_PINK = "pink";
-			private static Collection<String> validEyeColors;
-			public static final String DEFAULT_EYE_COLOR = EYE_COLOR_BLUE;
-		private boolean evil;
-			public static final String EVIL_PROPERTY= "evil";
-		private int rank;
-			public static final String RANK_PROPERTY= "rank";
-		private int adventureCount;
-			public static final String ADVENTURE_COUNT_PROPERTY= "adventureCount";
-	
-		Person(Crowd crowd, String name) {
-			super();
-			this.crowd = crowd;
-			this.name = name;
-			this.birthDate = new Date();
-			Calendar c = Calendar.getInstance();
-			c.add(Calendar.YEAR, 250);
-			this.goneWestDate = new Date(c.getTimeInMillis());
-			this.eyeColor = DEFAULT_EYE_COLOR;
-			this.evil = false;
-			this.rank = 0;
-			this.adventureCount = 0;
-		}
-	
-		public static Collection<String> getValidEyeColors() {
-			if (validEyeColors == null) {
-				validEyeColors = buildValidEyeColors();
-			}
-			return validEyeColors;
-		}
-	
-		private static Collection<String> buildValidEyeColors() {
-			Collection<String> result = new ArrayList<String>();
-			result.add(EYE_COLOR_BLUE);
-			result.add(EYE_COLOR_GREEN);
-			result.add(EYE_COLOR_BROWN);
-			result.add(EYE_COLOR_HAZEL);
-			result.add(EYE_COLOR_PINK);
-			return result;
-		}
-	
-		public Crowd getCrowd() {
-			return this.crowd;
-		}
-	
-		public String getName() {
-			return this.name;
-		}
-		public void setName(String name) {
-			this.crowd.checkPersonName(name);
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(NAME_PROPERTY, old, name);
-		}
-	
-		public Date getBirthDate() {
-			return this.birthDate;
-		}
-		public void setBirthDate(Date birthDate) {
-			Object old = this.birthDate;
-			this.birthDate = birthDate;
-			this.firePropertyChanged(BIRTH_DATE_PROPERTY, old, birthDate);
-		}
-	
-		public Date getGoneWestDate() {
-			return this.goneWestDate;
-		}
-		public void setGoneWestDate(Date goneWestDate) {
-			Object old = this.goneWestDate;
-			this.goneWestDate = goneWestDate;
-			this.firePropertyChanged(GONE_WEST_DATE_PROPERTY, old, goneWestDate);
-		}
-	
-		public String getEyeColor() {
-			return this.eyeColor;
-		}
-		public void setEyeColor(String eyeColor) {
-			if (! getValidEyeColors().contains(eyeColor)) {
-				throw new IllegalArgumentException(eyeColor);
-			}
-			Object old = this.eyeColor;
-			this.eyeColor = eyeColor;
-			this.firePropertyChanged(EYE_COLOR_PROPERTY, old, eyeColor);
-		}
-	
-		public boolean isEvil() {
-			return this.evil;
-		}
-		public void setEvil(boolean evil) {
-			boolean old = this.evil;
-			this.evil = evil;
-			this.firePropertyChanged(EVIL_PROPERTY, old, evil);
-		}
-	
-		public int getRank() {
-			return this.rank;
-		}
-		public void setRank(int rank) {
-			int old = this.rank;
-			this.rank = rank;
-			this.firePropertyChanged(RANK_PROPERTY, old, rank);
-		}
-	
-		public int getAdventureCount() {
-			return this.adventureCount;
-		}
-		public void setAdventureCount(int adventureCount) {
-			int old = this.adventureCount;
-			this.adventureCount = adventureCount;
-			this.firePropertyChanged(ADVENTURE_COUNT_PROPERTY, old, adventureCount);
-		}
-	
-		public int compareTo(Person p) {
-			return this.name.compareToIgnoreCase(p.name);
-		}
-	
-		@Override
-		public String toString() {
-			return this.name + 
-						"\tborn: " + DateFormat.getDateInstance().format(this.birthDate) + 
-						"\tgone west: " + DateFormat.getDateInstance().format(this.goneWestDate) + 
-						"\teyes: " + this.eyeColor + 
-						"\tevil: " + this.evil + 
-						"\trank: " + this.rank +
-						"\tadventures: " + this.adventureCount
-			;
-		}
-	
-	}
-
-
-	private class TestTableModelListener implements TableModelListener {
-		TestTableModelListener() {
-			super();
-		}
-		public void tableChanged(TableModelEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/TableModelAdapterUITest.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/TableModelAdapterUITest.java
deleted file mode 100644
index 78854f6..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/TableModelAdapterUITest.java
+++ /dev/null
@@ -1,733 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.ButtonModel;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultListCellRenderer;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JFrame;
-import javax.swing.JList;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JSpinner;
-import javax.swing.JTable;
-import javax.swing.JTextField;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListSelectionModel;
-import javax.swing.SpinnerModel;
-import javax.swing.UIManager;
-import javax.swing.WindowConstants;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.table.TableColumn;
-import javax.swing.table.TableModel;
-import javax.swing.text.Document;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.model.value.CollectionAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.ItemPropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelWrapper;
-import org.eclipse.jpt.utility.internal.model.value.swing.CheckBoxModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.ColumnAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.ComboBoxModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.DateSpinnerModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.DocumentAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.ListModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.NumberSpinnerModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.ObjectListSelectionModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.TableModelAdapter;
-import org.eclipse.jpt.utility.internal.swing.CheckBoxTableCellRenderer;
-import org.eclipse.jpt.utility.internal.swing.ComboBoxTableCellRenderer;
-import org.eclipse.jpt.utility.internal.swing.SpinnerTableCellRenderer;
-import org.eclipse.jpt.utility.internal.swing.TableCellEditorAdapter;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.model.value.swing.TableModelAdapterTests.Crowd;
-import org.eclipse.jpt.utility.tests.internal.model.value.swing.TableModelAdapterTests.Person;
-import org.eclipse.jpt.utility.tests.internal.model.value.swing.TableModelAdapterTests.PersonColumnAdapter;
-
-/**
- * an example UI for testing the TableModelAdapter
- * 	"name" column is read-only text field
- * 	"birth date" column is date text field
- * 	"gone west date" column is date spinner
- * 	"eye color" column is combo-box
- * 	"evil" column is check box
- * 	"rank" column is number text field
- * 	"adventure count" column is number spinner
- * 
- * Note that the table model and row selection model share the same
- * list value model (the sorted people adapter)
- */
-@SuppressWarnings("nls")
-public class TableModelAdapterUITest {
-	private SimpleCollectionValueModel<Object> eyeColorsHolder;  // Object because it adapts to a combo-box
-	private WritablePropertyValueModel<Crowd> crowdHolder;
-	private WritablePropertyValueModel<Person> selectedPersonHolder;
-	private ListValueModel<Person> sortedPeopleAdapter;
-	private TableModel tableModel;
-	private ObjectListSelectionModel rowSelectionModel;
-	private Action removeAction;
-	private Action renameAction;
-
-	public static void main(String[] args) throws Exception {
-		new TableModelAdapterUITest().exec(args);
-	}
-
-	protected TableModelAdapterUITest() {
-		super();
-	}
-
-	protected void exec(@SuppressWarnings("unused") String[] args) throws Exception {
-		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-		this.eyeColorsHolder = this. buildEyeColorCollectionHolder();
-		this.crowdHolder = this.buildCrowdHolder();
-		this.selectedPersonHolder = this.buildSelectedPersonHolder();
-		this.sortedPeopleAdapter = this.buildSortedPeopleAdapter();
-		this.tableModel = this.buildTableModel();
-		this.rowSelectionModel = this.buildRowSelectionModel();
-		this.openWindow();
-	}
-
-	private SimpleCollectionValueModel<Object> buildEyeColorCollectionHolder() {
-		return new SimpleCollectionValueModel<Object>(new ArrayList<Object>(Person.getValidEyeColors()));
-	}
-
-	private WritablePropertyValueModel<Crowd> buildCrowdHolder() {
-		return new SimplePropertyValueModel<Crowd>(this.buildCrowd());
-	}
-
-	private Crowd buildCrowd() {
-		Crowd crowd = new Crowd();
-
-		Person p = crowd.addPerson("Bilbo");
-		p.setEyeColor(Person.EYE_COLOR_BROWN);
-		p.setRank(22);
-		p.setAdventureCount(1);
-
-		p = crowd.addPerson("Gollum");
-		p.setEyeColor(Person.EYE_COLOR_PINK);
-		p.setEvil(true);
-		p.setRank(2);
-		p.setAdventureCount(50);
-
-		p = crowd.addPerson("Frodo");
-		p.setEyeColor(Person.EYE_COLOR_BLUE);
-		p.setRank(34);
-		p.setAdventureCount(1);
-
-		p = crowd.addPerson("Samwise");
-		p.setEyeColor(Person.EYE_COLOR_GREEN);
-		p.setRank(19);
-		p.setAdventureCount(1);
-
-		return crowd;
-	}
-
-	private WritablePropertyValueModel<Person> buildSelectedPersonHolder() {
-		return new SimplePropertyValueModel<Person>();
-	}
-
-	private ListValueModel<Person> buildSortedPeopleAdapter() {
-		return new SortedListValueModelWrapper<Person>(this.buildPeopleNameAdapter());
-	}
-
-	// the list will need to be re-sorted if a name changes
-	private ListValueModel<Person> buildPeopleNameAdapter() {
-		return new ItemPropertyListValueModelAdapter<Person>(this.buildPeopleAdapter(), Person.NAME_PROPERTY);
-	}
-
-	private CollectionValueModel<Person> buildPeopleAdapter() {
-		return new CollectionAspectAdapter<Crowd, Person>(this.crowdHolder, Crowd.PEOPLE_COLLECTION) {
-			@Override
-			protected Iterator<Person> iterator_() {
-				return this.subject.people();
-			}
-			@Override
-			protected int size_() {
-				return this.subject.peopleSize();
-			}
-		};
-	}
-
-	private TableModel buildTableModel() {
-		return new TableModelAdapter<Person>(this.sortedPeopleAdapter, this.buildColumnAdapter());
-	}
-
-	protected ColumnAdapter buildColumnAdapter() {
-		return new PersonColumnAdapter();
-	}
-
-	private ObjectListSelectionModel buildRowSelectionModel() {
-		ObjectListSelectionModel rsm = new ObjectListSelectionModel(new ListModelAdapter(this.sortedPeopleAdapter));
-		rsm.addListSelectionListener(this.buildRowSelectionListener());
-		rsm.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-		return rsm;
-	}
-
-	private ListSelectionListener buildRowSelectionListener() {
-		return new ListSelectionListener() {
-			public void valueChanged(ListSelectionEvent e) {
-				if (e.getValueIsAdjusting()) {
-					return;
-				}
-				TableModelAdapterUITest.this.rowSelectionChanged(e);
-			}
-		};
-	}
-
-	void rowSelectionChanged(@SuppressWarnings("unused") ListSelectionEvent event) {
-		Person selection = (Person) this.rowSelectionModel.selectedValue();
-		this.selectedPersonHolder.setValue(selection);
-		boolean personSelected = (selection != null);
-		this.removeAction.setEnabled(personSelected);
-		this.renameAction.setEnabled(personSelected);
-	}
-
-	private void openWindow() {
-		JFrame window = new JFrame(this.getClass().getSimpleName());
-		window.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		window.addWindowListener(this.buildWindowListener());
-		window.getContentPane().add(this.buildMainPanel(), "Center");
-		window.setLocation(200, 200);
-		window.setSize(600, 400);
-		window.setVisible(true);
-	}
-
-	private WindowListener buildWindowListener() {
-		return new WindowAdapter() {
-			@Override
-			public void windowClosing(WindowEvent e) {
-				e.getWindow().setVisible(false);
-				System.exit(0);
-			}
-		};
-	}
-
-	private Component buildMainPanel() {
-		JPanel mainPanel = new JPanel(new BorderLayout());
-		mainPanel.add(this.buildTablePane(), BorderLayout.CENTER);
-		mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH);
-		return mainPanel;
-	}
-
-	private Component buildTablePane() {
-		return new JScrollPane(this.buildTable());
-	}
-
-	private JTable buildTable() {
-		JTable table = new JTable(this.tableModel);
-		table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);	// see Java bug 5007652
-		table.setSelectionModel(this.rowSelectionModel);
-		table.setDoubleBuffered(true);
-		table.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
-		int rowHeight = 20;	// start with minimum of 20
-
-		// gone west column (spinner)
-		TableColumn column = table.getColumnModel().getColumn(PersonColumnAdapter.GONE_WEST_DATE_COLUMN);
-		SpinnerTableCellRenderer spinnerRenderer = this.buildDateSpinnerRenderer();
-		column.setCellRenderer(spinnerRenderer);
-		column.setCellEditor(new TableCellEditorAdapter(this.buildDateSpinnerRenderer()));
-		rowHeight = Math.max(rowHeight, spinnerRenderer.preferredHeight());
-
-		// eye color column (combo-box)
-		// the jdk combo-box renderer looks like a text field
-		// until the user starts an edit - use a custom one
-		column = table.getColumnModel().getColumn(PersonColumnAdapter.EYE_COLOR_COLUMN);
-		ComboBoxTableCellRenderer eyeColorRenderer = this.buildEyeColorComboBoxRenderer();
-		column.setCellRenderer(eyeColorRenderer);
-		column.setCellEditor(new TableCellEditorAdapter(this.buildEyeColorComboBoxRenderer()));
-		rowHeight = Math.max(rowHeight, eyeColorRenderer.preferredHeight());
-
-		// evil (check box)
-		// the jdk check box renderer and editor suck - use a custom ones
-		column = table.getColumnModel().getColumn(PersonColumnAdapter.EVIL_COLUMN);
-		CheckBoxTableCellRenderer evilRenderer = new CheckBoxTableCellRenderer();
-		column.setCellRenderer(evilRenderer);
-		column.setCellEditor(new TableCellEditorAdapter(new CheckBoxTableCellRenderer()));
-		rowHeight = Math.max(rowHeight, evilRenderer.preferredHeight());
-
-		// adventure count column (spinner)
-		column = table.getColumnModel().getColumn(PersonColumnAdapter.ADVENTURE_COUNT_COLUMN);
-		spinnerRenderer = this.buildNumberSpinnerRenderer();
-		column.setCellRenderer(spinnerRenderer);
-		column.setCellEditor(new TableCellEditorAdapter(this.buildNumberSpinnerRenderer()));
-		rowHeight = Math.max(rowHeight, spinnerRenderer.preferredHeight());
-
-		table.setRowHeight(rowHeight);
-		return table;
-	}
-
-	private SpinnerTableCellRenderer buildDateSpinnerRenderer() {
-		return new SpinnerTableCellRenderer(new DateSpinnerModelAdapter(new SimplePropertyValueModel<Object>()));
-	}
-
-	private SpinnerTableCellRenderer buildNumberSpinnerRenderer() {
-		return new SpinnerTableCellRenderer(new NumberSpinnerModelAdapter(new SimplePropertyValueModel<Number>()));
-	}
-
-	private ComboBoxTableCellRenderer buildEyeColorComboBoxRenderer() {
-		return new ComboBoxTableCellRenderer(this.buildReadOnlyEyeColorComboBoxModel(), this.buildEyeColorRenderer());
-	}
-
-	private ComboBoxModel buildReadOnlyEyeColorComboBoxModel() {
-		return new ComboBoxModelAdapter(this.eyeColorsHolder, new SimplePropertyValueModel<Object>());
-	}
-
-	private ListCellRenderer buildEyeColorRenderer() {
-		return new EyeColorRenderer();
-	}
-
-	private Component buildControlPanel() {
-		JPanel controlPanel = new JPanel(new GridLayout(0, 1));
-		controlPanel.add(this.buildButtonPanel());
-		controlPanel.add(this.buildPersonPanel());
-		return controlPanel;
-	}
-
-	private Component buildButtonPanel() {
-		JPanel buttonPanel = new JPanel(new GridLayout(1, 0));
-		buttonPanel.add(this.buildAddButton());
-		buttonPanel.add(this.buildRemoveButton());
-		buttonPanel.add(this.buildRenameButton());
-		buttonPanel.add(this.buildAddEyeColorButton());
-		buttonPanel.add(this.buildPrintButton());
-		buttonPanel.add(this.buildResetButton());
-		return buttonPanel;
-	}
-
-	private Component buildPersonPanel() {
-		JPanel personPanel = new JPanel(new GridLayout(1, 0));
-		personPanel.add(this.buildNameTextField());
-		personPanel.add(this.buildBirthDateSpinner());
-		personPanel.add(this.buildGoneWestDateSpinner());
-		personPanel.add(this.buildEyeColorComboBox());
-		personPanel.add(this.buildEvilCheckBox());
-		personPanel.add(this.buildRankSpinner());
-		personPanel.add(this.buildAdventureCountSpinner());
-		return personPanel;
-	}
-
-
-	// ********** add button **********
-
-	private JButton buildAddButton() {
-		return new JButton(this.buildAddAction());
-	}
-
-	private Action buildAddAction() {
-		Action action = new AbstractAction("add") {
-			public void actionPerformed(ActionEvent event) {
-				TableModelAdapterUITest.this.addPerson();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void addPerson() {
-		String name = this.getNameFromUser();
-		if (name != null) {
-			this.setSelectedPerson(this.crowd().addPerson(name));
-		}
-	}
-
-
-	// ********** remove button **********
-
-	private JButton buildRemoveButton() {
-		return new JButton(this.buildRemoveAction());
-	}
-
-	private Action buildRemoveAction() {
-		this.removeAction = new AbstractAction("remove") {
-			public void actionPerformed(ActionEvent event) {
-				TableModelAdapterUITest.this.removePerson();
-			}
-		};
-		this.removeAction.setEnabled(false);
-		return this.removeAction;
-	}
-
-	void removePerson() {
-		Person person = this.selectedPerson();
-		if (person != null) {
-			this.crowd().removePerson(person);
-		}
-	}
-
-
-	// ********** rename button **********
-
-	private JButton buildRenameButton() {
-		return new JButton(this.buildRenameAction());
-	}
-
-	private Action buildRenameAction() {
-		this.renameAction = new AbstractAction("rename") {
-			public void actionPerformed(ActionEvent event) {
-				TableModelAdapterUITest.this.renamePerson();
-			}
-		};
-		this.renameAction.setEnabled(false);
-		return this.renameAction;
-	}
-
-	void renamePerson() {
-		Person person = this.selectedPerson();
-		if (person != null) {
-			String name = this.promptUserForName(person.getName());
-			if (name != null) {
-				person.setName(name);
-				this.setSelectedPerson(person);
-			}
-		}
-	}
-
-
-	// ********** add eye color button **********
-
-	private JButton buildAddEyeColorButton() {
-		return new JButton(this.buildAddEyeColorAction());
-	}
-
-	private Action buildAddEyeColorAction() {
-		Action action = new AbstractAction("add eye color") {
-			public void actionPerformed(ActionEvent event) {
-				TableModelAdapterUITest.this.addEyeColor();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void addEyeColor() {
-		String color = this.promptUserForEyeColor();
-		if (color != null) {
-			this.eyeColorsHolder.add(color);
-		}
-	}
-
-	private String promptUserForEyeColor() {
-		while (true) {
-			String eyeColor = JOptionPane.showInputDialog("Eye Color");
-			if (eyeColor == null) {
-				return null;		// user pressed <Cancel>
-			}
-			if ((eyeColor.length() == 0)) {
-				JOptionPane.showMessageDialog(null, "The eye color is required.", "Invalid Eye Color", JOptionPane.ERROR_MESSAGE);
-			} else if (CollectionTools.contains(this.eyeColorsHolder.iterator(), eyeColor)) {
-				JOptionPane.showMessageDialog(null, "The eye color already exists.", "Invalid Eye Color", JOptionPane.ERROR_MESSAGE);
-			} else {
-				return eyeColor;
-			}
-		}
-	}
-
-
-	// ********** print button **********
-
-	private JButton buildPrintButton() {
-		return new JButton(this.buildPrintAction());
-	}
-
-	private Action buildPrintAction() {
-		Action action = new AbstractAction("print") {
-			public void actionPerformed(ActionEvent event) {
-				TableModelAdapterUITest.this.printCrowd();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void printCrowd() {
-		System.out.println(this.crowd());
-		for (Iterator<Person> stream = this.crowd().people(); stream.hasNext(); ) {
-			System.out.println("\t" + stream.next());
-		}
-	}
-
-
-	// ********** reset button **********
-
-	private JButton buildResetButton() {
-		return new JButton(this.buildResetAction());
-	}
-
-	private Action buildResetAction() {
-		Action action = new AbstractAction("reset") {
-			public void actionPerformed(ActionEvent event) {
-				TableModelAdapterUITest.this.reset();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	void reset() {
-		this.crowdHolder.setValue(this.buildCrowd());
-	}
-
-
-	// ********** new name dialog **********
-
-	private String getNameFromUser() {
-		return this.promptUserForName(null);
-	}
-
-	private String promptUserForName(@SuppressWarnings("unused") String originalName) {
-		while (true) {
-			String name = JOptionPane.showInputDialog("Person Name");
-			if (name == null) {
-				return null;		// user pressed <Cancel>
-			}
-			if ((name.length() == 0)) {
-				JOptionPane.showMessageDialog(null, "The name is required.", "Invalid Name", JOptionPane.ERROR_MESSAGE);
-			} else if (CollectionTools.contains(this.crowd().peopleNames(), name)) {
-				JOptionPane.showMessageDialog(null, "The name already exists.", "Invalid Name", JOptionPane.ERROR_MESSAGE);
-			} else {
-				return name;
-			}
-		}
-	}
-
-
-	// ********** name text field **********
-
-	private Component buildNameTextField() {
-		JTextField textField = new JTextField(this.buildNameDocument(), null, 0);
-		textField.setEditable(false);
-		return textField;
-	}
-
-	private Document buildNameDocument() {
-		return new DocumentAdapter(this.buildNameAdapter());
-	}
-
-	private WritablePropertyValueModel<String> buildNameAdapter() {
-		return new PropertyAspectAdapter<Person, String>(this.selectedPersonHolder, Person.NAME_PROPERTY) {
-			@Override
-			protected String buildValue_() {
-				return this.subject.getName();
-			}
-			@Override
-			protected void setValue_(String value) {
-				this.subject.setName(value);
-			}
-		};
-	}
-
-
-	// ********** birth date spinner **********
-
-	private JSpinner buildBirthDateSpinner() {
-		return new JSpinner(this.buildBirthDateSpinnerModel());
-	}
-
-	private SpinnerModel buildBirthDateSpinnerModel() {
-		return new DateSpinnerModelAdapter(this.buildBirthDateAdapter());
-	}
-
-	private WritablePropertyValueModel<Object> buildBirthDateAdapter() {
-		return new PropertyAspectAdapter<Person, Object>(this.selectedPersonHolder, Person.BIRTH_DATE_PROPERTY) {
-			@Override
-			protected Date buildValue_() {
-				return this.subject.getBirthDate();
-			}
-			@Override
-			protected void setValue_(Object value) {
-				this.subject.setBirthDate((Date) value);
-			}
-		};
-	}
-
-
-	// ********** gone west date spinner **********
-
-	private JSpinner buildGoneWestDateSpinner() {
-		return new JSpinner(this.buildGoneWestDateSpinnerModel());
-	}
-
-	private SpinnerModel buildGoneWestDateSpinnerModel() {
-		return new DateSpinnerModelAdapter(this.buildGoneWestDateAdapter());
-	}
-
-	private WritablePropertyValueModel<Object> buildGoneWestDateAdapter() {
-		return new PropertyAspectAdapter<Person, Object>(this.selectedPersonHolder, Person.GONE_WEST_DATE_PROPERTY) {
-			@Override
-			protected Date buildValue_() {
-				return this.subject.getGoneWestDate();
-			}
-			@Override
-			protected void setValue_(Object value) {
-				this.subject.setGoneWestDate((Date) value);
-			}
-		};
-	}
-
-
-	// ********** eye color combo-box **********
-
-	private JComboBox buildEyeColorComboBox() {
-		return new JComboBox(this.buildEyeColorComboBoxModel());
-	}
-
-	private ComboBoxModel buildEyeColorComboBoxModel() {
-		return new ComboBoxModelAdapter(this.eyeColorsHolder, this.buildEyeColorAdapter());
-	}
-
-	private WritablePropertyValueModel<Object> buildEyeColorAdapter() {
-		return new PropertyAspectAdapter<Person, Object>(this.selectedPersonHolder, Person.EYE_COLOR_PROPERTY) {
-			@Override
-			protected Object buildValue_() {
-				return this.subject.getEyeColor();
-			}
-			@Override
-			protected void setValue_(Object value) {
-				this.subject.setEyeColor((String) value);
-			}
-		};
-	}
-
-
-	// ********** evil check box **********
-
-	private JCheckBox buildEvilCheckBox() {
-		JCheckBox checkBox = new JCheckBox();
-		checkBox.setText("evil");
-		checkBox.setModel(this.buildEvilCheckBoxModel());
-		return checkBox;
-	}
-
-	private ButtonModel buildEvilCheckBoxModel() {
-		return new CheckBoxModelAdapter(this.buildEvilAdapter());
-	}
-
-	private WritablePropertyValueModel<Boolean> buildEvilAdapter() {
-		return new PropertyAspectAdapter<Person, Boolean>(this.selectedPersonHolder, Person.EVIL_PROPERTY) {
-			@Override
-			protected Boolean buildValue_() {
-				return Boolean.valueOf(this.subject.isEvil());
-			}
-			@Override
-			protected void setValue_(Boolean value) {
-				this.subject.setEvil(value.booleanValue());
-			}
-		};
-	}
-
-
-	// ********** rank spinner **********
-
-	private JSpinner buildRankSpinner() {
-		return new JSpinner(this.buildRankSpinnerModel());
-	}
-
-	private SpinnerModel buildRankSpinnerModel() {
-		return new NumberSpinnerModelAdapter(this.buildRankAdapter());
-	}
-
-	private WritablePropertyValueModel<Number> buildRankAdapter() {
-		return new PropertyAspectAdapter<Person, Number>(this.selectedPersonHolder, Person.RANK_PROPERTY) {
-			@Override
-			protected Number buildValue_() {
-				return new Integer(this.subject.getRank());
-			}
-			@Override
-			protected void setValue_(Number value) {
-				this.subject.setRank(value.intValue());
-			}
-		};
-	}
-
-
-	// ********** adventure count spinner **********
-
-	private JSpinner buildAdventureCountSpinner() {
-		return new JSpinner(this.buildAdventureCountSpinnerModel());
-	}
-
-	private SpinnerModel buildAdventureCountSpinnerModel() {
-		return new NumberSpinnerModelAdapter(this.buildAdventureCountAdapter());
-	}
-
-	private WritablePropertyValueModel<Number> buildAdventureCountAdapter() {
-		return new PropertyAspectAdapter<Person, Number>(this.selectedPersonHolder, Person.ADVENTURE_COUNT_PROPERTY) {
-			@Override
-			protected Number buildValue_() {
-				return new Integer(this.subject.getAdventureCount());
-			}
-			@Override
-			protected void setValue_(Number value) {
-				this.subject.setAdventureCount(value.intValue());
-			}
-		};
-	}
-
-
-	// ********** queries **********
-
-	private Crowd crowd() {
-		return this.crowdHolder.getValue();
-	}
-
-	private Person selectedPerson() {
-		if (this.rowSelectionModel.isSelectionEmpty()) {
-			return null;
-		}
-		return (Person) this.rowSelectionModel.selectedValue();
-	}
-
-	private void setSelectedPerson(Person person) {
-		this.rowSelectionModel.setSelectedValue(person);
-	}
-
-
-	// ********** custom renderer **********
-	
-	/**
-	 * This is simply an example of a renderer for the embedded combo-box.
-	 * It does nothing special unless you uncomment the code below....
-	 */
-	private class EyeColorRenderer extends DefaultListCellRenderer {
-		EyeColorRenderer() {
-			super();
-		}
-		@Override
-		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
-			// just do something to show the renderer is working...
-	//		value = ">" + value;
-			return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/TreeModelAdapterTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/TreeModelAdapterTests.java
deleted file mode 100644
index 760d17b..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/TreeModelAdapterTests.java
+++ /dev/null
@@ -1,812 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.StringWriter;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-
-import javax.swing.Icon;
-import javax.swing.JTree;
-import javax.swing.event.TreeModelEvent;
-import javax.swing.event.TreeModelListener;
-import javax.swing.tree.TreeModel;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.IndentingPrintWriter;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.ReadOnlyIterator;
-import org.eclipse.jpt.utility.internal.model.AbstractModel;
-import org.eclipse.jpt.utility.internal.model.value.AbstractTreeNodeValueModel;
-import org.eclipse.jpt.utility.internal.model.value.CollectionAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.ItemPropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.NullListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimpleListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelWrapper;
-import org.eclipse.jpt.utility.internal.model.value.StaticPropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.swing.TreeModelAdapter;
-import org.eclipse.jpt.utility.internal.swing.Displayable;
-import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
-import org.eclipse.jpt.utility.model.listener.ListChangeListener;
-import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
-import org.eclipse.jpt.utility.model.listener.StateChangeListener;
-import org.eclipse.jpt.utility.model.value.CollectionValueModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
-import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.TreeNodeValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-
-@SuppressWarnings("nls")
-public class TreeModelAdapterTests extends TestCase {
-	boolean eventFired;
-
-	public TreeModelAdapterTests(String name) {
-		super(name);
-	}
-
-	public void testGetRoot() {
-		TreeModel treeModel = this.buildSortedTreeModel();
-		treeModel.addTreeModelListener(new TestTreeModelListener());
-		TestNode rootNode = (TestNode) treeModel.getRoot();
-		TestModel root = rootNode.getTestModel();
-		assertEquals("root", root.getName());
-//		root.dump();
-//		rootNode.dump();
-	}
-
-	public void testGetChild() {
-		TreeModel treeModel = this.buildSortedTreeModel();
-		treeModel.addTreeModelListener(new TestTreeModelListener());
-		TestNode rootNode = (TestNode) treeModel.getRoot();
-
-		TestNode expected = rootNode.childNamed("node 1");
-		TestNode actual = (TestNode) treeModel.getChild(rootNode, 1);
-		assertEquals(expected, actual);
-
-		expected = rootNode.childNamed("node 2");
-		actual = (TestNode) treeModel.getChild(rootNode, 2);
-		assertEquals(expected, actual);
-	}
-
-	public void testGetChildCount() {
-		TreeModel treeModel = this.buildSortedTreeModel();
-		treeModel.addTreeModelListener(new TestTreeModelListener());
-		TestNode rootNode = (TestNode) treeModel.getRoot();
-
-		assertEquals(5, treeModel.getChildCount(rootNode));
-
-		TestNode node = rootNode.childNamed("node 1");
-		assertEquals(1, treeModel.getChildCount(node));
-	}
-
-	public void testGetIndexOfChild() {
-		TreeModel treeModel = this.buildSortedTreeModel();
-		treeModel.addTreeModelListener(new TestTreeModelListener());
-		TestNode rootNode = (TestNode) treeModel.getRoot();
-
-		TestNode child = rootNode.childNamed("node 0");
-		assertEquals(0, treeModel.getIndexOfChild(rootNode, child));
-
-		child = rootNode.childNamed("node 1");
-		assertEquals(1, treeModel.getIndexOfChild(rootNode, child));
-
-		child = rootNode.childNamed("node 2");
-		assertEquals(2, treeModel.getIndexOfChild(rootNode, child));
-		TestNode grandchild = child.childNamed("node 2.2");
-		assertEquals(2, treeModel.getIndexOfChild(child, grandchild));
-	}
-
-	public void testIsLeaf() {
-		TreeModel treeModel = this.buildSortedTreeModel();
-		treeModel.addTreeModelListener(new TestTreeModelListener());
-		TestNode rootNode = (TestNode) treeModel.getRoot();
-		assertFalse(treeModel.isLeaf(rootNode));
-		TestNode node = rootNode.childNamed("node 1");
-		assertFalse(treeModel.isLeaf(node));
-		node = rootNode.childNamed("node 3");
-		assertTrue(treeModel.isLeaf(node));
-	}
-
-
-	public void testTreeNodesChanged() {
-		// the only way to trigger a "node changed" event is to use an unsorted tree;
-		// a sorted tree will will trigger only "node removed" and "node inserted" events
-		TreeModel treeModel = this.buildUnsortedTreeModel();
-		this.eventFired = false;
-		treeModel.addTreeModelListener(new TestTreeModelListener() {
-			@Override
-			public void treeNodesChanged(TreeModelEvent e) {
-				TreeModelAdapterTests.this.eventFired = true;
-			}
-		});
-		TestNode rootNode = (TestNode) treeModel.getRoot();
-		TestNode node = rootNode.childNamed("node 1");
-		TestModel tm = node.getTestModel();
-		tm.setName("node 1++");
-		assertTrue(this.eventFired);
-
-		this.eventFired = false;
-		node = node.childNamed("node 1.1");
-		tm = node.getTestModel();
-		tm.setName("node 1.1++");
-		assertTrue(this.eventFired);
-	}
-
-	public void testTreeNodesInserted() {
-		// use an unsorted tree so the nodes are not re-shuffled...
-		TreeModel treeModel = this.buildUnsortedTreeModel();
-		this.eventFired = false;
-		treeModel.addTreeModelListener(new TestTreeModelListener() {
-			@Override
-			public void treeNodesInserted(TreeModelEvent e) {
-				TreeModelAdapterTests.this.eventFired = true;
-			}
-		});
-		TestNode rootNode = (TestNode) treeModel.getRoot();
-		TestNode node = rootNode.childNamed("node 1");
-		TestModel tm = node.getTestModel();
-		tm.addChild("new child...");
-		assertTrue(this.eventFired);
-
-		this.eventFired = false;
-		node = node.childNamed("node 1.1");
-		tm = node.getTestModel();
-		tm.addChild("another new child...");
-		assertTrue(this.eventFired);
-	}
-
-	public void testTreeNodesRemoved() {
-		TreeModel treeModel = this.buildUnsortedTreeModel();
-		this.eventFired = false;
-		treeModel.addTreeModelListener(new TestTreeModelListener() {
-			@Override
-			public void treeNodesRemoved(TreeModelEvent e) {
-				TreeModelAdapterTests.this.eventFired = true;
-			}
-		});
-		TestNode rootNode = (TestNode) treeModel.getRoot();
-		TestModel root = rootNode.getTestModel();
-		root.removeChild(root.childNamed("node 3"));
-		assertTrue(this.eventFired);
-
-		this.eventFired = false;
-		TestNode node = rootNode.childNamed("node 2");
-		TestModel tm = node.getTestModel();
-		tm.removeChild(tm.childNamed("node 2.2"));
-		assertTrue(this.eventFired);
-	}
-
-	public void testTreeStructureChanged() {
-		WritablePropertyValueModel<TreeNodeValueModel<Object>> nodeHolder = new SimplePropertyValueModel<TreeNodeValueModel<Object>>(this.buildSortedRootNode());
-		TreeModel treeModel = this.buildTreeModel(nodeHolder);
-		this.eventFired = false;
-		treeModel.addTreeModelListener(new TestTreeModelListener() {
-			@Override
-			public void treeNodesInserted(TreeModelEvent e) {
-				// do nothing
-			}
-			@Override
-			public void treeNodesRemoved(TreeModelEvent e) {
-				// do nothing
-			}
-			@Override
-			public void treeStructureChanged(TreeModelEvent e) {
-				TreeModelAdapterTests.this.eventFired = true;
-			}
-		});
-		nodeHolder.setValue(this.buildUnsortedRootNode());
-		assertTrue(this.eventFired);
-	}
-
-	/**
-	 * test a problem we had where removing a child from a tree would cause
-	 * the JTree to call #equals(Object) on each node removed (actually, it was
-	 * TreePath, but that was because its own #equals(Object) was called by
-	 * JTree); and since we had already removed the last listener from the
-	 * aspect adapter, the aspect adapter would say its value was null; this
-	 * would cause a NPE until we tweaked TreeModelAdapter to remove its
-	 * listeners from a node only *after* the node had been completely
-	 * removed from the JTree
-	 * @see TreeModelAdapter#removeNode(Object[], int, TreeNodeValueModel)
-	 * @see TreeModelAdapter#addNode(Object[], int, TreeNodeValueModel)
-	 */
-	public void testLazyInitialization() {
-		TreeModel treeModel = this.buildSpecialTreeModel();
-		JTree jTree = new JTree(treeModel);
-		TestNode rootNode = (TestNode) treeModel.getRoot();
-		TestModel root = rootNode.getTestModel();
-		// this would cause a NPE:
-		root.removeChild(root.childNamed("node 3"));
-		assertEquals(treeModel, jTree.getModel());
-	}
-
-
-	private TreeModel buildSortedTreeModel() {
-		return this.buildTreeModel(this.buildSortedRootNode());
-	}
-
-	private TestNode buildSortedRootNode() {
-		return new SortedTestNode(this.buildRoot());
-	}
-
-	private TreeModel buildUnsortedTreeModel() {
-		return this.buildTreeModel(this.buildUnsortedRootNode());
-	}
-
-	private TestNode buildUnsortedRootNode() {
-		return new UnsortedTestNode(this.buildRoot());
-	}
-
-	private TreeModel buildSpecialTreeModel() {
-		return this.buildTreeModel(this.buildSpecialRootNode());
-	}
-
-	private TestNode buildSpecialRootNode() {
-		return new SpecialTestNode(this.buildRoot());
-	}
-
-	private TestModel buildRoot() {
-		TestModel root = new TestModel("root");
-		/*Node node_0 = */root.addChild("node 0");
-		TestModel node_1 = root.addChild("node 1");
-		TestModel node_1_1 = node_1.addChild("node 1.1");
-		/*Node node_1_1_1 = */node_1_1.addChild("node 1.1.1");
-		TestModel node_2 = root.addChild("node 2");
-		/*Node node_2_0 = */node_2.addChild("node 2.0");
-		/*Node node_2_1 = */node_2.addChild("node 2.1");
-		/*Node node_2_2 = */node_2.addChild("node 2.2");
-		/*Node node_2_3 = */node_2.addChild("node 2.3");
-		/*Node node_2_4 = */node_2.addChild("node 2.4");
-		/*Node node_2_5 = */node_2.addChild("node 2.5");
-		/*Node node_3 = */root.addChild("node 3");
-		/*Node node_4 = */root.addChild("node 4");
-		return root;
-	}
-
-
-	// ********** member classes **********
-
-	/**
-	 * This is a typical model class with the typical change notifications
-	 * for #name and #children.
-	 */
-	public static class TestModel extends AbstractModel {
-
-		// the  parent is immutable; the root's parent is null
-		private final TestModel parent;
-
-		// the name is mutable; so I guess it isn't the "primary key" :-)
-		private String name;
-			public static final String NAME_PROPERTY = "name";
-
-		private final Collection<TestModel> children;
-			public static final String CHILDREN_COLLECTION = "children";
-
-
-		public TestModel(String name) {	// root ctor
-			this(null, name);
-		}
-		private TestModel(TestModel parent, String name) {
-			super();
-			this.parent = parent;
-			this.name = name;
-			this.children = new HashBag<TestModel>();
-		}
-
-		public TestModel getParent() {
-			return this.parent;
-		}
-
-		public String getName() {
-			return this.name;
-		}
-		public void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(NAME_PROPERTY, old, name);
-		}
-
-		public Iterator<TestModel> children() {
-			return new ReadOnlyIterator<TestModel>(this.children);
-		}
-		public int childrenSize() {
-			return this.children.size();
-		}
-		public TestModel addChild(String childName) {
-			TestModel child = new TestModel(this, childName);
-			this.addItemToCollection(child, this.children, CHILDREN_COLLECTION);
-			return child;
-		}
-		public TestModel[] addChildren(String[] childNames) {
-			TestModel[] newChildren = new TestModel[childNames.length];
-			for (int i = 0; i < childNames.length; i++) {
-				newChildren[i] = new TestModel(this, childNames[i]);
-			}
-			this.addItemsToCollection(newChildren, this.children, CHILDREN_COLLECTION);
-			return newChildren;
-		}
-		public void removeChild(TestModel child) {
-			this.removeItemFromCollection(child, this.children, CHILDREN_COLLECTION);
-		}
-		public void removeChildren(TestModel[] testModels) {
-			this.removeItemsFromCollection(testModels, this.children, CHILDREN_COLLECTION);
-		}
-		public void clearChildren() {
-			this.clearCollection(this.children, CHILDREN_COLLECTION);
-		}
-		public TestModel childNamed(String childName) {
-			for (TestModel child : this.children) {
-				if (child.getName().equals(childName)) {
-					return child;
-				}
-			}
-			throw new RuntimeException("child not found: " + childName);
-		}
-
-		public String dumpString() {
-			StringWriter sw = new StringWriter();
-			IndentingPrintWriter ipw = new IndentingPrintWriter(sw);
-			this.dumpOn(ipw);
-			return sw.toString();
-		}
-		public void dumpOn(IndentingPrintWriter writer) {
-			writer.println(this);
-			writer.indent();
-			for (TestModel child : this.children) {
-				child.dumpOn(writer);
-			}
-			writer.undent();
-		}
-		public void dumpOn(OutputStream stream) {
-			IndentingPrintWriter writer = new IndentingPrintWriter(new OutputStreamWriter(stream));
-			this.dumpOn(writer);
-			writer.flush();
-		}
-		public void dump() {
-			this.dumpOn(System.out);
-		}
-
-		@Override
-		public String toString() {
-			return StringTools.buildToStringFor(this, this.name);
-		}
-
-	}
-
-
-	/**
-	 * This Node wraps a TestModel and converts into something that can
-	 * be used by TreeModelAdapter. It converts changes to the TestModel's
-	 * name into "state changes" to the Node; and converts the
-	 * TestModel's children into a ListValueModel of Nodes whose order is
-	 * determined by subclass implementations.
-	 */
-	public static abstract class TestNode extends AbstractTreeNodeValueModel<Object> implements Displayable, Comparable<TestNode> {
-		/** the model object wrapped by this node */
-		private final TestModel testModel;
-		/** this node's parent node; null for the root node */
-		private final TestNode parent;
-		/** this node's child nodes */
-		private final ListValueModel<TreeNodeValueModel<Object>> childrenModel;
-		/** a listener that notifies us when the model object's "internal state" changes */
-		private final PropertyChangeListener testModelListener;
-
-
-		// ********** constructors/initialization **********
-
-		/**
-		 * root node constructor
-		 */
-		public TestNode(TestModel testModel) {
-			this(null, testModel);
-		}
-
-		/**
-		 * branch or leaf node constructor
-		 */
-		public TestNode(TestNode parent, TestModel testModel) {
-			super();
-			this.parent = parent;
-			this.testModel = testModel;
-			this.childrenModel = this.buildChildrenModel(testModel);
-			this.testModelListener = this.buildTestModelListener();
-		}
-
-		private PropertyChangeListener buildTestModelListener() {
-			return new PropertyChangeListener() {
-				public void propertyChanged(PropertyChangeEvent e) {
-					TestNode.this.testModelChanged(e);
-				}
-			};
-		}
-
-		/**
-		 * subclasses decide the order of the child nodes
-		 */
-		protected abstract ListValueModel<TreeNodeValueModel<Object>> buildChildrenModel(TestModel model);
-
-		/**
-		 * used by subclasses;
-		 * transform the test model children into nodes
-		 */
-		protected ListValueModel<TreeNodeValueModel<Object>> buildNodeAdapter(TestModel model) {
-			return new TransformationListValueModelAdapter<TestModel, TreeNodeValueModel<Object>>(this.buildChildrenAdapter(model)) {
-				@Override
-				protected TestNode transformItem(TestModel item) {
-					return TestNode.this.buildChildNode(item);
-				}
-			};
-		}
-
-		/**
-		 * subclasses must build a concrete node for the specified test model
-		 */
-		protected abstract TestNode buildChildNode(TestModel childTestModel);
-
-		/**
-		 * return a collection value model on the specified model's children
-		 */
-		protected CollectionValueModel<TestModel> buildChildrenAdapter(TestModel model) {
-			return new CollectionAspectAdapter<TestModel, TestModel>(TestModel.CHILDREN_COLLECTION, model) {
-				@Override
-				protected Iterator<TestModel> iterator_() {
-					return this.subject.children();
-				}
-				@Override
-				protected int size_() {
-					return this.subject.childrenSize();
-				}
-			};
-		}
-
-
-		// ********** TreeNodeValueModel implementation **********
-
-		public TestModel getValue() {
-			return this.testModel;
-		}
-
-		public TreeNodeValueModel<Object> parent() {
-			return this.parent;
-		}
-
-		public ListValueModel<TreeNodeValueModel<Object>> childrenModel() {
-			return this.childrenModel;
-		}
-
-
-		// ********** AbstractTreeNodeValueModel implementation **********
-
-		@Override
-		protected void engageValue() {
-			this.testModel.addPropertyChangeListener(TestModel.NAME_PROPERTY, this.testModelListener);
-		}
-
-		@Override
-		protected void disengageValue() {
-			this.testModel.removePropertyChangeListener(TestModel.NAME_PROPERTY, this.testModelListener);
-		}
-
-
-		// ********** Displayable implementation **********
-
-		public String displayString() {
-			return this.testModel.getName();
-		}
-
-		public Icon icon() {
-			return null;
-		}
-
-
-		// ********** debugging support **********
-
-		public String dumpString() {
-			StringWriter sw = new StringWriter();
-			IndentingPrintWriter ipw = new IndentingPrintWriter(sw);
-			this.dumpOn(ipw);
-			return sw.toString();
-		}
-
-		public void dumpOn(IndentingPrintWriter writer) {
-			writer.println(this);
-			writer.indent();
-			for (Iterator<TreeNodeValueModel<Object>> stream = this.childrenModel.iterator(); stream.hasNext(); ) {
-				// cast to a TestNode (i.e. this won't work with a NameTestNode in the tree)
-				((TestNode) stream.next()).dumpOn(writer);
-			}
-			writer.undent();
-		}
-
-		public void dumpOn(OutputStream stream) {
-			IndentingPrintWriter writer = new IndentingPrintWriter(new OutputStreamWriter(stream));
-			this.dumpOn(writer);
-			writer.flush();
-		}
-
-		public void dump() {
-			this.dumpOn(System.out);
-		}
-
-
-		// ********** behavior **********
-
-		/**
-		 * the model's name has changed, forward the event to our listeners
-		 */
-		protected void testModelChanged(PropertyChangeEvent e) {
-			// we need to notify listeners that our "internal state" has changed
-			this.fireStateChanged();
-			// our display string stays in synch with the model's name
-			this.firePropertyChanged(DISPLAY_STRING_PROPERTY, e.getOldValue(), e.getNewValue());
-		}
-
-
-		// ********** queries **********
-
-		public TestModel getTestModel() {
-			return this.testModel;
-		}
-
-		/**
-		 * testing convenience method
-		 */
-		public TestNode childNamed(String name) {
-			for (Iterator<TreeNodeValueModel<Object>> stream = this.childrenModel.iterator(); stream.hasNext(); ) {
-				TreeNodeValueModel<Object> childNode = stream.next();
-				if (childNode instanceof TestNode) {
-					if (((TestNode) childNode).getTestModel().getName().equals(name)) {
-						return (TestNode) childNode;
-					}
-				}
-			}
-			throw new IllegalArgumentException("child not found: " + name);
-		}
-
-
-		// ********** standard methods **********
-
-		public int compareTo(TestNode o) {
-			return this.displayString().compareTo(o.displayString());
-		}
-
-		@Override
-		public String toString() {
-			return "Node(" + this.testModel + ")";
-		}
-
-	}
-
-	/**
-	 * concrete implementation that keeps its children sorted
-	 */
-	public static class SortedTestNode extends TestNode {
-
-		// ********** constructors **********
-		public SortedTestNode(TestModel testModel) {
-			super(testModel);
-		}
-		public SortedTestNode(TestNode parent, TestModel testModel) {
-			super(parent, testModel);
-		}
-
-		// ********** initialization **********
-		/** the list should be sorted */
-		@Override
-		protected ListValueModel<TreeNodeValueModel<Object>> buildChildrenModel(TestModel testModel) {
-			return new SortedListValueModelWrapper<TreeNodeValueModel<Object>>(this.buildDisplayStringAdapter(testModel));
-		}
-		/** the display string (name) of each node can change */
-		protected ListValueModel<TreeNodeValueModel<Object>> buildDisplayStringAdapter(TestModel testModel) {
-			return new ItemPropertyListValueModelAdapter<TreeNodeValueModel<Object>>(this.buildNodeAdapter(testModel), DISPLAY_STRING_PROPERTY);
-		}
-		/** children are also sorted nodes */
-		@Override
-		protected TestNode buildChildNode(TestModel childNode) {
-			return new SortedTestNode(this, childNode);
-		}
-
-	}
-
-
-	/**
-	 * concrete implementation that leaves its children unsorted
-	 */
-	public static class UnsortedTestNode extends TestNode {
-
-		// ********** constructors **********
-		public UnsortedTestNode(TestModel testModel) {
-			super(testModel);
-		}
-		public UnsortedTestNode(TestNode parent, TestModel testModel) {
-			super(parent, testModel);
-		}
-
-		// ********** initialization **********
-		/** the list should NOT be sorted */
-		@Override
-		protected ListValueModel<TreeNodeValueModel<Object>> buildChildrenModel(TestModel testModel) {
-			return this.buildNodeAdapter(testModel);
-		}
-		/** children are also unsorted nodes */
-		@Override
-		protected TestNode buildChildNode(TestModel childNode) {
-			return new UnsortedTestNode(this, childNode);
-		}
-
-	}
-
-
-	/**
-	 * concrete implementation that leaves its children unsorted
-	 * and has a special set of children for "node 3"
-	 */
-	public static class SpecialTestNode extends UnsortedTestNode {
-
-		// ********** constructors **********
-		public SpecialTestNode(TestModel testModel) {
-			super(testModel);
-		}
-		public SpecialTestNode(TestNode parent, TestModel testModel) {
-			super(parent, testModel);
-		}
-
-		// ********** initialization **********
-		/** return a different list of children for "node 3" */
-		@Override
-		protected ListValueModel<TreeNodeValueModel<Object>> buildChildrenModel(TestModel testModel) {
-			if (testModel.getName().equals("node 3")) {
-				return this.buildSpecialChildrenModel();
-			}
-			return super.buildChildrenModel(testModel);
-		}
-		protected ListValueModel<TreeNodeValueModel<Object>> buildSpecialChildrenModel() {
-			TreeNodeValueModel<Object>[] children = new NameTestNode[1];
-			children[0] = new NameTestNode(this);
-			return new SimpleListValueModel<TreeNodeValueModel<Object>>(Arrays.asList(children));
-		}
-		/** children are also special nodes */
-		@Override
-		protected TestNode buildChildNode(TestModel childNode) {
-			return new SpecialTestNode(this, childNode);
-		}
-
-	}
-
-
-	public static class NameTestNode extends AbstractTreeNodeValueModel<Object> {
-		private final WritablePropertyValueModel<String> nameAdapter;
-		private final SpecialTestNode specialNode;		// parent node
-		private final PropertyChangeListener nameListener;
-		private final ListValueModel<TreeNodeValueModel<Object>> childrenModel;
-
-		// ********** construction/initialization **********
-
-		public NameTestNode(SpecialTestNode specialNode) {
-			super();
-			this.nameListener = this.buildNameListener();
-			this.specialNode = specialNode;
-			this.nameAdapter = this.buildNameAdapter();
-			this.childrenModel = new NullListValueModel<TreeNodeValueModel<Object>>();
-		}
-		protected PropertyChangeListener buildNameListener() {
-			return new PropertyChangeListener() {
-				public void propertyChanged(PropertyChangeEvent e) {
-					NameTestNode.this.nameChanged(e);
-				}
-			};
-		}
-		protected WritablePropertyValueModel<String> buildNameAdapter() {
-			return new PropertyAspectAdapter<TestModel, String>(TestModel.NAME_PROPERTY, this.getTestModel()) {
-				@Override
-				protected String buildValue_() {
-					return this.subject.getName();
-				}
-				@Override
-				protected void setValue_(String value) {
-					this.subject.setName(value);
-				}
-			};
-		}
-
-		public TestModel getTestModel() {
-			return this.specialNode.getTestModel();
-		}
-
-		// ********** TreeNodeValueModel implementation **********
-
-		public String getValue() {
-			return this.nameAdapter.getValue();
-		}
-		@Override
-		public void setValue(Object value) {
-			this.nameAdapter.setValue((String) value);
-		}
-		public TreeNodeValueModel<Object> parent() {
-			return this.specialNode;
-		}
-		public ListValueModel<TreeNodeValueModel<Object>> childrenModel() {
-			return this.childrenModel;
-		}
-
-		// ********** AbstractTreeNodeValueModel implementation **********
-
-		@Override
-		protected void engageValue() {
-			this.nameAdapter.addPropertyChangeListener(PropertyValueModel.VALUE, this.nameListener);
-		}
-		@Override
-		protected void disengageValue() {
-			this.nameAdapter.removePropertyChangeListener(PropertyValueModel.VALUE, this.nameListener);
-		}
-
-		// ********** behavior **********
-
-		protected void nameChanged(PropertyChangeEvent e) {
-			// we need to notify listeners that our "value" has changed
-			this.firePropertyChanged(VALUE, e.getOldValue(), e.getNewValue());
-		}
-	}
-
-	private TreeModel buildTreeModel(TestNode root) {
-		return this.buildTreeModel(new StaticPropertyValueModel<TreeNodeValueModel<Object>>(root));
-	}
-
-	private TreeModel buildTreeModel(PropertyValueModel<TreeNodeValueModel<Object>> rootHolder) {
-		return new TreeModelAdapter<Object>(rootHolder) {
-			@Override
-			protected ListChangeListener buildChildrenListener() {
-				return this.buildChildrenListener_();
-			}
-			@Override
-			protected StateChangeListener buildNodeStateListener() {
-				return this.buildNodeStateListener_();
-			}
-			@Override
-			protected PropertyChangeListener buildNodeValueListener() {
-				return this.buildNodeValueListener_();
-			}
-			@Override
-			protected PropertyChangeListener buildRootListener() {
-				return this.buildRootListener_();
-			}
-		};
-	}
-
-
-
-	/**
-	 * listener that will blow up with any event;
-	 * override and implement expected event methods
-	 */
-	public class TestTreeModelListener implements TreeModelListener {
-		public void treeNodesChanged(TreeModelEvent e) {
-			fail("unexpected event");
-		}
-		public void treeNodesInserted(TreeModelEvent e) {
-			fail("unexpected event");
-		}
-		public void treeNodesRemoved(TreeModelEvent e) {
-			fail("unexpected event");
-		}
-		public void treeStructureChanged(TreeModelEvent e) {
-			fail("unexpected event");
-		}
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/TreeModelAdapterUITest.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/TreeModelAdapterUITest.java
deleted file mode 100644
index 7339172..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/model/value/swing/TreeModelAdapterUITest.java
+++ /dev/null
@@ -1,425 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.model.value.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.TextField;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTree;
-import javax.swing.WindowConstants;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.DefaultTreeSelectionModel;
-import javax.swing.tree.TreeModel;
-import javax.swing.tree.TreePath;
-import javax.swing.tree.TreeSelectionModel;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.EnumerationIterator;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.TreeModelAdapter;
-import org.eclipse.jpt.utility.internal.swing.Displayable;
-import org.eclipse.jpt.utility.model.value.TreeNodeValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.jpt.utility.tests.internal.model.value.swing.TreeModelAdapterTests.SortedTestNode;
-import org.eclipse.jpt.utility.tests.internal.model.value.swing.TreeModelAdapterTests.TestModel;
-import org.eclipse.jpt.utility.tests.internal.model.value.swing.TreeModelAdapterTests.TestNode;
-import org.eclipse.jpt.utility.tests.internal.model.value.swing.TreeModelAdapterTests.UnsortedTestNode;
-
-/**
- * an example UI for testing the TreeModelAdapter
- */
-@SuppressWarnings("nls")
-public class TreeModelAdapterUITest {
-
-	// hold the tree so we can restore its expansion state
-	private JTree tree;
-	private WritablePropertyValueModel<TreeNodeValueModel<Object>> rootNodeHolder;
-	private boolean sorted;
-	private TreeModel treeModel;
-	private TreeSelectionModel treeSelectionModel;
-	private TextField nameTextField;
-
-	public static void main(String[] args) throws Exception {
-		new TreeModelAdapterUITest().exec();
-	}
-
-	private TreeModelAdapterUITest() {
-		super();
-	}
-
-	private void exec() throws Exception {
-		this.rootNodeHolder = this.buildRootNodeHolder();
-		this.sorted = this.rootNodeHolder.getValue() instanceof SortedTestNode;
-		this.treeModel = this.buildTreeModel();
-		this.treeSelectionModel = this.buildTreeSelectionModel();
-		this.nameTextField = new TextField();
-		this.openWindow();
-	}
-
-	private WritablePropertyValueModel<TreeNodeValueModel<Object>> buildRootNodeHolder() {
-		return new SimplePropertyValueModel<TreeNodeValueModel<Object>>(this.buildSortedRootNode());
-	}
-
-	private TestNode buildSortedRootNode() {
-		return new SortedTestNode(this.buildRoot());
-	}
-
-	private TestNode buildUnsortedRootNode() {
-		return new UnsortedTestNode(this.buildRoot());
-	}
-
-	private TestModel buildRoot() {
-		TestModel root = new TestModel("root");
-
-		TestModel node_1 = root.addChild("node 1");
-		/*Node node_1_1 = */node_1.addChild("node 1.1");
-
-		TestModel node_2 = root.addChild("node 2");
-		/*Node node_2_1 = */node_2.addChild("node 2.1");
-		TestModel node_2_2 = node_2.addChild("node 2.2");
-		/*Node node_2_2_1 = */node_2_2.addChild("node 2.2.1");
-		/*Node node_2_2_2 = */node_2_2.addChild("node 2.2.2");
-		/*Node node_2_3 = */node_2.addChild("node 2.3");
-		/*Node node_2_4 = */node_2.addChild("node 2.4");
-		/*Node node_2_5 = */node_2.addChild("node 2.5");
-
-		TestModel node_3 = root.addChild("node 3");
-		TestModel node_3_1 = node_3.addChild("node 3.1");
-		TestModel node_3_1_1 = node_3_1.addChild("node 3.1.1");
-		/*Node node_3_1_1_1 = */node_3_1_1.addChild("node 3.1.1.1");
-
-		/*Node node_4 = */root.addChild("node 4");
-
-		return root;
-	}
-
-	private TreeModel buildTreeModel() {
-		return new TreeModelAdapter<Object>(this.rootNodeHolder);
-	}
-
-	private TreeSelectionModel buildTreeSelectionModel() {
-		TreeSelectionModel tsm = new DefaultTreeSelectionModel();
-		tsm.addTreeSelectionListener(this.buildTreeSelectionListener());
-		tsm.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
-		return tsm;
-	}
-
-	private TreeSelectionListener buildTreeSelectionListener() {
-		return new TreeSelectionListener() {
-			public void valueChanged(TreeSelectionEvent e) {
-				TreeModelAdapterUITest.this.treeSelectionChanged(e);
-			}
-		};
-	}
-
-	void treeSelectionChanged(@SuppressWarnings("unused") TreeSelectionEvent e) {
-		TestModel selectedTestModel = this.selectedTestModel();
-		if (selectedTestModel != null) {
-			this.nameTextField.setText(selectedTestModel.getName());
-		}
-	}
-
-	private void openWindow() {
-		JFrame window = new JFrame(this.getClass().getName());
-		window.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		window.addWindowListener(this.buildWindowListener());
-		window.getContentPane().add(this.buildMainPanel(), "Center");
-		window.setLocation(300, 300);
-		window.setSize(400, 400);
-		window.setVisible(true);
-	}
-
-	private WindowListener buildWindowListener() {
-		return new WindowAdapter() {
-			@Override
-			public void windowClosing(WindowEvent e) {
-				e.getWindow().setVisible(false);
-				System.exit(0);
-			}
-		};
-	}
-
-	private Component buildMainPanel() {
-		JPanel mainPanel = new JPanel(new BorderLayout());
-		mainPanel.add(this.buildTreePane(), BorderLayout.CENTER);
-		mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH);
-		return mainPanel;
-	}
-
-	private Component buildTreePane() {
-		return new JScrollPane(this.buildTree());
-	}
-
-	private JTree buildTree() {
-		this.tree = new JTree(this.treeModel) {
-			@Override
-			public String convertValueToText(Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
-				return ((Displayable) value).displayString();
-			}
-		};
-		this.tree.setSelectionModel(this.treeSelectionModel);
-		this.tree.setRootVisible(true);
-		this.tree.setShowsRootHandles(true);
-		this.tree.setRowHeight(20);
-		this.tree.setDoubleBuffered(true);
-		return this.tree;
-	}
-
-	private Component buildControlPanel() {
-		JPanel controlPanel = new JPanel(new GridLayout(0, 1));
-		controlPanel.add(this.buildAddRenameNodePanel());
-		controlPanel.add(this.buildMiscPanel());
-		return controlPanel;
-	}
-
-	private Component buildAddRenameNodePanel() {
-		JPanel addRenameNodePanel = new JPanel(new BorderLayout());
-		addRenameNodePanel.add(this.buildAddButton(), BorderLayout.WEST);
-		addRenameNodePanel.add(this.nameTextField, BorderLayout.CENTER);
-		addRenameNodePanel.add(this.buildRenameButton(), BorderLayout.EAST);
-		return addRenameNodePanel;
-	}
-
-	private Component buildMiscPanel() {
-		JPanel miscPanel = new JPanel(new GridLayout(1, 0));
-		miscPanel.add(this.buildClearChildrenButton());
-		miscPanel.add(this.buildRemoveButton());
-		miscPanel.add(this.buildResetButton());
-		return miscPanel;
-	}
-
-	private String getName() {
-		return this.nameTextField.getText();
-	}
-
-	// ********** queries **********
-	private TestNode selectedNode() {
-		if (this.treeSelectionModel.isSelectionEmpty()) {
-			return null;
-		}
-		return (TestNode) this.treeSelectionModel.getSelectionPath().getLastPathComponent();
-	}
-
-	private TestModel selectedTestModel() {
-		if (this.treeSelectionModel.isSelectionEmpty()) {
-			return null;
-		}
-		return this.selectedNode().getValue();
-	}
-
-	private TestNode rootNode() {
-		return (TestNode) this.treeModel.getRoot();
-	}
-
-	private TestModel root() {
-		return this.rootNode().getValue();
-	}
-
-	private Collection<TreePath> expandedPaths() {
-		Enumeration<TreePath> stream = this.tree.getExpandedDescendants(new TreePath(this.rootNode()));
-		if (stream == null) {
-			return Collections.emptyList();
-		}
-		return CollectionTools.list(new EnumerationIterator<TreePath>(stream));
-	}
-
-	// ********** behavior **********
-	private void setSelectedNode(TestNode selectedNode) {
-		this.treeSelectionModel.setSelectionPath(new TreePath(selectedNode.path()));
-	}
-
-	private void expandPaths(Collection<TreePath> paths) {
-		for (TreePath path : paths) {
-			this.tree.expandPath(path);
-		}
-	}
-
-	// ********** add **********
-	private JButton buildAddButton() {
-		return new JButton(this.buildAddAction());
-	}
-
-	private Action buildAddAction() {
-		Action action = new AbstractAction("add") {
-			public void actionPerformed(ActionEvent event) {
-				TreeModelAdapterUITest.this.addNode();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	/**
-	 * adding causes the tree to be sorted and nodes to be
-	 * removed and re-added; so we have to fiddle with the expansion state
-	 */
-	void addNode() {
-		TestModel selectedTestModel = this.selectedTestModel();
-		if (selectedTestModel != null) {
-			String name = this.getName();
-			// save the expansion state and restore it after the add
-			Collection<TreePath> paths = this.expandedPaths();
-
-			selectedTestModel.addChild(name);
-
-			this.expandPaths(paths);
-			this.setSelectedNode(this.selectedNode().childNamed(name));
-		}
-	}
-
-	// ********** remove **********
-	private JButton buildRemoveButton() {
-		return new JButton(this.buildRemoveAction());
-	}
-
-	private Action buildRemoveAction() {
-		Action action = new AbstractAction("remove") {
-			public void actionPerformed(ActionEvent event) {
-				TreeModelAdapterUITest.this.removeNode();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	/**
-	 * we need to figure out which node to select after
-	 * the selected node is deleted
-	 */
-	void removeNode() {
-		TestModel selectedTestModel = this.selectedTestModel();
-		// do not allow the root to be removed
-		if ((selectedTestModel != null) && (selectedTestModel != this.root())) {
-			// save the parent and index, so we can select another, nearby, node
-			// once the selected node is removed
-			TestNode parentNode = (TestNode) this.selectedNode().parent();
-			int childIndex = parentNode.indexOfChild(this.selectedNode());
-
-			selectedTestModel.getParent().removeChild(selectedTestModel);
-
-			int childrenSize = parentNode.childrenSize();
-			if (childIndex < childrenSize) {
-				// select the child that moved up and replaced the just-deleted child
-				this.setSelectedNode((TestNode) parentNode.child(childIndex));
-			} else {
-				if (childrenSize == 0) {
-					// if there are no more children, select the parent
-					this.setSelectedNode(parentNode);
-				} else {
-					// if the child at the bottom of the list was deleted, select the next child up
-					this.setSelectedNode((TestNode) parentNode.child(childIndex - 1));
-				}
-			}
-		}
-	}
-
-	// ********** rename **********
-	private JButton buildRenameButton() {
-		return new JButton(this.buildRenameAction());
-	}
-
-	private Action buildRenameAction() {
-		Action action = new AbstractAction("rename") {
-			public void actionPerformed(ActionEvent event) {
-				TreeModelAdapterUITest.this.renameNode();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	/**
-	 * renaming causes the tree to be sorted and nodes to be
-	 * removed and re-added; so we have to fiddle with the expansion state
-	 */
-	void renameNode() {
-		TestModel selectedTestModel = this.selectedTestModel();
-		if (selectedTestModel != null) {
-			// save the node and re-select it after the rename
-			TestNode selectedNode = this.selectedNode();
-			// save the expansion state and restore it after the rename
-			Collection<TreePath> paths = this.expandedPaths();
-
-			selectedTestModel.setName(this.getName());
-
-			this.expandPaths(paths);
-			this.setSelectedNode(selectedNode);
-		}
-	}
-
-	// ********** clear children **********
-	private JButton buildClearChildrenButton() {
-		return new JButton(this.buildClearChildrenAction());
-	}
-
-	private Action buildClearChildrenAction() {
-		Action action = new AbstractAction("clear children") {
-			public void actionPerformed(ActionEvent event) {
-				TreeModelAdapterUITest.this.clearChildren();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	/**
-	 * nothing special, we just want to test #fireCollectionChanged(String)
-	 */
-	void clearChildren() {
-		TestModel selectedTestModel = this.selectedTestModel();
-		if (selectedTestModel != null) {
-			selectedTestModel.clearChildren();
-		}
-	}
-
-	// ********** reset **********
-	private JButton buildResetButton() {
-		return new JButton(this.buildResetAction());
-	}
-
-	private Action buildResetAction() {
-		Action action = new AbstractAction("reset") {
-			public void actionPerformed(ActionEvent event) {
-				TreeModelAdapterUITest.this.reset();
-			}
-		};
-		action.setEnabled(true);
-		return action;
-	}
-
-	/**
-	 * test the adapter's root node holder;
-	 * toggle between sorted and unsorted lists
-	 */
-	void reset() {
-		this.sorted = ! this.sorted;
-		if (this.sorted) {
-			this.rootNodeHolder.setValue(this.buildSortedRootNode());
-		} else {
-			this.rootNodeHolder.setValue(this.buildUnsortedRootNode());
-		}
-		this.tree.expandPath(new TreePath(this.rootNode()));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/node/AbstractNodeTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/node/AbstractNodeTests.java
deleted file mode 100644
index 8171433..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/node/AbstractNodeTests.java
+++ /dev/null
@@ -1,495 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.node;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
-import org.eclipse.jpt.utility.internal.node.AbstractNode;
-import org.eclipse.jpt.utility.internal.node.Node;
-import org.eclipse.jpt.utility.internal.node.Problem;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class AbstractNodeTests extends TestCase {
-	private TestWorkbenchModel root;
-
-	public AbstractNodeTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.root = this.buildRoot();
-	}
-
-	private TestWorkbenchModel buildRoot() {
-		TestWorkbenchModel r = new RootTestWorkbenchModel("root");
-			TestWorkbenchModel node1 = r.addTestChildNamed("node 1");
-				TestWorkbenchModel node1_1 = node1.addTestChildNamed("node 1.1");
-					node1_1.addTestChildNamed("node 1.1.1");
-					node1_1.addTestChildNamed("node 1.1.2");
-					node1_1.addTestChildNamed("node 1.1.3");
-				node1.addTestChildNamed("node 1.2");
-			TestWorkbenchModel node2 = r.addTestChildNamed("node 2");
-				node2.addTestChildNamed("node 2.1");
-				node2.addTestChildNamed("node 2.2");
-			r.addTestChildNamed("node 3");
-			r.addTestChildNamed("node 4");
-
-		// mark the entire tree clean
-		r.markEntireBranchClean();
-		return r;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	public void testTestWorkbenchModel() {
-		// make sure our test class works OK...
-		assertNull(this.root.testChildNamed(""));
-		assertNotNull(this.root.testChildNamed("node 1"));
-		assertTrue(this.root.testChildNamed("node 1").isClean());
-		assertTrue(this.root.testChildNamed("node 1").isCleanBranch());
-		assertNotNull(this.root.testChildNamed("node 2"));
-		assertTrue(this.root.testChildNamed("node 2").isClean());
-		assertTrue(this.root.testChildNamed("node 2").isCleanBranch());
-		assertNull(this.root.testChildNamed("node 2.1"));
-
-		assertNull(this.root.testDescendantNamed(""));
-		assertNotNull(this.root.testDescendantNamed("node 1"));
-		assertNotNull(this.root.testDescendantNamed("node 2"));
-		assertNotNull(this.root.testDescendantNamed("node 2.1"));
-		assertTrue(this.root.testDescendantNamed("node 2.1").isClean());
-		assertTrue(this.root.testDescendantNamed("node 2.1").isCleanBranch());
-		assertNotNull(this.root.testDescendantNamed("node 1.1.3"));
-		assertTrue(this.root.testDescendantNamed("node 1.1.3").isClean());
-		assertTrue(this.root.testDescendantNamed("node 1.1.3").isCleanBranch());
-	}
-
-	public void testParentAndChildren() {
-		TestWorkbenchModel node = this.root.testDescendantNamed("node 1.1.3");
-		assertEquals("node 1.1.3", node.getName());
-		assertEquals(0, CollectionTools.size(node.children()));
-
-		node = (TestWorkbenchModel) node.getParent();
-		assertEquals("node 1.1", node.getName());
-		assertEquals(3, CollectionTools.size(node.children()));
-
-		node = (TestWorkbenchModel) node.getParent();
-		assertEquals("node 1", node.getName());
-		assertEquals(2, CollectionTools.size(node.children()));
-
-		node = (TestWorkbenchModel) node.getParent();
-		assertEquals("root", node.getName());
-		assertEquals(4, CollectionTools.size(node.children()));
-
-		node = (TestWorkbenchModel) node.getParent();
-		assertNull(node);
-	}
-
-	public void testDirty() {
-		TestWorkbenchModel node = this.root.testDescendantNamed("node 1.1.3");
-		node.setSize(42);
-		assertTrue(node.isDirty());
-
-		TestWorkbenchModel parent = (TestWorkbenchModel) node.getParent();
-		assertTrue(parent.isClean());
-		assertTrue(this.root.isClean());
-	}
-
-	public void testDirtyUnchangedAttribute() {
-		TestWorkbenchModel node = this.root.testDescendantNamed("node 1.1.3");
-		node.setSize(42);
-		assertTrue(node.isDirty());
-
-		TestWorkbenchModel parent = (TestWorkbenchModel) node.getParent();
-		assertTrue(parent.isClean());
-		assertTrue(this.root.isClean());
-
-		this.root.markEntireBranchClean();
-		// set size to same number - should stay clean
-		node.setSize(42);
-		assertTrue(node.isClean());
-		assertTrue(parent.isClean());
-		assertTrue(this.root.isClean());
-	}
-
-	public void testDirtyBranch() {
-		TestWorkbenchModel node = this.root.testDescendantNamed("node 1.1.3");
-		node.setSize(42);
-		assertTrue(node.isDirtyBranch());
-
-		TestWorkbenchModel parent = (TestWorkbenchModel) node.getParent();
-		assertTrue(parent.isDirtyBranch());
-		assertTrue(this.root.isDirtyBranch());
-
-		parent.setSize(77);
-		assertTrue(parent.isDirty());
-		assertTrue(parent.isDirtyBranch());
-
-		node.markEntireBranchClean();
-		assertTrue(parent.isDirty());
-		assertTrue(parent.isDirtyBranch());
-	}
-
-	public void testDirtyBranchCleanChildDirtyParent() {
-		TestWorkbenchModel node = this.root.testDescendantNamed("node 1.1.3");
-		node.setSize(42);
-
-		TestWorkbenchModel parent = (TestWorkbenchModel) node.getParent();
-		parent.setSize(77);
-		assertTrue(parent.isDirty());
-		assertTrue(parent.isDirtyBranch());
-
-		// now, clean the child, but leave the parent dirty
-		node.markEntireBranchClean();
-		assertTrue(parent.isDirty());
-		assertTrue(parent.isDirtyBranch());
-	}
-
-	public void testDirtyBranchCleanChildDirtyChild() {
-		TestWorkbenchModel node1 = this.root.testDescendantNamed("node 1.1.1");
-		node1.setSize(41);
-		TestWorkbenchModel node2 = this.root.testDescendantNamed("node 1.1.2");
-		node2.setSize(42);
-
-		TestWorkbenchModel parent = (TestWorkbenchModel) node1.getParent();
-		assertTrue(parent.isClean());
-		assertTrue(parent.isDirtyBranch());
-
-		// now, clean the first child, but leave the second child dirty
-		node1.markEntireBranchClean();
-		assertTrue(parent.isClean());
-		assertTrue(parent.isDirtyBranch());
-	}
-
-	public void testDirtyBranchForced() {
-		TestWorkbenchModel node = this.root.testDescendantNamed("node 1.1.3");
-		TestWorkbenchModel parent = (TestWorkbenchModel) node.getParent();
-
-		assertTrue(node.isClean());
-		assertTrue(node.isCleanBranch());
-		assertTrue(parent.isClean());
-		assertTrue(parent.isCleanBranch());
-		assertTrue(this.root.isClean());
-		assertTrue(this.root.isCleanBranch());
-
-		this.root.markEntireBranchDirty();
-
-		assertTrue(node.isDirty());
-		assertTrue(node.isDirtyBranch());
-		assertTrue(parent.isDirty());
-		assertTrue(parent.isDirtyBranch());
-		assertTrue(this.root.isDirty());
-		assertTrue(this.root.isDirtyBranch());
-	}
-
-	public void testDirtyTransientAttribute() {
-		TestWorkbenchModel node = this.root.testDescendantNamed("node 1.1.3");
-		node.setName("BOGUS");
-		assertTrue(node.isDirty());
-		TestWorkbenchModel parent = (TestWorkbenchModel) node.getParent();
-		assertTrue(parent.isClean());
-		assertTrue(parent.isDirtyBranch());
-		assertTrue(this.root.isClean());
-		assertTrue(this.root.isDirtyBranch());
-
-		this.root.markEntireBranchClean();
-
-		this.root.validateBranch();
-
-		assertTrue(this.root.problemsSize() == 0);
-		assertTrue(node.branchProblems().hasNext());
-		assertTrue(parent.problemsSize() == 0);
-		assertTrue(parent.branchProblems().hasNext());
-		assertTrue(node.problemsSize() > 0);
-
-		// since problems are transient, everything should still be clean
-		assertTrue(node.isClean());
-		assertTrue(node.isCleanBranch());
-		assertTrue(parent.isClean());
-		assertTrue(parent.isCleanBranch());
-		assertTrue(this.root.isClean());
-		assertTrue(this.root.isCleanBranch());
-	}
-
-	public void testProblems() {
-		TestWorkbenchModel node = this.root.testDescendantNamed("node 1.1.3");
-		node.setName("BOGUS");
-		TestWorkbenchModel parent = (TestWorkbenchModel) node.getParent();
-
-		this.root.validateBranch();
-
-		assertEquals(0, this.root.problemsSize());
-		assertTrue(node.branchProblems().hasNext());
-		assertEquals(0, parent.problemsSize());
-		assertTrue(parent.branchProblems().hasNext());
-		assertEquals(1, node.problemsSize());
-		Problem problem1 = node.problems().next();
-
-		// now create another problem that should remove the old problem
-		node.setName("STILL BOGUS");
-		this.root.validateBranch();
-
-		assertEquals(0, this.root.problemsSize());
-		assertTrue(node.branchProblems().hasNext());
-		assertEquals(0, parent.problemsSize());
-		assertTrue(parent.branchProblems().hasNext());
-		assertEquals(1, node.problemsSize());
-		Problem problem2 = node.problems().next();
-		assertFalse(problem1 == problem2);
-		problem1 = problem2;
-
-		// now create another problem that should replace the old problem
-		node.setName("STILL BOGUS");
-		this.root.validateBranch();
-
-		assertEquals(0, this.root.problemsSize());
-		assertTrue(node.branchProblems().hasNext());
-		assertEquals(0, parent.problemsSize());
-		assertTrue(parent.branchProblems().hasNext());
-		assertEquals(1, node.problemsSize());
-		problem2 = node.problems().next();
-		// the same problem should be there
-		assertTrue(problem1.equals(problem2));
-	}
-
-	public void testBranchProblems() {
-		TestWorkbenchModel node = this.root.testDescendantNamed("node 1.1.3");
-		node.setName("BOGUS");
-		TestWorkbenchModel parent = (TestWorkbenchModel) node.getParent();
-		parent.setName("BOGUS TOO");
-		this.root.setName("BOGUS TOO TOO");
-
-		this.root.validateBranch();
-
-		assertEquals(1, this.root.problemsSize());
-		assertEquals(3, this.root.branchProblemsSize());
-		assertEquals(1, parent.problemsSize());
-		assertEquals(2, parent.branchProblemsSize());
-		assertEquals(1, node.problemsSize());
-		assertEquals(1, node.branchProblemsSize());
-
-		node.setName("okie-dokie");
-
-		this.root.validateBranch();
-
-		assertEquals(1, this.root.problemsSize());
-		assertEquals(2, this.root.branchProblemsSize());
-		assertEquals(1, parent.problemsSize());
-		assertEquals(1, parent.branchProblemsSize());
-		assertEquals(0, node.problemsSize());
-		assertEquals(0, node.branchProblemsSize());
-	}
-
-	public void testClearAllBranchProblems() {
-		TestWorkbenchModel node = this.root.testDescendantNamed("node 1.1.3");
-		node.setName("BOGUS");
-		TestWorkbenchModel parent = (TestWorkbenchModel) node.getParent();
-		parent.setName("BOGUS TOO");
-		this.root.setName("BOGUS TOO TOO");
-
-		this.root.validateBranch();
-
-		assertEquals(1, this.root.problemsSize());
-		assertEquals(3, this.root.branchProblemsSize());
-		assertEquals(1, parent.problemsSize());
-		assertEquals(2, parent.branchProblemsSize());
-		assertEquals(1, node.problemsSize());
-		assertEquals(1, node.branchProblemsSize());
-
-		parent.clearAllBranchProblems();
-
-		assertEquals(1, this.root.problemsSize());
-		assertEquals(1, this.root.branchProblemsSize());
-		assertEquals(0, parent.problemsSize());
-		assertEquals(0, parent.branchProblemsSize());
-		assertEquals(0, node.problemsSize());
-		assertEquals(0, CollectionTools.size(node.branchProblems()));
-	}
-
-	public void testRemovedBranchProblems() {
-		TestWorkbenchModel node = this.root.testDescendantNamed("node 1.1.3");
-		node.setName("BOGUS");
-		TestWorkbenchModel parent = (TestWorkbenchModel) node.getParent();
-		parent.setName("BOGUS TOO");
-		this.root.setName("BOGUS TOO TOO");
-
-		this.root.validateBranch();
-
-		assertEquals(1, this.root.problemsSize());
-		assertEquals(3, CollectionTools.size(this.root.branchProblems()));
-		assertEquals(1, parent.problemsSize());
-		assertEquals(2, parent.branchProblemsSize());
-		assertEquals(1, node.problemsSize());
-		assertEquals(1, CollectionTools.size(node.branchProblems()));
-
-		// completely remove a node that has problems -
-		// the entire tree should recalculate its "branch" problems
-		parent.removeTestChild(node);
-
-		this.root.validateBranch();
-
-		assertEquals(1, this.root.problemsSize());
-		assertEquals(2, CollectionTools.size(this.root.branchProblems()));
-		assertEquals(1, parent.problemsSize());
-		assertEquals(1, parent.branchProblemsSize());
-	}
-
-
-	// ********** inner classes **********
-
-	public class TestWorkbenchModel extends AbstractNode {
-		private String name;
-			public static final String NAME_PROPERTY = "name";
-		private int size;
-			public static final String SIZE_PROPERTY = "size";
-		private Collection<TestWorkbenchModel> testChildren;
-			public static final String TEST_CHILDREN_COLLECTION = "children";
-	
-		// ********** construction/initialization **********
-		public TestWorkbenchModel(TestWorkbenchModel parent, String name) {
-			super(parent);
-			if (name == null) {
-				throw new NullPointerException();
-			}
-			this.name = name;
-		}
-		@Override
-		protected void initialize() {
-			super.initialize();
-			this.size = 0;
-			this.testChildren = new HashBag<TestWorkbenchModel>();
-		}
-		
-		@Override
-		protected void checkParent(Node parent) {
-			// do nothing
-		}
-	
-	
-		// ********** accessors **********
-		public String getName() {
-			return this.name;
-		}
-		public void setName(String name) {
-			Object old = this.name;
-			this.name = name;
-			this.firePropertyChanged(NAME_PROPERTY, old, name);
-		}
-	
-		public int getSize() {
-			return this.size;
-		}
-		public void setSize(int size) {
-			int old = this.size;
-			this.size = size;
-			this.firePropertyChanged(SIZE_PROPERTY, old, size);
-		}
-	
-		public Iterator<TestWorkbenchModel> testChildren() {
-			return new CloneIterator<TestWorkbenchModel>(this.testChildren) {
-				@Override
-				protected void remove(TestWorkbenchModel current) {
-					TestWorkbenchModel.this.removeTestChild(current);
-				}
-			};
-		}
-		public int testChildrenSize() {
-			return this.testChildren.size();
-		}
-		private TestWorkbenchModel addTestChild(TestWorkbenchModel testChild) {
-			this.addItemToCollection(testChild, this.testChildren, TEST_CHILDREN_COLLECTION);
-			return testChild;
-		}
-		public TestWorkbenchModel addTestChildNamed(String childName) {
-			if (this.testChildNamed(childName) != null) {
-				throw new IllegalArgumentException(childName);
-			}
-			return this.addTestChild(new TestWorkbenchModel(this, childName));
-		}
-		public void removeTestChild(TestWorkbenchModel testChild) {
-			this.removeItemFromCollection(testChild, this.testChildren, TEST_CHILDREN_COLLECTION);
-		}
-	
-		// ********** queries **********
-		public String displayString() {
-			return this.name;
-		}
-		public TestWorkbenchModel testChildNamed(String childName) {
-			for (TestWorkbenchModel testChild : this.testChildren) {
-				if (testChild.getName().equals(childName)) {
-					return testChild;
-				}
-			}
-			return null;
-		}
-		public TestWorkbenchModel testDescendantNamed(String descendantName) {
-			for (TestWorkbenchModel testDescendant : this.testChildren) {
-				if (testDescendant.getName().equals(descendantName)) {
-					return testDescendant;
-				}
-				// recurse...
-				testDescendant = testDescendant.testDescendantNamed(descendantName);
-				if (testDescendant != null) {
-					return testDescendant;
-				}
-			}
-			return null;
-		}
-	
-		// ********** behavior **********
-		@Override
-		protected void addChildrenTo(List<Node> children) {
-			super.addChildrenTo(children);
-			children.addAll(this.testChildren);
-		}
-		@Override
-		protected void addProblemsTo(List<Problem> currentProblems) {
-			super.addProblemsTo(currentProblems);
-			// names must be all lowercase...
-			for (int i = this.name.length(); i-- > 0; ) {
-				char c = this.name.charAt(i);
-				if (Character.isLetter(c) && ! Character.isLowerCase(c)) {
-					currentProblems.add(this.buildProblem("NAME_MUST_BE_LOWERCASE", this.name));
-					return;
-				}
-			}
-		}
-		@Override
-		public void toString(StringBuilder sb) {
-			sb.append(this.name);
-		}
-	}
-
-
-	private class RootTestWorkbenchModel extends TestWorkbenchModel {
-		public RootTestWorkbenchModel(String name) {
-			super(null, name);
-		}
-		@Override
-		public Validator getValidator() {
-			return Node.NULL_VALIDATOR;
-		}
-	}
-
-}
-
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/node/JptUtilityNodeTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/node/JptUtilityNodeTests.java
deleted file mode 100644
index 94f682d..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/node/JptUtilityNodeTests.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.node;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class JptUtilityNodeTests {
-	
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUtilityNodeTests.class.getPackage().getName());
-	
-		suite.addTestSuite(AbstractNodeTests.class);
-	
-		return suite;
-	}
-	
-	private JptUtilityNodeTests() {
-		super();
-	}
-	
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/synchronizers/AsynchronousSynchronizerTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/synchronizers/AsynchronousSynchronizerTests.java
deleted file mode 100644
index a30814a..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/synchronizers/AsynchronousSynchronizerTests.java
+++ /dev/null
@@ -1,443 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.synchronizers;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.internal.CompositeException;
-import org.eclipse.jpt.utility.internal.ConsumerThreadCoordinator;
-import org.eclipse.jpt.utility.internal.ReflectionTools;
-import org.eclipse.jpt.utility.internal.synchronizers.AsynchronousSynchronizer;
-import org.eclipse.jpt.utility.internal.synchronizers.Synchronizer;
-import org.eclipse.jpt.utility.tests.internal.MultiThreadedTestCase;
-
-@SuppressWarnings("nls")
-public class AsynchronousSynchronizerTests
-	extends MultiThreadedTestCase
-{
-	PrimaryModel1 primaryModel1;
-	SecondaryModel1 secondaryModel1;
-	Command command1;
-	Synchronizer synchronizer1;
-
-	PrimaryModel2 primaryModel2;
-	SecondaryModel2 secondaryModel2;
-	Command command2;
-	Synchronizer synchronizer2;
-
-	public AsynchronousSynchronizerTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.primaryModel1 = new PrimaryModel1();
-		this.secondaryModel1 = new SecondaryModel1(this.primaryModel1);
-		this.command1 = new SynchronizeSecondaryModelCommand1(this.secondaryModel1);
-		this.synchronizer1 = new AsynchronousSynchronizer(this.command1, this.buildThreadFactory());
-		this.primaryModel1.setSynchronizer(this.synchronizer1);
-
-		this.primaryModel2 = new PrimaryModel2();
-		this.secondaryModel2 = new SecondaryModel2(this.primaryModel2);
-		this.command2 = new SynchronizeSecondaryModelCommand2(this.primaryModel2, this.secondaryModel2);
-		this.synchronizer2 = new AsynchronousSynchronizer(this.command2, this.buildThreadFactory());
-		this.primaryModel2.setSynchronizer(this.synchronizer2);
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		this.synchronizer1.stop();
-		this.synchronizer2.stop();
-		super.tearDown();
-	}
-
-	public void testInitialization() {
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-	}
-
-	public void testToString() {
-		assertNotNull(this.synchronizer1.toString());
-	}
-
-	public void testChange() throws Exception {
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-		this.primaryModel1.setCount(7);
-
-		this.sleep(TICK);
-		this.synchronizer1.stop();
-		this.sleep(TICK);
-
-		assertEquals(14, this.secondaryModel1.getDoubleCount());
-
-		// re-start so tear-down works
-		this.synchronizer1.start();
-	}
-
-	public void testStart() throws Exception {
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-		this.primaryModel1.setSynchronizer(Synchronizer.Null.instance());
-		this.primaryModel1.setCount(7);
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-		this.primaryModel1.setSynchronizer(this.synchronizer1);
-		// the async synchronizer does not synchronize at start-up
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-
-		this.primaryModel1.setCount(8);
-
-		this.sleep(TICK);
-		this.synchronizer1.stop();
-		this.sleep(TICK);
-
-		assertEquals(16, this.secondaryModel1.getDoubleCount());
-
-		// re-start so tear-down works
-		this.synchronizer1.start();
-	}
-
-	public void testStop() throws Exception {
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-		this.primaryModel1.dispose();
-		this.primaryModel1.setCount(7);
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-
-		// re-start so tear-down works
-		this.synchronizer1.start();
-	}
-
-	public void testDoubleStart() throws Exception {
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-		boolean exCaught = false;
-		try {
-			this.primaryModel1.startSynchronizer();
-			fail();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-		this.primaryModel1.setCount(7);
-
-		this.sleep(TICK);
-		this.synchronizer1.stop();
-		this.sleep(TICK);
-
-		assertEquals(14, this.secondaryModel1.getDoubleCount());
-
-		// re-start so tear-down works
-		this.synchronizer1.start();
-	}
-
-	public void testDoubleStop() throws Exception {
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-		this.primaryModel1.dispose();
-		boolean exCaught = false;
-		try {
-			this.primaryModel1.dispose();
-			fail();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-		this.primaryModel1.setCount(7);
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-
-		// re-start so tear-down works
-		this.synchronizer1.start();
-	}
-
-	public void testRecursiveChange() throws Exception {
-		assertEquals(4, this.secondaryModel2.getDoubleCount());
-		this.primaryModel2.setCount(7);
-
-		this.sleep(TICK);
-		assertEquals(10, this.primaryModel2.getCountPlus3());
-		assertEquals(14, this.secondaryModel2.getDoubleCount());
-
-		this.sleep(TICK);
-		assertEquals(20, this.secondaryModel2.getDoubleCountPlus3());
-	}
-
-	public void testNullCommand() {
-		boolean exCaught = false;
-		try {
-			Synchronizer s = new AsynchronousSynchronizer(null, this.buildThreadFactory());
-			fail("bogus: " + s);
-		} catch (NullPointerException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testThreadName() {
-		Synchronizer s = new AsynchronousSynchronizer(this.command1, this.buildThreadFactory(), "sync");
-		s.start();
-		ConsumerThreadCoordinator ctc = (ConsumerThreadCoordinator) ReflectionTools.getFieldValue(s, "consumerThreadCoordinator");
-		Thread t = (Thread) ReflectionTools.getFieldValue(ctc, "thread");
-		assertEquals("sync", t.getName());
-		s.stop();
-	}
-
-	public void testSynchronizeCalledBeforeStart() throws Exception {
-		SimpleCommand command = new SimpleCommand();
-		Synchronizer synchronizer = new AsynchronousSynchronizer(command, this.buildThreadFactory());
-
-		synchronizer.synchronize();
-		synchronizer.start();
-		this.sleep(TICK);
-		synchronizer.stop();
-		assertEquals(1, command.count);
-	}
-
-	public class SimpleCommand implements Command {
-		int count = 0;
-		public void execute() {
-			this.count++;
-		}
-	}
-
-	public void testException() throws Exception {
-		BogusCommand command = new BogusCommand();
-		Synchronizer synchronizer = new AsynchronousSynchronizer(command, this.buildThreadFactory());
-		synchronizer.start();
-
-		synchronizer.synchronize();
-		this.sleep(TICK);
-
-		synchronizer.synchronize();
-		this.sleep(TICK);
-
-		boolean exCaught = false;
-		try {
-			synchronizer.stop();
-			fail();
-		} catch (CompositeException ex) {
-			assertEquals(2, ex.getExceptions().length);
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-		assertEquals(2, command.count);
-	}
-
-	public class BogusCommand implements Command {
-		int count = 0;
-		public void execute() {
-			this.count++;
-			throw new NullPointerException();
-		}
-	}
-
-
-	// ********** synchronize commands **********
-	public static class SynchronizeSecondaryModelCommand1 implements Command {
-		private final SecondaryModel1 secondaryModel;
-
-		public SynchronizeSecondaryModelCommand1(SecondaryModel1 secondaryModel) {
-			super();
-			this.secondaryModel = secondaryModel;
-		}
-
-		public void execute() {
-			this.secondaryModel.synchronize();
-		}
-
-	}
-
-	/**
-	 * the primary model (subclass) has to synchronize with itself (superclass)
-	 */
-	public static class SynchronizeSecondaryModelCommand2 extends SynchronizeSecondaryModelCommand1 {
-		private final PrimaryModel2 primaryModel;
-
-		public SynchronizeSecondaryModelCommand2(PrimaryModel2 primaryModel, SecondaryModel2 secondaryModel) {
-			super(secondaryModel);
-			this.primaryModel = primaryModel;
-		}
-
-		@Override
-		public void execute() {
-			super.execute();
-			this.primaryModel.synchronize();
-		}
-
-	}
-
-	// ********** primary models **********
-	/**
-	 * this object will call the synchronizer whenever its count changes,
-	 * allowing interested parties to synchronize with the change
-	 */
-	public static class PrimaryModel1 {
-		protected Synchronizer synchronizer;
-		protected int count = 2;
-
-		public PrimaryModel1() {
-			super();
-			this.setSynchronizer_(Synchronizer.Null.instance());
-		}
-
-		public int getCount() {
-			return this.count;
-		}
-		public void setCount(int count) {
-			if (count != this.count) {
-				this.count = count;
-				this.stateChanged();
-			}
-		}
-
-		protected void stateChanged() {
-			this.synchronizer.synchronize();
-		}
-
-		public void setSynchronizer(Synchronizer synchronizer) {
-			if (synchronizer == null) {
-				throw new NullPointerException();
-			}
-			this.synchronizer.stop();
-			this.setSynchronizer_(synchronizer);
-		}
-			
-		protected void setSynchronizer_(Synchronizer synchronizer) {
-			this.synchronizer = synchronizer;
-			this.synchronizer.start();
-		}
-
-		public void startSynchronizer() {
-			this.synchronizer.start();  // this should cause an exception
-		}
-		public void dispose() {
-			this.synchronizer.stop();
-		}
-
-		@Override
-		public String toString() {
-			StringBuilder sb = new StringBuilder();
-			sb.append(this.getClass().getSimpleName());
-			sb.append('(');
-			this.toString(sb);
-			sb.append(')');
-			return sb.toString();
-		}
-		public void toString(StringBuilder sb) {
-			sb.append("count=");
-			sb.append(this.count);
-		}
-
-	}
-
-	/**
-	 * This model synchronizes with itself, triggering a recursive synchronization
-	 * with the change. Whenever the [inherited] 'count' changes, 'countPlus3'
-	 * is updated appropriately and another synchronize is initiated if appropriate.
-	 */
-	public static class PrimaryModel2 extends PrimaryModel1 {
-		private int countPlus3 = 0;
-
-		public PrimaryModel2() {
-			super();
-			this.countPlus3 = this.count + 3;
-		}
-
-		public int getCountPlus3() {
-			return this.countPlus3;
-		}
-		protected void setCountPlus3(int countPlus3) {
-			if (countPlus3 != this.countPlus3) {
-				this.countPlus3 = countPlus3;
-				this.stateChanged();
-			}
-		}
-
-		// synchronize with itself, so to speak
-		public void synchronize() {
-			this.setCountPlus3(this.count + 3);
-		}
-
-		@Override
-		public void toString(StringBuilder sb) {
-			super.toString(sb);
-			sb.append(", countPlus3=");
-			sb.append(this.countPlus3);
-		}
-
-	}
-
-	// ********** secondary models **********
-	/**
-	 * This dependent object updates its 'doubleCount' whenever the
-	 * PrimaryModel1's 'count' changes, via the 'synchronizer'.
-	 */
-	public static class SecondaryModel1 {
-		protected final PrimaryModel1 primaryModel;
-		protected int doubleCount = 0;
-
-		public SecondaryModel1(PrimaryModel1 primaryModel) {
-			super();
-			this.primaryModel = primaryModel;
-			this.synchronize();
-		}
-
-		public void synchronize() {
-			this.doubleCount = this.primaryModel.getCount() * 2;
-		}
-
-		public int getDoubleCount() {
-			return this.doubleCount;
-		}
-
-		@Override
-		public String toString() {
-			StringBuilder sb = new StringBuilder();
-			sb.append(this.getClass().getSimpleName());
-			sb.append('(');
-			this.toString(sb);
-			sb.append(')');
-			return sb.toString();
-		}
-		public void toString(StringBuilder sb) {
-			sb.append("doubleCount=");
-			sb.append(this.doubleCount);
-		}
-
-	}
-
-	public static class SecondaryModel2 extends SecondaryModel1 {
-		private int doubleCountPlus3 = 0;
-
-		public SecondaryModel2(PrimaryModel2 extendedPrimaryModel) {
-			super(extendedPrimaryModel);
-		}
-
-		protected PrimaryModel2 getExtendedPrimaryModel() {
-			return (PrimaryModel2) this.primaryModel;
-		}
-
-		@Override
-		public void synchronize() {
-			super.synchronize();
-			int temp = this.getExtendedPrimaryModel().getCountPlus3() * 2;
-			if (this.doubleCountPlus3 != temp) {
-				this.doubleCountPlus3 = temp;
-			}
-		}
-
-		public int getDoubleCountPlus3() {
-			return this.doubleCountPlus3;
-		}
-
-		@Override
-		public void toString(StringBuilder sb) {
-			super.toString(sb);
-			sb.append(", doubleCountPlus3=");
-			sb.append(this.doubleCountPlus3);
-		}
-
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/synchronizers/JptUtilitySynchronizersTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/synchronizers/JptUtilitySynchronizersTests.java
deleted file mode 100644
index 6a7869d..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/synchronizers/JptUtilitySynchronizersTests.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.synchronizers;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * decentralize test creation code
- */
-public class JptUtilitySynchronizersTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JptUtilitySynchronizersTests.class.getPackage().getName());
-
-		suite.addTestSuite(AsynchronousSynchronizerTests.class);
-		suite.addTestSuite(SynchronizerTests.class);
-		suite.addTestSuite(SynchronousSynchronizerTests.class);
-
-		return suite;
-	}
-
-	private JptUtilitySynchronizersTests() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/synchronizers/SynchronizerTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/synchronizers/SynchronizerTests.java
deleted file mode 100644
index 95d9d50..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/synchronizers/SynchronizerTests.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.synchronizers;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jpt.utility.internal.synchronizers.Synchronizer;
-
-public class SynchronizerTests extends TestCase {
-
-	public SynchronizerTests(String name) {
-		super(name);
-	}
-
-	public void testNullSynchronizerStart() {
-		Synchronizer synchronizer = Synchronizer.Null.instance();
-		synchronizer.start();  // just make sure it doesn't blow up?
-	}
-
-	public void testNullSynchronizerSynchronize() {
-		Synchronizer synchronizer = Synchronizer.Null.instance();
-		synchronizer.synchronize();  // just make sure it doesn't blow up?
-	}
-
-	public void testNullSynchronizerStop() {
-		Synchronizer synchronizer = Synchronizer.Null.instance();
-		synchronizer.stop();  // just make sure it doesn't blow up?
-	}
-
-	public void testNullSynchronizerToString() {
-		Synchronizer synchronizer = Synchronizer.Null.instance();
-		assertNotNull(synchronizer.toString());
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/synchronizers/SynchronousSynchronizerTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/synchronizers/SynchronousSynchronizerTests.java
deleted file mode 100644
index 2ceea2b..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/synchronizers/SynchronousSynchronizerTests.java
+++ /dev/null
@@ -1,756 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Oracle. 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:
- *     Oracle - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal.synchronizers;
-
-import org.eclipse.jpt.utility.Command;
-import org.eclipse.jpt.utility.internal.CompositeException;
-import org.eclipse.jpt.utility.internal.SynchronizedBoolean;
-import org.eclipse.jpt.utility.internal.synchronizers.Synchronizer;
-import org.eclipse.jpt.utility.internal.synchronizers.SynchronousSynchronizer;
-import org.eclipse.jpt.utility.tests.internal.MultiThreadedTestCase;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-@SuppressWarnings("nls")
-public class SynchronousSynchronizerTests
-	extends MultiThreadedTestCase
-{
-	PrimaryModel1 primaryModel1;
-	SecondaryModel1 secondaryModel1;
-	Command command1;
-	Synchronizer synchronizer1;
-
-	PrimaryModel2 primaryModel2;
-	SecondaryModel2 secondaryModel2;
-	Command command2;
-	Synchronizer synchronizer2;
-
-	public SynchronousSynchronizerTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.primaryModel1 = new PrimaryModel1();
-		this.secondaryModel1 = new SecondaryModel1(this.primaryModel1);
-		this.command1 = new SynchronizeSecondaryModelCommand1(this.secondaryModel1);
-		this.synchronizer1 = new SynchronousSynchronizer(this.command1);
-		this.primaryModel1.setSynchronizer(this.synchronizer1);
-
-		this.primaryModel2 = new PrimaryModel2();
-		this.secondaryModel2 = new SecondaryModel2(this.primaryModel2);
-		this.command2 = new SynchronizeSecondaryModelCommand2(this.primaryModel2, this.secondaryModel2);
-		this.synchronizer2 = new SynchronousSynchronizer(this.command2);
-		this.primaryModel2.setSynchronizer(this.synchronizer2);
-	}
-
-	public void testInitialization() {
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-	}
-
-	public void testToString() {
-		assertNotNull(this.synchronizer1.toString());
-	}
-
-	public void testChange() {
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-		this.primaryModel1.setCount(7);
-		assertEquals(14, this.secondaryModel1.getDoubleCount());
-	}
-
-	public void testStart() {
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-		this.primaryModel1.setSynchronizer(Synchronizer.Null.instance());
-		this.primaryModel1.setCount(7);
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-		this.primaryModel1.setSynchronizer(this.synchronizer1);
-		assertEquals(14, this.secondaryModel1.getDoubleCount());
-	}
-
-	public void testStop() {
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-		this.primaryModel1.dispose();
-		this.primaryModel1.setCount(7);
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-	}
-
-	public void testDoubleStart() {
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-		boolean exCaught = false;
-		try {
-			this.primaryModel1.startSynchronizer();
-			fail();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-		this.primaryModel1.setCount(7);
-		assertEquals(14, this.secondaryModel1.getDoubleCount());
-	}
-
-	public void testDoubleStop() {
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-		this.primaryModel1.dispose();
-		boolean exCaught = false;
-		try {
-			this.primaryModel1.dispose();
-			fail();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-		this.primaryModel1.setCount(7);
-		assertEquals(4, this.secondaryModel1.getDoubleCount());
-	}
-
-	public void testRecursiveChange() {
-		assertEquals(4, this.secondaryModel2.getDoubleCount());
-		this.primaryModel2.setCount(7);
-		assertEquals(10, this.primaryModel2.getCountPlus3());
-		assertEquals(14, this.secondaryModel2.getDoubleCount());
-		assertEquals(20, this.secondaryModel2.getDoubleCountPlus3());
-	}
-
-	/**
-	 * Call #stop() from another thread.
-	 * Verify that no further synchronizations occur.
-	 * Verify the call to #stop() does not return until the pending
-	 * synchronization is complete (must set {@link #DEBUG} to true and
-	 * look at the console).
-	 * 
-	 * ticks:
-	 * 0 - start "sync" thread (which will sleep for 1 tick);
-	 *      start "stop" thread (which will sleep for 2 ticks)
-	 * 1 - "sync" thread wakes up and calls PrimaryModel1.setCount(int)
-	 *      which triggers call to Synchronizer.synchronize() to begin
-	 *      synchronization of SecondaryModel (which will run for 2 ticks;
-	 *      i.e. it will finish on tick 3)
-	 * 2 - "stop" thread wakes up and calls Synchronizer.stop() and should
-	 *      wait until synchronization is complete
-	 * 3 - synchronization completes first execution and should stop;
-	 *      "stop" thread should run to completion once the synchronization has stopped
-	 */
-	public void testCallStopFromAnotherThread() throws Exception {
-		log("=====" + this.getName() + "=====");
-		PrimaryModel2 primaryModel3 = new PrimaryModel2();
-		// a synchronize will occur here:
-		SecondaryModel3 secondaryModel3 = new SecondaryModel3(primaryModel3);
-		Command command3 = new SynchronizeSecondaryModelCommand2(primaryModel3, secondaryModel3);
-		Synchronizer synchronizer3 = new SynchronousSynchronizer(command3);
-		// another synchronize will occur here:
-		primaryModel3.setSynchronizer(synchronizer3);
-		secondaryModel3.setTicks(2);
-
-		assertEquals(2, primaryModel3.getCount());
-		assertEquals(5, primaryModel3.getCountPlus3());
-		assertEquals(4, secondaryModel3.getDoubleCount());
-		assertEquals(10, secondaryModel3.getDoubleCountPlus3());
-
-		Thread syncThread = this.buildTriggerSynchronizeThread(primaryModel3, 1);
-		Thread stopThread = this.buildStopThread(synchronizer3, 2);
-
-		log("ALL threads start");
-		stopThread.start();
-		syncThread.start();
-
-		stopThread.join();
-		syncThread.join();
-
-		// 'doubleCount' is synchronized; but the synchronization is stopped
-		// while that is happening (by the 'stopThread'), so 'doubleCountPlus3'
-		// does not get synchronized
-		assertEquals(7, primaryModel3.getCount());
-		assertEquals(10, primaryModel3.getCountPlus3());
-		assertEquals(14, secondaryModel3.getDoubleCount());
-
-		// this does not get updated because it would've been updated by the
-		// recursive call to #synchronize(), but by that time #stop() had been called
-		assertEquals(10, secondaryModel3.getDoubleCountPlus3());
-	}
-
-	private Thread buildTriggerSynchronizeThread(PrimaryModel2 primaryModel, long ticks) {
-		return this.buildThread(this.buildTriggerSynchronizeRunnable(primaryModel, ticks), "trigger sync");
-	}
-
-	private Runnable buildTriggerSynchronizeRunnable(final PrimaryModel2 primaryModel, final long ticks) {
-		return new Runnable() {
-			public void run() {
-				TestTools.sleep(ticks * TICK);
-				primaryModel.setCount(7);
-			}
-		};
-	}
-
-	private Thread buildStopThread(Synchronizer synchronizer, long ticks) {
-		return this.buildThread(this.buildStopRunnable(synchronizer, ticks), "stop");
-	}
-
-	private Runnable buildStopRunnable(final Synchronizer synchronizer, final long ticks) {
-		return new Runnable() {
-			public void run() {
-				TestTools.sleep(ticks * TICK);
-				log("STOP thread Synchronizer.stop()");
-				synchronizer.stop();
-				log("STOP thread stop");
-			}
-		};
-	}
-
-	/**
-	 * Code cloned from {@link #testStopCalledFromAnotherThread()}.
-	 * 
-	 * Interrupt the "stop" thread while it is waiting for the "synch" thread to finish.
-	 * Verify that no further synchronizations occur.
-	 * Verify the call to #stop() returns *before*
-	 * synchronization is complete (must set {@link #DEBUG} to true and
-	 * look at the console).
-	 * 
-	 * ticks:
-	 * 0 - start "sync" thread (which will sleep for 1 tick);
-	 *      start "stop" thread (which will sleep for 2 ticks);
-	 *      start "interrupt" thread (which will sleep for 3 ticks)
-	 * 1 - "sync" thread wakes up and calls PrimaryModel1.setCount(int)
-	 *      which triggers call to Synchronizer.synchronize() to begin
-	 *      synchronization of SecondaryModel (which will run for 3 ticks;
-	 *      i.e. it will finish on tick 4)
-	 * 2 - "stop" thread wakes up and calls Synchronizer.stop() and should
-	 *      wait until it is interrupted
-	 * 3 - "interrupt" thread wakes up and interrupts "stop" thread;
-	 *       both will run to completion at that point
-	 * 4 - synchronization completes first execution and should stop since the
-	 *      "stop" thread, before it was interrupted, told the "synch" thread to stop
-	 */
-	public void testInterruptStopThread() throws Exception {
-		log("=====" + this.getName() + "=====");
-		PrimaryModel2 primaryModel3 = new PrimaryModel2();
-		// a synchronize will occur here:
-		SecondaryModel3 secondaryModel3 = new SecondaryModel3(primaryModel3);
-		Command command3 = new SynchronizeSecondaryModelCommand2(primaryModel3, secondaryModel3);
-		Synchronizer synchronizer3 = new SynchronousSynchronizer(command3);
-		// another synchronize will occur here:
-		primaryModel3.setSynchronizer(synchronizer3);
-		secondaryModel3.setTicks(3);
-
-		assertEquals(2, primaryModel3.getCount());
-		assertEquals(5, primaryModel3.getCountPlus3());
-		assertEquals(4, secondaryModel3.getDoubleCount());
-		assertEquals(10, secondaryModel3.getDoubleCountPlus3());
-
-		Thread syncThread = this.buildTriggerSynchronizeThread(primaryModel3, 1);
-		Thread stopThread = this.buildStopThread(synchronizer3, 2);
-		Thread interruptThread = this.buildInterruptThread(stopThread, 3);
-
-		log("ALL threads start");
-		stopThread.start();
-		syncThread.start();
-		interruptThread.start();
-
-		stopThread.join();
-		syncThread.join();
-		interruptThread.join();
-
-		// 'doubleCount' is synchronized; but the synchronization is stopped
-		// while that is happening (by the 'stopThread'), so 'doubleCountPlus3'
-		// does not get synchronized
-		assertEquals(7, primaryModel3.getCount());
-		assertEquals(10, primaryModel3.getCountPlus3());
-		assertEquals(14, secondaryModel3.getDoubleCount());
-
-		// this does not get updated because it would've been updated by the
-		// recursive call to #synchronize(), but by that time #stop() had been called
-		assertEquals(10, secondaryModel3.getDoubleCountPlus3());
-	}
-
-	/**
-	 * Code cloned from {@link #testStopCalledFromAnotherThread()}.
-	 * 
-	 * Interrupt the "sync" thread while it is synchronizing, cutting short the synchronization.
-	 * Verify that no further synchronizations occur.
-	 * Verify the call to #stop() does not return until the pending
-	 * synchronization is stops after it is interrupted (must set {@link #DEBUG} to true and
-	 * look at the console).
-	 * 
-	 * ticks:
-	 * 0 - start "sync" thread (which will sleep for 1 tick)
-	 *      start "stop" thread (which will sleep for 2 ticks)
-	 *      start "interrupt" thread (which will sleep for 3 ticks)
-	 * 1 - "sync" thread wakes up and calls PrimaryModel1.setCount(int)
-	 *      which triggers call to Synchronizer.synchronize() to begin
-	 *      synchronization of SecondaryModel (which will run for 4 ticks;
-	 *      i.e. it will finish on tick 5)
-	 * 2 - "stop" thread wakes up and calls Synchronizer.stop() and should
-	 *      wait until the synchronization is interrupted
-	 * 3 - "interrupt" thread wakes up and interrupts "sync" thread;
-	 *      the "interrupt" thread runs to completion, while the "sync" thread keeps
-	 *      going for another tick before it stops in "mid-synchronize"
-	 * 4 - the "sync" thread acknowledges the interrupt and stops in
-	 *      "mid-synchronize"; it will stop since the "stop" thread told it to at tick 2;
-	 *      the "sync" and "stop" threads run to completion
-	 */
-	public void testInterruptSyncThread() throws Exception {
-		log("=====" + this.getName() + "=====");
-		PrimaryModel2 primaryModel3 = new PrimaryModel2();
-		// a synchronize will occur here:
-		SecondaryModel3 secondaryModel3 = new SecondaryModel3(primaryModel3);
-		Command command3 = new SynchronizeSecondaryModelCommand2(primaryModel3, secondaryModel3);
-		Synchronizer synchronizer3 = new SynchronousSynchronizer(command3);
-		// another synchronize will occur here:
-		primaryModel3.setSynchronizer(synchronizer3);
-		secondaryModel3.setTicks(4);
-
-		assertEquals(2, primaryModel3.getCount());
-		assertEquals(5, primaryModel3.getCountPlus3());
-		assertEquals(4, secondaryModel3.getDoubleCount());
-		assertEquals(10, secondaryModel3.getDoubleCountPlus3());
-
-		Thread syncThread = this.buildTriggerSynchronizeThread(primaryModel3, 1);
-		Thread stopThread = this.buildStopThread(synchronizer3, 2);
-		Thread interruptThread = this.buildInterruptThread(syncThread, 3);
-
-		log("ALL threads start");
-		stopThread.start();
-		syncThread.start();
-		interruptThread.start();
-
-		stopThread.join();
-		syncThread.join();
-		interruptThread.join();
-
-		assertEquals(7, primaryModel3.getCount());
-		assertEquals(10, primaryModel3.getCountPlus3());
-
-		// none of the secondary model is synchronized because the synchronize()
-		// method was interrupted before any synchronization had occurred
-		assertEquals(4, secondaryModel3.getDoubleCount());
-		assertEquals(10, secondaryModel3.getDoubleCountPlus3());
-	}
-
-	private Thread buildInterruptThread(Thread thread, long ticks) {
-		return this.buildThread(this.buildInterruptRunnable(thread, ticks), "interrupt");
-	}
-
-	private Runnable buildInterruptRunnable(final Thread thread, final long ticks) {
-		return new Runnable() {
-			public void run() {
-				TestTools.sleep(ticks * TICK);
-				log("INTERRUPT thread Thread.interrupt()");
-				thread.interrupt();
-			}
-		};
-	}
-
-	/**
-	 * Call #stop() during a long-running "synchronize"; then call #start()
-	 * while the #stop() is waiting for the "synchronize" to complete.
-	 * 
-	 * ticks:
-	 * 0 - start "sync" thread (which will sleep for 1 tick)
-	 *      start "stop" thread (which will sleep for 2 ticks)
-	 *      start "start" thread (which will sleep for 3 ticks)
-	 * 1 - "sync" thread wakes up and calls Synchronizer.synchronize() to begin
-	 *      synchronization (which will run for 3 ticks; i.e. it will finish on tick 4)
-	 * 2 - "stop" thread wakes up and calls Synchronizer.stop() and should
-	 *      wait until the synchronization is finished (i.e. tick 4)
-	 * 3 - "start" thread wakes up and calls Synchronizer.start()
-	 *      which will throw an exception
-	 * 4 - the "sync" thread finishes execution;
-	 *      it will stop since the "stop" thread told it to at tick 2;
-	 *      the "sync" and "stop" threads run to completion
-	 */
-	public void testCallStartDuringStop() throws Exception {
-		log("=====" + this.getName() + "=====");
-		DelayCommand command = this.buildDelayCommand(3);
-		Synchronizer synchronizer = new SynchronousSynchronizer(command);
-		synchronizer.start();
-
-		Thread syncThread = this.buildSynchronizeThread(synchronizer, 1);
-		Thread stopThread = this.buildStopThread(synchronizer, 2);
-		SynchronizedBoolean exCaught = new SynchronizedBoolean(false);
-		Thread startThread = this.buildStartThread(synchronizer, 3, exCaught);
-
-		log("ALL threads start");
-		syncThread.start();
-		stopThread.start();
-		startThread.start();
-
-		syncThread.join();
-		stopThread.join();
-		startThread.join();
-
-		assertTrue(exCaught.getValue());
-		assertEquals(2, command.count);
-	}
-
-	private DelayCommand buildDelayCommand(int ticks) {
-		return new DelayCommand(ticks);
-	}
-
-	class DelayCommand implements Command {
-		final long ticks;
-		boolean first = true;
-		int count = 0;
-
-		DelayCommand(int ticks) {
-			super();
-			this.ticks = ticks;
-		}
-
-		public void execute() {
-			this.count++;
-			// do nothing for the first call (from #start())
-			if (this.first) {
-				log("EXEC first");
-				this.first = false;
-				return;
-			}
-			log("EXEC start " + this.count);
-			TestTools.sleep(this.ticks * TICK);
-			log("EXEC stop " + this.count);
-		}
-
-	}
-
-	private Thread buildStartThread(Synchronizer synchronizer, long ticks, SynchronizedBoolean exCaught) {
-		return this.buildThread(this.buildStartRunnable(synchronizer, ticks, exCaught), "start");
-	}
-
-	private Runnable buildStartRunnable(final Synchronizer synchronizer, final long ticks, final SynchronizedBoolean exCaught) {
-		return new Runnable() {
-			public void run() {
-				TestTools.sleep(ticks * TICK);
-				log("START thread Synchronizer.start()");
-				try {
-					synchronizer.start();
-				} catch (IllegalStateException ex) {
-					exCaught.setTrue();
-					log("START thread exception");
-				}
-				log("START thread stop");
-			}
-		};
-	}
-
-	private Thread buildSynchronizeThread(Synchronizer synchronizer, long ticks) {
-		return this.buildThread(this.buildSynchronizeRunnable(synchronizer, ticks), "synchronize");
-	}
-
-	private Runnable buildSynchronizeRunnable(final Synchronizer synchronizer, final long ticks) {
-		return new Runnable() {
-			public void run() {
-				TestTools.sleep(ticks * TICK);
-				log("SYNC thread Synchronizer.synchronize()");
-				synchronizer.synchronize();
-				log("SYNC thread stop");
-			}
-		};
-	}
-
-	public void testException() throws Exception {
-		BogusCommand command = new BogusCommand();
-		Synchronizer synchronizer = new SynchronousSynchronizer(command);
-		synchronizer.start();
-
-		try {
-			synchronizer.synchronize();
-		} catch (NullPointerException ex) {
-			// ignore
-		}
-
-		boolean exCaught = false;
-		try {
-			// we used to hang here, before we began handling exceptions
-			synchronizer.stop();
-			fail();
-		} catch (CompositeException ex) {
-			assertEquals(1, ex.getExceptions().length);
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-		// start + synchronize
-		assertEquals(2, command.count);
-	}
-
-	public class BogusCommand implements Command {
-		int count = 0;
-		public void execute() {
-			this.count++;
-			if (this.count > 1) {
-				throw new NullPointerException();
-			}
-		}
-	}
-
-
-	// ********** synchronize commands **********
-	public static class SynchronizeSecondaryModelCommand1 implements Command {
-		private final SecondaryModel1 secondaryModel;
-
-		public SynchronizeSecondaryModelCommand1(SecondaryModel1 secondaryModel) {
-			super();
-			this.secondaryModel = secondaryModel;
-		}
-
-		public void execute() {
-			this.secondaryModel.synchronize();
-		}
-
-	}
-
-	/**
-	 * the primary model (subclass) has to synchronize with itself (superclass)
-	 */
-	public static class SynchronizeSecondaryModelCommand2 extends SynchronizeSecondaryModelCommand1 {
-		private final PrimaryModel2 primaryModel;
-
-		public SynchronizeSecondaryModelCommand2(PrimaryModel2 primaryModel, SecondaryModel2 secondaryModel) {
-			super(secondaryModel);
-			this.primaryModel = primaryModel;
-		}
-
-		@Override
-		public void execute() {
-			super.execute();
-			this.primaryModel.synchronize();
-		}
-
-	}
-
-	// ********** primary models **********
-	/**
-	 * this object will call the synchronizer whenever its count changes,
-	 * allowing interested parties to synchronize with the change
-	 */
-	public static class PrimaryModel1 {
-		protected Synchronizer synchronizer;
-		protected int count = 2;
-
-		public PrimaryModel1() {
-			super();
-			this.setSynchronizer_(Synchronizer.Null.instance());
-		}
-
-		public int getCount() {
-			return this.count;
-		}
-		public void setCount(int count) {
-			if (count != this.count) {
-				this.count = count;
-				this.stateChanged();
-			}
-		}
-
-		protected void stateChanged() {
-			this.synchronizer.synchronize();
-		}
-
-		public void setSynchronizer(Synchronizer synchronizer) {
-			if (synchronizer == null) {
-				throw new NullPointerException();
-			}
-			this.synchronizer.stop();
-			this.setSynchronizer_(synchronizer);
-		}
-			
-		protected void setSynchronizer_(Synchronizer synchronizer) {
-			this.synchronizer = synchronizer;
-			this.synchronizer.start();
-		}
-
-		public void startSynchronizer() {
-			this.synchronizer.start();  // this should cause an exception
-		}
-		public void dispose() {
-			this.synchronizer.stop();
-		}
-
-		@Override
-		public String toString() {
-			StringBuilder sb = new StringBuilder();
-			sb.append(this.getClass().getSimpleName());
-			sb.append('(');
-			this.toString(sb);
-			sb.append(')');
-			return sb.toString();
-		}
-		public void toString(StringBuilder sb) {
-			sb.append("count=");
-			sb.append(this.count);
-		}
-
-	}
-
-	/**
-	 * This model synchronizes with itself, triggering a recursive synchronization
-	 * with the change. Whenever the [inherited] 'count' changes, 'countPlus3'
-	 * is updated appropriately and another synchronize is initiated if appropriate.
-	 */
-	public static class PrimaryModel2 extends PrimaryModel1 {
-		private int countPlus3 = 0;
-
-		public PrimaryModel2() {
-			super();
-			this.countPlus3 = this.count + 3;
-		}
-
-		public int getCountPlus3() {
-			return this.countPlus3;
-		}
-		protected void setCountPlus3(int countPlus3) {
-			if (countPlus3 != this.countPlus3) {
-				this.countPlus3 = countPlus3;
-				this.stateChanged();
-			}
-		}
-
-		// synchronize with itself, so to speak
-		public void synchronize() {
-			this.setCountPlus3(this.count + 3);
-		}
-
-		@Override
-		public void toString(StringBuilder sb) {
-			super.toString(sb);
-			sb.append(", countPlus3=");
-			sb.append(this.countPlus3);
-		}
-
-	}
-
-	// ********** secondary models **********
-	/**
-	 * This dependent object updates its 'doubleCount' whenever the
-	 * PrimaryModel1's 'count' changes, via the 'synchronizer'.
-	 */
-	public static class SecondaryModel1 {
-		protected final PrimaryModel1 primaryModel;
-		protected int doubleCount = 0;
-
-		public SecondaryModel1(PrimaryModel1 primaryModel) {
-			super();
-			this.primaryModel = primaryModel;
-			this.synchronize();
-		}
-
-		public void synchronize() {
-			this.doubleCount = this.primaryModel.getCount() * 2;
-		}
-
-		public int getDoubleCount() {
-			return this.doubleCount;
-		}
-
-		@Override
-		public String toString() {
-			StringBuilder sb = new StringBuilder();
-			sb.append(this.getClass().getSimpleName());
-			sb.append('(');
-			this.toString(sb);
-			sb.append(')');
-			return sb.toString();
-		}
-		public void toString(StringBuilder sb) {
-			sb.append("doubleCount=");
-			sb.append(this.doubleCount);
-		}
-
-	}
-
-	public static class SecondaryModel2 extends SecondaryModel1 {
-		private int doubleCountPlus3 = 0;
-
-		public SecondaryModel2(PrimaryModel2 extendedPrimaryModel) {
-			super(extendedPrimaryModel);
-		}
-
-		protected PrimaryModel2 getExtendedPrimaryModel() {
-			return (PrimaryModel2) this.primaryModel;
-		}
-
-		@Override
-		public void synchronize() {
-			super.synchronize();
-			int temp = this.getExtendedPrimaryModel().getCountPlus3() * 2;
-			if (this.doubleCountPlus3 != temp) {
-				this.doubleCountPlus3 = temp;
-			}
-		}
-
-		public int getDoubleCountPlus3() {
-			return this.doubleCountPlus3;
-		}
-
-		@Override
-		public void toString(StringBuilder sb) {
-			super.toString(sb);
-			sb.append(", doubleCountPlus3=");
-			sb.append(this.doubleCountPlus3);
-		}
-
-	}
-
-	/**
-	 * Allow the time required to synchronize to be specified.
-	 * A (non-delayed) synchronize will execute before we have a chance to
-	 * change the tick count. (It is called in the SecondaryModel1 constructor.)
-	 */
-	public static class SecondaryModel3 extends SecondaryModel2 {
-		private long delay = 0;
-		public SecondaryModel3(PrimaryModel2 primaryModel) {
-			super(primaryModel);
-		}
-
-		public void setTicks(long ticks) {
-			this.delay = ticks * TICK;
-		}
-
-		@Override
-		public void synchronize() {
-			// don't log anything until 'ticks' is set
-			if (this.delay == 0) {
-				super.synchronize();
-			} else {
-				log("SYNC thread start - sync duration will be: " + (this.delay / TICK) + " ticks");
-				try {
-					Thread.sleep(this.delay);
-				} catch (InterruptedException ex) {
-					log("SYNC thread interrupted");
-					TestTools.sleep(TICK);
-					return;  // stop synchronize (i.e. don't call super.synchronize())
-				}
-				super.synchronize();
-				log("SYNC thread stop");
-			}
-		}
-
-	}
-
-	public void testDEBUG() {
-		assertFalse(DEBUG);
-	}
-
-	public static final boolean DEBUG = false;
-	public static void log(String message) {
-		if (DEBUG) {
-			log_(message);
-		}
-	}
-
-	private static void log_(String message) {
-		System.out.print(timestamp());
-		System.out.print(' ');
-		System.out.print(message);
-		System.out.println();
-	}
-
-	public static String timestamp() {
-		return String.valueOf((System.currentTimeMillis() % 10000) / 1000f);
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/test.xml b/jpa/tests/org.eclipse.jpt.utility.tests/test.xml
deleted file mode 100644
index bd8fc8a..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/test.xml
+++ /dev/null
Binary files differ